返回列表

1st place solution

508. HuBMAP + HPA - Hacking the Human Body | hubmap-organ-segmentation

开始: 2022-06-22 结束: 2022-09-22 医学影像分析 数据算法赛
第一名解决方案

第一名解决方案

作者:opusen
发布时间:2022年9月29日

首先,我要感谢 Kaggle 和竞赛主办方举办了如此精彩的比赛。
我也要感谢 MMSegmentation 的开发者。MMSegmentation 真的是非常好用且实用的工具。同样非常感谢 @ayuraj,他在 MMSegmentation 中集成了 Weight & Biases 的钩子,这对管理训练历史帮助极大。

在比赛中,我从 @hengck23 那里学到了很多。非常感谢您与我们分享知识:)

概述

我使用了以下方法:

  • 端到端 MMSegmentation(经过定制)
  • SegFormers 模型集成
  • 使用组归一化并在 Colab 中以 batch_size=1 进行训练
  • 从头开始手工标注肺部数据
  • 外部数据集和伪标签

数据集

使用的数据集:

  • HPA 图像 [351 张]
  • 经 H&E 或 PAS 染色的 HPA 图像 [351 张图像 x 4 种染色模式]
  • 外部脾脏数据 [39 张图像 + 39 张图像 x 4 种染色模式] *源自单张图像
  • 外部肺部数据 [73 张图像] *源自单张图像

(肺部) 当我注意到不稳定的结果源于肺部预测时,我想手工标注可能比通过低阈值预测肺部更好,因为低阈值可能导致不稳定且不确定的结果。所以我研究了肺泡的样子,并从头开始手工标注肺部图像。由于没有任何关于如何标注肺泡的信息,我制作了大约 7 个标注集,在其中逐渐标注潜在的肺泡并探测哪个最好。然后我使用伪标签和最佳阈值创建了一个外部数据集。在使用它进行训练后,肺部的最佳阈值增加到了 0.60,这带来了有史以来最好的结果。我猜想良好的建模优于手工标注,因为有些人在公开/私有榜单上获得了 0.11/0.22 的分数。

(脾脏) 对外部数据集使用了伪标签。

(前列腺/大肠) 对 HPA 数据集使用了伪标签。

我感觉我的模型对 HPA 数据集欠拟合,因为这些数据集在颜色方面没有侧重于 HPA 数据集。使用了 torchstain 作为染色工具。

模型

以下模型的集成:

  • 1x SegFormer mit-b3, 图像尺寸: 1024x1024
  • 2x SegFormer mit-b4, 图像尺寸: 960x960
  • 1x SegFormer mit-b5, 图像尺寸: 928x928
  • 2x SegFormer mit-b5, 图像尺寸: 960x960

部分模型使用了不同的预训练模型、种子和额外的染色数据集。所有模型都是 SegFormer 的原因是我只从 MMSegmentation 中选择模型,而且效果很好。
*最佳单模型是 mit-b4(私有: 0.82821)。

训练

我使用了 Google Colab。由于 GPU 资源有限,我使用组归一化以 batch_size=1 训练 SegFormer。在我的实验中,这在 CV 和 LB 上都优于使用批归一化的 batch_size=4。我选择 2 类分割而不是 6 类分割,因为它始终显示出更好的结果,尤其是在肺部。在 6 类中,肺部区域往往会收缩,即使面积与 2 类相当,LB 肺部分数也更差。

设置:

  • 归一化:解码器使用组归一化 (num_groups=32)
  • 类别数 (num_classes):2
  • 解码损失 (loss_decode):CE:LovaszLoss = 1:3
  • 步数:45000
  • 优化:AdamW,lr=0.00006

数据增强:

  • 数据集图像尺寸:2000x2000
  • 对前列腺进行缩小
  • 裁剪/翻转/随机旋转90/色调饱和度亮度/随机Gamma/随机亮度
  • (mmseg) 调整大小至 (480~1600, 480~1600) * 例如 (480, 1600), (1024,1024), (1500,480)
  • (mmseg) 随机裁剪 (crop_size=模型输入尺寸)

推理

同比赛其他方案