返回列表

18th place - Ensemble of 3 matchers + bonus crazy ideas that didn't work

495. Image Matching Challenge 2022 | image-matching-challenge-2022

开始: 2022-04-04 结束: 2022-06-02 计算机视觉 数据算法赛
第18名 - 3个匹配器的集成 + 那些没奏效的疯狂想法
作者: Guilherme Potje | 比赛排名: 第18名 | 发布时间: 2022-06-03

第18名 - 3个匹配器的集成 + 那些没奏效的疯狂想法

首先,我和我的队友 @radac98 衷心感谢所有组织者和参与这次挑战的同行。这是我们作为 Kaggle 参赛者的第一次经历,我们非常享受其中!这是一个非常棒的社区,有着大量的知识分享。

[我们的解决方案]

我们在比赛中测试了几种复杂的策略,相比之下,我们最好的方法其实非常简单。它是三个匹配器的集成:原始 LoFTR + 原始 DKM + 原始 PDCNet_plus。

对于每对图像,我们执行以下操作:

  1. 对于 LoFTR,我们对每对图像执行简单的 TTA(测试时增强)重缩放(这里的数字分别表示第一张和第二张图像最大维度的像素大小):
    LoFTR(1200, 1200)
    LoFTR(1200, 600)
    LoFTR(600, 1200)
  2. 对于 DKM,我们随机采样 9000 * 重叠度 个对应点(重叠度 由置信度图高于阈值 0.05 估算得出),采样概率按其置信度加权。
  3. 对于 PDCNet,我们随机采样 6000 * 重叠度 个对应点(重叠度 由置信度图高于阈值 0.2 估算得出)。

将所有匹配点拼接起来(校正缩放至原始图像分辨率),并使用 OpenCV 的 MAGSAC(15k 次迭代,p=0.9999,px_thr = 0.25),这就完成了!

我们根据公共 LB 分数凭经验选择了这些参数,结果证明它们在私有 LB 上也表现良好。

关于 QuadTree Attention 的小评论:在比赛结束阅读了一些解决方案后,我们(以及其他几个人)惊讶地发现 QuadTree LoFTR 单独在 LB 上表现非常好。我们只是忽略了它,因为带有 QuadTree 的公共内核在 LB 上表现不佳,而且它的视觉匹配效果看起来很差。如果我们把它包含在我们的集成中,也许只需简单的修改就能获得更好的结果。

[我们尝试过的其他匹配器]

我们还尝试在集成中包含其他预训练匹配器和过滤方法,但最终并没有改善结果:

  • ASLFeat
  • Se-LOFTR
  • SGMNet
  • MatchFormer
  • Patch2Pix
  • SuperPoint + SuperGlue
  • SIFT + HardNet
  • SIFT + Key.Net 关键点 + HardNet 描述子
  • 尝试使用 AdaLAM 过滤匹配

*在这种情况下,我们尝试将每种方法单独添加到我们最好的集成中。如果我们测试更多不同的组合,它们可能在最终的集成中有用,但与此同时,我们正在测试更复杂的解决方案,结果最终没有奏效,我将在下面描述)。

[最终没有奏效的复杂解决方案]

到目前为止,我们尝试过的最复杂的方法是尝试双视图光束法平差,为此,我们必须使用这篇论文中描述的优化技术将估计的 F 矩阵分解为 K、R、t:Optimizing the Viewing Graph for Structure-from-Motion,其中 F 矩阵可以分解为 E = K'.T @ F @ K,现在本质矩阵必须满足论文公式 (10) 中的约束。我们使用 scipy 优化器来优化使成本最小化的焦距。我用已知焦距的图像测试了这个算法,令人惊讶的是,它对于成本函数非常低的图像对工作得很好。此外,通过 BA(光束法平差),即使数值稍微偏离最优值,它也可以在优化中收敛。之后,我们通过分解 E 能够获得 KRt,甚至获得了视觉上吸引人的 3D 重建。然而,当尝试对来自测试数据的图像对进行光束法平差作为初步测试时,我们观察到估计的焦距在优化过程中实际上偏离了测试数据的伪真值。我们怀疑发生这种情况是因为仅双视图设置 + 近平面结构导致优化条件不适定,也许如果有更多同时视图,可能会获得稳定的结果(或者也许只是我们没有发现的 bug?)。最后,这个解决方案已经相当复杂,我们决定专注于更简单的方案。

我们尝试的另一件事是通过使用这项工作的双视图细化阶段获得亚像素细化的对应关系:Multi-View

同比赛其他方案