返回列表

5th Place Solution : MASt3R is All You Need

652. Image Matching Challenge 2025 | image-matching-challenge-2025

开始: 2025-04-01 结束: 2025-06-02 计算机视觉 数据算法赛
第 5 名解决方案:MASt3R is All You Need

第 5 名解决方案:MASt3R is All You Need

作者: Sayan Paul
排名: 第 5 名
发布时间: 2025-06-08

首先,我要感谢组织者和 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:

  1. 使用 MASt3R-ASMK 进行基于图像对相似度的筛选
  2. 在筛选出的图像对上使用 MASt3R 半稠密匹配
  3. 基于 COLMAP 的验证、重建和聚类
Pipeline 概述框图

解决方案详情

1. 基于图像对相似度的筛选

我尝试了 3 种方法来快速计算数据集中所有图像之间的相似度矩阵,并使用某些阈值筛选出配对,以便更昂贵的 MASt3R 匹配器在它们上运行。

(i) DINO-v2:相似度矩阵通过归一化 (1 - 距离矩阵) 计算,其中使用了 L2 距离。
(ii) MASt3R-ASMK:使用官方实现计算相似度矩阵。
(iii) XFeat 局部特征聚合:XFeat 是一个非常快的局部关键点特征提取器,在准确性方面与 Superpoint 等相当。创建了一个自定义函数来计算两图像之间 top-k 最近邻匹配关键点特征的“平均余弦相似度”,作为图像相似度。

每种方法的相似度矩阵都被传递给一个函数,该函数使用超参数 topk_min、topk_max、topk_percentile 和 sim_thres 来筛选出用于图像匹配的候选配对集。

  • sim_thres:相似度分数的硬阈值
  • topk_percentile:固定的 top-k 阈值限制了当数据集大小变化时适应相似图像数量的能力。将其定义为百分位数使其具有适应性。
  • topk_mintopk_max:允许匹配的最小和最大图像对数量,这些阈值在 top-k 百分位数对数量过低或过高时限制配对数量。
表 1

正如你可以从上面的表中观察到的,MASt3R-ASMK 的表现优于其他方法,因此被选中。超参数 topk_min、topk_max、topk_percentile 和 sim_thres 是使用本地验证数据集 (IMC-2025-train) 为每种方法单独调整的。我提交了一些超参数组合到公共 LB 以验证最佳选择。

表 2

虽然 MASt3R 匹配器具有高精度,并且能够通过预测非常少的匹配来丢弃假阳性,但只传递相关的图像对仍然有帮助。首先,因为匹配和重建需要在 9 小时的时间预算内完成。其次,更多的配对并不一定意味着更好的准确性(参见表 2 第 4 行)。

另一件我想尝试的事情是图像筛选方法的集成,但由于缺乏时间和尝试次数,未能测试。

2. 图像匹配

我使用了 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)

表 3

3. 基于 COLMAP 的验证、重建和聚类

一旦使用 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 自动聚类更差,因此被丢弃。

4. 工程技巧与窍门

  • 在 2 x T4 GPU 上并行处理各个数据集(基于数据集大小的加权分布)。
  • 使用 CUDA 构建 CroCo (MASt3R) 的 cuRoPE 模块。
  • 将模块隔离到子进程中,这些进程可能会随机崩溃(例如 pyCOLMAP),并重试执行最多 max_retries 次。
同比赛其他方案