458. Google Landmark Retrieval 2021 | landmark-retrieval-2021
感谢 Google 和 Kaggle 主办这次比赛,也感谢 clairvoyant.ai 对这项工作的支持。这非常有趣,也是一次充满学习经历的体验。
当然,由于硬件有限、数据集极其庞大以及时间限制,我的模型不像顶尖团队那样强大,但我非常愿意讨论一下后处理方法,该方法对索引和测试图像使用了软地标ID分配,并在 Private LB(私有排行榜)上带来了 +0.075 的提升。
在此之前,先简单介绍一下模型。
我使用 CurricularFace 损失函数,配合 Adam 优化器和梯度累积来训练我的模型。我使用了 5 个模型的集成。所有模型都是在完整的 GLDV2 数据集上训练的。
它们在没有任何后处理且仅对模型嵌入使用简单 KNN 时的得分如下:
| 模型 | 图像尺寸 | Public LB | Private LB |
|---|---|---|---|
| Effnet B4 | 512 | 0.322 | 0.342 |
| Effnet B6 | 384 | 0.331 | 0.349 |
| Effnet v2 - s | 512 | 0.325 | 0.351 |
| Effnet v2 - m | 384 | 0.357 | 0.373 |
| Effnet v2 - xl | 256 | 0.318 | 0.319 |
| 拼接所有嵌入 | 0.379 | 0.389 | |
| 拼接所有 + 后处理 | 0.448 | 0.464 |
第一步: 地标分配 - 测试图像
对于地标ID分配,我计算了测试图像嵌入与 GLDV2 数据集中图像嵌入之间的余弦相似度。接下来,我为测试数据中的每张图像选取了前 'n' 个最相似的 GLDV2 图像,并为该图像分配标签和标签相似度得分。下面提到了测试数据中图像 A 的标签和标签得分计算示例。
对于测试图像 A,从 GLDV2 中选取前 'n' 个(在我的例子中是 5 个)最相似的图像:
| GLDV2 图像 1 | GLDV2 图像 2 | GLDV2 图像 3 | GLDV2 图像 4 | GLDV2 图像 5 | |
|---|---|---|---|---|---|
| 地标 ID | 121 | 10 | 121 | 10 | 199 |
| 相似度得分 | 0.9 | 0.7 | 0.5 | 0.47 | 0.45 |
然后,图像地标ID得分可以计算为:
| 地标 ID | 图像 | 地标 ID 得分 |
|---|---|---|
| 121 | GLDV2 图像 1, GLDV2 图像 3 | 0.9+0.5 = 1.4 |
| 10 | GLDV2 图像 2, GLDV2 图像 3 |