第13名解决方案(含代码)
第13名解决方案(含代码)
作者: nan (dattran2346) 及团队成员
比赛: RSNA 颅内出血检测
感谢 Kaggle 和 RSNA 主办了如此有趣的比赛。
感谢整个团队 @andy2709、@moewie94、@lego1st、@nguyenbadung 的通力合作。
代码已公开发布在 https://github.com/dattran2346/rsna-2019
1. 预处理
窗技术
- 我们使用了脑窗、硬膜下窗、骨窗和默认窗口的多种组合,并将它们堆叠以创建标准的 3 通道图像。
ct_windows = {
'brain': {'L': 40, 'W': 80},
'subdural': {'L': 75, 'W': 215},
'bony': {'L': 600, 'W': 2800},
'default': { # 来自元数据 }
}
窗设置优化
- 其思路是使用 1x1 卷积和 Sigmoid 激活函数来学习相关的窗口,权重初始化为默认的脑窗、硬膜下窗和骨窗。@andy2709 尝试了这种方法,并注意到最终学习到的窗口与默认窗口非常接近。
数据划分
- 我们同时根据患者 ID 和检查 ID 对数据集进行了划分。我、@andy2709 和 @lego1st 按患者划分训练模型,而 @nguyenbadung 和 @moewie94 则按检查划分进行训练。
2. 模型
2D 模型

我们在此应用了两阶段训练:
- 在第一阶段,仅进行常规的 CNN 训练,主干网络包括 EfficientNetB2-B5、SEResNeXt50、SEResNeXt101。
- 在第二阶段,我们使用 5 个连续切片的输出,并应用一个简单的 CNN 来预测中心切片。
3D 模型

- 我们使用常规主干网络作为编码器,使用双向 LSTM 和全连接(FC)层作为解码器,该模型进行了端到端的训练。
- 对于每次检查,我们在训练期间按顺序选择 10 个随机切片(连续或不连续)并输入网络。在推理时,则考虑所有切片。
3. 堆叠
