返回列表

17th place solution

433. HuBMAP - Hacking the Kidney | hubmap-kidney-segmentation

开始: 2020-11-16 结束: 2021-05-10 医学影像分析 数据算法赛
第17名解决方案

第17名解决方案

作者:Maxwell | 比赛:HuBMAP - Kidney Segmentation | 排名:第17名

祝贺获奖者以及所有完成本次比赛的参与者。
比赛过程中出现了许多问题,而且比赛持续了六个月。我必须承认,坚持到最后对我来说是一个相当大的挑战。
我的排名并不是很高,但我还是想与大家分享我的经验。


图片分辨率不是很高,可能看不清细节,但我创建的模型如下图所示。
模型架构图

我想解释一下主要要点。

1. 切割图块

在比赛初期,我通过实验发现图像大小的差异(即原始裁剪尺寸与缩小后的图像尺寸)可能会影响分数。因此,我选择了几个足够大的图像尺寸以确保训练时有足够的批量大小,最终集成了两个模型,分别使用 352 x 4 和 512 x 2 的图像尺寸。
此外,参考了 @iafoss 的内核,我没有将黑白区域包含在训练图块中,因为这些区域的信息量很少。
如果我们简单地通过增强来偏移图像以生成图块,就需要对缺失区域进行某种插值(例如反射)。由于我的实验结果表明这并不是一个好主意,因此在从 WSI(全切片图像)中切割图块时,我将图像偏移了图块大小的四分之一。

2. 预处理 / 数据增强

图像简单地通过除以 255 进行归一化,然后我在 5 个折上进行模型训练,每个折包含 3 个 WSI。
我不了解私有 WSI 的情况,但至少有一些公开图像比训练 WSI 更暗,或者上面有某种污垢,所以我应用了非常强的数据增强,如下所示。

  • 水平/垂直翻转 (p=0.5)
  • 随机旋转90度 (p=0.5)
  • 旋转 (-40/+40, reflect101, p=0.5)
  • ShiftScaleRotate (缩放: -0.2/0.1, p=0.5)
  • OneOf (p=0.5)
    RandomBrightnessContrast (亮度: 0.5, 对比度: 0.1)
    HueSaturationValue (色调: +-20, 饱和度: +-100, 明度: +-80)
  • OneOf (p=0.5)
    Cutout (孔数: 100, 大小: 1/64, 白色 RGB)
    高斯噪声
  • OneOf (p=0.5)
    弹性变换
    网格畸变 (步数: 5, 极限: 0.3)
    光学畸变 (畸变: 0.5, 偏移: 0.0)

结果,我认为通过 WSI 进行 5 折交叉验证评估以及这种强数据增强,有助于本地 CV(交叉验证)和 LB(排行榜)之间建立稳定的相关性。

3. 训练

我的训练过程非常简单。
我使用 BCE(二元交叉熵)+ Adam 优化器来训练基于 ImageNet 预训练 EfficientNetB3 骨干的 U-Net。正如一些讨论中提到的,模型的复杂性似乎没有任何影响,这可能是因为这是一个相当简单的任务。我也尝试了一些损失函数,如 Focal loss 和 Combo loss,但没有明显的增益,这可能是因为我事先排除了黑白部分。此外,我不使用基于离散指标(如 Dice loss)的损失进行集成,因此当 Focal loss 没有带来增益时,我认为 BCE 对于这个项目来说已经足够了。
此外,像许多参与者一样,我在后半段使用了伪标签,我交替训练图像尺寸组合(模型管道图中的 A 组和 B 组)以避免过拟合。我使用在 A 组训练的模型的伪标签来训练 B 组,以避免模型过度依赖公开数据。然而,由于伪标签在私有分数中几乎毫无意义,我认为这几乎是一次毫无意义的尝试。
(我在比赛结束时使用了 d48 手工标签,但我自己没有做任何手工标注。我认为 d48 手工标签实际上对提高私有分数没有任何贡献。)

下图显示了本地 CV 和公开 LB 之间的相关性,由于公开 LB 的增量是 0.001,我认为实际相关性比图表中显示的要大。有三个集群,从最下面的开始依次是:完全没有伪标签、没有 d48 手工标签的伪标签、基于 d48 手工标签的伪标签。
CV与LB相关性图

4-5. 预测 + 拼接预测图块

我认为预测方法和你们许多人一样。

  • TTA(测试时增强):原始、水平
同比赛其他方案