返回列表

7th place solution (with inference kernel + training code)

401. Google Landmark Recognition 2020 | landmark-recognition-2020

开始: 2020-07-29 结束: 2020-09-29 计算机视觉 数据算法赛
第7名解决方案 (含推理内核 + 训练代码)

第7名解决方案 (含推理内核 + 训练代码)

作者: NguyenThanhNhan (队友: aerdem4, dattran2346) | 比赛排名: 第7名

首先,我要感谢我的队友 @aerdem4@dattran2346 的辛勤工作。在本次比赛中,他们专注于改进全局模型,以便我能腾出时间处理局部部分。

我们最好的提交结果是来自4个模型的相似度的几何平均值(2个主干网络 SEResNext101+ResNext101-32x4d,图像尺寸分别为 512x512 和 736x736)+ 通过 SuperPoint + SuperGlue 进行的重排序。我们预先计算了4个模型的160万个训练嵌入,将其作为外部数据添加,并简单地筛选出相关的私有图像ID(10万个)用于推理。

1. 全局模型

我们基于检索挑战赛中的最佳检查点继续训练。我们的模型最初使用焦点平滑损失进行训练,并进行了调整以与 CosFace 很好地配合(感谢 Ahmet),数据集为 GLv2 干净数据集。对于本次比赛,我们使用了来自81k个类别的所有剩余训练图像(320万张图像)进行重新训练。我们还看到了 seesaw loss 论文,并决定尝试一下(感谢 Dat)。

模型架构非常简单,就是 CNN + GEM + Linear + BN + CosFace,就像许多其他团队一样。

我们的2个模型随后按照以下两种损失进行了重新训练:

  • 阶段 1:在 512x512 尺寸下训练 20 个 epoch。
  • 阶段 2:冻结批归一化层,然后在 736x736 尺寸下微调 2 个 epoch。

与检索比赛相比,我们的本地验证分数提高了5%,并且与 LB(Leaderboard)相关性很好。据我们估计,3% 归功于增加额外数据,1% 来自 seesaw loss,1% 来自更大的图像尺寸。

2. 局部模型

在获得每张测试图像的 top-k 最近训练 ID 后,我们使用 SuperPoint + 在 ADE20k 数据集上预训练的 HRNetv2 来过滤天空/人物/花朵/树木类别上的预测关键点,然后使用 SuperGlue(复制自今年 CVPR 的获胜方案)来计算每对图像之间的内点数量。然后使用主办方提供的公式计算局部分数(max_num_inliers=200),再乘以全局分数得到最终分数。

这个后处理步骤带来了非常显著的提升(在公共 LB 上对我们的上述全局模型提升了 4-6%)。然而,我们注意到全局模型越好,这个局部重排序步骤带来的改进就越少。此外,我们无法找到一种可靠的策略在本地集成全局模型时评估 SuperPoint+SuperGlue。仅仅依赖 LB 是相当危险的,我们很幸运能保持第7名 😅。

我也尝试在20万张干净训练图像的子集上重新训练 SuperPoint 和 SuperGlue,但没能获得任何积极的改进。

P/s: 3种不同主干网络(res50, res101 和 seres101)的 DELG 权重 + 训练配置文件将很快上传 😃。它们都是在 512x512 图像上用 AdamW 和 cosine scheduler 训练了10个 epoch。在检索挑战赛中,res50 的性能是 0.299/ 0.268 (public/ private);其他的更高,所以我对实现的正确性很有信心。

同比赛其他方案