返回列表

4th place solution

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

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

第4名解决方案

作者:kazumax
比赛排名:第4名

首先,感谢组织者,并祝贺所有参与者和获奖者!

我的解决方案非常简单。

  • 训练 CNN 主干网络 (第一阶段)
  • 提取嵌入向量
  • 训练 LSTMs (第二阶段)
解决方案架构图

第一阶段 (Stage-1)

将数据分为3折,训练 CNN 以预测每张图像的 pe_present_on_image 标签。
在尝试了几种主干网络后,我决定使用 rexnet200。Efficientnet-b4 和 b5 在混合精度训练下出现了 NaN 损失,所以我放弃了使用它们。
输入 CNN 的是由 Ian Pan 的窗口化预处理的全尺寸 (512x512) JPEG 图像。

对于数据增强,我使用了以下方法:

  • 水平翻转
  • ShiftScaleRotate (平移缩放旋转)
  • One of (Cutout, GridDropout) (二者选一)

由于图像中存在 PE (肺栓塞) 的比例相当小,我还使用了 Focal Loss (焦点损失)。
在第一阶段,我创建了 6 个模型。(3折 BCE 损失 + 3折 Focal 损失)

第二阶段 (Stage-2)

嵌入向量被导出并按 z 轴顺序排序存储在磁盘上,然后使用这些数据训练 LSTMs。由于每个研究的图像数量不同,我实现了可变长度序列的小批量训练。每个序列都用无效值填充,直到达到训练数据的最大序列长度 (1083),并且在计算损失时会忽略无效部分。

对于每个研究,嵌入向量被输入到 BiLSTMx2 中,每个 LSTM 的输出进入两个分支:一个用于预测 pe_present_on_image,另一个用于预测检查级别的标签。

  • pe_present_on_image 分支中,两个输出简单地相加并通过线性层转换。
  • 在检查级别 分支中,使用注意力层 聚合特征,并通过线性层转换。

对于损失函数,我使用了简单的 BCE。

推理

我实现了一个连接主干网络和 LSTMs 的模型进行推理,无需将嵌入向量转储到磁盘。推理是通过 batch_size=1 完成的。没有足够的时间应用 TTA (测试时增强)。

提交模型

6模型平均集成:
3折 BCE 损失训练的主干网络 + 3折 Focal 损失训练的主干网络。
公开 LB: 0.159 | 私有 LB: 0.152

3模型平均集成:
3折 BCE 损失训练的主干网络。
公开 LB: 0.158 | 私有 LB: 0.153

致谢

这是我的第一枚金牌。超级高兴终于成为了 Kaggle Master!
这也是我第一次发帖讨论。
如果我的英语不足以传达我的解决方案,我很抱歉。

代码整理完毕后将在此处更新链接。

同比赛其他方案