返回列表

4th place solution

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

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

第4名解决方案

作者: Borys Tymchenko, Dmitry Spodarets, Eugene Khvedchenya
比赛: Severstal: Steel Defect Detection
排名: 第4名

大家好,祝贺所有的参赛者!

我们在APTOS比赛结束后不久,也就是不到一个月前参加了这次比赛。我们最初是分开解决问题的,直到合并截止日期前一天,因为那种绝望的空虚感才决定合并。这是第一次“fit_predict”无法进入铜牌区的比赛。此外,重型编码器的效果几乎和简单的resnet34一样。

首先,这是我们尝试过但完全无效的方法:

我尝试过的方法:

  • 通过每个epoch重新采样数据集来增加困难负样本挖掘。权重选择为每张图像Dice分数的倒数。完全没有任何区别;
  • 在嵌入层添加ArcFace。这应该有助于更好地区分类别。结果也是没用;
  • 训练多阶段网络(受姿态检测器启发)。这应该有助于模拟不良标记。效果比单阶段更差;
  • 添加标签平滑。同样没用。

@bloodaxe 尝试过的方法:

  • 添加mixup和泊松融合以增加有缺陷图像的数量;
  • 在双倍尺寸的裁剪上训练:256x1600 -> crop(256x512) -> resize(512x1024)。没用;
  • 将各向异性分割的结果添加到神经网络的输入中,没有收益;
  • 训练全分辨率的HRNetV2。在8xV100上跑了22小时,效果并不比ResNet34好。

现在,真正有效的方法:

  • 训练用于分割和分类的双头神经网络。
  • 在推理时结合头部,使用软门控机制(mask.sigmoid() * classifier.sigmoid())
  • Focal loss / BCE + Focal loss
  • 使用灰度图而不是灰度-RGB进行训练
  • 使用Catalyst和Apex进行FP16训练

我只训练了单折模型,而 @bloodaxe 训练了5折交叉验证模型。

我们的个人解决方案在公共LB(Public Leaderboard)上顶多处于银牌区的末尾,但当我们组队后……在银牌区的排名稍微上升了一些!

我们最好(也是最终)的集成模型由9个模型组成,编码器包括densenet201、efficientnetb5、resnet34、seresnext50,其中一些带有FPN解码器,另一些带有UNet解码器。

我们添加了3次翻转TTA(测试时增强),并对模型的logits取平均,应用了软门控。我们使用0.55的阈值对掩码进行二值化,并将小于256像素的掩码归零。我们私有+公有数据的总运行时间约为30分钟。

硬件

我们使用了FastGPU.net的服务器,配备8xV100和4xV100,这大大缩短了我们的实验周期。

关于我们在私有LB上排名上升的一些推测:

  • 我们没有过拟合公共LB;
  • 我们根据不含空掩码的Dice分数选择模型。我们依靠分类器和软门控来处理空掩码。
  • 我们使用了不同的种子/折数/模型。合并前我们的私有分数并不是很高(0.89-0.90)。但结合起来后要强得多。

@bloodaxe 的一些心得

  • 坚持下去。即使似乎一切都失去了希望,你仍然可以向前推进一点,并在这一过程中学到一些有用的东西;
  • 组队!交流想法真的非常有益!
同比赛其他方案