返回列表

3rd silver place key points

349. Understanding Clouds from Satellite Images | understanding_cloud_organization

开始: 2019-08-16 结束: 2019-11-18 气象预报 数据算法赛
第3名银牌方案要点

第3名银牌方案要点

作者: Kha Vo
发布时间: 2019-11-19

首先,我要感谢马克斯·普朗克研究所和 Kaggle 主办这场有趣的比赛。

我想分享我获得第3名(银牌)解决方案的一些关键点 :-) 听起来很酷对吧?(好吧,我喜欢充分利用这枚顶级银牌,原谅我 :P)

1) Cutmix 数据增强

自然而然地想到,Cutmix 是应对本次比赛的最佳方式。我们可以剪切一张图像的一部分并将其粘贴到另一张图像上。这个想法最初是我脑海中自发产生的,当时并不知道学术界已经存在相关研究,后来我发现确实有一篇关于此的官方论文。

Cutmix 示意图

如何在代码中实现它?我搜索了一些增强库,但发现很难按照我的方式灵活编码。所以我决定手动实现。

Cutmix 代码

做不做 Cutmix 的区别仅在于数据生成器中的 __getitem__ 部分多了一小段代码。在这里,indexes_augment 是从训练数据中随机选取的索引,w_cutmixh_cutmix 是裁剪的宽度和高度。所以我只需获取原始绘制图像(X)中宽度和高度的随机起始位置,并将另一张图像(Xc)的一部分插入其中。

Cutmix 使 LB 和 CV 分数都提升了 0.004。

2) 伪标签

伪标签只有在我们正确选择优质样本以及正确的样本数量时才有效。我通过计算每个预测验证图像的 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 与相应的分数合理,我就可以手动决定 bottopwnb_samples。例如,bot=.1top=.7w=1nb_samples=1000(对应的 dice=0.77xx),这意味着 5546 张训练图像中最自信的 1000 个预测可以拥有那么好的 dice 分数。然后我可以从测试预测中选取相同比例的图像,即 (1000/5546*3698)。

伪标签在 CV 和 LB 上都提升了约 0.003。

3) 估算 Private LB 分布并决定信任 CV

首先,我基于这个话题对 Private LB 进行了测试。

同比赛其他方案