返回列表

Dual-Head Model with 4-stage Training, 2nd Place Solution

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

开始: 2020-12-14 结束: 2021-03-16 医学影像分析 数据算法赛
双头模型与4阶段训练,第二名方案

双头模型与4阶段训练,第二名方案

作者: sheep (及队友 sin, nvnn, Chris Deotte) | 排名: 2nd Place

恭喜所有的获奖者,做得好!我要感谢我的队友 @nvnnghia@cdeotte@underwearfitting,你们都做得非常好,最终我们获得了第二名。

我要感谢 @hengck23 在 HubMAP 比赛中提供的 Unet 代码,以及结合标签和注释的绝妙想法。还要感谢 @yasufuminakama 的 3 阶段训练实现。

祝贺 VinBigData 团队,他们的员工在本次比赛中获得了 3 枚单人金牌!@moewie94@andy2709@nguyenbadung。期待阅读你们的解决方案。

数据 (Data)

  • 在训练中,我们只使用了 RANZCR 的训练集和官方标注数据。我们尝试了其他标注,如肺部掩膜和关键点,但在我们的设置中效果都不好。
  • 我们尝试使用 ChestX 数据集进行伪标签,但受到严重泄漏的影响,所以我们放弃了伪标签。
  • 我们使用了基于 sin 的公共 notebook 的轻量级增强,cutmix 并没有提高 CV 和 LB,但为我们的最终集成引入了多样性。
  • 我们没能使用大于 1024 的图像尺寸,甚至 1024 图像的性能也有点差。我们最好的模型是在 768 尺寸下训练的 Efficientnetb7-unet 模型。我们稍后会介绍它。
  • 掩膜生成:我们通过绘制标注点之间的连线来生成掩膜。训练后,我们通过平均 5 折输出来生成完整的训练集伪掩膜。由于我们使用伪掩膜(无注释的训练集)作为监督,我们忽略了这里潜在的泄漏。你可以参考这个 notebook。

模型 (Model)

我们的模型是一个双头 Unet 模型,同时具有分类和分割输出。与其他团队不同,我们只使用掩膜作为监督,原因有两个:首先,我们希望模型通过分割损失学习正确的模式;其次,我们的数据是从不同的医院或患者分组收集的,这可能导致成像质量和掩膜输出不同。直接将这些掩膜输入分类可能会降低模型的泛化性能。

我们的最终模型使用 Resnet200defficientnet-b5efficientnet-b7 作为骨干网络,为了在显存占用合理的情况下进行训练,减小了 unet 解码器部分。

我们也尝试在模型中添加一致性损失,但这大大减慢了训练过程。

image1

训练 (Training)

我们从公共 notebook 中借用了 stage1 和 stage2,只修改了 stage2 的几个训练参数。

掩膜生成

  • stage3: 在 512 尺寸下训练 resnet200d-unet,使用 train_annotation 生成的掩膜,如果输入图像没有注释,我们只计算分类损失。预测完整的训练集伪掩膜 v1。
  • stage4: 在 768 尺寸下训练 resnet200d-unet,使用 v1 掩膜并缩放到 768 尺寸。生成伪掩膜版本 v2。
    image2

模型训练

  • stage3: 在 768 分辨率下训练 efficientnet-b5-unetefficient-b7-unetresnet200d-unet
  • stage4 [可选]: 在 1024 分辨率下对 resnet200d-unet</code
同比赛其他方案