返回列表

6th place solution (CV: 0.7069 / Public LB: 0.706 / Private LB: 0.713)

567. Google Research - Identify Contrails to Reduce Global Warming | google-research-identify-contrails-reduce-global-warming

开始: 2023-05-10 结束: 2023-08-09 双碳与可持续发展 数据算法赛

第6名解决方案(CV:0.7069 / 公开榜:0.706 / 私有榜:0.713)

首先,我们要感谢竞赛的组织者和Kaggle团队举办这次竞赛,以及所有慷慨分享知识的参与者。

总结

  • 两阶段流程:分类和分割
  • 集成2.5D模型(使用5或7帧)和11通道输入的2D模型
  • 使用个体标签的软标签
  • 百分位阈值

流程

这种流程在以往的语义分割竞赛中经常被使用。该流程的优势在于创建了两个模型:一个在正样本上训练,另一个在所有数据上训练,从而增强了集成效果。同时,它还可以通过将更多模型分配给经筛选确定存在掩码的图像来节省推理时间。

模型细节

通用设置

2.5D和2D模型都使用硬标签和软标签进行了训练。软标签的创建方式如下:

label = self.np_load(
    os.path.join("mask_individual.npy")
).astype(np.float32)
label = np.clip((label * 2).sum(-1) / label.shape[-1], 0, 1)

所有模型都使用train文件夹中的所有数据进行训练,并使用validation文件夹中的数据进行验证。

2.5D模型

我们使用了改进版的Vesuvius Challenge中使用的2.5D模型。主要修改如下:

  • 在所有分辨率的特征图上都应用3D CNN
  • 对于3D CNN的输出,提取对应目标帧的特征图并输入到UNet中
  • 在二分类模型中,将3D CNN应用于最小分辨率的特征图,并以相同方式输入到FC层

使用的骨干网络包括:resnetrs101、resnest101e、swin_base_patch4_window12、swinv2_base_window16、convnext_base、convnext_large等。输入帧设置为5或7帧,目标帧位于中间。模型输入分辨率为384或512。正样本模型使用`BCE+Dice*0.25`进行训练,所有数据模型使用`BCE`进行训练。此外,分类模型、所有数据分割模型和正样本分割模型使用了不同的增强方法(可能未优化,因此不太合适)。

# 分类
albu.Flip(p=0.5),
albu.RandomRotate90(p=0.5),
albu.ShiftScaleRotate(p=0.5, scale_limit=0.3, shift_limit=0.1),
albu.GridDistortion(num_steps=5, distort_limit=0.3, p=0.5),
albu.CoarseDropout(max_height=16, max_width=16, fill_value=255, mask_fill_value=0, p=0.5,)

# 所有数据分割
albu.ShiftScaleRotate(p=0.5, scale_limit=0.3, shift_limit=0.1),

# 正样本分割
albu.Flip(p=0.25),
albu.RandomRotate90(p=0.25),
albu.ShiftScaleRotate(p=0.5, scale_limit=0.3, shift_limit=0.1, rotate_limit=0),
albu.Rotate(limit=45, p=0.25),
  • EMA(decay=0.998)

2D模型

对于2D模型,我们直接使用Segmenation Models Pytorch实现的Unet。使用的骨干网络包括:res2net50d、regnetz_d8、regnetz_d32和regnetz_e8。

特别值得注意的是,2D模型使用了11个通道,即band15 - band14、band14 - band11以及全部9个波段。使用这种输入在短周期(例如20-30周期)内表现不佳,但在长周期(具体为100周期)下,比使用假彩色输入获得更好的验证分数。

11通道模型还有一个有趣的点:它们的公开分数较差,但私有分数很好。我相信这是将我们推入获奖区的原因。

其他训练设置如下(所有数据分割模型和正样本分割模型共享):

  • 输入
    • 大小:384x384
    • 每个通道通过减去该通道的全局均值并除以其全局方差进行标准化
  • 损失函数:`0.9*BCE + 0.1*Dice`
  • 数据增强:
    albu.HorizontalFlip(p=0.5),
    albu.VerticalFlip(p=0.5),
    albu.ShiftScaleRotate(p=0.5, rotate_limit=90)
    albu.RandomResizedCrop(p: 1.0, scale=[0.875, 1.0], height=256, width=256)
  • EMA(decay=0.9999)

后处理

从推理耗时来看,整个测试集中空掩码的百分比与验证集大致相同(约30%)。因此,我们使用验证集来优化分类部分和分割部分的百分位阈值。结果,百分位阈值优于优化的固定阈值。

未奏效的方法

  • 伪标签・mean teacher
  • 2D预训练 -> 2.5D微调
    • 不稳定
  • 更多增强方法
  • mixup・cutmix・标签平滑
  • TTA
  • efficientnet

训练代码和推理笔记本

我们已经发布了最佳提交方案的训练代码和推理笔记本。

同比赛其他方案