返回列表

7th solution

596. SenNet + HOA - Hacking the Human Vasculature in 3D | blood-vessel-segmentation

开始: 2023-11-07 结束: 2024-02-06 医学影像分析 数据算法赛
第7名解决方案 - sakaku

第7名解决方案

作者:sakaku(Kaggle Grandmaster)
竞赛排名:第7名
发布时间:2024-02-10

首先,我要向Kaggle和比赛组织者表示感谢,感谢他们创建了如此引人入胜的比赛。尽管我相对较晚才加入竞赛,但多亏了@hengck23的深刻讨论、@yoyobar的 informative 视频以及社区内活跃的交流活动,我能够快速上手。

概述

我采用了混合模型方法,使用2.5D图像作为输入。该架构结合了2D Unet框架与3D卷积层。根据我的研究和社区见解,全3D模型似乎比2D模型能提供更好的结果。然而,由于3D模型的高计算成本,我选择在2D Unet结构中融入3D卷积,在效率和性能之间取得平衡。

数据准备

生成3D旋转切片

我通过3D旋转来增强数据集。该过程首先将图像组装成3D体积,然后旋转两个轴,并沿剩余轴提取切片。使用的旋转角度如下:

rotation_angles = [
    [10, 10], [10, -10], [-10, 10], [-10, -10],
    [30, 30], [30, -30], [-30, 30], [-30, -30],
    [45, 45], [45, -45], [-45, 45], [-45, -45]
]

旋转后,部分切片的黑色背景区域增加。为保持数据质量,我只保留那些目标分割存在且黑色背景面积小于切片面积50%的切片。

旋转数据样本

旋转数据样本

伪标签

伪标签过程包括:

  • 使用上述技术为kidney1和kidney3生成额外切片
  • 使用增强后的数据集训练模型
  • 应用模型为kidney2生成伪标签,并以类似方式为其生成额外切片

模型

架构

模型架构

训练和推理细节

训练

训练设置如下:

  • 模型接收3通道2.5D图像作为输入,输出3通道预测
  • 基于每个肾脏的标准差对输入进行归一化
  • 使用组合损失函数:BCEWithLogitsLoss、DiceLoss和FocalLoss。分别计算三个通道的损失,中间通道赋予较高权重0.9
  • 优化器:AdamW
  • 学习率调度器:CosineAnnealingLR
  • 图像处理尺寸为1024x1024

推理

推理过程:

  • 使用单个模型进行预测
  • 模型在原始图像分辨率下运行
  • 与训练类似,输入为3通道2.5D图像,输出为3通道预测,主要关注中间通道
  • 基于每个肾脏的标准差对输入进行归一化
  • 沿x、y、z轴进行预测并平均结果
  • 测试时增强(TTA)包括水平翻转
  • 后处理步骤包括应用0.2阈值,然后进行3D闭合操作
同比赛其他方案