MVS论文阅读笔记[PatchmatchNet: Learned Multi-View Patchmatch Stereo]

原文链接:https://arxiv.org/pdf/2012.01411.pdf

摘要:

     我们提出了一个新颖的,可学习的patchmatch 来实现高分辨率的MVS。由于有内存和性能的限制,相比与使用规则的3D代价体,patchMatch可以处理高分辨率的图像,更适合资源有限制的设备。我们第一次介绍在端对端训练结构中实现一个多尺度迭代,每次迭代中patchmatch的核心算法是通过一个新颖的,可学习的自适应传播和评估方案实现的。性能比现有的最好的mvs方案快至少2.5倍,内存占用少2倍。

1.介绍

MVS是利用已知位姿的图片,对观察到的场景进行几何重建。虽然作为一个基础问题,几何计算机视觉已经研究了几十年,但是MVS仍然是一个挑战。这是因为存在着一个实际的无法解决的问题就是:遮挡,弱纹理,non-Lambertian表面。

CNN在几乎任意计算机视觉上的成功给了MVS希望,可以通过这种数据驱动模型的的方式解决MVS面临的问题。事实上,在MVS上,很多基于学习的方法实现了这种期望,表现得比一些传统的方法要好。但是他们很少关注可拓展性,内存和运行时间。目前,许多基于学习的MVS方法构建代价体素,用3D CNN正则化它然后回归出depth。由于3D CNN比较耗时和耗内存,所以一些方法会降低输入图像的分辨率,在低分辨率上进行特征提取和计算得到低分辨率的depth。从图1可以看出,低分辨率会影响depth的精度。由于内存限制,这些方法无法有效利用图像原有的尺寸。很显然,在一些应用上比如手机设备,头戴AR或者其它时间要求严苛的应用上,低耗内存和时间是关键。最近,研究者们在试图降低这种限制。比如,R-MVSNet从深度范围和序列化处理代价体素解耦内存消耗,但是代价是额外的时间消耗。

几个传统的MVS方法完全抛弃使用一个结构化的代价体方法,取而代之的是基于开创性的Patchmatch算法。PatchMatch采用了一个随机的迭代算法来实现近似最近邻域的算法。特别的是深度图的内在空间的相关性被用来快速找到好的方案,无需查找所有的可能性。对我们基于MVS的深度学习方法设置中,patch低内存要求与视差范围无关和一个隐式平滑效果使这个方法变得很有吸引力。

在这个工作中,我们提出了PatchMatchNet,旨在计算高分辨率的depth上降低内存和时间的消耗。它继承了经典的patchmatch的有效性,同时也旨在提高深度学习的性能。

贡献:i. 我们介绍了一种基于MVS框架的端对端训练的patch match方法。更进一步,我们嵌入模型到一个从粗糙到精细的框架中来加速运算。ii. 我们用可学习的、自适应的模块增加传统的传播和代价计算来提高精度。在为sources views的代价聚合时我们建立可视化信息。此外,我们提出了一个鲁棒的训练策略即把随机性加入训练中来提高模型在可见性估计和泛化的鲁棒性。iii. 我们在不同的mvs数据集上

2.相关工作

传统的MVS:传统的MVS方法可以被划分为四种:基于体素的,基于曲面估计的,基于patch的,基于depthmap的。相比较而言,基于depth map的方法更简洁灵活。在这里我们讨论patchmatch 立体方法。Galliani 提出了Gipuma,一个大规模并行的Patchmatch stereo的多视图拓展。它在传播过程中使用红黑棋盘格去并行信息传递。Sch¨onberger提出了COLMAP,包括了pixel-wise 视图选择,深度图,曲面法线。ACMM采用自适应棋盘格采样,multi-hypothesis用于视图选择和多尺度几何一致性引导中。基于patchmatch的思路,我们提出了我们的基于学习的patch方法,该方法不仅继承了传统经典的patch算法的有效性,还提高了基于深度学习方法的性能。

基于学习的立体视觉:GCNet介绍了利用3D 代价 volume 正则化来实现立体重建,用soft argmin回归最终的视差图。PSMNet加了一个空间金字塔池化 并用3D沙漏网络来正则化。DeepPruner提出了一个没有可学习参数的可微分的Patch模块,丢弃大部分视差,然后建立一个轻量级的代价体,并用3D CNN来正则化。相反,我们不适用任何代价volume,而是将原始的patch思想用deep learn来实现。xu [37] 提出了基于稀疏点的尺度内代价聚合方法,使用了变形卷积。同样地,我们提出了一个自适应采样点的策略来进行空间代价聚合。

