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 倍,适用于资源受限设备。
引言动机
-
学习型方法(如 MVSNet、CasMVSNet)依赖 3D 代价体和 3D CNN 正则化,内存消耗大、运行速度慢,难以处理高分辨率图像;
-
传统 Patchmatch 类方法(如 Gipuma)无需代价体,效率高,但依赖手工设计的传播和匹配规则,在复杂场景(遮挡、低纹理)下精度不足。
作者旨在结合两者优势,提出可学习的 Patchmatch 架构:将 Patchmatch 的高效性与深度学习的特征学习能力融合,设计级联粗到精框架,通过自适应模块优化核心步骤,在不牺牲精度的前提下,解决现有学习型方法的效率瓶颈。
但是其实他的patchmatch是无法进行梯度反传的
创新点
端到端可学习的级联 Patchmatch 架构
首次将传统 Patchmatch 算法嵌入端到端深度学习框架,设计粗到精的级联结构(4 个阶段,分辨率从 1/8 到 1/1),每个阶段迭代执行初始化、传播、评估步骤,逐步提升深度图精度。
自适应传播与评估模块:
- 自适应传播:基于可变形卷积网络(DCN)设计自适应传播:不再采用固定邻居采样模式,而是通过 2D CNN 学习像素级偏移量,从同一物理表面的邻居像素聚合深度假设
- 自适应评估:
- 像素级视图权重:通过 3D 1×1×1 卷积从初始匹配代价中学习视图权重,编码可见性信息加权融合多视图匹配代价,提升遮挡场景的鲁棒性。
- 自适应空间代价聚合:学习像素级偏移量,在空间窗口内自适应采样邻居,基于特征相似度和深度相似度加权聚合代价,避免跨表面边界聚合。
- 鲁棒训练策略:训练时从 10 个最优源视图中随机选择 4 个,而非固定选择最优视图,增加训练多样性,提升模型对弱可见性场景的泛化能力。
- 高效性:不依赖 3D 代价体正则化,显著降低内存和计算开销。
网络架构
PatchmatchNet 由三大核心模块组成,采用粗到精级联流程(阶段 3→阶段 2→阶段 1→阶段 0):
- 多尺度特征提取器:生成不同分辨率的特征图,为各阶段 Patchmatch 提供输入;
- 学习型 Patchmatch 模块:每个阶段迭代执行初始化、自适应传播、自适应评估,输出该阶段深度图;
- 深度图细化模块:对阶段 1 输出的 1/2 分辨率深度图进行上采样和残差修正,得到全分辨率深度图。
特征提取
采用类似 FPN 的多尺度特征提取网络,从输入图像中提取多分辨率特征图,用于后续由粗到细的深度估计。生成 4 个尺度的特征图,对应 4 个阶段:阶段 3(1/8 分辨率,16 通道)、阶段 2(1/4 分辨率,32 通道)、阶段 1(1/2 分辨率,64 通道)、阶段 0(全分辨率,用于细化);
多尺度Patchmatch处理框架

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 |

