返回列表

20th Place Solution - Two stage model

434. Human Protein Atlas - Single Cell Classification | hpa-single-cell-image-classification

开始: 2021-01-26 结束: 2021-05-11 生命科学 数据算法赛
第20名方案 - 两阶段模型

第20名方案 - 两阶段模型

作者:Da Yu
发布时间:2021-05-17

感谢比赛主办方举办了如此有趣的比赛。我在比赛中获得了很多乐趣,也学到了很多东西。感谢各位HPA参赛者分享的想法和方案。祝贺本次比赛的获胜者们!

简介

像大多数参赛者一样,我使用了组织者提供的分割算法来分割细胞。数据提供了较弱的正标签,但有大量的强负标签。对于负类来说,情况正好相反(即负标签强,正标签弱)。因此,我训练了一个两阶段模型,第一阶段基于图像级标签,第二阶段基于第一阶段预测的细胞级标签。

第一阶段 (Stage 1)

由6个EfficientNet-b0模型组成的集成模型,用于预测图像级标签。这些模型使用不同的随机种子进行训练,但都使用了完整的数据集。

数据增强

  • 随机翻转
  • 随机旋转90度
  • 随机亮度 (在每个RGBY通道中独立进行)
  • 随机裁剪

训练设置

  • 使用了稍作修改的类别平衡Focal Loss。我没有为每个类别分配权重,而是假设这是一个一对多分类,为每个类别计算了不同的alpha值。
  • 带预热的余弦退火
  • 学习率:1e-2
  • 预热轮数:10个epoch
  • 总轮数:90个epoch
  • 优化器:AdamW,权重衰减为1e-3

线上得分

第一阶段模型在8倍TTA(测试时增强)下的LB分数为:Private 0.47455,Public 0.48021。

第二阶段 (Stage 2)

在第二阶段,我对组织者提供的图像级标签做了两个假设:

  1. 正标签表示图像中至少有一个细胞包含目标类别。
  2. 负标签表示图像中的所有细胞都不包含目标类别。

因此,我使用第一阶段的集成模型来预测单个细胞的标签,但我只保留那些真实图像标签为正的类别的细胞级标签。对于那些真实图像标签为负的类别,其细胞标签被设置为0。

对于负类,我预测 negative_prob = 1 - max(其他类别)。我从额外的HPA数据集中下载了1123张负样本图像,并为其分配了值为1的负类标签。

然后,我使用以下设置训练了这个第二阶段模型。

数据增强

  • 随机裁剪掉高度和宽度的10%
  • 随机翻转
  • 随机旋转90度
  • 随机亮度 (在每个RGBY通道中独立进行)
  • 以50%的概率,将红色、蓝色和黄色通道乘以一个0到1之间的随机数。这是基于观察到某些重复图像具有相同的结构但不同通道之间的强度不同而提出的。
  • 将图像裁剪或填充至224x224

超参数

我没有时间尝试不同的超参数,但我解决方案中使用的设置如下:

  • 带预热的余弦退火
  • 学习率:1e-3
  • 预热轮数:10个epoch,总轮数:30个epoch
  • 优化器:AdamW,权重衰减为1e-4(这非常重要,因为如果没有权重衰减,细胞级模型在使用混合精度训练时会非常快地过拟合并出现NaN值)。

这个模型的训练成本非常高,因为我有超过500,000个样本。在最新一代GPU上,一个epoch需要6分钟。

第二阶段训练结果

第二阶段训练使我的最佳方案分数提高了约0.3,根据我在第一阶段模型中尝试的不同方法,其他情况的提升范围在0.1到0.8之间。我最好的提交分数为:Private 0.50626,Public 0.50738。

额外数据

我下载了组织者提供的额外公共数据集,但我只选择了那些基于第一阶段模型验证集的图像级mAP分数低于0.8的类别。我还下载了1123张负样本(无目标类别)图像。

模型选择

我注意到EfficientNet-b0在第一阶段表现最好。我尝试过的其他模型包括MobileNet v3、ResNet-50和ResNet-101。更大的EfficientNet模型(我尝试了b1和b2)表现不如b0。