【三维深度学习】多视角立体视觉网络MVSNet

基于深度学习的多视角立体视觉模型MVSNet提出了一种基于多视角图像和相机参数重建出目标深度图的有效方法。MVSNet将不同视角下的图像信息进行有效抽取,对相机外参进行有效编码在精巧的融合与优化后得到了基于参考图像视角下的深度信息。

这种方法直接利用相机视锥/视角构建3D cost volume,利用可微的单应性变换将相机参数信息编码到网络中,并将MVS重建问题分解为了更小的视角深度估计问题,使得大规模的重建成为可能。

在实际使用中只需要输入参考视角和多视角图像及其相机参数信息就可以通过网络得到最终的深度重建结果。

这篇文章来自于香港科技大学权龙老师课题组,一作Yaoyao
更多实现细节,请参看MVSNet的 ? 代码分析


1.多视角重建网络

多视角重建是三维视觉领域重要的问题,传统的方法主要使用手工特征来和正则化来计算稠密匹配并重建3D点。但这些方法都假设目标是理想的朗伯体,所以在真实情况下会受到低纹理、镜面反射、区域反射等影响造成稠密匹配失败从而使得重建不完整,精度也会受到损失。虽然目前的MVS基准方法1 精度很高,但在完整性方面还有很多需要改进的地方。近年来CNN在双目重建领域发挥很大的作用,由于图像对事先进行了标定这一问题变成了基于相机参数的在水平方向上的逐像素视差估计问题。

但这种方法不能直接用于多视角,直接照搬双目的配对图像方法无法利用多视角全局信息造成精度下降。此外多视角下输入像的数量和视角也是任意的,需要利用学习的方法来进行处理23。先前的surfaceNet和Learn stereo machine方法都是基于规则栅格的,内存极大地限制了他们能处理的精度,无法用于大规模的多视角点云重建。

在这篇文章中,研究人员选择了参考视角下的点云重建作为多视角重建的目标,通过输入一帧参考视角和一系列其他视角的图像来重建出点云结果。其关键想法在于提出了可差分的单应性变换,从2D图像的特征隐式编码了相机几何参数,并构建了3D cost volum进行端到端训练,最终通过多尺度卷积和回归出深度图,并利参考图像优化了深度图的边缘精度。此外为了适应任意数量的视角图像输入,利用基于方差的度量来将多个特征映射到volume中的单个特征适应多图像输入。4


下图展示了模型的基本架构,包括特征抽取、单应性变化、cost volume的构建和正则化、深度图估计与优化四个部分。
在这里插入图片描述
MVSNet的关键思想来源于将相机的几何参数编码到网络中,使得端到端进行深度估计成为可能。


?模型的第一步是从N个输入图像 { I i } i = 1 N \{I_i\}_{i=1}^{N} 中抽取出特征 { F i } i = 1 N \{F_i\}_{i=1}^{N} 用于下一步的稠密匹配。在特征抽取阶段使用了八层的二维卷积,在第三层和第六层时将特征进行了下采样,所以最终得到了三个尺度的特征。在所有N个输入图像中都共享同一个特征抽取模型,最终从每个图像中抽取了32个通道1/4x1/4的特征描述子。通道的增加弥补了尺寸的减小,同时在特征空间中进行稠密匹配可以有效提升重建的质量。
在这里插入图片描述
?模型的第二步是构建稠密匹配的代价空间cost volume。与先前栅格状划分栅格不同的是,MVSNet的目标是进行深度估计。基于参考图像的相机视角来构建代价空间,其关键的操作在于利用可差分的单应性变换将不同视角下的图像特征变换到参考图像的视角下。

为了构建代价空间 { V i } i = 1 N \{V_i\}_{i=1}^N ,需要将特征图仿射变换到参考相机不同深度的平面上。连接变换后特征Vi(d)和第i个视角图像特征Fi的是与参考相机视角下深度d相关的仿射变换 H i ( d ) H_i(d) ,可以得到 x H i ( d ) X x' -- H_i(d)·X .
其中H便是第i个特征图和参考相机在深度d处特征图之间的单应性变换。假设 n 1 n_1 为参考相机的主轴,H可以表示为3*3的矩阵
H i ( d ) = K i R i ( I ( t 1 t i ) n 1 T d ) R 1 T K 1 T H_i(d) = K_i · R_i ·(I-\frac{(t_1-t_i)· n_1^T}{d})·R_1^T · K_1^T
其中KRT为相机内参、外参,I 为参考图像,带下标1的都是参考图像参数。这与经典的立体视觉匹配十分详细,但区别在于可差分的差值在特征空间中而不是图像空间中进行采样。这一仿射变换的可差分性质衔接起了2D特征抽取和3D规范化网络,使得端到端的训练和深度估计成为可能。下图红框内表示了多个视角图的特征向参考图像不同深度上的特征进行单应性变化的过程,模型中采用了256个depth来进行volum构建。

