346. Severstal; Steel Defect Detection | severstal-steel-defect-detection
我们在合并截止日期的最后一天才最终组队并开始共同开发解决方案。当时,比较流行的做法是第一步进行分类(去除大部分无缺陷图像),第二步进行分割以定位缺陷。但最终我们提出了一个三步走的解决方案。我们的多标签 FPN 和 PSPNet 分割模型在像素级分割上表现一般,但在第一步分类之后减少假阳性预测方面表现出色,因此我们决定将它们用作中间的分类步骤。
以下是每个步骤的详细说明。
由 @ilyadobrynin 实现
在第一阶段,使用多标签分类器来检测至少包含一种缺陷类型的图像。
模型:
数据增强:
训练后,我们通过最大化给定类别的 F1 分数找到了二值化的阈值,因此每个类别都有自己的阈值。这使我们能够排除几乎一半的图像并加快推理速度。
由 @delpro @ilyadobrynin 实现
在第二阶段,存在一些过拟合的“魔法”。这里我们使用了多标签分割网络的平均集成:
训练
数据增强:
细节:
在自定义 FPN 和 PSPNet 训练中有一个技巧。首先,我们在裁剪图像上训练了一个多标签 Senet154 分类器。之后,我们将此分类器用作分割器的骨干网络。这在质量相同的情况下显著加快了训练速度。
后处理:
首先,我们从图像中移除了小对象和孔洞。然后,如果正像素的总和小于最小阈值(每个类别唯一),我们假设不存在对象。这提高了我们在公共排行榜上的分数,但可能导致过拟合。在此阶段,我们没有对模型集成进行阈值优化,因为默认阈值给了我们更好的结果。
第二阶段使我们能够去除许多假阳性图像。
由 @pavel92 实现
在第三阶段,我们使用二值分割模型,针对每个类别的非空掩码进行训练:2 个 Unet(seresnext50),2 个 FPN(seresnext50),1 个 Unet(SeNet154)。
训练:
数据增强: