567. Google Research - Identify Contrails to Reduce Global Warming | google-research-identify-contrails-reduce-global-warming
首先,我要感谢组织者和Kaggle举办了这场精彩的比赛。这是一次非常棒的学习经历,我学到了很多东西。祝贺所有获奖者!
我使用假彩色图像进行训练并使用了软标签。与训练像素掩码相比,这大大提高了我的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。
为了减少训练时间,我尝试在训练过程中移除一些图像。移除所有非凝结尾图像会降低本地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作为最终阈值(这是我从验证保留集中获得的)。
我刚和队友组队后,他的账户就被删除了。我不知道他是否做错了什么。无论如何,我祝他未来好运。我真的希望验证后我不会从排行榜上被移除。让我们看看会发生什么 ☺️