MASt3R

系列文章目录


无参考价值


给定两张图像 I 1 I_1 I1 ​ 和 I 2 I_2 I2,分别由两个相机 C 1 C_1 C1 ​ 和 C 2 C_2 C2 ​ 拍摄; 相机的参数是未知的(也就是说我们没有已知的内参矩阵 K、外参 R 和 T);我们希望恢复(估计)一组像素点对应关系,记作一组 { ( 𝑖 , 𝑗 ) } \{(𝑖,𝑗)\} {(i,j)}。每个像素 𝑖 𝑖 i 𝑗 𝑗 j 用坐标 ( 𝑢 , 𝑣 ) ( 𝑢 , 𝑣 ) (u,v) 表示, u u u 是横坐标(列索引), 𝑣 𝑣 v 是纵坐标(行索引), 这些坐标范围在图像大小范围内:宽 𝑊 𝑊 W,高 𝐻 𝐻 H。为了简化叙述,假设两张图像大小一样(即同一个 W 和 H)。但这不是必须条件,模型其实能处理任意分辨率和比例的图像


提示:以下是本篇文章正文内容,下面案例可供参考

一、The DUSt3R framework

一个点图(pointmap) 𝑋 𝑎 , 𝑏 𝑋^{𝑎 , 𝑏} Xa,b 是一个大小为 𝐻 × 𝑊 × 3 𝐻 × 𝑊 × 3 H×W×3 的张量,它的作用是将图像中每一个像素点映射到一个三维点:

  • 图像尺寸是 𝐻 × 𝑊 𝐻 × 𝑊 H×W
  • 对于图像 𝐼 a 𝐼_a Ia ​ 中的每个像素点 𝑖 = ( 𝑢 , 𝑣 ) 𝑖 = ( 𝑢 , 𝑣 ) i=(u,v), 它被映射为一个三维点 𝑋 ( 𝑢 , 𝑣 ) 𝑎 , 𝑏 ∈ 𝑅 3 𝑋^{𝑎 , 𝑏}_{( 𝑢 , 𝑣 )} ∈ 𝑅^3 X(u,v)a,bR3
  • 这个三维点是在相机 C b C^b Cb ​ 的坐标系下表示的

通过预测(回归)两个点图 𝑋 1 , 1 𝑋^{1 , 1} X1,1 ​ 和 𝑋 2 , 1 𝑋^{2 , 1} X2,1 ​ ,DUSt3R 同时完成了:

  1. 相机标定(joint calibration):推理出相机间的相对位置关系;
  2. 三维重建(3D reconstruction):恢复出每个像素对应的三维点。

如果输入不止两张图(比如多视图),理论上可以通过一个“全局对齐”的后处理步骤,把所有点图对齐到同一个坐标系中,形成统一的大点云模型。不过这篇论文里只讨论“双目情况”(也就是只处理两张图像),暂时不做多视图融合。

两张图像(比如 𝐼 1 𝐼_1 I1​和 𝐼 2 𝐼_2 I2​)首先会被输入一个特征提取网络(encoder);这里的“编码”(encode)就是将原始图像转换成高维特征表示,以便后续处理。

用“Siamese(孪生)结构”进行编码,意思是:两张图像被分别送入相同的网络结构(共享权重的 encoder);好处是让模型更容易捕捉图像间的对应关系或差异;编码器使用的是 ViT(Vision Transformer),也就是视觉领域的 Transformer 模型;ViT 将图像切成 patch(小块),然后像处理序列一样对每个 patch 建模;
H 1 = E n c o d e r ( I 1 ) H 2 = E n c o d e r ( I 2 ) H^1 = Encoder(I^1) \\ H^2 = Encoder(I^2) H1=Encoder(I1)H2=Encoder(I2)
编码过程会输出两组特征张量(表示):

  • H 1 H^1 H1 ​:图像 𝐼 1 𝐼_1 I1​ 的特征
  • 𝐻 2 𝐻^2 H2 ​:图像 𝐼 2 𝐼_2 I2​ 的特征
    这两个表示将用于后续的匹配 / 三维估计等模块中。

