PatchmatchNet (Learned Multi-View Patchmatch Stereo)

基本信息

项目 内容
论文标题 IterMVS: Iterative Probability Estimation for Efficient Multi-View Stereo
作者 Fangjinhua Wang(又是你), Silvano Galliani, Christoph Vogel, Pablo Speciale, Marc Pollefeys
作者单位 ETH Zurich (Department of Computer Science, 苏黎世联邦理工学院计算机科学系)
时间 2021
发表会议/期刊 CVPR

方法概览

特点 文章性质
输入 标定之后的多视角图像
输出 场景的点云图,每个视角的法线和深度图
所属领域 MVS

摘要

本文提出 PatchmatchNet,一种基于 Patchmatch 的可学习级联多视图立体(MVS)方法。该方法将传统 Patchmatch 算法引入端到端深度学习框架,采用粗到精的级联架构,通过可学习的自适应传播和评估模块替代手工设计的规则。核心优势在于无需依赖内存密集型的 3D 代价体正则化,同时兼顾高精度与高效性(低内存占用、高运行速度)。在 DTU、Tanks & Temples 和 ETH3D 数据集上验证表明,PatchmatchNet 取得竞争性性能,内存消耗仅为现有方法的一半,运行速度提升至少 2.5 倍,适用于资源受限设备。


引言动机

  1. 学习型方法(如 MVSNet、CasMVSNet)依赖 3D 代价体和 3D CNN 正则化,内存消耗大、运行速度慢,难以处理高分辨率图像;

  2. 传统 Patchmatch 类方法(如 Gipuma)无需代价体,效率高,但依赖手工设计的传播和匹配规则,在复杂场景(遮挡、低纹理)下精度不足。

    作者旨在结合两者优势,提出可学习的 Patchmatch 架构:将 Patchmatch 的高效性与深度学习的特征学习能力融合,设计级联粗到精框架,通过自适应模块优化核心步骤,在不牺牲精度的前提下,解决现有学习型方法的效率瓶颈。
    但是其实他的patchmatch是无法进行梯度反传的


创新点

端到端可学习的级联 Patchmatch 架构

首次将传统 Patchmatch 算法嵌入端到端深度学习框架,设计粗到精的级联结构(4 个阶段,分辨率从 1/8 到 1/1),每个阶段迭代执行初始化、传播、评估步骤,逐步提升深度图精度。

自适应传播与评估模块:

  • 自适应传播:基于可变形卷积网络(DCN)设计自适应传播:不再采用固定邻居采样模式,而是通过 2D CNN 学习像素级偏移量,从同一物理表面的邻居像素聚合深度假设
  • 自适应评估
    • 像素级视图权重:通过 3D 1×1×1 卷积从初始匹配代价中学习视图权重,编码可见性信息加权融合多视图匹配代价,提升遮挡场景的鲁棒性。
    • 自适应空间代价聚合:学习像素级偏移量,在空间窗口内自适应采样邻居,基于特征相似度和深度相似度加权聚合代价,避免跨表面边界聚合。
  1. 鲁棒训练策略:训练时从 10 个最优源视图中随机选择 4 个,而非固定选择最优视图,增加训练多样性,提升模型对弱可见性场景的泛化能力。
  2. 高效性:不依赖 3D 代价体正则化,显著降低内存和计算开销。

网络架构

PatchmatchNet 由三大核心模块组成,采用粗到精级联流程(阶段 3→阶段 2→阶段 1→阶段 0):

  1. 多尺度特征提取器:生成不同分辨率的特征图,为各阶段 Patchmatch 提供输入;
  2. 学习型 Patchmatch 模块:每个阶段迭代执行初始化、自适应传播、自适应评估,输出该阶段深度图;
  3. 深度图细化模块:对阶段 1 输出的 1/2 分辨率深度图进行上采样和残差修正,得到全分辨率深度图。

特征提取

采用类似 FPN 的多尺度特征提取网络,从输入图像中提取多分辨率特征图,用于后续由粗到细的深度估计。生成 4 个尺度的特征图,对应 4 个阶段:阶段 3(1/8 分辨率,16 通道)、阶段 2(1/4 分辨率,32 通道)、阶段 1(1/2 分辨率,64 通道)、阶段 0(全分辨率,用于细化);

多尺度Patchmatch处理框架

image-20251127125317320

PatchmatchNet 采用三阶段由粗到细的处理流程:

有三个stage,每个stage有几次迭代,然后还有一个stage0是细化深度图

阶段 分辨率 迭代次数 深度假设数 传播邻域数
Stage 3 W/8 × H/8 2 48 → 16 16
Stage 2 W/4 × H/4 2 8 8
Stage 1 W/2 × H/2 1 8 0

