深度解析 MASt3R:融合 3D 几何的稠密匹配新范式

2896 字
14 分钟
深度解析 MASt3R:融合 3D 几何的稠密匹配新范式

1. 引言:MASt3R 的诞生背景#

1.1 DUSt3R 的局限性#

如前文 dust3r.mdx 所述,DUSt3R(CVPR 2024)通过 Pointmap 表示开创性地实现了无需相机标定的 3D 重建。然而 DUSt3R 在像素匹配任务上存在明显不足:

问题具体表现
密集匹配缺失DUSt3R 的 Pointmap 是稠密的,但没有显式的像素级对应关系
匹配精度有限依赖隐式的 3D 点对应,无法保证精确的 2D-2D 匹配
描述子缺失网络只输出几何信息,缺少用于匹配的特征描述子

1.2 MASt3R 的核心思想#

MASt3R(ECCV 2024)的核心洞察:

将 DUSt3R 的几何回归能力与局部特征描述子深度融合,让网络同时学习”在哪里重建”和”如何匹配”。

命名含义MASt3R = Matching-and-Stereo 3D Reconstruction

1.3 MASt3R 的核心贡献#

贡献描述
局部特征描述子每个像素输出一个 24 维描述子,用于精确匹配
Metric Pointmap升级为度量级点图,支持真实尺度的 3D 重建
Fast Reciprocal Matching高效的互最近邻匹配算法,加速对应关系搜索
Coarse-to-Fine粗-细匹配策略,平衡精度与效率
统一多任务一个模型搞定匹配、定位、重建等多项任务

2. 网络架构:从 DUSt3R 到 MASt3R#

2.1 架构概览#

MASt3R 基于 DUSt3R 的非对称 Transformer 架构,核心改动是在解码器头部增加了局部特征描述子预测头

输入图像对 (I^1, I^2)
┌──────────────────────────────────────────────────┐
│ Siamesian ViT-L 编码器(权重共享) │
│ F^1 = Encoder(I^1), F^2 = Encoder(I^2) │
└────────────────────┬─────────────────────────────┘
┌──────────────────────────────────────────────────┐
│ Cross-Attention Transformer 解码器 │
│ G^1_i = DecBlock^1_i(G^1_{i-1}, G^2_{i-1}) │
│ G^2_i = DecBlock^2_i(G^2_{i-1}, G^1_{i-1}) │
└────────────────────┬─────────────────────────────┘
┌──────────────────────────────────────────────────┐
│ CatMLP + DPT 回归头 │
│ │
│ ┌──────────────┬──────────────┐ │
│ │ Pointmap 头 │ 置信度头 │ │
│ │ X^{1,1}, X^{2,1} │ C^{1,1}, C^{2,1} │ │
│ ├──────────────┴──────────────┤ │
│ │ 描述子头(新增) │ │
│ │ D^{1,1}, D^{2,1} ∈ R^{H×W×24} │ │
│ └──────────────────────────────┘ │
└──────────────────────────────────────────────────┘
Pointmap + 置信度图 + 局部描述子

2.2 关键升级:CatMLP + DPT 头#

与 DUSt3R 的 Linear/DPT 头不同,MASt3R 采用 CatMLP + DPT 组合头:

组件功能
CatMLP拼接多尺度特征,预测局部描述子
DPT密集预测头,预测 Pointmap 和置信度图

2.3 描述子输出#

MASt3R 为每个像素输出一个 24 维描述子

D1,1,D2,1RH×W×24D^{1,1}, D^{2,1} \in \mathbb{R}^{H \times W \times 24}

描述子的作用

  • 用于两图像间的精确像素匹配
  • 通过最近邻搜索找到对应关系
  • 兼容标准的 RANSAC + PnP 流程

2.4 模型配置#

配置项
编码器ViT-Large(1024 维,24 层,16 头)
解码器ViT-Base(768 维,12 层,12 头)
描述子维度24
输入分辨率512×384 / 336 / 288 / 256 / 160
输出模式pts3d+desc24(点图 + 24 维描述子)

3. 训练目标:几何回归 + 匹配损失#

3.1 双重损失函数#

MASt3R 的训练目标由两部分组成:

Ltotal=Lgeo+βLmatch\mathcal{L}_{\text{total}} = \mathcal{L}_{\text{geo}} + \beta \cdot \mathcal{L}_{\text{match}}
损失项权重描述
Lgeo\mathcal{L}_{\text{geo}}1.0几何回归损失(与 DUSt3R 相同)
β\beta0.075匹配损失权重

3.2 几何回归损失#

沿用 DUSt3R 的置信度感知回归损失:

Lgeo=v,iCiv,1regr(v,i)αlogCiv,1\mathcal{L}_{\text{geo}} = \sum_{v,i} C^{v,1}_i \ell_{\text{regr}}(v,i) - \alpha \log C^{v,1}_i