然后,两个交织的(intertwined)解码器对这两个特征表示 H 1 H^1 H1​和 H 2 H^2 H2​进行联合处理;解码器之间使用 cross-attention(交叉注意力机制) 来交换信息(Cross-attention 是 transformer 中的一种机制,可以让一个序列关注另一个序列中的重要信息);解码器的目标是让模型学会理解:

  1. 两个相机视角之间的空间关系(即从不同视角看同一个场景是怎么变化的);
  2. 整个场景的三维结构(也就是要恢复的 3D 几何信息);

H ′ 1 , H ′ 2 = D e c o d e r ( H 1 , H 2 ) H'^{1},H'^{2} = Decoder(H^1 , H^2) H1,H2=Decoder(H1,H2)
原来的特征 H 1 H_1 H1​, H 2 H_2 H2​被解码器增强(augmented)之后,得到了新的特征表示;这些新的特征包含了空间上下文信息,记作: H ′ 1 H'^{1} H1 H ′ 2 H'^{2} H2

  • H ′ 1 H'^{1} H1 ​:增强后的图像 1 特征
  • H ′ 2 H'^{2} H2 ​:增强后的图像 2 特征

最终模型用了两个预测头(prediction heads) 来做回归任务:

  • 生成 pointmap(每个像素的三维坐标);
  • 生成 confidence map(模型对每个三维预测的置信度);

输入给预测头的不是单一来源,而是将编码器(ViT encoder)输出的表示 H 1 H^1 H1 H 2 H^2 H2​ 和 解码器输出的增强表示 H ′ 1 H'^{1} H1 H ′ 2 H'^{2} H2拼接(concatenate) 起来作为最终的特征输入; 这样可以结合局部原始信息和空间上下文,做出更准确的 3D 预测

X 1 , 1 , C 1 = H e a d 3 D 1 ( [ H 1 ,   H 1 ′ ] ) X 2 , 1 , C 2 = H e a d 3 D 2 ( [ H 2 ,   H 2 ′ ] ) X^{1,1}, C^1 = Head^1_{3D} ([H^1,\ H^{1'}]) \\ X^{2,1}, C^2 = Head^2_{3D} ([H^2,\ H^{2'}]) X1,1,C1=Head3D1([H1, H1])X2,1,C2=Head3D2([H2, H2])

损失函数
在这里插入图片描述

  • v ∈ {1, 2}:视角编号,表示第几张图像(I₁ 或 I₂)。
  • i:图像中的像素坐标,例如 (u, v)。
  • X ( i ) v , 1 ∈ R 3 X^{v,1}_{(i)} ∈ ℝ³ X(i)v,1R3:模型预测的 3D 点,表示图像 Iᵥ 中像素 i 在相机 C₁ 坐标系下的三维位置(pointmap 输出)。
  • 𝑋 ^ ( i ) v , 1 ∈ R 3 𝑋̂^{v,1}_{(i)} ∈ ℝ³ X^(i)v,1R3:像素 i 的真实(ground-truth)3D 坐标。
  • z:对预测 3D 点的归一化因子,定义为所有预测点到原点的平均距离。
  • 𝑧̂:对 GT 3D 点的归一化因子,定义为所有 GT 点到原点的平均距离。
  • ∥ ⋅ ∥:欧几里得距离(L2范数),表示两点之间的空间距离。

除以一个归一化因子,让这个误差在尺度变化时保持稳定,这个损失是对尺度不敏感的。后面论文还说了,在某些 metric ground-truth 可用的数据集上,就不需要归一化,直接比较。

在某些任务中(如 map-free visual localization),尺度不变(scale-invariant) 的预测并不理想,因为这些任务需要预测出 具有真实尺度(metric scale) 的三维位置。因此,在 ground-truth 是 metric 的情况下,我们对回归损失进行修改,移除归一化。具体做法:

  • 设置归一化因子 z := 𝑧̂,即使用相同的因子;
  • 此时,回归损失简化为如下形式:
    ℓ regr ( v , i ) = ∥ X v , 1 ( i ) − X ^ v , 1 ( i ) ∥ z ^ \ell_{\text{regr}}(v, i) = \frac{ \left\| X_{v,1}^{(i)} - \hat{X}_{v,1}^{(i)} \right\| }{ \hat{z} } regr(v,i)=z^ Xv,1(i)X^v,1(i)

