返回列表

[4th place solution] YOLOv5x

425. VinBigData Chest X-ray Abnormalities Detection | vinbigdata-chest-xray-abnormalities-detection

开始: 2020-12-30 结束: 2021-03-30 医学影像分析 数据算法赛
[第四名方案] YOLOv5x

[第四名方案] YOLOv5x

作者: fantastic_hirarin (Master)
比赛排名: 第 4 名

感谢所有的参与者和组织者!
同时祝贺所有的获奖者!
以下是我的方案回顾。

摘要

  • 模型:yolov5x
  • 图像尺寸:640
  • TTA(测试时增强):3种尺度模式和水平翻转
  • 模型集成:(4折交叉验证 * 3种不同预处理的标签) = 12个模型

预处理

在预处理过程中,我使用了 WBF(加权框融合),并以 iou=0.4 合并了边界框。
这使得由多名标注者标注的框合并为一个单一框。
需要注意的一点是,三名标注者中有多少人判断该疾病。
如果只有一人、两人或三人判断其为疾病框,对该疾病框的置信度是有差异的。
我认为有必要建立一个能够解释这种差异的模型。

首先,我使用以下方法创建了三个不同的训练标签。

  • labels-1:保留被一名或多名标注者认为是疾病的框。
  • labels-2:保留被两名或多名标注者认为是疾病的框。
  • labels-3:保留被所有三名标注者认为是疾病的框。

训练

上述三种模式的标签均使用 yolov5x 进行训练。
我以 640 的图像尺寸训练了 50 个 epoch,唯一的超参数更改是将 mixup 从 0 改为 0.5。
以下是我创建的四个模型。

  • model-1:在所有图像上训练 labels-1
  • model-2:在所有图像上训练 labels-2
  • model-3:在所有图像上训练 labels-3
  • model-4:仅在包含疾病的图像上训练 labels-1

推理

我对 yolov5 中实现的 TTA 进行了一些修改。
TTA 是在六种图像模式上进行的,使用了三种尺度模式 [1, 0.83, 0.67] 和水平翻转的组合。

最终输出是使用 iou=0.5 的 wbf 对模型输出进行集成的结果。
以下是集成中每个模型的得分。

  • model-1:Public 0.264,Private 0.278
  • model-1 + model-2:Public 0.271,Private 0.295
  • model-1 + model-2 + model-3:Public 0.267,Private 0.303
  • model-1 + model-2 + model-4:Public 0.278,Private 0.297
  • model-1 + model-2 + model-3 + model-4:Public 0.276,Private 0.306

为什么集成提高了分数:
对于使用 wbf 的集成,被更多模型检测到的框的置信度分数会更高。被较少模型检测到的框的置信度分数会较低。
被更多标注者判断为疾病的框会被训练为由更多模型(model-1, model-2, model-3)检测。因此,一个框越可能是疾病,其置信度分数就越高。结果,mAP 得到了提高。

第14类,无发现

我将 model-1 和 model-2 检测到的框中最高的置信度分数视为图像的 finding_score(发现分数)。
然后,我将 f'14 {1-*finding_score*} 0 0 1 1' 附加到所有图像的结果中。
结果,对于那些检测模型不容易检测到框的图像,第14类的分数会更高。
由于 mAP 仅考虑基于置信度分数的顺序,因此将 f'14 {1-finding_score} 0 0 1 1' 添加到所有图像是安全的。

最终选择

我为最终选择选择了以下两个输出

  • model-1 + model-2 + model-4:Public 0.278,Private 0.297
  • model-1 + model-2 + model-4 + 某个公开 notebook 的输出:Public 0.285,Private 0.303

我无法选择包含 model-3 集成的输出。
这是因为 model-3 由于次要疾病的样本量极小而导致 mAP 较低,并且当集成 model-3 时,Public LB 分数下降了。
太遗憾了 :(

同比赛其他方案