返回列表

27th place solution (8 classification and 8 segmentation models)

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

开始: 2019-07-25 结束: 2019-10-24 缺陷检测 数据算法赛
第27名方案 (8个分类模型和8个分割模型)

第27名方案 (8个分类模型和8个分割模型)

作者: Ilia Larchenko | 排名: 第27名 | 发布日期: 2019-11-05

虽迟但到,我想分享一下我的解决方案简报。

我的方案只是16个模型的组合:

分割模型

  • 4个带有resnet152主干的PSNet + 1个带有resnet50主干的FPN,在全尺寸图像上训练
  • 来自@lightforever笔记本的3个模型

分类模型

  • 2个efficientnet-b4 + 2个efficientnet-b5,在64 x 400图像上训练
  • 1个resnext101_32x4d + 1个densenet201,在224 x 224调整大小的图像上训练
  • 1个resnet152 + 1个resnet50,在全尺寸图像上训练

训练

我所有的模型都是在随机抽取的80%训练数据上训练的,使用了Catalyst和Albumentations的强数据增强(这是我第一次认真使用这两个库,所以我尝试了很多不同的增强方式,似乎产生了不错的结果):

A.VerticalFlip(p=0.5),
A.HorizontalFlip(p=0.5),
A.ShiftScaleRotate(rotate_limit=15,shift_limit = 0.01, p=0.3), A.GridDistortion(p=0.2)A.OpticalDistortion(p=0.2),
A.Blur(blur_limit = 1, p=0.2), 
A.CLAHE(clip_limit = 2, tile_grid_size = (16,16), p=0.2), 
A.HueSaturationValue(p=0.1), 
A.JpegCompression(quality_lower = 50, p=0.2), A.RandomBrightnessContrast(brightness_limit=0.3, contrast_limit=0.3, p=0.2), A.RandomGamma(p=0.2)

+ A.RandomSizedCrop 或 A.Resize

对于分割模型,我使用了:

  1. 如果类别掩码不为空,使用 dice + 像素级BCE损失。
  2. 如果类别掩码为空,使用像素级BCE + 整体BCE损失(基于预测的最大像素值)。

对于分类模型 - 使用BCE损失。

推理

我对所有模型进行了同时推理:我读取小批量的测试图像,应用不同的变换集,并计算所有模型的预测结果。这意味着我每张图像只读取一次,这使得推理速度相当快。

不同分类和分割模型的预测结果被平均化。更复杂的融合方案反而降低了我的分数。

测试时增强 (TTA)

  • 分类, TTA2: 原始图像 + 水平或垂直翻转或两者同时翻转(不同模型不同)
  • 分割, TTA2: 原始图像 + 同时进行水平和垂直翻转

后处理

  • 分类阈值 [0.5, 0.5, 0.5, 0.5]
  • 分割-分类阈值 [0.5, 0.5, 0.5, 0.5]
  • 两种分类方法之和的阈值 [1.05, 1.05, 1.05, 1.05]
  • 分割阈值 [0.3, 0.3, 0.3, 0.3]
  • 最小尺寸 [400, 400, 1400, 4000]

我选择的第二个方案对不同类别有不同的阈值,并且Public LB分数更好——但结果发现它对Public LB过拟合了。

同比赛其他方案