672. RSNA Intracranial Aneurysm Detection | rsna-intracranial-aneurysm-detection
感谢主办方再次举办这场精彩的竞赛。我们总是很享受参加 RSNA 竞赛 :)
我们的解决方案是一个 2.5D 流程,包含 4 个步骤:
灵感来自 Theo 两年前的第 2 名解决方案 —— 尽管该流程需要大量调整才能实现良好的性能。
成绩为 CV 0.895 - 公共榜单 0.84 - 私有榜单 0.84
流程概述。点击 此处 查看全尺寸图片。
没什么花哨的,模型是一个简单的 3D-Unet,使用网上找到的一些开源数据进行训练。任务相当简单,模型适用于所有方向。这使得整个数据集更加统一。
任务与头骨分割非常相似,但难得多。该模型仅支持轴状面数据,并且需要一些技巧才能实现良好的性能:
该模型仅用于采样好的负样本喂给 2D 模型。最初的目标也是训练一个血管裁剪分类模型 —— 但这种方法表现相当差。
大部分工作都是在这里完成的。我们通过使用巧妙采样的帧训练, heavily optimized 2D-CNN 模型。
使用的架构是 coatnet_rmlp_2_rw_384 和 maxvit_rmlp_base_rw_384。相对位置编码 MLP(rmlp) 帮助很大,因为位置信息对于区分 13 个类别非常重要。此外,使用了自定义 pooling 以在 logits 层之前不丢失左/右信息。
该模型适用于冠状面和轴状面数据:矢状面堆栈在推理时转换为轴状面,训练时忽略。
以下每一项大约带来了 +0.01 的 CV 提升
其他对 CV 帮助不大但为了鲁棒性保留的内容
使用 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 高得令人担忧,我们决定不再在此投入更多时间。
感谢阅读!