返回列表

8th place solution

499. UW-Madison GI Tract Image Segmentation | uw-madison-gi-tract-image-segmentation

开始: 2022-04-14 结束: 2022-07-14 医学影像分析 数据算法赛
第8名解决方案

第8名解决方案

作者: Evgenii Kononenko
比赛排名: 第8名

首先,我要感谢主办方举办了这样一场精彩的比赛。

太长不看版 (TLDR)

最终提交的是由6个模型组成的集成模型:三个2.5D模型和三个3D模型。该集成模型在Private LB上获得了0.880的分数。有趣的是,如果没有加入最后一个模型,Private LB分数本可以达到0.883。

折划分 (Folding)

采用标准的按病例分组的5折交叉验证。为了增加模型的多样性,集成中的每个模型使用了不同的5折划分方式。

分割损失函数

Focal Loss + Dice Loss

验证指标

验证时仅使用Dice作为指标。我分别测量了有掩码图像的Dice、无掩码图像的Dice以及它们的加权平均值。这与LB有足够好的相关性,但并不完美。

优化器设置

使用AdamW,初始学习率为0.001,训练结束时约为0.0004。学习率通过余弦调度器衰减,完整训练大约25个epoch。

数据增强

albumentations.HorizontalFlip(p=0.5),

albumentations.ShiftScaleRotate(shift_limit=0.03, scale_limit=(0, 0.1), rotate_limit=20, 
                                                            border_mode=1, p=0.85), 

albumentations.OneOf([
                albumentations.ElasticTransform(alpha=1, sigma=50, alpha_affine=10, 
                                                      border_mode=1, p=0.5),
                albumentations.GridDistortion(num_steps=5, distort_limit=0.1, 
                                                    border_mode=1, p=0.5)
            ], p=0.2),

albumentations.OneOf([
                albumentations.GaussNoise(var_limit=(0.0001, 0.004), p=0.7),
                albumentations.Blur(blur_limit=3, p=0.3)
            ], p=0.5),      

albumentations.OneOf([
                albumentations.RandomBrightness(limit=0.05, p=1),
                albumentations.RandomContrast(limit=0.1, p=1)
            ], p=0.5)

但对于某些模型,使用了更强烈的增强方式。

数据处理

除了糟糕的 case_days(case7_day0, case81_day30)外,所有训练数据都用于训练。我还发现 case43_day26 和 case138_day0 中大肠的标注有问题,但决定保持原样。我使用了最小-最大数据归一化(用于2D和3D训练)。

训练策略

由于标注的特殊性(标注切片的开始和结束没有明确标准),我处理了两个问题:分割(预测掩码)和分类(预测切片是否有标注)。我以多任务的方式处理这个问题。我所有的模型都是Unet的变体(2D和3D都是),所以我简单地在Unet编码器的末端添加了一个分类头来判断是否存在标注。该头部使用额外的BCE损失。在比赛结束时,我还尝试不仅仅为每个切片预测一个值,而是为每个类别预测三个值,效果甚至更好。

另一个问题是在第一个和最后一个标注切片附近的标注模糊(缺少标注)问题。在我看来,这实际上并不模糊——它只是错误的(因为我们可以很容易地在这些切片上区分器官)。因此,对于我所有的模型(2D和3D),在计算分割损失时我忽略了这些错误的切片,但分类损失仍然正常计算。

模型详情

2.5D模型

所有2.5D模型均来自 smp 的Unet++,我还为其实现了深度监督训练(来自Unet++论文)。

每个模型都有5折,没有使用TTA(也许全量数据训练 + TTA 更好且更省时)。

  • 模型1: Unet++ + efficientnet-b8,分类头输出1个值,图像resize至 (384, 384)
    Public: 0.880 | Private: 0.868
  • 模型2: Unet++ + efficientnet-b4,分类头输出3个值,图像resize至 (384, 384)
    Public: 0.879 | Private: 0.872
  • 模型3: Unet++ + hrnet-w44
同比赛其他方案