image-20251127125347209

Stage 3

Stage 3 第一次迭代(是MVSNet3DCNN)

1. 随机初始化

在逆深度空间均匀采样生成初始深度假设:

dj=(1dmax+jDf(1dmin1dmax))1d_j = \left(\frac{1}{d_{max}} + \frac{j}{D_f} \cdot \left(\frac{1}{d_{min}} - \frac{1}{d_{max}}\right)\right)^{-1}

其中:

  • Df=48D_f = 48 为初始假设数量
  • dmin,dmaxd_{min}, d_{max} 为深度范围
  • j=0,1,...,Df1j = 0,1,...,D_f-1

2. 可微扭曲

对于每个像素 p\mathbf{p} 和每个深度假设 djd_j,计算源视图中的对应点:

pi,j=Ki(R0,i(K01pdj)+t0,i)\mathbf{p}_{i,j} = \mathbf{K}_i \cdot (\mathbf{R}_{0,i} \cdot (\mathbf{K}_0^{-1} \cdot \mathbf{p} \cdot d_j) + \mathbf{t}_{0,i})

3. 匹配代价计算

使用分组相关性计算相似度:

Si(p,j)g=GCF0(p)g,Fi(pi,j)g\mathbf{S}_i(\mathbf{p},j)^g = \frac{G}{C} \langle \mathbf{F}_0(\mathbf{p})^g, \mathbf{F}_i(\mathbf{p}_{i,j})^g \rangle

4. 视图权重学习

通过小型3D CNN学习每个源视图的可见性权重:

Pi(p,j)=Sigmoid(Conv3D1×1×1(Si))\mathbf{P}_i(\mathbf{p},j) = \text{Sigmoid}(\text{Conv3D}_{1\times1\times1}(\mathbf{S}_i))

wi(p)=maxjPi(p,j)\mathbf{w}_i(\mathbf{p}) = \max_j \mathbf{P}_i(\mathbf{p},j)

5. 代价聚合与深度回归

加权聚合多视图相似度:

S~(p,j)=i=1N1wi(p)Si(p,j)i=1N1wi(p)\widetilde{\mathbf{S}}(\mathbf{p},j) = \frac{\sum_{i=1}^{N-1} \mathbf{w}_i(\mathbf{p}) \cdot \mathbf{S}_i(\mathbf{p},j)}{\sum_{i=1}^{N-1} \mathbf{w}_i(\mathbf{p})}

使用softmax转换为概率并回归深度:

P(p,j)=softmax(C~(p,j))\mathbf{P}(\mathbf{p},j) = \text{softmax}(-\widetilde{\mathbf{C}}(\mathbf{p},j))

D(p)=j=0D1djP(p,j)\mathbf{D}(\mathbf{p}) = \sum_{j=0}^{D-1} d_j \cdot \mathbf{P}(\mathbf{p},j)

Stage 3 第二次迭代

1. 自适应传播

学习偏移量并传播邻域深度假设:

Δoi(p)=CNN(F0)(p)\Delta\mathbf{o}_i(\mathbf{p}) = \text{CNN}(\mathbf{F}_0)(\mathbf{p})

Dp(p)={D(p+oi+Δoi(p))}i=116\mathbf{D}_p(\mathbf{p}) = \{\mathbf{D}(\mathbf{p} + \mathbf{o}_i + \Delta\mathbf{o}_i(\mathbf{p}))\}_{i=1}^{16}

2. 局部扰动

在当前估计周围采样新假设:

djnew=(1D(p)±R3uniform(1,1))1d_j^{\text{new}} = \left(\frac{1}{\mathbf{D}(\mathbf{p})} \pm R_3 \cdot \text{uniform}(-1,1)\right)^{-1}

其中 R3=0.38R_3 = 0.38

3. 评估与选择

合并传播和扰动的假设(共16+16=32个),重新执行代价计算,选择最优解。

Stage 2

输入准备

将Stage 3的深度图上采样到W/4 × H/4分辨率。

每次迭代步骤

1. 自适应传播

学习偏移量并传播邻域深度假设:

Δoi(p)=CNN(F0)(p)\Delta\mathbf{o}_i(\mathbf{p}) = \text{CNN}(\mathbf{F}_0)(\mathbf{p})

Dp(p)={D(p+oi+Δoi(p))}i=18\mathbf{D}_p(\mathbf{p}) = \{\mathbf{D}(\mathbf{p} + \mathbf{o}_i + \Delta\mathbf{o}_i(\mathbf{p}))\}_{i=1}^{8}

2. 局部扰动

在当前估计周围采样新假设:

djnew=(1D(p)±R2uniform(1,1))1d_j^{\text{new}} = \left(\frac{1}{\mathbf{D}(\mathbf{p})} \pm R_2 \cdot \text{uniform}(-1,1)\right)^{-1}

