返回列表

4th place solution, CSN is all you need for 3D

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

开始: 2022-07-28 结束: 2022-10-27 医学影像分析 数据算法赛
第4名解决方案:CSN 是 3D 任务所需的一切

第4名解决方案:CSN 是 3D 任务所需的一切

作者:Selim Seferbekov (Kaggle Grandmaster)

我着手这项挑战赛的时间非常晚,在截止日期前10天才提交了第一次结果,因此无法进行大量的实验。我使用了 GI tract segmentation challenge(胃肠道分割挑战赛)和 NASA 彗星检测挑战赛中的代码库和技巧。

太长不看版 (TLDR)

采用两阶段方法:3D 分割 + 针对每个椎体裁剪区域的 3D 分类。

主要技巧

许多尝试使用 3D 网络进行分类失败的案例都与过拟合有关。这对于纯 3D 卷积来说很常见,通常我们并不需要它们,我们可以轻松使用那些在视频/动作分类数据集上达到最先进性能的架构。
所以选项如下:

  • 膨胀一些最先进的 2D 网络,比如 EfficientNets,但从第 2 或第 3 个 block 开始使用 3D。这虽然有效,但仍然倾向于过拟合,而且在这种情况下 ImageNet 预训练并不是最好的选择。
  • 使用带有 LSTM/ConvLSTM/Transformer 头部的 2D 网络。这行得通并且允许使用很多架构,主要问题在于 3D 特性仅在最后阶段才被考虑到。
  • 使用在 ig65m/kinetics 数据集上预训练的网络。这对我来说效果最好。

Papers With Code 可以清楚地看出,2022 年视频分类的最佳卷积架构仍然是 ir-CSN-152。尽管 Transformers 在 Kinetics 数据集上取得了更高的分数,但它们在像 RSNA 这样的小型数据集上表现不如 CSN;如果需要快速且准确的 3D 分割和/或分类,CSN 是小型数据集的最佳选择。

我使用了 mmaction2 的 CSN 实现。

分割 (Segmentation)

  • 类 UNet 的多类分割器
  • 编码器:ir-CSN-50
  • 解码器:带有 nn 上采样的标准 unet 解码器,但使用了 (2+1)d convolutions
  • 解码器中的纯 3D 卷积会导致 amp 训练中出现 NaN

训练

  • 沿 z 轴 2x 子采样(仅切片 ::2)
  • 2x 线性下采样图像
  • 内存映射以减少 IO/CPU 开销
  • AdamW + weight decay,余弦学习率退火
  • 损失函数:focal-jaccard 优化损失,用于更快的多类 jaccard 计算
  • 2D 数据增强,Albumentations 库中的 ReplayCompose,轻量级几何增强 + 水平翻转

分类 (Classification)

  • 4 折 ir(ip)-CSN-152,带有全局最大池化
  • 多标签 8 类,如果椎体可见部分少于 30%,则将该椎体的标签设为 0 并重新计算总标签,否则保持原样

训练

  • 3 通道输入(图像,图像,整数编码的分割掩码)
  • 沿 z 轴 2x 子采样(仅切片 ::2)
  • 使用每个椎体周围的 40 个切片(原始数据中为 80 个)
  • 裁剪区域调整为 256x256
  • BCE 损失
  • 目标指标作为验证标准
  • AdamW + weight decay,余弦学习率退火
  • 数据增强:2D 增强,Albumentations 库中的 replay compose,翻转,旋转,几何变换。相比分割流程,这里需要做更多的增强