返回列表

5th place solution: kNN shortlist and rotation correction

556. Image Matching Challenge 2023 | image-matching-challenge-2023

开始: 2023-04-11 结束: 2023-06-12 计算机视觉 数据算法赛
作者: Kohei (Grandmaster)
竞赛排名: 第5名
票数: 44
发布日期: 2023-06-13

我将参加在温哥华举行的CVPR IMW会议。非常期待与大家交流学习!

概述

基本上,立体匹配部分与2022年获胜方案相同,即基于DBSCAN的裁剪和多尺度集成方法。除此之外,我的方案主要特点是:改进候选列表、提升计算效率以及旋转校正。

kNN候选列表 + 补充

在基线方法中,使用全局描述符的欧氏距离通过阈值过滤立体匹配候选。然而,由于不同数据集的距离尺度不同,我认为使用统一的阈值并不合适,这对未知数据集缺乏鲁棒性。

由于每个场景的图像数量最多只有约200张,因此可以使用非常轻量的模型对所有图像组合执行立体匹配和RANSAC验证。候选列表通过基于内点数量提取每张图像的k个最近邻生成。

轻量模型可能匹配效果不够好,某些场景会产生无法匹配任何图像的图像。这会导致相机位姿估计失败,因此致命。为此,我们通过匹配关键点数量来补充添加图像对,确保所有图像至少有k个邻居。

轻量模型:我使用SPSG作为轻量模型。为提高效率,关键点数量设置为512个,如SuperGlue论文附录B图11所示。

旋转校正

SuperGlue预训练模型的一个显著弱点是缺乏旋转鲁棒性。这在IMC2023训练集的塞浦路斯场景遗产数据集中尤其明显。我通过简单旋转图像解决了这个问题,无需训练。

具体来说,准备了4个不同旋转角度的图像,并使用轻量模型进行匹配。所有图像都调整为相同尺寸(840x840)并批量处理。

并行执行

GPU密集型和CPU密集型任务可以并行执行以提高效率。具体来说,COLMAP BA是CPU密集型任务,而立体匹配是GPU密集型任务。因此,我在独立线程中实现了COLMAP处理,使其与立体匹配并行运行。

本地验证

仅在本地环境中验证了一些困难场景。特别是有174张图像的酒神场景,作为调整算法避免超时的参考。

场景 图像数 得分 时间(本地环境)
bike 15 0.9342 134秒
kyiv-puppet-theater 27 0.7781 291秒
cyprus 30 0.6239 312秒
wall 43 0.4753 851秒
dioscuri 174 0.8775 2045秒

处理时间

我的最佳提交运行时间为7小时40分钟,远低于9小时的时间限制。因此我在最后一天添加了LoFTR进行集成,但Kaggle服务器出现故障,笔记本仍在运行中。如果笔记本能成功处理,我的最佳提交效果可能会更好。

最后一天无法提交的问题非常令人压力。2019年Google Landmark Recognition也发生过类似情况。我祈祷这类问题不要再发生🙏

未采用的方法

尝试的事情太多,独自完成很困难:-)

  • TTA … 没有显著改进
  • Pixel-Perfect SfM … 在本地环境有轻微改进,但因无法在Kaggle笔记本配置Ceres而放弃
  • TensorRT … 需要从PyTorch 2.0降级,设置成功但实验未提升执行速度
  • 半精度 … 速度提升约10%,但mAA下降,最终未采用
  • 其他匹配器 … 尝试了DKMv3、LoFTR、Silk,最终仅使用SPSG和MatchFormer因其高mAA
  • OpenGLUE … 在MegaDepth数据集上训练DISK+OpenGLUE和SuperPoint+OpenGLUE,但未达到SPSG预训练模型分数。将phototourist数据集转换为OpenGLUE格式并构建MegaDepth+phototourist数据集,但因时间不足未验证
  • 增量映射器参数调整 … 在本地环境有助于稳定高分。具体降低了BA最大细化变化并增加最大迭代次数。但所有Kaggle提交都内存溢出,未在排行榜验证改进效果
同比赛其他方案