3.3 匹配损失(InfoNCE Loss)#

核心创新:使用 InfoNCE 对比损失学习局部描述子:

Lmatch=logexp(sim(di+,dj+)/τ)kexp(sim(di+,dk)/τ)\mathcal{L}_{\text{match}} = -\log \frac{\exp(\text{sim}(d_i^+, d_j^+) / \tau)}{\sum_{k} \exp(\text{sim}(d_i^+, d_k) / \tau)}

其中:

  • di+,dj+d_i^+, d_j^+:正样本对(来自同一物理点的像素)
  • dkd_k:负样本(来自不同点的像素)
  • τ=0.05\tau = 0.05:温度参数
  • sim(,)\text{sim}(\cdot, \cdot):点积相似度

3.4 训练策略#

项目
优化器AdamW
基础学习率1e-4
权重衰减0.05
批量大小64
训练轮数35
预热轮数7
学习率调度Cosine 衰减
输入分辨率512×160
数据增强随机裁剪、颜色抖动、单目增强
初始化DUSt3R 预训练权重

MASt3R 以 DUSt3R 的权重初始化,这确保了强几何先验的迁移。

4. 匹配算法:Fast Reciprocal Matching#

4.1 为什么需要高效匹配?#

对于 512×384 的图像,每个视图有约 20 万像素。如果对所有像素计算最近邻,复杂度为 O(HWHW)O(HW \cdot HW),在实践中不可行。

4.2 互最近邻匹配#

标准匹配基于**互最近邻(Reciprocal Nearest Neighbors)**约束:

M={(i,j)j=NN2(Di1), i=NN1(Dj2)}\mathcal{M} = \{ (i,j) \mid j = \text{NN}_2(D^1_i), \ i = \text{NN}_1(D^2_j) \}

即像素 ii 在图像 I1I^1 的最近邻是 jj,且 jjI2I^2 的最近邻也是 ii

4.3 Fast Reciprocal Matching(FRM)#

核心思想:只采样 kHWk \ll HW 个像素作为起点,通过迭代传播找到所有匹配的互最近邻。

FRM 算法流程

输入:描述子 D^1, D^2 ∈ R^{H×W×d},采样数 k
输出:互最近邻匹配集合 M
1. 初始化:U^0 = 随机采样 k 个像素位置
2. 迭代 t = 0, 1, 2, ...:
a. 正向传播:U^t → NN in D^2 → V^t
b. 反向传播:V^t → NN in D^1 → U^{t+1}
c. 检测互反:若 U^{t+1}_i == U^t_i,则发现循环,添加到 M
d. 移除已匹配:从 U^{t+1} 中移除已匹配点
3. 返回所有发现的匹配 M

4.4 FRM 的收敛性证明#

论文提供了严格的数学证明,说明 FRM 算法的收敛性:

关键引理:在最近邻图中,每个连通子图要么是一个单独的循环,要么是一个以循环为根的特殊树结构(arborescence)。

推论:无论从哪个像素开始,FRM 算法必定收敛到一个互最近邻匹配。

4.5 收敛盆地与采样偏差#

观察:FRM 采样倾向于收敛到大收敛盆地的匹配点。

采样策略特点
FRM(推荐)自动偏向大盆地,覆盖均匀
均匀随机采样忽略盆地大小,效果差
盆地大小加权采样需要先计算所有匹配,效率低

4.6 性能对比#

匹配方法计算复杂度精度
稠密互最近邻O(H2W2)O(H^2W^2)
FRM(k=3000)O(kdlog(HW))O(k \cdot d \cdot \log(HW))与稠密相当
稀疏随机采样O(kdHW)O(k \cdot d \cdot HW)

FRM 将匹配速度提升 10~100 倍,同时保持几乎相同的精度!

5. Coarse-to-Fine 策略#

5.1 为什么需要粗-细策略?#

尺度优势劣势
粗尺度感受野大,对大位移鲁棒定位精度低
细尺度定位精确对大位移敏感

5.2 MASt3R 的 Coarse-to-Fine 流程#

输入:图像 I^1, I^2(高分辨率)
┌─────────────────────────────┐
│ Step 1: 粗尺度匹配 │
│ 下采样到网络输入分辨率 │
│ FRM 匹配 → 粗匹配 M_coarse │
└────────────┬────────────────┘
┌─────────────────────────────┐
│ Step 2: 细尺度优化 │
│ 在原始分辨率上优化匹配位置 │
│ 基于粗匹配的邻域搜索 │
└────────────┬────────────────┘
精匹配 M_fine

5.3 消融实验结果#

方法Aachen-Day-Night Top1DTU Overall↓
DUSt3R1.741
MASt3R(仅粗尺度)74.9 / 90.3 / 98.50.622
MASt3R(粗-细)79.6 / 93.5 / 98.70.374

