338. APTOS 2019 Blindness Detection | aptos2019-blindness-detection
感谢 Kaggle 举办这次比赛,感谢我的队友,特别是 @dott1718(恭喜成为 Grandmaster!- 希望没毒奶)。我非常非常开心能获得这枚金牌,因为这基本上是我们第一次认真解决计算机视觉问题,这意味着我们在这次比赛中学到了很多东西。这也圆满结束了我们这一年的旅程,我们在各种不同类型的比赛中都表现出色,包括 NLP、表格数据、时间序列/时间数据,以及现在的图像数据。不到一年前我们刚开始在 Kaggle 上玩耍时,从未想过能做得这么好,我为我们的进步感到非常自豪和谦卑。如果不出意外,这也意味着 @dott 获得了 GM 头衔。接下来,我想阐述我们的解决方案。我喜欢写很多字,但我们的解决方案很可能与那些解释较短的其他方案非常相似 😊。
总的来说,我认为必须把几个拼图碎片拼凑在一起,才能产生一个好的解决方案。首先是要有稳健的预处理,这能允许模型很好地泛化,并且不会让模型过拟合于某些图像特征,比如图像的大小或其他方面,比如描绘记录设备的标记。如果你只看 2019 年的训练数据,这并不那么重要,但当你看测试数据时就很重要了,例如那里有相当数量的图像被裁剪为 640x480。为此,我们有以下粗略的预处理流程,最终这与 Ben 的出色步骤非常相似:
我认为在这次比赛中,模型的类型并不是那么重要。但是不同的模型可能需要稍微不同的学习率、epochs 等,但你应该能够通过各种各样的模型获得类似的结果。最后,我们使用了两个模型:Efficientnet-B7 和 SE-Resnext 50。我们后来才切换到 SE-Resnext 50,以便有更快的实验可能性,其结果与 Efnet B7 非常相似。我们对这些模型做了很多不同的变体,稍后会详细说明。
我们在完整的 2015 年数据上进行了预训练,这对于在测试数据上获得更好的结果非常重要。不幸的是,我们并没有真正弄清楚什么能构成一个好的预拟合,所以通常我们试图选择在 2019 年验证集上得分最好的 epochs。有时你会得到“幸运”的预拟合,它们在 LB 上的得分比其他的要好得多。根据模型的不同,我们拟合了大约 15-30 个左右的 epochs,我们要么做了一些轻微的 LR 调度,要么保持不变,并在那里使用了 Radam 或其他 Adam 变体。
我们在 2019 年数据上进行了 4 折交叉验证,通常拟合大约 3 个 bag 以稍微应对随机性。在这里,我们使用 Adam 优化器,并执行了一次循环策略,总共 4 个固定 epochs,学习率范围从 0.00001 到 0.0005。我们在这里没有做任何 epoch 选择,而是保持 4 个 epochs 固定。我是固定 epochs 的忠实粉丝,因为它可以让你更好地判断 CV 分数,而早停可能导致某种形式的过拟合。但是,你可能需要更多的模型来平衡你可能得到的“坏”拟合。
我们最终最好的提交使用了 TTA4(原图、水平翻转、垂直翻转、水平+垂直翻转)。我们分析认为结果真的很随机。这主要是由于很多标签不一致这一事实。当我们试图用训练集中的重复图像标签固定设置一些测试标签时,这一点对我们来说变得非常明显。仅仅对大约 30 张图像这样做,就使我们的 LB 分数下降了近 0.01,这简直太疯狂了。所以很明显,一个好的模型是拥有多样化预测的模型,然后找到这些预测的一个好的“平均”表示。如果你偶然为一张图像选择了这个或那个标签,你也可能会很幸运。我们不想依赖运气,所以我们决定尝试做一个尽可能稳健的混合。
我们的最终混合是 12 种不同类型模型的组合,其中每一种都拟合了 4 折,并且每一种我们都做了 TTA4。所以总的来说,我们的最终解决方案是 192 个推理过程的平均混合。我们还根据 CV 模拟稍微更改了最终阈值为 [0.5, 1.5, 2.43, 3.32],预期私有数据分布与训练数据相似。该解决方案的 Public LB 为 0.833,Private LB 为 0.931。
我们试图使我们的最终模型尽可能多样化,这意味着拥有不同的预拟合和不同类型的微调。所有模型都有类似的增强,包括旋转、水平/垂直翻转和 CLAHE 或亮度-对比度变化之一。除了翻转,我认为图像增强并没有那么大帮助。