返回列表

6th place solution

404. RSNA STR Pulmonary Embolism Detection | rsna-str-pulmonary-embolism-detection

开始: 2020-09-10 结束: 2020-10-26 医学影像分析 数据算法赛
第6名解决方案

第6名解决方案

作者:OsciiArt
比赛:RSNA STR 肺栓塞检测

祝贺所有的获胜者。感谢 Kaggle 和 RSNA 主办这次比赛。
我对我的结果感到很高兴,因为我是一名医生,因此 RSNA 比赛对我来说是最重要的比赛。在 2018 年的 RSNA 比赛中,我尽了最大努力,但未能获得金牌。我无法参加 2019 年的 RSNA 比赛,因为我必须准备医生的国家考试。在 2020 年的 RSNA 比赛中,我终于获得了单人金牌。我很伤心我不能亲自参加 RSNA 会议,因为它变成了在线会议。

在这里,我将描述我的解决方案。概览如下所示。实际上,没有什么特别之处;使用 2D-CNN 进行图像级特征提取,使用 1D-CNN 进行检查级分类。

Figure 1

阶段 1:用于特征提取的 2D-CNN

首先,我在具有下图所示条件的 2D 图像上训练了带有可训练 3 窗口(WSO,参考 Yuval 的解决方案)的 2D-CNN(EfficientNet B0 或 B2)。为了节省内存和时间,我使用混合精度训练模型。

  • 损失函数:带有反映比赛指标权重的 BCE
  • 窗口:使用 Ian 的窗口进行初始化
  • 图像大小:512(原始图像)
  • BatchSize:B0 为 80 / B2 为 50
  • 训练步数:8192(= 0.5 epoch)
  • 优化器:Adam
  • 学习率 (LR):1e-3,通过余弦退火衰减至 1e-4
  • 数据增强:ShiftScaleRotate, BrightnessContrast, Crop (448 x 448), CutOut

在 P100 上训练需要 3 小时 x 5 折。我提取了 2D-CNN 的特征(全局平均池化层的输出),并将其用作阶段 2 的输入。特征提取需要 2.5 小时 x 5 折。

阶段 2:用于检查级分类的 1D-CNN

接下来,我训练了用于检查级分类的 1D-CNN。作为输入,我使用了由第一阶段 2D-CNN 提取的特征序列。采用了特征池化、跳跃连接和 SE 模块。对于图像级预测,我使用了类似 U-Net 的上采样架构。训练条件如下所示。

  • 检查级损失:带有反映比赛指标权重的 BCE
  • 图像级损失:BCE 和带有 q_i 权重的 BCE
  • BatchSize:64
  • Epoch:16
  • 优化器:Adam
  • 学习率 (LR):1e-4,通过余弦退火衰减至 1e-5
  • 数据增强:Crop (128 slices), Flip

训练需要 6 分钟 x 5 折。

后处理

我对 B0 和 B2 的预测结果取平均。我进行了后处理,以最小的修改解决标签一致性的冲突。5 折交叉验证分数如下所示。

negative_exam_for_pe           bce: 0.345601, auc: 0.895471
indeterminate                  bce: 0.084615, auc: 0.812207
chronic_pe                     bce: 0.158846, auc: 0.682470
acute_and_chronic_pe           bce: 0.081380, auc: 0.842780
central_pe                     bce: 0.111196, auc: 0.949153
leftsided_pe                   bce: 0.287363, auc: 0.900652
rightsided_pe                  bce: 0.298690, auc: 0.911001
rv_lv_ratio_gte_1              bce: 0.228942, auc: 0.902246
rv_lv_ratio
同比赛其他方案