在这里插入图片描述
?模型的第三步是构建统一的整体的代价空间C。由于每个图像进行特征抽取和单应性变换后都会产生一个对应的Vi,需要将Vi合并为一个整体的cost volume C C 。为了适应任意视角数量N的输入,MVSNet提出了一个基于方差的损失度量M来对N个视角相似性记性度量。

为了构建统一的C,先定义输入图像的长宽为WH,深度采样数为D,特征图通道数为F,代价空间可以表示为: V = W 4 H 4 D F V= \frac{W}{4}·\frac{H}{4}·D·F ,代价度量函数M可以定义为将N个Vi映射为C的过程:
C = M ( V 1 , . . . , V N ) = i = 1 N ( V i V i ˉ ) N C = M(V_1,...,V_N) = \frac{\sum_{i=1}^N(V_i - \bar{V_i})}{N}
研究人员认为所有的视角对于最终深度估计具有同等重要的贡献,参考图像不具有特别权重。同时选取方差操作来进行合并可以有效的测定多视角特征间的不同,这将有效改善精度。

?在构建了统一的代价空间后,将进行第四步代价空间正则化cost volume regularization。从图像直接计算出的代价空间可能受到噪声误差的影响(来源于非朗伯体),需要进行平滑约束才能估计深度。这一步的主要作用是将cost volume C进行优化并生成概率空间probability volume P P 用于深度估计.
采用了四级的多尺度卷积来进行这一操作。为了实现更高的计算效率,在第一级卷积中将32通道的cost volume缩减为了8通道,并将每一级卷积从三个减为了两个,最后一层输出单通道的volume。最终使用softmax在深度方向进行了概率归一化以得到 P P .生成的概率体既可以用于逐像素的深度估计,同时可用于测量估计的置信度。通过分析置信度分布可以方便地评测深度重建的质量,这可以有效地去除局外点。
在这里插入图片描述
?现在可以开始第五步,在概率体的基础上就可以进行初始深度估计了。由于argmax的方法不能得到亚像素估计结果也无法进行训练,所以MVSNet中使用了在深度方向上的期望来进行逐像素深度估计:
D = d = d m i n d m a x d P ( d ) D = \sum_{d=d_{min}}^{d_{max}} d * P(d)
其中深度的取值范围是构建代价空间时基于参考相机建立的多个深度平面,P(d)为对应深度的概率值,在深度方向上进行期望计算后就可以得到这一点对应的深度估计结果。这一期望的计算与argmax的结果和类型,但却可微可训练,同时可以得到连续的深度估计。
此外在沿深度方向概率分布也反映了深度估计的质量。一些无匹配的点概率分布是离散了无法凝聚成一个明显的峰值。于是研究人员将预测深度的质量定义为概率,简单的将距离最接近的四个深度上值加总(GT会在预测深度附近,比标准差和熵等统计手段好).

?最后为了提升边缘部分的精度,需要利用参考图像的特征来优化深度图,使用了残差网络来对深度图进行优化,解决上一步预测对于边缘的过度平滑。
在这里插入图片描述
将参考图像和上一步预测的初始深度叠加在一起4通道输入,并通过四层卷积得到深度残差,与初始深度相加得到最终的深度结果。此外,为了保证特定的深度尺度,初始深度的幅度被归一化道0-1,而在refine后被重新变换回来。

