返回列表

19th Place Solution - First Time With NFNets

424. RANZCR CLiP - Catheter and Line Position Challenge | ranzcr-clip-catheter-line-classification

开始: 2020-12-14 结束: 2021-03-16 医学影像分析 数据算法赛
第19名方案 - 首次使用 NFNets

第19名方案 - 首次使用 NFNets

作者: Ertuğrul Demir | 比赛排名: 第19名

大家好,祝贺大家的辛勤工作。在开始之前,我想感谢我的队友 @pukkinming@frtgnn@divyansh22 的辛勤付出和投入。这场比赛对我们来说非常有趣,我们在过程中学到了很多。

同时也想感谢所有分享代码、想法、讨论、数据集等的参赛者。

在这个过程中,我们尝试了许多不同的想法,既有简单的也有复杂的,但我将分享一些关键点,以保持简洁:

预处理

  • 我们选择了 640x 的图像尺寸,尝试了其他几种分辨率,但要么没有获得预期的分数,要么因为性能或时间原因无法采用。
  • 对于数据增强,我们通常采用中等强度的策略。
  • 我们尝试去除周围的黑框,但没有得到更好的结果。

模型

我们尝试了几种架构,但主要在以下两种模型上取得了 CV(交叉验证)成功:

  • NfNet F3
  • ResNet 200d

训练

在获得稳定的 CV/LB(公开排行榜)相关性后,我们试图尽可能提高 CV 分数。首先,我们在训练图像上尝试了 ImageNet 预训练模型,用不同的损失函数、学习率调度器、优化器组合来测试它们的极限。

  • 我们发现 Ranger 优化器收敛更快,而 SAM 优化器泛化能力更好。鉴于此,我们决定采用一种模型蒸馏的方式:先使用 Ranger,然后用 SAM 优化器进行微调以寻找极小值。

伪标签

  • 基于蒸馏的发现,我们决定在更大的数据集上训练模型并将迁移学习应用到主模型上,因此我们开始研究像 NIH 这样的外部数据集。
  • 我们用最好的单模型对 NIH 数据集进行伪标注,然后用这些生成的标签重新训练这些模型。
  • 这种方法显著提高了我们的 CV 分数,因此我们继续尝试不同的方法通过这种方式提高 CV。

模型集成

  • 在获得满意的 CV 结果后,我们开始集成我们 CV 表现最好的模型。
  • 权重基于 CV 分数进行简单平均,其中 NfNet 模型占据了很大权重,其次是 ResNet200d。

后处理

  • 我们尝试了几种基于训练/测试分布的方法,但都无济于事。

相信你的 CV

在最后几个小时,我们在决定提交哪个方案作为最佳选择。最终,我们选择了 CV 最高的集成模型,结果发现那确实是我们最好的私有排行榜提交。

关于 NfNets 的旁注:

我想说我们的 NfNet F3 模型给出了非常稳健的结果,帮助我们在榜单波动中幸存下来。有段时间我们几乎要放弃那个架构并继续前进,因为性能/时间的权衡问题。我想再次感谢我的队友对我对该模型的痴迷的耐心,以及忍受我关于它们的无尽改进想法 :)

我实际上分享了一个早期版本作为公共 notebook,我们的私有模型是稍作修改/预训练的版本,采用了更重的方法。你可以在这里查看代码:

https://www.kaggle.com/datafan07/ranzcr-nfnets-tutorial-single-fold-training

同比赛其他方案