返回列表

6th Place Solution

672. RSNA Intracranial Aneurysm Detection | rsna-intracranial-aneurysm-detection

开始: 2025-07-28 结束: 2025-10-14 医学影像分析 数据算法赛
第 6 名解决方案 - RSNA 颅内动脉瘤检测

第 6 名解决方案

一个深度优化的 2.5D 流程

作者: Theo Viel, Ian Pan, Bartley

发布时间: 2025-10-15

竞赛排名: 第 6 名

感谢主办方再次举办这场精彩的竞赛。我们总是很享受参加 RSNA 竞赛 :)

概述

我们的解决方案是一个 2.5D 流程,包含 4 个步骤:

  • 头骨裁剪 (Skull cropping)
  • 血管分割 (仅在训练时使用)
  • 2D 动脉瘤帧级分类
  • 使用序列模型进行聚合

灵感来自 Theo 两年前的第 2 名解决方案 —— 尽管该流程需要大量调整才能实现良好的性能。

成绩为 CV 0.895 - 公共榜单 0.84 - 私有榜单 0.84

Pipeline Overview

流程概述。点击 此处 查看全尺寸图片。

模型

ROI 头骨裁剪

没什么花哨的,模型是一个简单的 3D-Unet,使用网上找到的一些开源数据进行训练。任务相当简单,模型适用于所有方向。这使得整个数据集更加统一。

血管分割

任务与头骨分割非常相似,但难得多。该模型仅支持轴状面数据,并且需要一些技巧才能实现良好的性能:

  • 位置编码,用于向 CNN 提供左/右信息
  • Mask dilation + dice 用于对抗类别不平衡

该模型仅用于采样好的负样本喂给 2D 模型。最初的目标也是训练一个血管裁剪分类模型 —— 但这种方法表现相当差。

2D 分类

主要要点

大部分工作都是在这里完成的。我们通过使用巧妙采样的帧训练, heavily optimized 2D-CNN 模型。

使用的架构是 coatnet_rmlp_2_rw_384maxvit_rmlp_base_rw_384。相对位置编码 MLP(rmlp) 帮助很大,因为位置信息对于区分 13 个类别非常重要。此外,使用了自定义 pooling 以在 logits 层之前不丢失左/右信息。

该模型适用于冠状面和轴状面数据:矢状面堆栈在推理时转换为轴状面,训练时忽略。

更多想法

以下每一项大约带来了 +0.01 的 CV 提升

  • 使用固定比例进一步裁剪 ROI,将头骨限制在实际包含动脉瘤的区域。
  • 强烈的 ShiftScaleRotate 和颜色增强
  • Cutmix (或 Mixup) 防止过拟合
  • 水平翻转增强,同时翻转目标
  • 使用 2 个相邻帧作为 3 个通道
  • 使用 SliceSpacing 信息,如果间距小则采样更远的相邻帧。
  • Ian 手动优化了定位器标签以获得分割掩码。这允许更准确的正样本帧采样

其他对 CV 帮助不大但为了鲁棒性保留的内容

  • 来自 OpenNeuro.org 的外部数据
  • 轴状面 -> 冠状面 增强

序列模型

使用 2D 模型对所有帧的预测进行简单的 max 聚合已经给出了 0.87 CV。添加自定义序列模型进一步将结果提高到 0.88。这也使得集成变得容易,3 模型集成达到了 0.895 CV

为了减少推理时间,最大帧数限制为取决于模态的固定数量。此外,对于大小 > 64 的堆栈仅推理一半帧,> 128 的堆栈仅推理四分之一。模型使用 3 个相邻帧作为输入,这意味着信息无论如何都不会丢失。

结语

流程中使用 2 个模型而不是 3 个将使运行时间为 7 小时,这可能足以融合一个 3D 流程。我们在此类方法上也取得了不错的结果 (LB 0.79)。

然而 CV 改进很小 (<0.01),由于提交运行时间不稳定且我们的 CV 相比 LB 高得令人担忧,我们决定不再在此投入更多时间。

感谢阅读!

同比赛其他方案