567. Google Research - Identify Contrails to Reduce Global Warming | google-research-identify-contrails-reduce-global-warming
首先,我们要感谢竞赛的组织者和Kaggle团队举办这次竞赛,以及所有慷慨分享知识的参与者。

这种流程在以往的语义分割竞赛中经常被使用。该流程的优势在于创建了两个模型:一个在正样本上训练,另一个在所有数据上训练,从而增强了集成效果。同时,它还可以通过将更多模型分配给经筛选确定存在掩码的图像来节省推理时间。
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文件夹中的数据进行验证。
我们使用了改进版的Vesuvius Challenge中使用的2.5D模型。主要修改如下:
使用的骨干网络包括: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),
对于2D模型,我们直接使用Segmenation Models Pytorch实现的Unet。使用的骨干网络包括:res2net50d、regnetz_d8、regnetz_d32和regnetz_e8。
特别值得注意的是,2D模型使用了11个通道,即band15 - band14、band14 - band11以及全部9个波段。使用这种输入在短周期(例如20-30周期)内表现不佳,但在长周期(具体为100周期)下,比使用假彩色输入获得更好的验证分数。
11通道模型还有一个有趣的点:它们的公开分数较差,但私有分数很好。我相信这是将我们推入获奖区的原因。
其他训练设置如下(所有数据分割模型和正样本分割模型共享):
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)
从推理耗时来看,整个测试集中空掩码的百分比与验证集大致相同(约30%)。因此,我们使用验证集来优化分类部分和分割部分的百分位阈值。结果,百分位阈值优于优化的固定阈值。

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