返回列表

2nd Place Solution - Sequential model

348. RSNA Intracranial Hemorrhage Detection | rsna-intracranial-hemorrhage-detection

开始: 2019-09-18 结束: 2019-11-13 医学影像分析 数据算法赛
第二名解决方案 - 序列模型

第二名解决方案 - 序列模型

作者:Darragh, Dmitry Larko
排名:第二名

代码与验证集/排行榜分数:https://github.com/darraghdog/rsna

恭喜所有的获奖者,非常期待学习你们的解决方案。特别感谢竞赛主办方 RSNA、Kaggle 社区、PyTorch 社区、Albumentations 以及 Facebook 在 ResNeXt 上的工作——他们的训练方式非常酷。我们在 Recursion 竞赛中没能进入前三名感到很遗憾,现在我们非常开心 😄

Solution Diagram

概述

总的来说,我们只有一个单图像分类器,数据被分成 5 折,我们只训练了其中的 3 折,然后从分类器中提取 pre-logit 层(预对数层)并输入到 LSTM 中。

分类器在每一折上训练 5 个 epoch,图像大小为 480,预处理步骤如下。对于每一折的每一个 epoch,我们提取嵌入层(使用 TTA 并对嵌入取平均),并在其上单独训练一个 LSTM 12 个 epoch——因此总共有 15 个 LSTM(3 折图像模型 × 5 个 epoch),最后对预测结果取平均。

我们曾担心预处理滤波器可能会丢失信息,所以在没有预处理滤波器的情况下重新训练了上述模型,结果表现更差;但是将两个流程的结果取平均后,效果稍微好了一点点。为了所有实际目的,第一段提到的流程作为最终解决方案已经足够好,但因为我们需要在第二阶段之前修复文档,所以 GitHub 和最终解决方案中都包含了这两个流程。

预处理

  • 使用了 Appian 的 DICOM 图像窗宽窗位处理方法。链接
  • 切除所有黑色区域。图像中会有头托或机器伪影,使得头部在图像中显得比实际小——见上图。这些通常是细线,所以我们使用 scipy.ndimage.minimum_filter 试图擦除这些细线。链接
  • 如上图所示使用了 Albumentations 进行数据增强。

图像分类器

  • ResNeXt101 - 因为运行时间太长,我们在这里没花太多时间。但也测试了 SeResNeXt 和 EfficientNetB0,效果都不如 ResNeXt。
  • 在推理时提取 pre-logit 层(GAP 层)。链接

创建序列

  • 从 DICOM 文件中提取元数据:链接
  • 根据 Patient(患者)、Study(检查)和 Series(序列)对图像进行排序——大多数序列的长度在 24 到 60 张图像之间。链接

LSTM