在DUSt3R中,最终的置信感知回归损失定义为:
在这里插入图片描述

  • v ∈ {1, 2}:视角编号,表示图像 I₁ 和 I₂;
  • i ∈ V v i ∈ V^v iVv:在视角 v 中所有有 ground-truth 的像素点;
  • C ( i ) v ∈ ( 0 , 1 ) C^v_{(i)} ∈ (0, 1) C(i)v(0,1):模型预测的置信度(confidence map)在像素 i 处的值;
  • ℓ r e g r ( v , i ) ℓ_{regr}(v, i) regr(v,i):之前定义的回归损失(预测 3D 点和 GT 之间的距离);
  • α:一个超参数(权重系数),用于平衡两个项,一般是一个小的正数;

二、 Matching prediction head and loss

从 pointmap(点图)中获取像素间的可靠对应关系,常见做法是: 在某个不变性特征空间中寻找互为最近邻(reciprocal matching) 的点对。这种方法在 DUSt3R 中其实效果很好,哪怕视角变化很大, 通过点图的 3D 点进行 reciprocal matching,仍能找到很多有效匹配。但问题是,这些匹配的精度并不高,导致整体匹配准确度不理想。这是可以理解的,原因包括:
(i) 点图回归本身容易受噪声影响;
(ii) DUSt3R 的设计初衷是做 3D 重建,并没有明确训练过用于匹配的能力。
所以我们提出增加一个第二个输出模块(head),并行于原来的 3D 点图预测头。

2.1 Matching head

所以我们提出增加一个第二个输出模块(head),并行于原来的 3D 点图预测头。这个新模块的输出是两个“密集特征图”,也就是每张图中每个像素都有一个高维特征向量(dense feature)。

