返回列表

[11th place solution] YOLOv5 + VFNet + EfficientD6

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

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

[第11名方案] YOLOv5 + VFNet + EfficientD6

作者: nvnn | 比赛: VinBigData 胸部X光异常检测 | 排名: 第11名

祝贺大家,并感谢 Vingroup 大数据研究院举办了这场有趣的比赛。
以下是我解决方案的一些要点。

1. 总结

  • 2类分类器:efficientnetB6
  • 目标检测:Yolov5 (yolov5x, yolov5l, yolov5x + ASFF head, yolov5-p6) + EfficientD6 + VFNet
  • 预处理边界框:WBF(IOU=0.7)
  • 后处理:定制的 WBF(此定制带来了 0.015 mAP 的提升)
  • 使用四重均值教师 训练 yolov5。
  • 模型集成

2. 分类模型

  • 对于2类分类器,我稍微修改了这个笔记本。感谢 @solosquad1999
  • 我使用 efficientnetB6,图像大小为 768。
  • 我的2类分类器达到了 0.992 的 AUC 和 0.96 的 AP。

3. 检测模型

  • Yolov5:
    • 我使用了来自 yolov5 仓库 的3个模型 (yolov5x, yolov5l 和 yolov5-p6) 以及来自这个 pull request 的 yolov5_asff。
    • 我添加了 mosaic2 和 mosaic3,并将其与 yolov5 仓库中的 mosaic4 一起使用。
    • 我在图像大小 640 下对每个模型训练了 60 个 epoch。我没有测试更大的图像尺寸。
    • 单模型的 CV 分数约为 0.42,LB 分数约为 0.2-0.25。
  • VFNet:
    • 我使用了 mmdetection 中的 VFNet (resnet101) 模型,并增加了更多的数据增强(噪声、RandomBrightnessContrast 等)。
    • 我的 VFNet 模型效果与 yolov5 一样好,CV 约为 0.42,LB 为 0.24。
  • EfficientD6: 我在图像大小 512x512 下训练 EfficientD6,它给了我更好的 CV (0.43) 但 LB 较低 (0.2)。由于 GPU VRAM 有限,我无法使用更大的图像尺寸。

4. 使用均值教师 进行训练

Training Diagram

loss = yolov5_loss + alpha*consistency_losses
alpha 使用以下函数计算:

def sigmoid_rampup(current_epoch, rampup_epoch=5):
    """Exponential rampup from https://arxiv.org/abs/1610.02242"""
    if rampup_length == 0:
        return 0.1
    else:
        current = np.clip(current, 0.0, rampup_length)
        phase = 1.0 - current / rampup_length
        return 0.1*float(np.exp(-5.0 * phase * phase))

使用均值教师将 CV 提高了约 0.02 mAP,但是,它在集成时并没有增加太多的多样性。

同比赛其他方案