396. SIIM-ISIC Melanoma Classification | siim-isic-melanoma-classification
大家好,恭喜所有的获奖者,感谢 Kaggle 和 SIIM 举办了这次比赛。
这是我第二次获得奖牌的比赛(终于成为 Expert 了,耶!!!),也是我第二次参加医学图像分析比赛。我的第一次是去年的 APTOS 盲症检测,我在这次比赛中遇到了一些相似的问题:
许多医学图像分析的一个常见问题是数据分布不平衡(阳性病例的图像很少)。APTOS 比赛有5个类别(或5种疾病程度,因为问题也可以被视为回归问题),其中2个类别占主导地位。在本次比赛中,这是一个二分类问题,第一类的数量要大得多。解决类别不平衡的显而易见的方法是使用外部数据,这就引出了第二个挑战:
在这两场比赛中,我们都要处理相当大量的外部数据,你可以用它来平衡类别或者直接使用所有数据。在 APTOS 中,许多人在旧的外部图像上预训练模型,并在当前数据上进行微调(我也这么做了)。不当使用外部数据可能会降低你的分数,旧(外部)数据集和当前数据集差异很大。在 SIIM 比赛中,旧数据和当前数据的差异要小得多,所以我们可以更自由地使用它。
我在整个训练流程中使用了 2018+2019 年的外部数据,仅在 2020 年的数据上进行验证。
起初,我使用 PyTorch 尝试了各种轻量级模型(如 EffNet b0-b3,ResNet18,图像大小为 256x256),并对元数据和图像使用了各种增强技术,尝试了 focal loss 和 label smoothing。但我在公共 LB 上达到的最高分是 0.933。但在讨论区,参与者们谈到了像 512x512 这样尺寸的实验,以及像 EffNetB6 这样的大型模型,这类实验对我来说很难,因为我只使用 PyTorch 和 GPU。
在我的深度学习之路上,我一直使用 PyTorch,但与 tensorflow 和 TPU 相关的话题在讨论区和公共笔记本中出现得越来越多,我不能再忽视了。最终我发现,使用 TPU 我可以在更大的图像上训练更重的模型!
2019年第一名解决方案 是不同版本的 EfficientNet、不同的增强技术和图像尺寸的混合,所以我决定实现类似的东西。
我使用了类似 Triple Stratified KFold 的流程,使用 2018+2019+2020 数据进行训练,仅使用 2020 数据进行验证。
| 模型 | 图像尺寸 | 初始权重 | 公共分数 | 私有分数 |
|---|---|---|---|---|
| EfficientNetB5 | 512 | ImageNet | 0.9524 | 0.9200 |
| EfficientNetB5 | 768 | ImageNet | 0.9469 | 0.9185 |
| EfficientNetB5 | 1024 | ImageNet | 0.9479 | 0.9285 |
| EfficientNetB6 | 384 | ImageNet | 0.9497 | 0.9277 |
| EfficientNetB6 | 512 | ImageNet | 0.9488 | 0.9258 |
| EfficientNetB6 | 768 | ImageNet | 0.9502 | 0.9277 |
| EfficientNetB6 | 1024 | ImageNet | 0.9478 | 0.9287 |
| EfficientNetB7 | 512 | ImageNet | 0.9480 | 0.9239 |
| EfficientNetB7 | 768 | ImageNet | 0.9379 | 0.9083 |