返回列表

1st Place Solution

513. RSNA 2022 Cervical Spine Fracture Detection | rsna-2022-cervical-spine-fracture-detection

开始: 2022-07-28 结束: 2022-10-27 医学影像分析 数据算法赛
第一名解决方案

第一名解决方案

作者: Qishen Ha | 排名: 第1名

感谢组织者,并祝贺所有的获奖者以及那些努力开发新流程并坚持到比赛最后的人们。

这是一场非常有趣的比赛,因为我们可以想到许多不同的方法来处理这个数据集。因此,这场比赛最重要的是开发一个合理的流程,其次才是模型的优化。

代码

https://www.kaggle.com/competitions/rsna-2022-cervical-spine-fracture-detection/discussion/362787

摘要

我设计了一个两阶段的流程来解决这个问题。

阶段1:3D 语义分割 -> 阶段2:2.5D 结合 LSTM 分类。

此外,在阶段2中有两种不同类型的分类模型。

3D 语义分割

对于 3D 语义分割,数据集中只有 87 个带有 3D 掩码的样本,但这足以训练出性能良好的 3D 语义分割模型。

我使用 128x128x128 的输入,训练 resnet18d 或 efficientnet v2s + unet 模型,用于分割 C[1-7] 椎骨(7通道输出)。

训练完成后,我预测了训练集中所有 2k 个样本的每个椎骨的 3D 掩码。

以下是 C[1-7] 椎骨预测掩码的示例。从左到右分别为 x、y、z 维度视图的中心切片。

预测掩码示例

准备分类数据

下一步是准备分类数据。

首先利用每个椎骨的预测 3D 掩码,我们可以从单个原始 3D 图像中裁剪出 7 个椎骨(单个裁剪中可能会显示多个椎骨,但这没关系)。此时,我们裁剪了 2k * 7 = 14k 个样本,每个样本只有一个二进制标签。

然后对于每个椎骨样本,我按 z 维度均匀提取了 15 个切片,对于每个切片,我进一步提取了 +-2 个相邻切片以形成具有 5 个通道的图像。例如,如果一个 3D 椎骨样本的形状为 (128, 128, 30),我提取第 0、2、4、6...26、28 个切片,然后例如对于第 2 个切片,我使用第 0~4 个切片形成一张 5 通道图像。

此外,我将相应椎骨的预测掩码作为第 6 个通道添加到每张图像中,以此排除单个样本中存在多个椎骨的影响。

以下是单个椎骨的一个切片及其预测掩码(带有增强)的示例。我们可以看到图像中椎骨的左半部分不属于此裁剪指定的椎骨。

切片与掩码示例

2.5D + LSTM 分类

我们现在有 14k 个椎骨的 3D 训练样本。理论上处理这些数据最简单的方法是在其上训练 3D CNN。但不幸的是,这种方法不起作用。在这些数据上训练 3D CNN 没有给我令人满意的结果。

所以我退一步选择了 2.5D 方法。这里的 2.5D 意味着椎骨样本中的每个 2D 切片都包含若干相邻切片的信息,所以写作 2.5D。但该模型是一个具有 5 通道输入的普通 2D CNN。

该模型的结构是,我首先将单个样本的 15 个切片输入 2D CNN,提取每个切片的特征,然后接一个 LSTM 模型。这样整个模型就可以学习整个椎骨的特征。我称之为 type1 模型 ↓

Type1 模型结构

上面的模型结构虽然能够训练单个椎骨是否骨折

同比赛其他方案