625. RSNA 2024 Lumbar Spine Degenerative Classification | rsna-2024-lumbar-spine-degenerative-classification
首先,我们要感谢 Kaggle 和 RSNA 举办这场精彩的比赛。
我们的解决方案是 1 阶段和 2 阶段模型的集成。
我非常感谢我的队友,我从他们身上学到了很多。
2 阶段方法,组件包括:
关键点回归(2D 和 3D)
矢状面 (Sagittal):
轴状面 (Axial):
使用的骨干网络(由 ITK 搜索得出):
在特征空间融合 3 个视图
使用的关键点模型是 keypoint-sag-2d 和 keypoint-axial-3d。
对于矢状面,我们对每个序列采样 10 个切片,在 T2 上裁剪中心 5 个切片,在 T1 上每个层级左侧裁剪 5 个切片,右侧裁剪 5 个切片。
对于轴状面,我们基于点的 Z 坐标对每个层级采样 5 个切片。
最终的输入尺寸为:x -> (bs, 5_cond, 5_level, 5, crop_h, crop_w)。
模型架构如下:
# train
y, axial_embs = self.axial_model(axial_x) # bs,
ys2, sag_embs = self.sag_model(x)
# sag_embs: bs, 5_cond, 1_level, 128
sag_embs = sag_embs.permute(0, 2, 1, 3).reshape(b, 1, -1) # bs, 1, 5*128
embs = torch.cat((sag_embs, axial_embs), dim=-1)
ys = self.out_linear(embs).reshape(b, 1, 5, 3) # bs, 1_level, 5_cond, 3
ys = ys.permute(0, 2, 1, 3) # # bs, 5_cond, 1_level, 3
ys = ys + ys2
stage2_model1 的缺陷在于它在矢状面上使用 2D 关键点,并且在轴状面上处理多个序列的效果不佳。
使用的关键点模型是 keypoint-sag-3d 和 keypoint-axial-level-cls。
我们基于 XYZ 点使用 (z_imgs, crop_h, crop_w) 裁剪 3D ROI 图像,其中 z_imgs 可以是 3 或 5;我们发现 3 的效果最好。
对于轴状面,可能会有多个检测结果,但我们只使用了置信度最高的一个(不一定是最优的)。
stage2_model1 + stage2_model2 配合多种骨干网络,TTA:矢状面水平翻转,轴状面垂直翻转
结果: CV: 0.373, LB: 0.35, PB: 0.40
骨干网络:
团队提交 Notebook 地址:
https://www.kaggle.com/code/hengck23/lhw-v24-ensemble-add-heng
团队提交后 Notebook 地址:
https://www.kaggle.com/code/hengck23/post-lhw-v24-ensemble-add-heng
推理 Notebook:
训练代码: