424. RANZCR CLiP - Catheter and Line Position Challenge | ranzcr-clip-catheter-line-classification
首先,我要向组织者和所有团队表示深深的感谢,感谢你们使这次比赛成为可能。同时,我也想感谢我的队友 —— @yasufuminakama 和 @raddar 。
代码已发布在:https://github.com/analokmaus/kaggle-ranzcr-clip-public
以下是我们流程的概览:
(n=7)
输入图像尺寸与模型性能有很好的相关性。考虑到训练/推理时间,我们在所有模型中使用了 768 像素的输入。对于数据增强,我们使用了一些常见的变换,如水平翻转、仿射变换、随机亮度/伽马、光学畸变等。
我们使用了 UNet-CNN 架构。UNet 的输出是由三个通道组成的分割掩码 —— ETT、NGT 和 CVC+SGC。UNet 旨在发挥空间监督的作用。因此,与普通的纯 CNN 架构相比,它表现出更稳健的性能以及更高的 CV / LB 相关性。
至于主干网络,通常大模型的表现更好。我们使用了 ResNet200d、EfficientNet-b7 和 NFNet-F1。
由于 segmentation_models_pytorch 中没有 ResNet200d 编码器,我们自行实现了它。实现链接
对于 UNet-CNN 模型,我们使用比赛主办方提供的额外标注训练了 UNet。然后在所有图像上训练整个网络。由于我们无法构建稳定的 NFNet UNet 编码器,我们按照 @yasufuminakama 的 三阶段训练法 训练了 NFNet。
利用外部 CXR 数据集是提升模型性能的另一个关键。我们使用表现最好的模型对 NIH 和 MIMIC CXR 数据集进行了伪标注,并从每个数据集中抽取了一个类别分布平衡的子集,以减小数据规模。
我们使用外部数据集上的伪标签训练了一个新的学生模型。新的学生模型应该拥有与教师模型不同的特征提取器。我们在原始数据集上对学生模型进行了微调,并观察到其性能优于教师模型(参见 @ammarali32 的 这篇讨论 )。
我们也测试了传统的单阶段伪标注。虽然我们观察到性能略有提升,但因为收敛速度很慢,我们最终放弃了这种方法。