第 15 名解决方案 - RSNA 颅内动脉瘤检测
第 15 名解决方案
作者: TakafumiOuchi
比赛: RSNA 颅内动脉瘤检测 (RSNA Intracranial Aneurysm Detection)
发布日期: 2025-10-22
排名: 第 15 名
感谢 RSNA 和 Kaggle 团队举办如此有趣的比赛。
通过这次比赛,我学到了很多关于图像处理和人工智能的知识。
在这里,让我分享我的解决方案概述。
概述
- 两个 Transformer 的集成(14 个输出的加权平均:13 个位置 + 动脉瘤存在)
- 每个 Transformer 聚合由第一阶段 Faster R-CNN 提取的 RoI
- 模型 1:2.5D Faster R-CNN (3 通道输入,ResNet-50 骨干) + DeiT-Small Transformer
- 模型 2:2.5D Faster R-CNN (5 通道输入,ConvNeXtV2-Tiny 骨干) + DeiT-Small Transformer
策略
作为一名在综合医院工作的放射科医生,我想开发一个利用领域知识的模型。
通过探索性数据分析,我发现数据集包含轴向、冠状和矢状图像。
我还发现某些体积数据的方向余弦矩阵存在错误。
由于仅基于 DICOM 标签无法确定所有图像的方向,
我决定开发一个无论图像方向如何都能进行推理的模型。
数据管道
- 所有体积重采样到相同的体素间距(2.0 mm 切片厚度,0.5 mm 平面内像素间距)
- 通过简单的基于规则的方法裁剪和填充到 depth × 384 px × 384 px
- 训练:从每个体积中提取所有解剖平面(轴向、冠状、矢状)
- 推理:仅提取最精细的解剖平面(较少插值)
第一阶段:2.5D Faster R-CNN
通用训练策略
- Loss: torchvision Faster R-CNN 默认
- Optimizer: AdamW
- Scheduler: OneCycleLR
- Batch size: 32
- Sampling: 所有阳性切片 + 3–10 个阴性切片(训练期间逐渐增加)
- augmentation:
- 使用 albumentations 进行 Affine, ElasticTransform, GridDistortion, MotionBlur, RandomBrightnessContrast, GaussNoise
- 水平翻转并交换标签(左 ↔ 右)
模型 1
- 骨干:torchvision/fasterrcnn_resnet50_fpn_v2
- 输入:3 通道(中心切片 + 两个相邻切片,384 × 384 px)
- Ground truth: 动脉瘤中心周围 96 px (48 mm) 边界框
- Anchors: 5 种尺寸 (64, 80, 96, 112, 128 px) × 3 种纵横比 (0.5, 1.0, 2.0)
- Learning rate: 1e-4 → max 1e-3
模型 2
- 骨干:timm/convnextv2_tiny.fcmae_ft_in22k_in1k
- 输入:5 通道(中心切片 + 四个相邻切片,384 × 384 px)
- Ground truth: 动脉瘤中心周围 64 px (32 mm) 边界框
- Anchors: 3 种尺寸 (56, 64, 72 px) × 3 种纵横比 (0.8, 1.0, 1.2)
- Learning rate: 2e-5 → max 2e-4
第二阶段:DeiT-Small Transformer
- 预训练权重:timm/deit_small_patch16_224
- 流程:1024 维 Faster R-CNN RoI 特征 → 384 维 ViT 嵌入 → 3D 正弦位置编码(基于 Faster R-CNN 输出)
- 位置头:13 路多标签分类(带有标签平滑的 BCEWithLogitsLoss)
- 存在头:二分类(带有标签平滑的 BCEWithLogitsLoss)
- 损失 weighting: 1.0 × 位置损失 + 0.1 × 存在损失
- 两阶段训练:
- 冻结所有 ViT 骨干层
- 解冻所有权重
- Optimizer: AdamW
- Scheduler: OneCycleLR (stage 2)
- 分层学习率 (stage 2):
- 分类头:4e-4 (最大学习率)
- ViT 顶部 4 块:2e-4 (最大学习率)
- ViT 底部块:1e-4 (最大学习率)
- RoI 投影器:1e-4 (最大学习率)
- Batch size: 32
- 模型使用 20 倍增强的缓存 RoI 特征进行训练
分数
| 模型 |
公有榜 |
私有榜 |
| 模型 1 (仅 Faster R-CNN) * |
0.78602 |
0.77517 |
| 模型 2 (仅 Faster R-CNN) * |
0.78177 |
0.75816 |
| 模型 1 (Faster R-CNN + Transformer) |
0.80415 |
0.78740 |
| 模型 2 (Faster R-CNN + Transformer) |
0.80140 |
0.77955 |
| 最终集成 (加权平均) |
0.82494 |
0.80592 |
| *: 为了计算 14 个概率,我提取了每个位置的最大概率,并使用最大值作为动脉瘤存在概率。 |