Stage 3
Stage 3 第一次迭代(是MVSNet3DCNN)
1. 随机初始化
在逆深度空间均匀采样生成初始深度假设:
dj=(dmax1+Dfj⋅(dmin1−dmax1))−1
其中:
- Df=48 为初始假设数量
- dmin,dmax 为深度范围
- j=0,1,...,Df−1
2. 可微扭曲
对于每个像素 p 和每个深度假设 dj,计算源视图中的对应点:
pi,j=Ki⋅(R0,i⋅(K0−1⋅p⋅dj)+t0,i)
3. 匹配代价计算
使用分组相关性计算相似度:
Si(p,j)g=CG⟨F0(p)g,Fi(pi,j)g⟩
4. 视图权重学习
通过小型3D CNN学习每个源视图的可见性权重:
Pi(p,j)=Sigmoid(Conv3D1×1×1(Si))
wi(p)=jmaxPi(p,j)
5. 代价聚合与深度回归
加权聚合多视图相似度:
S(p,j)=∑i=1N−1wi(p)∑i=1N−1wi(p)⋅Si(p,j)
使用softmax转换为概率并回归深度:
P(p,j)=softmax(−C(p,j))
D(p)=j=0∑D−1dj⋅P(p,j)
Stage 3 第二次迭代
1. 自适应传播
学习偏移量并传播邻域深度假设:
Δoi(p)=CNN(F0)(p)
Dp(p)={D(p+oi+Δoi(p))}i=116
2. 局部扰动
在当前估计周围采样新假设:
djnew=(D(p)1±R3⋅uniform(−1,1))−1
其中 R3=0.38
3. 评估与选择
合并传播和扰动的假设(共16+16=32个),重新执行代价计算,选择最优解。
Stage 2
输入准备
将Stage 3的深度图上采样到W/4 × H/4分辨率。
每次迭代步骤
1. 自适应传播
学习偏移量并传播邻域深度假设:
Δoi(p)=CNN(F0)(p)
Dp(p)={D(p+oi+Δoi(p))}i=18
2. 局部扰动
在当前估计周围采样新假设:
djnew=(D(p)1±R2⋅uniform(−1,1))−1
其中 R2=0.09
3. 评估与选择
合并8个传播假设和8个扰动假设,重新评估并选择最优解。
Stage 1
输入准备
将Stage 2的深度图上采样到W/2 × H/2分辨率。
单次迭代
1. 仅局部扰动(无传播)
djnew=(D(p)1±R1⋅uniform(−1,1))−1
其中 R1=0.04
2. 逆深度回归
D(p)=(j=0∑7dj1⋅P(p,j))−1
每次迭代自适应空间代价聚合
为避免单个像素匹配的噪声,在空间窗口内聚合代价,但不跨表面边界:
学习采样偏移:和传播类似,通过 2D CNN 学习像素级偏移 Δpk,在 Ke=9 个采样点中,只选择 “同一表面” 的邻居;
加权聚合:根据 “特征相似度”(邻居与当前像素的特征差异)和 “深度相似度”(邻居假设与当前假设的差异)加权聚合代价,公式为:
C~(p,j)=∑k=1Kcwkdk1k=1∑KcwkdkC(p+pk+Δpk,j)
其中:
- Δpk 为学习的空间偏移
- wk 基于特征相似性的权重
- dk 基于深度相似性的权重
Stage0 深度图细化
使用残差网络结合RGB信息细化深度图:
FD=CNN(Dnorm)
FI=CNN(I0)
Dref=D+CNN(concat(FD,FI))
深度图生成
- 使用 softmax 将代价转换为概率 P;
- 通过期望回归深度值:
D(p)=j=0∑D−1dj⋅P(p,j)
- 在最后阶段使用逆深度回归:
D(p)=(j=0∑D−1dj1⋅P(p,j))−1
损失函数
总损失为所有阶段(包括细化阶段)的平滑 L1 损失之和:
Ltotal=k=1∑3i=1∑nkLik+Lref0
$ L_i^k$:阶段 k 第 i 次迭代深度图的平滑 L1 损失;
$L_{ref}^0 $:细化后全分辨率深度图的平滑 L1 损失;
测试数据集
- DTU:室内场景,固定相机轨迹;
- Tanks & Temples:真实环境视频序列;
- ETH3D:高分辨率图像,强视角变化。
消融实验
- 自适应传播(AP)与自适应评估(AE):对比固定偏移的传播 / 评估,验证自适应模块对精度(准确率、完整性)的提升;
- Patchmatch 迭代次数:测试不同阶段迭代组合(如 1,1,1、2,2,1 等),分析迭代次数与性能、收敛速度的关系;
- 像素级视图权重(VW)与鲁棒训练策略(RT):对比无 VW、无 RT 的模型,验证其对泛化性(Tanks & Temples、ETH3D 数据集)的提升;
- 输入视图数量:测试 N=2、3、5、6 时的性能,验证多视图信息对遮挡缓解和精度提升的作用。
其他创新点
- 局部扰动策略:在每个阶段采样新的深度假设,增强多样性;
- 像素级视图权重:学习可见性信息,提升多视图融合效果;
- 高效性设计:避免 3D 代价体正则化,显著降低内存与计算成本。