在这里插入图片描述

  • D 1 , D 2 ∈ R H × W × d D^1, D^2 ∈ ℝ^{H×W×d} D1,D2RH×W×d:两张图像的 dense feature maps(每个像素对应一个 d 维向量),用于后续像素匹配;
  • H e a d d e s c Head_{desc} Headdesc:匹配头(matching head),是一个小的网络模块,用于生成高质量的可匹配特征
  • [ H 1 , H ′ 1 ] [H^1, H'^1] [H1,H′1]:将编码器输出的特征 H₁ 和经过解码器增强的特征 H₁′ 进行拼接,结合局部信息和空间几何;

这两个特征图 D 1 D^1 D1 D 2 D^2 D2 会用于:

  • 后续的 相似度计算
  • 构建 像素匹配对
  • 并通过 InfoNCE loss(对比损失) 进行训练,让匹配更准确

我们将 matching head 实现为一个简单的两层 MLP(多层感知机),中间加了一个 非线性激活函数 GELU(Gaussian Error Linear Unit)。

  • 两层 MLP 就是:
    1. 第一层全连接 + GELU 激活
    2. 第二层全连接,输出维度为 d(比如 128)
  • GELU 是比 ReLU 更平滑的激活函数,常用于 Transformer、BERT、ViT 等模型中。

最后,我们对每个像素的特征向量进行 单位向量归一化(L2 归一化),也就是让每个特征的范数为 1。 d ^ i = d i ∥ d i ∥ 2 \hat{d}_i = \frac{d_i}{\|d_i\|_2} d^i=di2di 这么做的目的是为了方便后续计算 余弦相似度点积 作为匹配分数。

2.2 Matching objective.

让图像中每个局部特征(descriptor)至多匹配上另一张图中表示相同 3D 点的一个特征。 也就是说,希望匹配是一 一对应的,避免多对多、模糊、重复的匹配。为实现这个目标,我们采用 InfoNCE 损失函数,这是对比学习中常用的一种损失形式。 它能让“正样本对”特征靠得更近,同时把“负样本”推远。

M ^ = { ( i , j ) ∣ X ^ i 1 , 1 = X ^ j 2 , 1 } \hat{\mathcal{M}} = \{(i,j) | \hat{X}_i^{1,1} = \hat{X}_j^{2,1}\} M^={(i,j)X^i1,1=X^j2,1} 是通过3D真值点云定义的匹配对集合。

s τ ( i , j ) s_τ(i,j) sτ(i,j) 是一个经过温度系数调整的归一化相似度度量函数
s τ ( i , j ) = exp ⁡ [ − τ D i 1 ⊤ D j 2 ] s_{\tau}(i,j) = \exp\left[-\tau D_{i}^{1\top}D_{j}^{2}\right] sτ(i,j)=exp[τDi1⊤Dj2]
其中:

  • D i 1 D_{i}^{1} Di1 图像1中像素 i i i 的特征描述符,是一个d维的向量,由匹配头(2层MLP)生成

  • D j 2 D_{j}^{2} Dj2 图像2中像素 j j j 的特征描述符。

  • τ τ τ 温度系数 论文设为0.07,控制匹配的"严格程度"
    L match = − ∑ ( i , j ) ∈ M ^ ( log ⁡ s τ ( i , j ) ∑ k ∈ P 1 s τ ( k , j ) + log ⁡ s τ ( i , j ) ∑ k ∈ P 2 s τ ( i , k ) ) \mathcal{L}_{\text{match}} = -\sum_{(i,j)\in\hat{\mathcal{M}}} \left( \log \frac{s_{\tau}(i,j)}{\sum\limits_{k\in\mathcal{P}^{1}} s_{\tau}(k,j)} + \log \frac{s_{\tau}(i,j)}{\sum\limits_{k\in\mathcal{P}^{2}} s_{\tau}(i,k)} \right) Lmatch=(i,j)M^ logkP1sτ(k,j)sτ(i,j)+logkP2sτ(i,k)sτ(i,j)
    其中:

  • ( i , j ) ∈ M ^ (i,j)\in\hat{\mathcal{M}} (i,j)M^ i i i j j j 是真值匹配,所以上式子中 s τ ( i , j ) s_{\tau}(i,j) sτ(i,j) 是正确匹配对的相似度

  • ∑ k ∈ P 1 s τ ( k , j ) \sum\limits_{k\in\mathcal{P}^{1}} s_{\tau}(k,j) kP1sτ(k,j) 图像1中所有可能与 j j j匹配的点的相似度和

  • P 1 = { i ∣ ( i , j ) ∈ M ^ } \mathcal{P}^1 = \{i | (i,j) \in \hat{\mathcal{M}}\} P1={i(i,j)M^}, P 2 = { j ∣ ( i , j ) ∈ M ^ } \mathcal{P}^2 = \{j | (i,j) \in \hat{\mathcal{M}}\} P2={j(i,j)M^}

  • s τ ( i , j ) ∑ ( . ) \frac{s_{\tau}(i,j)}{\sum (.)} (.)sτ(i,j) 是归一化项,类似softmax的概率分布

双向匹配机制
第一项(图像1→图像2):固定图像2的像素j,要求在图像1中i必须是j的最佳匹配
第二项(图像2→图像1):固定图像1的像素i,要求在图像2中j必须是i的最佳匹配
对称设计确保匹配的唯一性

总损失:
L total = L conf + β L match \mathcal{L}_{\text{total}} = \mathcal{L}_{\text{conf}} + \beta \mathcal{L}_{\text{match}} Ltotal=Lconf+βLmatch

实验表明(论文表1),联合训练比单独使用匹配损失(β=0)将旋转误差从10.8°降至3.0°

三、Fast reciprocal matching

互最近邻匹配定义:
在这里插入图片描述
NN₂(·) 在图像2中搜索最近邻 - 基于L2距离
NN₁(·) 在图像1中搜索最近邻
正向验证:𝑗 = NN₂(𝐷ᵢ¹) : 在图像2的所有像素中,𝑗是使得特征𝐷ⱼ²与𝐷ᵢ¹最相似的像素
反向验证:𝑖 = NN₁(𝐷ⱼ²) : 在图像1的所有像素中,𝑖是使得特征𝐷ᵢ¹与𝐷ⱼ²最相似的像素

Fast matching

初始化采样,在图像I₁的网格上均匀采样k个点 U 0 = { U n 0 } n = 0 k U^0 = \{ U^0_n\}^k_{n=0} U0={Un0}n=0k。网格采样优于随机采样,能保证空间覆盖均匀性(论文附录C验证)

  • 前向映射(𝐼₁→𝐼₂) :对每个采样点 u ∈ U t u \in U^t uUt ,计算其在图像 𝐼 2 𝐼₂ I2 中的最近邻 v = N N 2 ( D u 1 ) v=NN_2(D_u^1) v=NN2(Du1),生成集合 V t V^t Vt。复杂度:O(𝑘𝑁₂),𝑁₂为𝐼₂的像素数

  • 反向映射(𝐼₂→𝐼₁): 对每个点 v ∈ V t v \in V^t vVt ,反向计算其最近邻 u ′ = N N 1 ( D v 2 ) u' = NN_1(D_{v}^2) u=NN1(Dv2),生成集合 U t + 1 U^{t+1} Ut+1

在这里插入图片描述

相互匹配的集合(即 M 𝑘 𝑡 = ( 𝑈 𝑛 𝑡 , 𝑉 𝑛 𝑡 ) ∣ 𝑈 𝑛 𝑡 = 𝑈 𝑛 𝑡 + 1 ) M^𝑡_𝑘={(𝑈^𝑡_𝑛,𝑉^𝑡_𝑛)|𝑈^𝑡_𝑛=𝑈^{𝑡+1}_𝑛}) Mkt=(Unt,Vnt)Unt=Unt+1 。表明该匹配对 𝑈 𝑛 𝑡 , 𝑉 𝑛 𝑡 𝑈^𝑡_𝑛,𝑉^𝑡_𝑛 Unt,Vnt 满足双向最近邻条件,是几何一致的可靠匹配。然后剔除收敛的点,仅对未收敛点继续迭代,降低计算量。在 U t U^t Ut 中将 U t + 1 U^{t+1} Ut+1 的点剔除掉,赋值给 U t + 1 U^{t+1} Ut+1 然后继续迭代。即更新 𝑈 1 𝑡 : = 𝑈 𝑡 + 1 / U 𝑡 𝑈^𝑡_1:= 𝑈^{𝑡 +1} / U^𝑡 U1t:=Ut+1/Ut

