返回列表

26th Place Solution

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

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

第26名解决方案

作者:Shashwat Raman

等级:专家级

发布日期:2023年8月10日

比赛排名:第26名

得票数:22票

首先,我要感谢组织者和Kaggle举办了这场精彩的比赛。这是一次非常棒的学习经历,我学到了很多东西。祝贺所有获奖者!

总结

  • 数据:假彩色图像和软标签(个体标签的平均值)
  • 图像尺寸:512
  • 交叉验证:按时间排序后将训练集分为5折
  • 集成方法:3个模型的集成
  • 编码器:efficientnet-b5, regnety_120, seresnextaa101d_32x8d
  • 解码器:Unet

数据

我使用假彩色图像进行训练并使用了软标签。与训练像素掩码相比,这大大提高了我的CV和LB分数。我认为这是本次比赛最重要的技巧之一。令我惊讶的是,模型能够捕捉到像素概率所描绘的不确定性。由于验证集没有单独的标签,因此我没有将其包含在训练中。我将其用作保留集。

交叉验证

由于训练集中存在许多重复项,这有点棘手。因此,为了构建稳健的本地验证,我首先按照train.json中提供的日期和时间对训练集进行排序,然后在不打乱顺序的情况下将排序后的数据分为5折。之后,我在训练期间裁剪了有效的折叠,如下所示:

if self.fold == 0:
    df = df[:-2000]
elif self.fold == 4:
    df = df[2000:]
else:
    df = df[1000:-1000]

CV分数与排行榜分数完全无关,但最终我仍然相信我的CV来选择提交结果。

模型

我尝试了许多编码器,但最终使用了efficientnet-b5、regnety_120和seresnextaa101d_32x8d,因为它们给出了最佳的CV分数。所有编码器都只使用了Unet。

训练

  • 轮数:30
  • 学习率:3e-4到3e-3之间(不同编码器不同)
  • 优化器:Adam
  • 调度器:CosineAnnealingLR(我保存了最佳有效折叠分数的轮次)
  • 损失函数:BCE损失(因为我使用的是软标签训练)
  • 增强:RandomResizedCrop、ShiftScaleRotate(HFlip、VFlip和RandomRotate90对我也无效,但我没想到这可能是由于掩码中的某些问题)

减少训练时间的技巧

为了减少训练时间,我尝试在训练过程中移除一些图像。移除所有非凝结尾图像会降低本地CV分数。然后我用我最好的模型之一对训练集进行预测,并创建一个列,记录模型对图像预测的最高像素概率。然后我移除了最大像素概率低于0.05且没有凝结尾的图像。

df = df[~((df['max_prob_pred'] < 0.05) & (df['contrail'] == 0))]

使用这个方法,我成功移除了约4000张训练图像,大大减少了训练时间,且完全没有影响CV分数。

集成

我使用我的CV折叠来获得最终模型的集成权重。加权集成:0.3172[eb5] + 0.2928[regty120] + 0.39[sr101]。

对于最终预测,首先我将不同模型分别对每个折叠进行集成。然后我使用从验证集获得的阈值将5折预测转换为二元预测。从第0到第4折的阈值分别为0.49、0.47、0.47、0.48、0.46。然后我取5折的平均值,并使用0.3作为最终阈值(这是我从验证保留集中获得的)。

我刚和队友组队后,他的账户就被删除了。我不知道他是否做错了什么。无论如何,我祝他未来好运。我真的希望验证后我不会从排行榜上被移除。让我们看看会发生什么 ☺️

同比赛其他方案