返回列表

10th place solution (+ github code)

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

开始: 2019-09-18 结束: 2019-11-13 医学影像分析 数据算法赛
第10名解决方案 (+ GitHub 代码)

第10名解决方案 (+ GitHub 代码)

作者: shimacos (Kaggle Grandmaster) | 比赛: RSNA 颅内出血检测 | 排名: 第10名

恭喜所有参赛者和获奖者!
而且,通过这次比赛我成为了 Kaggle Master!
我们打算用这次比赛的奖金去吃日式烧烤,哈哈。

以下是我们解决方案的总结。

代码地址: https://github.com/shimacos37/kaggle_rsna_2019_10th_solution
我们主要使用了 @appian 的代码。非常感谢 @appian!!

流程图

Pipeline Diagram

总结

第一阶段 (Stage 1)

预处理

  • 像大多数人做的那样,我们应用了三个窗口(脑窗、血液/硬膜下窗、骨窗)。
  • 删除了一些噪声图像(脑区域较小的图像)。
  • 基于 PatientID 进行 5 折划分。

训练

  • 我们在 @appian 代码的基础上简单地更改了主干网络,并应用了一些想法。
  • 我们通常使用 512x512 的图像尺寸,并应用简单的增强(翻转、缩放等)。
  • 最终,我们构建了十一个模型。事后看来,我觉得其实不需要构建这么多模型...

简单的 CNN 模型

  1. SeResNext-50
  2. SeResNext-50 (缩放至 410x410)
  3. SeResNext-101 (使用了 Mixup)
  4. Efficientnetb3
  5. InceptionV4
  6. InceptionResNetV2
  7. Xception

一些思路

  • 我们在预测时不包含 'any' 标签,而是通过其他标签的概率来计算 'any' 的概率 (1 - (1-p_1)*(1-p_2)...)

    • 虽然这方法得分不是很高,但在堆叠时应该会有一些贡献。
  • 我们使用相邻的图像作为输入,并预测中心图像的标签。请看下图。

Adjacent Images Input Diagram
  • 我们对被夹在中间的标签区域应用了移动平均或插值来进行标签平滑。

    • 因为我们在 EDA 中发现标签边界处往往会有较高的 log_loss。

第二阶段 (Stage 2)

预处理

  • 首先,我们预测每张图像的标签概率。
  • 其次,我们根据 Position2 对每个 StudyInstanceUID 的概率进行排序。
  • 我们提取了以下特征:
    • 聚合特征(最小值、最大值、平均值、标准差),pred-pred_mean,pred / pred_mean 等
    • 移动平均特征(3、5、7、9 个相邻预测),pred - moving_average_pred,pred / moving_average_pred 等

堆叠