346. Severstal; Steel Defect Detection | severstal-steel-defect-detection
祝贺本次比赛的所有获胜者!这是我在 Kaggle 的第一次比赛,也是我的队友 @zhuhongbo 和 @paffpaffyu 的第一次比赛。他们是我大学时的同班同学。我们都很惊讶我们能赢得比赛。
首先,感谢 @hengck23 分享了他有见地的想法。我们参考了他的一些帖子并获得了巨大的提升。还要感谢 @lightforever,我们最好的最终方案使用了他的几个模型。感谢 @pavel92 提供的便捷分割库。
分类是本次比赛的重要组成部分。尽管在 Public LB 达到 0.915 之后,分类器只能稍微提高你的分数,但它们可以作为初步筛选,过滤掉大约一半没有缺陷的图像。这使我们能够在分割部分集成更多的模型。
我们使用 224x1568 的随机裁剪训练分类器,并在全尺寸图像上进行推理。这种随机裁剪对准确率有轻微的提升。
数据增强:
随机裁剪、水平翻转、垂直翻转、随机亮度对比度(来自 albumentations)以及自定义的缺陷遮挡。
由于这是一个语义分割任务,我们确切地知道缺陷在哪里。因此,这些缺陷部分可以被随机涂黑(遮挡),如果所有缺陷都被涂黑,该图像的标签也将从 1 变为 0。这种数据增强在本地 CV 和 Public LB 上确实有效。以下是 ResNet34 分类器训练过程的一些图表。
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