Coarse-to-Fine 策略显著提升性能!

6. 应用场景#

6.1 像素级匹配#

MASt3R 最直接的应用是稠密像素匹配

from mast3r.model import AsymmetricMASt3R
from mast3r.fast_nn import fast_reciprocal_NNs
# 加载模型
model = AsymmetricMASt3R.from_pretrained('naver/MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric')
images = load_images(['img1.jpg', 'img2.jpg'], size=512)
output = inference([tuple(images)], model, device='cuda')
# 获取描述子
desc1, desc2 = output['pred1']['desc'], output['pred2']['desc']
# FRM 匹配
matches_im0, matches_im1 = fast_reciprocal_NNs(
desc1, desc2,
subsample_or_initxy1=8,
device='cuda',
dist='dot',
block_size=2**13
)

6.2 视觉定位(Visual Localization)#

MASt3R 在无地图视觉定位任务上表现优异:

数据集场景精度
Aachen Day-Night城市白天/夜晚83.4% @ (0.5m, 5°)
InLoc室内稠密匹配SOTA
7 Scenes室内小场景Top-1 匹配
Cambridge Landmarks室外地标Top-20 匹配

6.3 多视角稠密重建(MVS)#

MASt3R 可以通过三角化匹配点实现高质量 MVS:

方法精度 (mm)↓完整度 (mm)↓总体 (mm)↓
DUSt3R2.6770.8051.741
MASt3R0.4030.3440.374

MASt3R 的重建精度相比 DUSt3R 提升了 4.6 倍!

6.4 相对位姿估计#

数据集方法RRA@15RTA@15
CO3Dv2PoseDiffusion80.579.8
CO3Dv2MASt3R98.295.1

7. 与 DUSt3R 的对比#

7.1 核心差异#

方面DUSt3RMASt3R
输出Pointmap + 置信度Pointmap + 置信度 + 描述子
匹配方式隐式(3D 点对应)显式(描述子最近邻)
匹配算法无专用匹配算法Fast Reciprocal Matching
尺度相对尺度(up to scale)度量尺度(Metric)
回归头Linear / DPTCatMLP + DPT
训练损失几何回归几何回归 + InfoNCE 匹配

7.2 适用场景对比#

场景DUSt3RMASt3R
单目深度估计✅ 适用✅ 适用
双目重建✅ 适用✅ 适用
多视角重建✅ 适用✅ 更精确
像素级匹配❌ 不适用最佳
视觉定位中等优秀
无地图定位SOTA

8. 关键数学公式汇总#

  1. 描述子输出
D1,1,D2,1RH×W×24D^{1,1}, D^{2,1} \in \mathbb{R}^{H \times W \times 24}
  1. 总损失函数
Ltotal=Lgeo+βLmatch\mathcal{L}_{\text{total}} = \mathcal{L}_{\text{geo}} + \beta \cdot \mathcal{L}_{\text{match}}
  1. InfoNCE 匹配损失
Lmatch=logexp(sim(di+,dj+)/τ)kexp(sim(di+,dk)/τ)\mathcal{L}_{\text{match}} = -\log \frac{\exp(\text{sim}(d_i^+, d_j^+) / \tau)}{\sum_{k} \exp(\text{sim}(d_i^+, d_k) / \tau)}
  1. 互最近邻匹配定义
M={(i,j)j=NN2(Di1), i=NN1(Dj2)}\mathcal{M} = \{ (i,j) \mid j = \text{NN}_2(D^1_i), \ i = \text{NN}_1(D^2_j) \}
  1. FRM 迭代传播
UtNN2VtNN1Ut+1U^t \xrightarrow{\text{NN}_2} V^t \xrightarrow{\text{NN}_1} U^{t+1}
  1. 收敛盆地性质
每个连通子图Gi要么是循环,要么是以循环为根的树\text{每个连通子图} \mathcal{G}^i \text{要么是循环,要么是以循环为根的树}

9. 代码使用示例#

9.1 基础匹配#

from mast3r.model import AsymmetricMASt3R
from mast3r.fast_nn import fast_reciprocal_NNs
from dust3r.inference import inference
from dust3r.utils.image import load_images
# 加载模型
model = AsymmetricMASt3R.from_pretrained(
'naver/MASt3R_ViTLarge_BaseDecoder_512_catmlpdpt_metric'
).to('cuda')
# 加载图像
images = load_images(['img1.jpg', 'img2.jpg'], size=512)
output = inference([tuple(images)], model, device='cuda', batch_size=1)
# 获取描述子
desc1 = output['pred1']['desc'].squeeze(0).detach()
desc2 = output['pred2']['desc'].squeeze(0).detach()
# FRM 匹配
matches_im0, matches_im1 = fast_reciprocal_NNs(
desc1, desc2,
subsample_or_initxy1=8,
device='cuda',
dist='dot',
block_size=2**13
)

