返回列表

1st Place Solution

346. Severstal; Steel Defect Detection | severstal-steel-defect-detection

开始: 2019-07-25 结束: 2019-10-24 缺陷检测 数据算法赛
第一名解决方案

第一名解决方案

作者:R Guo | 发布时间:2019-10-25

祝贺本次比赛的所有获胜者!这是我在 Kaggle 的第一次比赛,也是我的队友 @zhuhongbo@paffpaffyu 的第一次比赛。他们是我大学时的同班同学。我们都很惊讶我们能赢得比赛。

首先,感谢 @hengck23 分享了他有见地的想法。我们参考了他的一些帖子并获得了巨大的提升。还要感谢 @lightforever,我们最好的最终方案使用了他的几个模型。感谢 @pavel92 提供的便捷分割库。

分类

分类是本次比赛的重要组成部分。尽管在 Public LB 达到 0.915 之后,分类器只能稍微提高你的分数,但它们可以作为初步筛选,过滤掉大约一半没有缺陷的图像。这使我们能够在分割部分集成更多的模型。

我们使用 224x1568 的随机裁剪训练分类器,并在全尺寸图像上进行推理。这种随机裁剪对准确率有轻微的提升。

数据增强:
随机裁剪、水平翻转、垂直翻转、随机亮度对比度(来自 albumentations)以及自定义的缺陷遮挡。

由于这是一个语义分割任务,我们确切地知道缺陷在哪里。因此,这些缺陷部分可以被随机涂黑(遮挡),如果所有缺陷都被涂黑,该图像的标签也将从 1 变为 0。这种数据增强在本地 CV 和 Public LB 上确实有效。以下是 ResNet34 分类器训练过程的一些图表。

Loss Chart AUC Chart Accuracy Chart

Batch size:EfficientNet-b1 为 8,ResNet34 为 16(两者都累积 32 个样本的梯度)
优化器:SGD
模型集成:3 x EfficientNet-b1 + 1 x ResNet34
TTA:无,水平翻转,垂直翻转
阈值:0.6, 0.6, 0.6, 0.6

分割

我们不得不承认,我们使用了 @lightforever 的模型,这些模型将我们的分数从 Private LB 的 0.907 提高到了现在的分数。

训练数据:256x512 裁剪图像
数据增强:水平翻转、垂直翻转、随机亮度对比度(来自 albumentations)
Batch size:12 或 24(两者都累积 24 个样本的梯度)
优化器:Rectified Adam
模型:Unet (efficientnet-b3), FPN (efficientnet-b3),来自 @pavel92 的 segmentation_models_pytorch
损失函数:
BCE (pos_weight = (2.0, 2.0, 1.0, 1.5))
0.75*BCE + 0.25*DICE (pos_weight = (2.0, 2.0, 1.0, 1.5))
模型集成:
1 x Unet(BCE loss) + 3 x FPN(先使用 BCE loss 训练,再用 BCEDice loss 微调) + 2 x FPN(BCE loss) + 3 x Unet (来自 mlcomp + catalyst 推理)
TTA:无,水平翻转,垂直翻转
标签阈值:0.7, 0.7, 0.6, 0.6
像素阈值:0.55, 0.55, 0.55, 0.55

同比赛其他方案