返回列表

5th place solution

338. APTOS 2019 Blindness Detection | aptos2019-blindness-detection

开始: 2019-06-28 结束: 2019-09-07 医学影像分析 数据算法赛
第5名解决方案

第5名解决方案

作者:Gary (Grandmaster) | 比赛排名:第5名

恭喜大家!这是我的解决方案,并不复杂。

模型

  • efficientnet-b0
  • efficientnet-b1
  • efficientnet-b2
  • efficientnet-b3

我只是将分类和回归任务结合在一起,多重损失可能不容易过拟合。但在测试阶段只使用了回归的预测结果,代码如下:

代码截图

数据预处理与增强

  • 没有特殊的预处理方法,我只是裁剪了图像上的黑色背景。
  • 图像尺寸:384x384
  • 仅使用了左右翻转、上下翻转、随机旋转(0, 360)、缩放(1.0, 1.35)以及自设计的透视变换方法。

训练策略

  • 5折交叉验证 (5 fold CV)
  • 根据较好的公共榜单分数,我没有先在2015数据上预训练再在2019数据上微调,而是将2015数据和2019数据合并在一起训练模型,并在2015私有测试数据和2019验证数据上进行验证。
  • 学习率策略:Adam优化器,学习率列表=[5e-4, 1e-4, 1e-5, 1e-6],学习率衰减节点为[10, 16, 22],共训练25个epoch。
  • 2次测试时增强 (2*TTA)
  • 阈值:[0.5, 1.5, 2.5, 3.5]

伪标签

  • 我认为伪标签是赢得这场比赛最关键的要素。我的想法是,因为我们不知道2019私有测试集的分布,它可能类似于2015数据,或者2019训练数据,亦或是2019公共数据。所以我将三种不同分布的数据结合起来训练模型,使模型能够识别这三种不同分布的数据。
  • 我没有使用所有的2019公共数据作为伪标签样本,我选择了置信度较高的样本,代码如下: 伪标签代码截图
  • 伪标签帮助我降低了本地的MSE损失并提高了QWK分数。

总结

  • 这次比赛的训练数据很奇怪,大多数Kaggler都遇到了一些奇怪的问题,比如公共榜单不稳定,找不到本地CV和公共榜单之间的关系等等……
  • 但最终结果表明,我们仍然可以信任我们的本地CV。
同比赛其他方案