611. Image Matching Challenge 2024 - Hexathlon | image-matching-challenge-2024
我们很高兴能够参加Image Matching Challenge 2024。我们要向组织者、赞助商和Kaggle的工作人员表示感谢,感谢他们为举办此次比赛所付出的努力。同时也感谢所有参与者的宝贵建议和帮助。
我们的团队成员包括Hao Yu、Xingyi He、Dongli Tan、Sida Peng和Xiaowei Zhou。我们隶属于浙江大学CAD&CG国家重点实验室。我非常感谢团队成员在本次比赛中的辛勤付出和奉献精神。
我们的最终方案是对通用场景使用无检测器运动恢复结构(DFSfM),对透明场景使用图像顺序恢复策略。对于通用场景,DFSfM延续了我们IMC 2023获奖方案的策略;对于透明场景,我们发现了IMC 2024中透明场景的相机轨迹规律。通过在圆形相机轨迹上均匀采样相机中心位置,然后恢复每幅图像相对于轨迹上相机位置的顺序,我们能够估计图像的3D姿态。
与IMC 2023类似,我们采用了DFSfM,即从粗到精的运动恢复结构框架。DFSfM设计的初衷是解决由无检测器匹配器LoFTR导致的多视图不一致问题。我们发现,像DKM和RoMa这样的稠密匹配器仍然存在这个问题,并且它们生成大量稠密2D点,严重增加了计算负载。
因此,有必要使用置信度引导的合并方法合并每幅视图的匹配项,牺牲一些匹配精度以提高一致性,然后在SfM后细化轨迹。我们使用合并后的匹配项重建粗粒度SfM模型。
随后,我们通过一种新的迭代细化流水线来细化粗糙的SfM模型,该流水线在基于注意力的多视图匹配模块和几何细化模块之间迭代,以提高重建精度。
由于比赛时间限制,我们还采用了一种"轻量级"稀疏特征检测和匹配方法来确定图像旋转和图像对之间的最终重叠区域,然后执行稠密匹配器(DKM、RoMa)。
图像对的获取(NetVLAD):检索涉及使用图像检索方法为每幅图像选择k幅相关图像。在这里,我们没有观察到不同检索方法之间的显著差异。
对于非高分辨率场景,我们使用SuperPoint + SuperGlue进行稀疏匹配,并使用RoMa进行稠密匹配。由于原始RoMa太耗时,我们用vit-b替换了RoMa的特征提取主干并重新训练了模型。结果表明,我们重新训练的RoMa可以达到接近DKMv3的速度,本地评估表明与DKMv3相比性能有显著提升。
对于高分辨率场景,我们发现原始RoMa和我们重新训练的RoMa表现都不太好,因此采用DKMv3作为稠密匹配模型。
去年,当我们使用半稠密匹配模型LoFTR时,LoFTR的粗到细匹配过程导致网格级点和像素级点同时存在,从而产生了多视图不一致问题。今年,我们采用了DKM和RoMa等稠密匹配模型。尽管生成的匹配都是像素级的,但由于DKM和RoMa从光流中采样匹配,它们也存在多视图不一致问题。因此,我们也通过粗到细的架构来解决这个问题。
基于合并后的匹配项,我们使用COLMAP执行粗粒度运动恢复结构。我们借鉴了IMC 2023的经验(感谢第3名解决方案 - 显著减少随机性引起的波动!),发现初始COLMAP重建后,通过放宽COLMAP参数并再次运行,然后选择注册图像数量更多的模型,这给我们带来了提升。
以下是我们在排行榜和本地验证分数方面的结果。
| 方法 | 私有排行榜 | 公开排行榜 | 验证(平均) | pond | church | dioscuri | lizard | multi-temple |
|---|---|---|---|---|---|---|---|---|
| DFSfM(SuperPoint + SuperGlue + DKMv3) | 0.164 | 0.171 | 0.399 | 0.394 | 0.195 | 0.480 | 0.495 | 0.428 |
| DFSfM(SuperPoint + SuperGlue + 我们的重训练RoMa) | 0.167 | 0.175 | 0.470 | 0.487 | 0.190 | 0.542 | 0.743 | 0.390 |
由于"pond"和"lizard"场景的图像数量较多,我们对这两个场景采样了约100幅图像。
我们进行了大量尝试,发现匹配结合COLMAP在透明场景中完全失效。通过观察本地透明场景中相机中心轨迹的特征,并根据IMC 2024的评估指标(相机中心轨迹,而非特定的旋转和平移),我们为透明场景设计了一种独特的处理策略:生成圆形相机轨迹并恢复图像的顺序。
本地提供的图像在其名称中包含场景内每幅图像的顺序,因此我们生成了圆形轨迹并根据图像顺序均匀采样相机中心坐标。通过这种方法,我们发现本地评估中圆柱体和杯子的mAA达到了0.9以上。
| 场景 | 分数 |
|---|---|
| 圆柱体 | 0.919 |
| 杯子 | 0.995 |
基于透明场景图像内容的特征进行分割(前景和背景)。我们使用tokencut分割模型对每幅图像进行前景分割。如果所有图像分割出的前景区域大致一致,表明该场景的相机轨迹近似为圆形,我们将该场景标记为透明场景。
在区分透明场景之后,如何在Kaggle上恢复图像顺序是一个挑战,因为Kaggle数据集中的图像名称是打乱的,所以我们不能像在本地那样已知的顺序直接在生成的圆形轨迹上采样每幅图像的相机中心。因此,需要一种专门的方法来恢复图像顺序并将其放置在场景中的正确位置。
我们设计了一种基于图像相似度矩阵 + TSP算法来恢复图像顺序的策略。例如,考虑一个场景,图像标记为1、2和3,位于圆形路径上,优化任务是最大化图像对之间的相似度:1和2、2和3、以及3和1。因此,这个问题可以表述为旅行商问题(TSP),即寻找访问一组城市并返回起点的最短路线。(图像距离矩阵等于1 - 图像相似度矩阵)。
在构建优化问题后,关键步骤是估计最接近真实值的相似度矩阵。我们尝试了两种方法。
(1)我们使用检索方法(NetVLAD)计算图像的全局特征相似度并构建相似度矩阵。
(2)我们采用稀疏匹配 + RANSAC方法,使用两幅图像之间生成的匹配数量来表示它们的相似度。
我们在本地验证了恢复效果,也在Kaggle上基于之前的最佳方案(使用我们重新训练的RoMa模型的DFSfM)进行了测试。
本地透明场景:
| 方法\场景 | 杯子 | 圆柱体 |
|---|---|---|
| 随机恢复 | 0.081 | 0.066 |
| NetVLAD | 0.101 | 0.242 |
| SP + SG | 0.020 | 0.112 |
| SIFT + NN | 0.030 | 0.606 |
| ALIKED + NN | 0.056 | 0.919 |
Kaggle提交:
| 方法 | 私有排行榜 | 公开排行榜 |
|---|---|---|
| DFSfM(RoMa) | 0.167 | 0.175 |
| DFSfM(RoMa) + NetVLAD | 0.165 | 0.171 |
| DFSfM(RoMa) + SP + SG | 0.189 | 0.199 |
| DFSfM(RoMa) + SIFT + NN | 0.201 | 0.207 |
| DFSfM(RoMa) + ALIKED + NN | 0.191 | 0.225 |
最终,我们选择了DFSfM(RoMa + ALIKED + NN)方法,该方法在公开排行榜上获得了0.225的最高分,私有排行榜分数为0.191。遗憾的是,尽管DFSfM(RoMa + SIFT + NN)方法在公开排行榜上仅获得0.207分,但它在私有排行榜上获得了最高分0.201。
我们尝试使用最新的检索方法,如Anyloc和Eigenplaces,发现结果没有显著差异。同时,我们还尝试在检索前添加图像旋转检测,发现结果也没有改善。
我们还尝试了一些其他稀疏匹配方法,如ALIKED + LightGlue、DISK + LightGlue、DeDoDe + LightGlue,发现结果没有显著改善。本地和公开排行榜的结果略差于SuperPoint + SuperGlue。我们认为可能的原因是我们无法正确调整参数。
我们尝试使用DUSt3R处理透明场景的特殊情况,发现与其他匹配方法一样,它无法有效处理透明场景。
再次感谢组织者为本次比赛所做的贡献,也感谢我的团队成员和所有参与者的辛勤付出和奉献精神。