返回列表

1st place solution

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

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

第一名解决方案

作者:🐢 Jun Koda (Kaggle Grandmaster)

发布时间:2023年8月10日 | 最后更新:2023年8月20日

votes: 164票 | 排名: 第1名

我感谢组织者和Kaggle举办了这场有趣的比赛。同时,我也感谢许多Kaggle用户分享了以往比赛的解决方案,没有这些分享,我无法在分割任务上竞争。

概述

  • 使用MaxViT编码器构建U-Net模型
  • 输入为标准ASH色彩图像
  • 目标y为软标签:各掩码的平均值
  • BCE(二元交叉熵)损失函数
  • U-Net训练采用对称标签y_sym(标签偏移0.5像素)
  • 平移-缩放-旋转增强
  • 额外的微小卷积层用于将y_sym映射到y

旋转增强

增强在该竞赛中极其重要,可有效抑制过拟合并延长训练周期。使用旋转增强后,我能训练40-50个epoch,而无增强时仅能训练10-20个epoch。测试时增强(TTA)同样效果显著,可免费提升约0.006的分数。

这是基础操作,但在此竞赛中不能按常规方式使用,因为标签相对于凝结尾迹存在0.5像素的右下偏移。随机旋转增强会使标签产生随机方向的偏移,导致模型无法学习正确的右下对齐真实标签。

发现0.5像素偏移

当我发现使用翻转和rot90(90°倍数旋转)增强时分数反而下降,感到非常困惑。在物理学中,系统具有何种对称性是需要首要考虑的因素。虽然西风或科里奥利力可能导致物理过程在翻转或旋转下不对称,但我无法相信这些因素会影响凝结尾迹检测。我可视化了一个无增强训练的模型预测结果,并将其应用于180°旋转的输入图像,以探究增强失效的原因。

从上到下的蓝-绿-红条纹模式分别表示假阴性、真阳性和假阳性,这意味着旋转后的标签相对于预测标签向上偏移;也就是说,原始标签相对于凝结尾迹向下偏移。左右方向也观察到了相同现象。

如果标签向左上偏移0.5像素(上图右面板),则旋转后的标签在凝结尾迹-标签偏移方面与原始标签保持一致。

  • 首先将标签偏移0.5像素生成y_sym
  • y_sym尺寸为512×512,通过双线性插值从y的偏移规则网格采样得到
  • U-Net使用y_sym进行训练
  • 额外的5×5小卷积(步长2)用于学习从y_sym到右下对齐y的映射,使用5%无随机增强的数据进行训练(注意y不能增强)
  • 推理时,对8种rot90和翻转TTA模式下的y_sym取平均,然后应用conv5x5卷积

增强配置如下:

import albumentations as A

A.Compose([
    A.RandomRotate90(p=1),
    A.HorizontalFlip(p=0.5),
    A.ShiftScaleRotate(rotate_limit=30, scale_limit=0.2)
])

详细实现请参考我的公开笔记本:https://www.kaggle.com/junkoda/base-unet-model-for-the-1st-place

模型

最终预测是两个模型的加权平均(阈值约0.45)。我使用验证集调整了阈值和权重。两个模型均使用maxvit_tiny_tf_512.in1k作为编码器的U-Net,但一个使用单时刻t=4,另一个使用四个时刻t=1-4。输入图像尺寸均为1024×1024。

单时刻模型

  • 将输入图像上采样至1024×1024
  • 舍弃最后的上采样解码层,输出512×512

四面板模型

为了利用时间信息,我尝试了3D ResNet和ConvLSTM,但完全无法使其工作。唯一可行的方法是将t=1,2,3,4的四个512×512图像打包成一个1024×1024图像,希望MaxViT的自注意力机制能关注不同时刻。

在U-Net中,我只将四分之一特征(H/2, W/2)传入解码器,对应t=4的四分之一区域。其余部分与单时刻模型相同。在空间方向拼接图像在Kaggle中偶有出现,我记得CPMP在G2Net黑洞合并竞赛中的解决方案[链接],他将3个探测器数据水平堆叠而非作为3个通道。

训练细节:

  • 使用10折中的5折进行训练,用out-of-fold监控验证损失
  • 0.5个epoch的线性预热至学习率8e-4,随后余弦退火
  • 批量大小4 × 梯度累积2
  • AdamW优化器,weight_decay = 0.01
  • 训练35或40个epoch
模型 输入尺寸 CV Public Private
单时刻 512 0.697 0.707 0.712
单时刻 1024 0.703 0.719 0.716
四面板 1024 0.704 0.719 0.722
集成 - 0.706 0.725 0.724

所有分数均为5折×8次TTA平均的结果。

未能实现的技术

  • 未使用伪标签。早期尝试时单模型分数提升显著,但5折平均后收益不再突出
  • 无法训练更大模型。尝试了MaxViT small/base等多种模型,但改进效果不明确。转而选择增大输入图像尺寸,此局限应归因于我的经验不足
  • 仅使用含正样本的数据进行模型评估(因训练时间减半)。但实际预测时无法采用此方法,因对负样本表现很差,且我的分类器不足以排除此类假阴性
  • 去除小掩码是分割竞赛的基本技巧,但此处即使去除1像素簇也不可行。曾尝试基于簇统计特征(大小、密度、最大密度等)去除假阳性簇,但U-Net的表现优于我的后处理

2023年8月20日更新:添加代码链接并进行英文润色

同比赛其他方案