499. UW-Madison GI Tract Image Segmentation | uw-madison-gi-tract-image-segmentation
首先,我要感谢主办方举办了这样一场精彩的比赛。
最终提交的是由6个模型组成的集成模型:三个2.5D模型和三个3D模型。该集成模型在Private LB上获得了0.880的分数。有趣的是,如果没有加入最后一个模型,Private LB分数本可以达到0.883。
采用标准的按病例分组的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模型均来自 smp 的Unet++,我还为其实现了深度监督训练(来自Unet++论文)。
每个模型都有5折,没有使用TTA(也许全量数据训练 + TTA 更好且更省时)。