?损失函数.模型的损失函数分为两部分,一部分是初始深度估计的L1损失,另一部分是优化后深度图损失。需要注意的是,GT深度图并没有覆盖所有的点,训练时只对GT中有数据的点进行计量。
在这里插入图片描述
损失函数定义为逐点的L1,Pvalid指的是GT中存在的有效点,分别与初始深度与优化深度进行误差计算,λ一般取1.0:
L o s s = p P v a l i d d ( p ) d i ^ ( p ) 1 + λ d ( p ) d r ^ ( p ) 1 Loss = \sum_{p \in P_{valid}} ||d(p)-\hat{d_i}(p)||_1+ \lambda·||d(p)-\hat{d_r}(p)||_1

2.数据、训练与处理

这一模型主要在DTU数据集上进行了训练。这一数据集包含了七种光照下的100个场景,以及基准点和法向量信息,可以进行泊松表面重建来生成mesh,而后基于mesh得到训练中给定视角下的深度图。在训练时,输入为一个参考图像和2个多视角图像。
在这里插入图片描述
输入图像会被减小32倍,包括了初始的下采样和构建特征图的下采样。首先将图像从1600x1200变为800x600,而后裁剪成640x512。参考视角上生成了256个深度[425mm:2mm:935mm].

在后处理阶段需要进行局外点滤波和深度图融合得到最终的结果。利用了光度和几何的连续性来对局外点进行剔除,在模型中概率小于0.8的点被视为局外点。通过重投影误差的计算,只有满足 p r e p r o j e c p 1 < 1 , d r e p r o j e c d 1 / d 1 < 0.01 |p_{reprojec}-p_1|<1,|d_{reprojec}-d_1|/d_1<0.01 才能满足连续性的要求,将大多数局外点剔除在最终的结果外,保证结果精度。
同时还会对不同视角的深度图进行融合,去平均作为某给像素位置的最终估计深度,并直接重投影回三维空间生成点云。
在这里插入图片描述
下面是实验的结果,去先前的方法比精度和效果都有很大提升,在DTU数据集上的结果,可以看到(特别是反射区域和无纹理区域)生成三维点云的完整性较好:
在这里插入图片描述
同时在Tanks and Temples - 数据集上进行了泛化性测试:
在这里插入图片描述
对于模型中各个模块的性能,其消融性分析如下所示。其中训练使用了三视角,在测试时使用了3,4,5视角可以看到作图精度有明显提升,证明模型具有灵活的输入特性。
图像特征方面,多层特征抽取模型具有很好的提升作用(蓝线是没有多层用一层7x7);与本文的方差相比均值作为cost度量性能下降(紫线);深度优化方面对于模型的提升较小(绿线)
在这里插入图片描述
这一模型比传统方法快很多倍,并且在消费级1080Ti中也可以运行。但训练数据没有normal的情况下得不到基准depthmap会使得训练精度无法进一步提升,同时遮挡和误渲染会造成训练过程的异常,未来的数据集也许会解决这一问题。

最后总结一下这一工作,其核心是将相机参数通过可微的单应性进行了变化,并在参考相机视角上构建代价空间,衔接起了2D特征与三维损失正则化网络,并通过改造损失适应了任意视角数量图像的输入,实现了端到端的多视角重建。


ref:
author:http://home.cse.ust.hk/~yyaoag/
paper:https://link.springer.com/chapter/10.1007%2F978-3-030-01237-3_47
R-MVS: https://arxiv.org/abs/1902.10556
Point-MVSNet:https://github.com/callmeray/PointMVSNet
多视角立体视觉MVS简介:https://zhuanlan.zhihu.com/p/73748124
blog:https://blog.csdn.net/mangobar/article/details/100797533
知乎:https://zhuanlan.zhihu.com/p/59463409

祖国生日快乐!!!
http://www.gov.cn/govweb/xhtml/2019zhuanti/20191001gqsyth/images/20190928gqsyth.jpg


  1. [1]Large-scale data for multiple-view stereopsis. International Journal of Computer Vision (IJCV) (2016)[18]Tanks and temples: Benchmarking large-scale scene reconstruction ↩︎

  2. learned stereo machine http://www.sohu.com/a/191004063_465975 ↩︎

    扫描二维码关注公众号,回复: 8687217 查看本文章
  3. https://github.com/mjiUST/SurfaceNet https://arxiv.org/abs/1708.01749 ↩︎

  4. http://www.terathon.com/lengyel/Lengyel-Oblique.pdf ↩︎

发布了357 篇原创文章 · 获赞 307 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/u014636245/article/details/101713714