返回列表

1st place solution

512. Google Universal Image Embedding | google-universal-image-embedding

开始: 2022-07-11 结束: 2022-10-10 计算机视觉 数据算法赛
第一名解决方案

第一名解决方案

作者: Shihao Shao (louieshao) | 比赛排名: 第1名 | 发布时间: 2022-10-11

比赛现在已经结束了,我们很高兴能在公开排行榜和私人排行榜上都获得第一名。我们非常感谢主办方 @andrefaraujo 举办的精彩比赛,以及 Kaggle 工作人员 @maggiemd 提供的支持。分享精彩想法和资源的参赛者也给了我很多帮助。我可能忘记提及一些人,但我想说你们做得真的很棒!

太长不看版 (TL;DR)

在这里,我不仅会分享我们如何获得最终的性能表现,还会回顾整个比赛过程,按照时间顺序讲述我们面临的困难以及选择克服这些困难的方法。我希望这能帮助大家更好地学习在未来比赛中可能面临的实际问题以及应对这些问题的替代方法。

开始阶段 - 比赛的第一个月

老实说,我们曾经对是否参加这场比赛感到犹豫。对于我们两人来说,看到一场没有提供数据集的比赛是非常罕见的。但我们最终将其视为我们要克服的一项挑战,并决定加入(幸运的是我们这样做了!)。

在开始时,@khabel@skyyy93 在排行榜上遥遥领先于其他人,这让我们迫切想知道他们究竟朝着什么方向前进,才能导致如此巨大的分数差距。我们决定仔细查看讨论区,寻找一些技巧或提示以达到更高的分数。https://www.kaggle.com/competitions/google-universal-image-embedding/discussion/340043 和一个已删除的帖子声称仅使用预训练模型就能获得高分,甚至达到 0.47+,但没有说明预训练权重的实际名称。同时,我们发现像 https://www.kaggle.com/competitions/google-universal-image-embedding/discussion/338505 这样的帖子表明他们在训练或微调后的表现很差。所以第一个想法是假设 @khabel 和其他排名较高的参赛者可能只是使用了预训练权重,而没有进行训练或微调。所以我们决定首先收集强大的预训练权重。从 https://www.kaggle.com/competitions/google-universal-image-embedding/discussion/340043 可以看出,更大的数据集会带来更好的分数,因为在 ImageNet-22K 上训练的权重优于在 1K 上训练的权重。ImageNet-22K 的最佳权重得分为 0.405,所以 0.47+ 的权重应该是在更大的数据集上训练的。在超大数据集上搜索预训练权重时,我们发现了一项出色的工作 CLIP https://arxiv.org/abs/2103.00020。对于复现代码,https://github.com/mlfoundations/open_clip 被发现是一个很好的起点。我们尝试了 VIT-L 几乎所有可用的权重,发现最佳性能来自 Laion-400M 31ep,得分为 0.499。我们以为我们几乎找到了最强大的预训练权重,但这与 @khabel 仍有大约 0.050 的差距。考虑到像 https://www.kaggle.com/code/moeinshariatnia/random-vs-avg-max-dim-reduction 这样的笔记本和讨论,我们想看看是否有一些技巧可以帮忙。我们发现随机投影对于像在 ImageNet-1K 上训练的 efficientnet-b0 这样的弱权重效果更好,但会损害像 VIT-L Laion-400M 31ep 这样的强权重的性能。其余的方法如 PCA、t-SNE 在我们的实验中不起作用。我们确实发现了一些看似稳健的方法可以在不训练的情况下提高分数,简单地使用嵌入向量中较少的值来计算平均值,可以在公开和私人排行榜上提升约 0.010。我们猜测原因是计算大量嵌入值的平均值会让真实特征消失。然而,这似乎是我们能做到的最好结果,在不训练和微调的情况下达到约 0.510。我们需要更进一步,从那时起我们相信 @khabel 肯定训练了某些东西。

深入训练

训练并不容易,不仅因为许多参赛者声称训练后得分低得多,而且这场比赛的严格规则禁止人们使用没有商业使用保证的数据集。我们尽了最大努力,查阅了

同比赛其他方案