基于学习的MVS:基于体素的方法[20,21]由于体素表示的缺点只能用来进行小尺度的建模。相反,基于plane-sweep stereo[9],最近有许多工作[6,28,39,42]使用深度图来重建场景,他们通过warp多个视图的特征来构建代价体,并用用3D CNN正则化,回归出深度。因为3d cnn非常耗时和耗内存,他们通常使用下采样代价体。为了减少内存,R-MVSNet[43]用GRU序列化正则化的2d代价,但是以牺牲了运行时间。目前基于Deep learning的方法构建的3D Cost Volume需要3D卷积来做cost aggregation消耗显存非常大,为了节省内存一般最终输出的depth/disparity map限制为输入的1/4。目前研究的目标是提高效率同时建立高分辨率的深度图。CasMVSNet[17]提出了基于特征金字塔的级联代价体,从粗糙到精细构建深度图。UCS-Net [7]提出了级联自适应thin volumes,为了自适应构建采用基于方差的不确定度估计。CVP-MVSNet [41]形成了一个图像金字塔,也构建了代价体金字塔。为了加速Patch传播,我们同样采用了一个级联结构。除了级联代价体之外,PVSNet [40]学习预测每个原图像的可见性。一个抗噪声训练策略被用于处理干扰的views。我们还学习了一种自适应策略组合基于的多个视图的信息可见性信息。此外,我们提出了一种鲁棒的训练方法在训练中加入随机性的策略来提高可见性估计和泛化的鲁棒性。Fast-MVSNet [44]构建了一个稀疏代价体来学习一个稀疏的深度图然后用高分辨率RGB图像和2DCNN来稠密化它。我们构建的优化模块是基于MSG-Net[19],用RGB来引导depth上采样。验证了我们方法的有效性,比如DTU,Tanks&Temples ,ETH3D。结果证明与大多数基于学习的方法相比,我们的方法在减少内存和时间上更具有竞争力。

3. 主要内容

在本节中,我们介绍Patchmatch-Net的结构,如图2所示。它由多尺度特征提取、基于学习的Patchmatch :迭代地从粗糙到精细的框架和一个空间优化模块三部分组成。

3.1多尺度特征提取

给N张输入图像尺寸WxH我们用I0表示参考图像,Ii表示源图像.在我们应用我们的基于学习的patch之前,我们从输入图像中提取了像素级的特征,与特征金字塔网络(FPN)相似.特征在多分辨率图像上分层提取,可以加速我们的深度图从粗糙到精细的计算.

3.2 基于学习的PatchMatch

参考传统的Patch Match和自适应的depth计算,我们的可学习的patchmatch包括以下三个步骤:

3.2.1初始化和局部扰动

在Patchmatch的第一次迭代中,初始化以随机方式进行,以促进多元化。基于预先给定的depth范围[dmin,dmax],在[1/dmax,1/dmin]范围内取Df个间隔初始化每个depth的像素值,这样可以实现在图像空间均匀采样.这帮助我们的模型能应用于复杂的大场景。

在后续的迭代中,对每个像素的每个假设值加一个小的波动值,小的波动值是depth逆区间乘一个因子,这个因子随着depth分辨率增加而减少。这可以增加可能的depth值,使结果更准确,剔除错误的结果。

3.2.2 自适应传播

深度值的空间相干性通常存在于具有相同物理曲面的像素。因此,不是像Gipuma [16] and DeepPruner [11]那样采用一个固定的邻域集合来传播深度,我们想使用一种自适应传播方法可以聚合近似的曲面,这可以让patch match收敛的更快,传递更准确的深度图。如图4所示,证明了我们的策略。我们这种方法更倾向与收集具有相同曲面的像素。相比于固定模式,我们这种无论对有纹理还是无纹理区域都会更倾向找到期望的深度值。

 

