返回列表

3rd place solution

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

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

第三名解决方案

作者: Darragh (Kaggle Grandmaster)

恭喜大家,感谢 RSNA 再次举办如此精彩的挑战赛。特别感谢 @haqishen(以及 @selimsef)和其他人,你们展示了模型的性能确实可以在这里得到更大的提升。

这是我的解决方案,我可能会在稍后补充更多细节或进行一些修正。

TL;DR (太长不看版)

除了解决这个问题,我希望得到一个不需要在标注上花费大量精力的解决方案,这样来自 ASNR 和 ASSR 的脊柱放射科专家可以更容易地进行扩展。

我没有使用骨折边界框,只使用了分割图中的高级数据。这包括从分割图中得出的两件事:(1) 通过取分割的外边界获得的 C1-C7 椎骨边界框;(2) 切片中的椎骨体积除以任何切片中可见的最大椎骨体积的比率。第二点将在下面更详细地解释。如果我们有椎骨的边界框标签而不是分割,这些也可以用来计算比率。

对于第 (1) 点,各个切片级别的边界框没有在下游使用。取而代之的是 C1-C7 椎骨的研究级别边界框,该框取自各个切片级别边界框的滚动平均值最大值。

从第 (2) 点出发,结合 train.csv 中的骨折标签,我们可以获得每个切片中骨折和椎骨类型的近似标签来拟合模型。我只使用了 2.5D CNN + 1D RNN,这几乎是直接照搬了 @wowfattie 两年前在 RSNA 比赛中的第一名解决方案

边界框预处理

同样借鉴了两年前的第一名方法,我发现放大椎骨可以提高性能。我使用 EfficientNet-v2 预测五个标签 —— x0, y0, x1, y1, has_bbox。即边界框的四个角,以及切片是否包含椎骨的概率。在下游模型中,C1-7 椎骨在 z 轴开始之前和结束之后的切片范围被排除在训练和推理之外。该范围是通过 has_bbox 概率的 z 轴滚动平均值找到的。

边界框预处理示意图

同样在下游模型中,椎骨在预处理阶段被裁剪。我使用 z 轴上所有框的外部边界框一次性裁剪整个研究,每个研究使用一个框。裁剪后的研究被调整为 512 * 512,并且对研究应用了相同的增强(位移缩放、cutout 等)。我还在转换为 uint8 之前裁剪并调整了 DICOM 的大小,希望将原始 DICOM 值插值到更大的尺寸能提供更高的分辨率 —— 不确定这是否有帮助,但这让我心里感到安慰 😊。

模型 1:切片级别椎骨标签

使用 2.5D CNN+

同比赛其他方案