9.2 可视化匹配结果#

import numpy as np
from matplotlib import pyplot as pl
# 过滤边界匹配
H0, W0 = output['view1']['true_shape'][0]
valid = (matches_im0[:, 0] >= 3) & (matches_im0[:, 0] < W0 - 3) & \
(matches_im0[:, 1] >= 3) & (matches_im0[:, 1] < H0 - 3)
matches_im0, matches_im1 = matches_im0[valid], matches_im1[valid]
# 可视化
n_viz = 20
viz_idx = np.round(np.linspace(0, len(matches_im0)-1, n_viz)).astype(int)
pl.figure()
pl.imshow(np.concatenate([img1, img2], axis=1))
for i in viz_idx:
(x0, y0), (x1, y1) = matches_im0[i], matches_im1[i]
pl.plot([x0, x1 + W0], [y0, y1], '-')
pl.show()

10. 总结与展望#

MASt3R 的核心贡献#

  1. 统一几何与匹配:首次将 DUSt3R 的几何回归与局部特征匹配深度融合
  2. 高效匹配算法:FRM 算法将匹配复杂度从 O(N2)O(N^2) 降至 O(klogN)O(k \log N)
  3. Coarse-to-Fine:粗-细策略平衡精度与效率,显著提升重建质量
  4. 度量级重建:支持真实尺度的 3D 重建(非相对尺度)
  5. 多任务统一:单一模型在匹配、定位、重建等任务上均达 SOTA

当前局限#

局限描述潜在改进
描述子维度24 维相对较低可扩展到更高维度
尺度漂移长序列可能累积误差引入回环检测
动态场景主要针对静态场景时序建模

未来发展方向#

方向描述相关工作
MASt3R-SfM完整 SfM 管线3DV 2025
Dune+MASt3R专用编码器CVPR 2025
实时匹配高帧率视频匹配移动端部署
3D 匹配体素级/点云级匹配场景级重建

在 3D 视觉版图中的位置#

MASt3R 是 DUSt3R 系列的关键升级

DUSt3R (CVPR 2024)
├── 几何表示:Pointmap
├── 相机参数:无需标定
└── 匹配:隐式(3D 对应)
MASt3R (ECCV 2024)
├── 几何表示:Pointmap + Metric Pointmap
├── 描述子:24 维局部特征
├── 匹配算法:FRM + Coarse-to-Fine
└── 应用:定位、重建、MVS

MASt3R 证明了”几何先验 + 局部特征”是视觉匹配的最佳组合。 它不仅继承了 DUSt3R 无需相机标定的优点,还通过引入描述子实现了精确的像素级匹配。这使得 MASt3R 成为视觉定位和无地图导航等任务的强大基础模型。

参考资料#

  1. Leroy, V., Cabon, Y., & Revaud, J. (2024). “Grounding Image Matching in 3D with MASt3R.” ECCV 2024.
  2. Wang, S., Leroy, V., Cabon, Y., Chidlovskii, B., & Revaud, J. (2024). “DUSt3R: Geometric 3D Vision Made Easy.” CVPR 2024.
  3. “naver/mast3r.” GitHub: naver/mast3r. https://github.com/naver/mast3r
  4. “naver/dust3r.” GitHub: naver/dust3r. https://github.com/naver/dust3r
  5. Weinzaepfel, P., Lucas, T., Leroy, V., et al. (2023). “CroCo v2: Improved Cross-view Completion Pre-training for Stereo Matching and Optical Flow.” ICCV 2023.
  6. Revaud, J., Weinzaepfel, P., de Souza, C., & Humenberger, M. (2019). “R2D2: Repeatable and Reliable Detector and Descriptor.” NeurIPS 2019.
  7. Lindenberger, P., Sarlin, P.-E., & Pollefeys, M. (2023). “LightGlue: Local Feature Matching at Light Speed.” ICCV 2023.
  8. Duisterhof, B. P., Zust, L., Weinzaeppel, P., et al. (2025). “MASt3R-SfM: A Fully-Integrated Solution for Unconstrained Structure-from-Motion.” 3DV 2025.
  9. Arnold, E., Wynn, J., Vicente, S., et al. (2022). “Map-free Visual Relocalization: Metric Pose Relative to a Single Image.” ECCV 2022.
  10. Ranftl, R., Bochkovskiy, A., & Koltun, V. (2021). “Vision Transformers for Dense Prediction.” ICCV 2021 (DPT).

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

深度解析 MASt3R:融合 3D 几何的稠密匹配新范式
https://aiattnstudio.link/posts/mast3r/
作者
Federico
发布于
2026-07-16
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author

Federico

AI Research Lab

Hello, I'm Federico.

关于实验室 / About
公告

欢迎来到Federico的个人博客

分类
标签
站点统计
57文章
7分类
404标签