512. Google Universal Image Embedding | google-universal-image-embedding
首先,我们要感谢 Kaggle / Google 举办了一场非常有趣的比赛。同时也要感谢我的队友 @mightyrains 的出色合作与团队精神。
我们的解决方案由运行在 Kaggle TPU 上的 Tensorflow 训练流程组成。由于 Kaggle 有 20 小时的 TPU 使用限制,我们还额外使用了 Colab Pro。事实证明,这是一个进行大量实验的绝佳组合。
我们使用 CLIP-ViT-H-14 模型作为骨干网络。作为投影层,我们使用了一个包含 64 个密集单元的线性层,并使用 ArcFace(s = 30, m = 0.30)进行训练。数据增强包括常规操作:水平/垂直翻转、旋转以及随机调整饱和度、亮度、色调和对比度。
大多数训练运行包含 30 到 40 个 Epoch,每个 Epoch 包含 20% 的训练数据。
在数据集方面,核心由 Products10K 数据和 Google Landmarks 数据组成。在我们的最终解决方案中,我们添加了一些小型数据集,例如 Food Recognition、Stanford Cars 数据集和 Best Artworks of All Time。查看 Private LB(私有排行榜)分数,Products10K 和 Landmarks 本身似乎已经给出了非常好的结果。根据训练运行的不同,额外的数据集可能会使结果略有增加或减少。这可能是由于每次训练运行中的随机性造成的。
对于 Tensorflow CLIP VIT H-14 模型,我们最终遇到了一个问题,即提交后会因计算资源使用问题而报错。我们通过从投影层导出权重并将其导入到我们用于推理和提交的类似 PyTorch 模型设置中,以简单的方式解决了这个问题。
我们曾考虑在 PyTorch 中建立完整的训练流程,但由于我们可以轻松使用现有的 Tensorflow/Pytorch 组合,我们决定保持原样。
我们选定的解决方案在 Private LB 上得分为 0.653。我们在 Private LB 上的最佳解决方案得分为 0.658。
总的来说,回顾这场非常激动人心且充满挑战的比赛,我们非常享受其中。