我们是在Deformation CNN网络上[10]实现的。因为该方法在每个分辨率上都是相同的,我们就不再区分。为了获取参考图像中每个像素p的Kp个深度假设值,我们学习了一个额外的2D偏移量Δoi应用到用栅格组织的固定偏移量o上。我们在参考图的特征图F0上应用2D CNN来为每一个像素学习一个额外的2D偏移量。通过双线性插值的方式得到深度值Dp:

式中D是来自上一次迭代的深度值,也可能是上一个低分辨率的depth(coarser stage)上采样得到的。

3.2.3 自适应Evaluation

自适应Evaluation模块包括以下步骤:可微warping,匹配代价计算,自适应空间代价传播和depth回归。在每个分辨率stage都是一样的就不在区分。

微分warping:像平面sweep立体视觉一样,大多数基于学习的MVS方法都在每个深度假设值上建立一个平行平面,并把源图像的feature map warp到它们。我们通过参考帧和源图像的内参和位姿转换关系,可以通过矩阵变化将参考帧的的depth和uv坐标投影到源图像得到对应的像素坐标pij。公式如下:

 

我们通过可微双线性插值得到warped 源图像i的第j深度假设值的特征map,Fi(pij)。

匹配代价计算:对于多视立体视觉,这一步必须整合来自任意数量的源图像信息到单个像素的单个深度值的代价值。为此我们通过group-wise(将feature的相关性通道降低至Group的个数,减少内存)相关性计算每个假设值的代价。通过一个像素级的view 权重来聚合views。在代价聚合过程中,我们可以利用可见性信息来提高鲁棒性。最后通过一个小网络每个group的代价被投影到参考帧的每个像素,每个depth上。

F0(p),Fi(pi;j)分别表示参考帧和源图像的特征,在将特征通道会分为G组后,F0(p)g and

Fi(pi;j)g表示第g组的特征,它们的相似性如下表示S:

 

我们用Si(p; j)表示对应group的相似向量。

为了计算像素级的view权重,我们利用我们在stage3的最初的深度假设集的多样性。我们用wi(p)表示图像Ii在像素p的可见性信息。权重被计算一次后被锁定,上采样到更精细的stage。

一个简单的像素级view权重计算网络由3D卷积(1x1x1)和非线性sigmoid组成,输入初始的相似性Si,输出值在0-1之间,Pi ∈R[wxhxD],像素P对图像Ii的权重由下表示:

 

 

最后每个group的相似性可以用如下表示:

 

最终我们得到每个像素的每个group的相似性S∈R[wxhxdxg],用一个带有3D卷积(1x1x1)的小网络即可得到每个像素的每个depth假设值的一个单独的代价值。

 

 

自适应空间代价聚合:传统的MVS匹配算法常常通过一个一个空间window来聚合代价(我们使用的是平行平面)来提高匹配的鲁棒性和一个隐含的平滑效果。可以说,我们的多尺度特征提取已经从一个空间大的视野中包含了邻域信息。尽管这样我们还是使用空间代价聚合。为了防止聚合穿过曲面边界的问题,我们提出了基于patch match和AANet的自适应代价聚合。对于一个空间window Ke个像素p被划分成栅格,我们学习每个像素的额外的偏移量Δp,则聚合空间代价被定义为:

 

 

Δpkj通过在参考帧的特征图上做2D CNN得到的。如图5所示,被采样的位置都在边界内,采样的位置保持在对象内边界,而对于无纹理区域,采样点聚集在一个更大的空间环境中可以潜在地减少估计的不明确性。

depth回归:

使用softmax 我们将代价C转换为可能性P,P被用来亚像素depth回归和置信度计算。回归的在像素点p的depth值D(p)计算如下:

 

3.3 深度图优化

我们发现直接上采样(W/2 x H/2 to W xH),用RGB图像来优化是有效的。基于MSG-Net我们设计了depth残差网络。为了避免偏移某一depth尺度,我们预先将depth归一化到[0,1],在refine后再恢复。我们的网络输出了一个残差值被加到上采样的D上。这个网络独立提取特征Fd和Fi。应用Fd上的反卷积到上采样到图像尺寸。应用多个二维卷积层顶部连接的两个特征映射-深度映射和图像-传递深度残差。

3.4 loss 函数

Ltotal表示所有的深度估计和在相同分辨率上的真值的所有loss的总和:

 

我们采用L1 loss,Lik在stage k上的第i次迭代的loss,Lref是最后refine的depth的loss。

 

 

 

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值