其中 R2=0.09R_2 = 0.09

3. 评估与选择

合并8个传播假设和8个扰动假设,重新评估并选择最优解。

Stage 1

输入准备

将Stage 2的深度图上采样到W/2 × H/2分辨率。

单次迭代

1. 仅局部扰动(无传播)

djnew=(1D(p)±R1uniform(1,1))1d_j^{\text{new}} = \left(\frac{1}{\mathbf{D}(\mathbf{p})} \pm R_1 \cdot \text{uniform}(-1,1)\right)^{-1}

其中 R1=0.04R_1 = 0.04

2. 逆深度回归

D(p)=(j=071djP(p,j))1\mathbf{D}(\mathbf{p}) = \left(\sum_{j=0}^{7} \frac{1}{d_j} \cdot \mathbf{P}(\mathbf{p},j)\right)^{-1}

每次迭代自适应空间代价聚合

为避免单个像素匹配的噪声,在空间窗口内聚合代价,但不跨表面边界:

学习采样偏移:和传播类似,通过 2D CNN 学习像素级偏移 Δpk,在 Ke=9 个采样点中,只选择 “同一表面” 的邻居;

加权聚合:根据 “特征相似度”(邻居与当前像素的特征差异)和 “深度相似度”(邻居假设与当前假设的差异)加权聚合代价,公式为:

C~(p,j)=1k=1Kcwkdkk=1KcwkdkC(p+pk+Δpk,j)\tilde{\mathbf{C}}(\mathbf{p},j) = \frac{1}{\sum_{k=1}^{K_c} w_k d_k} \sum_{k=1}^{K_c} w_k d_k \mathbf{C}(\mathbf{p} + \mathbf{p}_k + \Delta\mathbf{p}_k, j)

其中:

  • Δpk\Delta\mathbf{p}_k 为学习的空间偏移
  • wkw_k 基于特征相似性的权重
  • dkd_k 基于深度相似性的权重

Stage0 深度图细化

使用残差网络结合RGB信息细化深度图:

FD=CNN(Dnorm)\mathbf{F}_D = \text{CNN}(\mathbf{D}_{\text{norm}})

FI=CNN(I0)\mathbf{F}_I = \text{CNN}(\mathbf{I}_0)

Dref=D+CNN(concat(FD,FI))\mathbf{D}_{ref} = \mathbf{D} + \text{CNN}(\text{concat}(\mathbf{F}_D, \mathbf{F}_I))


深度图生成

  • 使用 softmax 将代价转换为概率 P\mathbf{P}
  • 通过期望回归深度值:

    D(p)=j=0D1djP(p,j)\mathbf{D}(\mathbf{p}) = \sum_{j=0}^{D-1} d_j \cdot \mathbf{P}(\mathbf{p},j)

  • 在最后阶段使用逆深度回归:

    D(p)=(j=0D11djP(p,j))1\mathbf{D}(\mathbf{p}) = \left( \sum_{j=0}^{D-1} \frac{1}{d_j} \cdot \mathbf{P}(\mathbf{p},j) \right)^{-1}


损失函数

总损失为所有阶段(包括细化阶段)的平滑 L1 损失之和:

Ltotal=k=13i=1nkLik+Lref0L_{total} = \sum_{k=1}^{3} \sum_{i=1}^{n_k} L_i^k + L_{ref}^0

$ L_i^k$:阶段 k 第 i 次迭代深度图的平滑 L1 损失;

$L_{ref}^0 $:细化后全分辨率深度图的平滑 L1 损失;

测试数据集

  • DTU:室内场景,固定相机轨迹;
  • Tanks & Temples:真实环境视频序列;
  • ETH3D:高分辨率图像,强视角变化。

消融实验

  1. 自适应传播(AP)与自适应评估(AE):对比固定偏移的传播 / 评估,验证自适应模块对精度(准确率、完整性)的提升;
  2. Patchmatch 迭代次数:测试不同阶段迭代组合(如 1,1,1、2,2,1 等),分析迭代次数与性能、收敛速度的关系;
  3. 像素级视图权重(VW)与鲁棒训练策略(RT):对比无 VW、无 RT 的模型,验证其对泛化性(Tanks & Temples、ETH3D 数据集)的提升;
  4. 输入视图数量:测试 N=2、3、5、6 时的性能,验证多视图信息对遮挡缓解和精度提升的作用。

其他创新点

  • 局部扰动策略:在每个阶段采样新的深度假设,增强多样性;
  • 像素级视图权重:学习可见性信息,提升多视图融合效果;
  • 高效性设计:避免 3D 代价体正则化,显著降低内存与计算成本。