495. Image Matching Challenge 2022 | image-matching-challenge-2022
首先,非常感谢主办方举办这次比赛。这次比赛非常有教育意义,主办方提供了大量资源,对比赛问题的回答也非常清晰和迅速。另外,我不能轻描淡写地说,非常感谢你们在乌克兰这个极其困难的时期还能举办这次比赛。我真诚地希望乌克兰能尽快恢复和平。
我的方法与其他解决方案类似。简而言之:QuadTreeAttention LoFTR + Magic Leap 的 SuperPoint/SuperGlue,结合多尺度 TTA 和 fp16。这两个模型都是预训练模型,没有使用训练数据集进行微调或从头开始训练。
在尝试了各种预训练模型后,我选择了 QuadTreeAttention LoFTR 和 MagicLeap 的 SuperPoint+SuperGlue 作为我的最终提交模型。在这两个模型的集成中,我对每个模型都应用了多尺度 TTA。(LoFTR 和 DKM 也是候选模型,因为它们表现出良好的准确性,但为了创建一个简单的解决方案,我决定不使用 DKM,并在一次最终提交中排除了 LoFTR。不过,现在我觉得我应该将 DKM 纳入最终提交以提高最终性能。)
对于 QuadTreeAttention LoFTR,长边的调整参数设置为 832、1024、1152,对于 SuperGlue 设置为 840、1200、1400。当增加 QuadTreeAttention LoFTR 的图像尺寸时,输出匹配点的数量也会随图像尺寸成比例增加,并与原始图像尺寸(即 800)的数量变得不平衡,因此我调整了置信度阈值以抑制每个图像尺度的输出匹配点。对于 832、1024、1152 的图像尺寸,置信度参数分别设置为 0.20、0.40、0.50。
各模型的得分如下:
| 方法 | 图像尺寸 (长边) | Public LB / Private LB |
|---|---|---|
| SuperGlue (单模型) | 840 | 0.721 / 0.715 |
| QuadTree (单模型) | 832 | 0.788 / 0.787 |
| QuadTree (3个集成) | 832, 1024, 1152 | 0.811 / 0.821 |
| QuadTree (3个集成) + SuperGlue (3个集成) | 832, 1024, 1152 + 840, 1200, 1400 | 0.847 / 0.845 |
此外,在为 QuadTreeAttention LoFTR 调整图像大小时,图像的纵横比保持不变,宽度/高度调整为可通过零填充被 64 整除。使用这些图像输出匹配点时,推理出的匹配点坐标可能会超出原始图像尺寸,因此我通过简单的后处理移除了越界点。
为了减少 GPU 显存消耗,我还对每个模型使用了 torch.cuda.amp.autocast(),并将模型参数转换为 fp16。QuadTreeAttention 代码内部使用 CUDA C++ 模块,因此在将变量传递给 CUDA C++ 模块之前,我将变量转换为 fp32,在从 CUDA C++ 模块接收变量后,我又将这些变量重新转换为 fp16。
当我第一次查看数据集时,训练数据看起来像 PhotoTourism 数据集,测试数据看起来像 GoogleUrban 数据集,所以我思考了如何填补训练数据和测试数据之间的差距。
然而,在 @ammarali32 发布了 LoFTR 0.721 的内核之后(这是一个很棒的内核,非常感谢),我认为仅使用 MegaDepth 预训练模型似乎就足以应对这次比赛,因此决定集中精力寻找优秀的预训练模型,而不是训练/微调某些模型。此外,我没有足够的时间和 GPU 机器来创建强大的图像匹配模型,所以我不得不放弃训练。如果有足够的资源来训练模型,我想尝试 PosFeat (CVPR2022) 等。
正如 VSAC 论文表 4 中所述,MAGSAC++ 的最坏计算时间大于其他 RANSAC 变体,并且对 9 小时的推理时间限制产生了不利影响,因此我尝试了各种可以替代 MAGSAC++ 的其他 RANSAC 变体。