返回列表

34th place solution - Using CT Scans (+ Code)

403. OSIC Pulmonary Fibrosis Progression | osic-pulmonary-fibrosis-progression

开始: 2020-07-07 结束: 2020-10-06 医学影像分析 数据算法赛
第34名解决方案 - 使用CT扫描(附代码)

第34名解决方案 - 使用CT扫描(附代码)

作者:GreatGameDota | 排名:34/1663

我没想到能赢得这场比赛,所以我没有立刻准备好我的解决方案或代码。我已经把我的代码在这里公开了:https://github.com/GreatGameDota/OSIC-Pulmonary-Fibrosis-Prediction

像往常一样,我要感谢Kaggle举办了另一场精彩的比赛,也要感谢主办方组织了这次比赛!

对我来说这是一场有趣的比赛,因为我看到其他人都只在使用表格数据。我完全没有表格数据比赛的经验,而且我喜欢计算机视觉(CV),所以我有点固执,强迫自己使用CT扫描。虽然我糟糕的LB(公开排行榜)分数曾让我感到气馁,但我坚持了下来,结果证明这是一个正确的决定!

好了,以下是解决方案详情:

模型

  • Resnet50

数据集

图像分辨率:512x512

对于每次扫描,我加载了所有的dicom文件,然后将它们转换为HU(Hounsfield Units)。接着我裁剪了所有图像并将它们重塑为50x512x512的大小。做完这些后,我将每张图像窗口化为三个部分。关于窗口化的详细解释,请查看这篇帖子(我使用了那里分享的相同函数和窗口值,非常感谢Ian Pan!)。得到三张窗口化图像后,我简单地将它们保存为png格式。

每张图像看起来类似于这样:

肺部图像示例

我在这里公开了我使用的数据集:https://www.kaggle.com/greatgamedota/osic-windowed-lung-images

关于元数据,我使用了来自 @ulrich07基准内核中相同的元数据,但我只使用了基础的Percent值,因为它提高了我的CV(交叉验证)与LB再到PB(私有排行榜)的相关性。

数据增强

  • 粗粒度Dropout(Coarse dropout)
  • SSR
  • 水平 + 垂直翻转
  • 针对其中一个模型:随机饱和度和亮度调整

没有使用表格/元数据增强。

训练

  • Adam优化器,配合Reduce on Plateau调度器
  • 训练学习率为0.003,共30个epochs
  • Batch size为16(其中一个模型为4)
  • 使用分位数回归进行训练,损失函数为 0.8 qloss + 0.2 metric loss(与Ulrich的内核相同)
  • 每个模型训练5折
  • 没有使用任何batch accumulation或混合精度
  • 根据最佳验证分数(所有周)保存检查点

在训练时,我移除了6个完整的患者,因为他们的CT扫描是损坏的。然后我通过随机打乱患者并使用GroupKFold将每个患者分配到一个折中。

折分布示意图

在训练过程中,我随机选择一个唯一的患者,并从10-40张图像中随机选择一张(因为前10张和后10张图像不包含任何肺部信息)。然后我设置每次迭代持续 4 * 患者数量。对于验证,我只选择第15张图像,因为它是通常包含最多信息的中间图像。

集成/融合

对其FVC预测值和置信度进行简单的平均。

最终提交

我的最终提交是3

同比赛其他方案