652. Image Matching Challenge 2025 | image-matching-challenge-2025
首先,我要感谢组织者和 Kaggle 团队举办如此激动人心且充满挑战的比赛。祝贺所有顶尖参赛者!虽然我在 3D 视觉领域并非新手,但这是我第一次正式参加图像匹配挑战赛(Image Matching Challenge)。我面临的主要挑战之一是参赛较晚——大约在截止日期前两周。因此,我的大部分时间都花在设置 Kaggle Notebook 上,留给迭代和实验不同方法及其变体的机会有限。话虽如此,让我们深入了解这个简单却有效的解决方案。
根据最近的个人实验,我观察到基础模型(Foundation Models)如 DUSt3R、MASt3R 和 VGGT 提供了比传统检测器 - 描述符 - 匹配器 pipeline(例如 ALIKED 或 SuperPoint + LightGlue)更优越的匹配性能。基于此,我构建了一个使用 MASt3R 的简单 pipeline,并在 IMC-2025 数据集上进行了评估。不出所料,它在匹配精度方面表现良好。然而,一个主要的挑战是 MASt3R 匹配器的高计算成本,这导致推理期间 Notebook 频繁超时。我通过实施高效的图像对筛选策略、调整其超参数以及应用一些工程优化来解决这个问题,从而在不显著影响性能的情况下减少了运行时间。
在公共排行榜(Public LB)上给出最佳结果的 pipeline:
我尝试了 3 种方法来快速计算数据集中所有图像之间的相似度矩阵,并使用某些阈值筛选出配对,以便更昂贵的 MASt3R 匹配器在它们上运行。
(i) DINO-v2:相似度矩阵通过归一化 (1 - 距离矩阵) 计算,其中使用了 L2 距离。
(ii) MASt3R-ASMK:使用官方实现计算相似度矩阵。
(iii) XFeat 局部特征聚合:XFeat 是一个非常快的局部关键点特征提取器,在准确性方面与 Superpoint 等相当。创建了一个自定义函数来计算两图像之间 top-k 最近邻匹配关键点特征的“平均余弦相似度”,作为图像相似度。
每种方法的相似度矩阵都被传递给一个函数,该函数使用超参数 topk_min、topk_max、topk_percentile 和 sim_thres 来筛选出用于图像匹配的候选配对集。
正如你可以从上面的表中观察到的,MASt3R-ASMK 的表现优于其他方法,因此被选中。超参数 topk_min、topk_max、topk_percentile 和 sim_thres 是使用本地验证数据集 (IMC-2025-train) 为每种方法单独调整的。我提交了一些超参数组合到公共 LB 以验证最佳选择。
虽然 MASt3R 匹配器具有高精度,并且能够通过预测非常少的匹配来丢弃假阳性,但只传递相关的图像对仍然有帮助。首先,因为匹配和重建需要在 9 小时的时间预算内完成。其次,更多的配对并不一定意味着更好的准确性(参见表 2 第 4 行)。
另一件我想尝试的事情是图像筛选方法的集成,但由于缺乏时间和尝试次数,未能测试。
我使用了 MASt3R 模型的特征提取 (image_size = 512) 和来自官方实现的半稠密匹配,使用 Fast-Reciprocal-NN (subsample = 8, pixel_tol = 5)。我尝试稍微调整匹配的 min_conf_thres(最小置信度阈值)参数,保持所有其他参数固定。(MASt3R-ASMK: topk_min - 10, topk_max - 30, topk_percentile - 0.3, sim_thres - 0.001)。
一旦使用 MASt3R 估计了匹配,它们被导出为 COLMAP 格式并转储最终的图像对索引。然后使用 pyCOLMAP API 的几何验证来验证匹配。
之后,使用 pyCOLMAP 的增量映射(Incremental Mapping)pipeline 生成重建或模型列表。由于 MASt3R 卓越的匹配精度,COLMAP 能够轻松地将图像聚类到单独的稀疏模型中。映射使用了以下参数值:
mapper_options = pycolmap.IncrementalPipelineOptions()
mapper_options.min_model_size = 3
mapper_options.max_num_models = 25
我还尝试过使用 MASt3R-ASMK 或 DINO-v2 对图像进行预聚类,然后在每个聚类中进行 MASt3R 匹配,再通过 COLMAP (Incremental-SFM) 或 GLOMAP (Global-SFM) 生成单个重建模型。但这种方法在本地验证集上的表现比使用 COLMAP 自动聚类更差,因此被丢弃。