349. Understanding Clouds from Satellite Images | understanding_cloud_organization
首先,我要感谢马克斯·普朗克研究所和 Kaggle 主办这场有趣的比赛。
我想分享我获得第3名(银牌)解决方案的一些关键点 :-) 听起来很酷对吧?(好吧,我喜欢充分利用这枚顶级银牌,原谅我 :P)
自然而然地想到,Cutmix 是应对本次比赛的最佳方式。我们可以剪切一张图像的一部分并将其粘贴到另一张图像上。这个想法最初是我脑海中自发产生的,当时并不知道学术界已经存在相关研究,后来我发现确实有一篇关于此的官方论文。
如何在代码中实现它?我搜索了一些增强库,但发现很难按照我的方式灵活编码。所以我决定手动实现。
做不做 Cutmix 的区别仅在于数据生成器中的 __getitem__ 部分多了一小段代码。在这里,indexes_augment 是从训练数据中随机选取的索引,w_cutmix 和 h_cutmix 是裁剪的宽度和高度。所以我只需获取原始绘制图像(X)中宽度和高度的随机起始位置,并将另一张图像(Xc)的一部分插入其中。
Cutmix 使 LB 和 CV 分数都提升了 0.004。
伪标签只有在我们正确选择优质样本以及正确的样本数量时才有效。我通过计算每个预测验证图像的 quality(质量)来评估:
quality = (概率 > top 的像素数量) + w * (概率 < bot 的像素数量)。
在这里,top 可以取 [.7, .75, .8, .85, .9] 中的值,bot 可以取 [.1, .15, .2, .25, .3] 中的值,而 w 是低值像素相对于高值像素的权重,可以取自 [.1, .5, 1, 2, 10] 等数值。
我获取所有验证数据的 quality,对其进行排名,从中选择 nb_samples 个最自信的样本,并查看分数。我搜索了整套验证数据,得到了类似这样的结果:
因此,只要 nb_samples 与相应的分数合理,我就可以手动决定 bot、top、w 和 nb_samples。例如,bot=.1、top=.7、w=1 和 nb_samples=1000(对应的 dice=0.77xx),这意味着 5546 张训练图像中最自信的 1000 个预测可以拥有那么好的 dice 分数。然后我可以从测试预测中选取相同比例的图像,即 (1000/5546*3698)。
伪标签在 CV 和 LB 上都提升了约 0.003。
首先,我基于这个话题对 Private LB 进行了测试。