同样,我们也从 𝑡 = 1 𝑡= 1 t=1 开始验证和过滤,并以类似的方式将其与𝑡进行比较。如图3(左)所示,此过程然后迭代固定次数,直到大多数对应收敛到稳定(互反)对。

在这里插入图片描述

在图3(中)中,我们可以看到,经过几次迭代后,未收敛点 ∣ 𝑈 𝑡 ∣ |𝑈𝑡| Ut 的数量迅速减少到零。最后,对应的输出集由所有互反对 M 𝑘 = ⋃ t M k t M_𝑘= \bigcup _t M_k^t Mk=tMkt 的串联组成。
在这里插入图片描述

四、Coarse-to-fine matching

Coarse-to-fine matching

从对两张图像的缩小版本进行匹配开始,通过子采样获得的一组粗对应。

在每个全分辨率图像上独立生成重叠的窗口,每个窗口最长边固定为512像素,连续的窗口重叠50%,确保无信息遗漏。窗口集 W 1 ∈ R w × 4 W^1 \in R^{w \times 4} W1Rw×4 ,一共w个窗口,每个窗口用4个坐标值表示(x_min, y_min, x_max, y_max)

先在降采样图像上获取粗匹配点集 M K 0 M_K^0 MK0。统计哪些窗口对 ( W 1 , W 2 ) (W^1,W^2) (W1,W2)覆盖最多的粗匹配点

高分辨率图像匹配流程:
[全图I¹][滑动窗口W¹₁, W¹₂...][与W²₁, W²₂...匹配][坐标反变换][稠密匹配结果]
          │                   │
          └─── 50%重叠 ────────┘

对于每个选中的窗口对 ( w 1 , w 2 ) (w1,w2) (w1,w2)
特征提取: D w 1 , D w 2 = MASt3R ( I w 1 1 , I w 2 2 ) 快速匹配: M k w 1 , w 2 = fast_reciprocal_NN ( D w 1 , D w 2 ) \begin{aligned} &\text{特征提取:} &D^{w_1}, D^{w_2} &= \text{MASt3R}(I_{w_1}^1, I_{w_2}^2) \\ &\text{快速匹配:} &M_k^{w_1,w_2} &= \text{fast\_reciprocal\_NN}(D^{w_1}, D^{w_2}) \end{aligned} 特征提取:快速匹配:Dw1,Dw2Mkw1,w2=MASt3R(Iw11,Iw22)=fast_reciprocal_NN(Dw1,Dw2)

对重复区域的匹配点取置信度最高者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值