338. APTOS 2019 Blindness Detection | aptos2019-blindness-detection
恭喜所有获奖者以及所有进入金牌区的选手!我非常想感谢我优秀的队友 @mhiro2 和 @yasufuminakama,我很确定如果只有我一个人,我无法获得金牌...
这是我第一次写解决方案,但我会尽可能公开我们所做的一切。
这次比赛最重要的部分是预处理。正如大家所意识到的,这次比赛存在严重的图像尺寸和形状泄露。起初我尝试了多种预处理方法(例如缩放、圆形裁剪或切角等)来消除这种泄露,但几乎都失败了。当我确信训练图像和测试图像看起来非常相似时,LB分数却显著下降。只有旋转对我有效,但非常不稳定。(例如我使用了120度。如果改为90或180度,LB分数会显著下降。)
最有趣的图像形状是 (480,640),它占测试集的70%以上。这让我产生了以下假设:
在管理员制作数据集后,他们意识到图像尺寸/形状与诊断分数之间存在很强的相关性。他们想阻止所有Kagglers提交仅使用图像元特征的LGBM模型。但他们也希望模型能够检测视网膜病变,所以他们决定只裁剪公共测试集的一部分...
这意味着图像尺寸和形状信息仍然有用,所以我不再专注于预处理。在查看了私有分数后,我现在确信这个想法在某种程度上是正确的,因为它比之前的比赛高出惊人的多。你可以在这个伟大的Kernel的私有分数中看到证据。
我们使用的预处理方法如下。我相信这种预处理上的差异可能使我们的模型多样化。
# 针对 SeResNext
Compose([
BensCrop(img_size), # 来自 2015 年的解决方案
RandomHorizontalFlip(),
RandomVerticalFlip(),
RandomRotation((-120, 120)),
]),
# 针对 EfficientNet B5
Compose([
Resize(img_size),
HorizontalFlip(),
VerticalFlip(),
Rotate(),
RandomContrast(0.5),
IAAAdditiveGaussianNoise(p=0.25),
])
我们结果的第二个重要部分是如何划分和选择数据集。我尝试了很多组合,最后发现以下设置对我很有效:
当我在2015年数据集上进行预训练并在2019年数据集上进行微调时,我的单模(SeResNext)得分是 LB0.811,但在改为上述方法后,我的分数提升到了 LB0.827。
我们使用了两种模型,SeResNext101 和 EfficientNet B5。每种模型使用了不同的训练方法。
对于 SeResNext101
对于 EfficientNet B5