基于深度学习的patch-match双目三维重建

2022-07-05 08:12宋力争林冬云彭侠夫刘腾飞
应用光学 2022年3期
关键词:视差细化方差

宋力争,林冬云,彭侠夫,刘腾飞

(厦门大学 航空航天学院,福建 厦门 361005)

引言

双目立体视觉在机器人导航、AR/VR、室内场景三维重建中有广泛应用。其中,patch-match[1]算法以内存消耗低、重建精度高的性能被很多研究者所采用[2-4]。然而,patch-match[1]算法在求取视差d时,需要有序地对视图中的每个像素进行随机初始化和迭代求解,导致运行时间成本较高。针对上述问题,本文介绍对传统的patch-match[1]算法的优化方法。

卷积神经网络在计算机视觉中的很多领域都取得了很好的效果,例如:目标检测和识别[5-6]、语义分割[7-8]等。上述成果带给人们解决传统算法在重建不连续等区域所面临难题的希望。在一些复杂多变的户外环境中,基于深度学习的算法[9-11]进行立体视觉重建时的精度要优于传统算法,同时,其时间复杂度相对较低。文献[12-13]中,作者利用卷积神经网络寻找对应点,例如在MC-CNN (matching cost convolutional neural network)中,作者通过搭建一个孪生神经网络计算一对相同尺寸图像块的相似性得分,判断它们是否匹配。然而,MCCNN[13]缺乏利用上下文信息,在容易出错的区域依然面临巨大挑战,例如反光、遮挡、不连续区域等。为了让网络模型充分利用图像的上下文信息,在GC-net (geometry and context network)[11]和PSM-net (pyramid stereo matching network)[14]中,作者通过搭建一个端到端的编码-解码网络结构和金字塔池化去融合不同尺度下的语义特征来扩大感受野范围,提高算法的鲁棒性和精度。基于学习的重建算法在比较复杂的环境中,具有传统算法不具备的优良性能。本文尝试将深度学习融入patch-match算法,使得patch-match算法继承深度学习的优良特性,并降低运行时间。

Patch-match算法求取每个像素的视差值d ,需要经历5个阶段,即:随机初始化、空间传播、视角传播、时间传播和平面细化。其中,平面细化步骤消耗时间占据整个算法一半以上。因此本文主要目标之一是减少平面细化步骤的运行时间。在文献[1]中,作者对每个像素点视差进行平面细化,需要定义2个搜索区间和Δn=进行迭代搜索。我们发现准确度高的视差值 d 不需要很大的搜索空间。为此我们考虑了针对每个像素进行动态调整和的方法。

研究[15]发现深度学习模型预测视差,可以有效地评估预测视差 d的准确度。在文献[16]中,Yaoyu Hu基于改造的PSM-net[14]网络预测每个像素初始的视差值 d 和对应的异方差不确定度 σ,利用 σ缩小SGBM[17]视差匹配区间范围。出于相同目的,我们搭建了一个可以同时输出深度图和异方差不确定度的深度学习模型,σ越大表示网络输出的视差 d越不稳定,在平面细化步骤中扩大它的搜索区间,如果 σ很小,则相反。因此,我们根据每个像素 σ 的大小动态设置和降低平面细化步骤的运行时间,同时继承深度学习模型的优良性能。

1 算法原理

1.1 算法流程

图1展示文中所提出算法的处理流程,首先,利用深度学习模型PSMNU(PSM-net with uncertainty)预测立体图片的左右视差图和异方差不确定度;然后,将视差 d 和异方差不确定度 σ作为先验信息输入到patch-match算法中,在平面细化步骤中,利用异方差不确定σ动态设置和;最后,修正后的patch-match算法输出最终的视差图。通过上述步骤,我们可以减少原始算法的运行时间,提高重建精度。

图1 算法处理流程Fig.1 Flow chart of algorithm processing

1.2 PSMNU网络

建立基于PSM-net[14]的PSMNU网络,如图2所示,该网络在预测稠密深度图方面具有良好性能。由于PSM-net[14]网络旨在输出深度图,为了同时输出异方差不确定度 σ,根据文献[15]对PSMnet[14]的回归层进行修改,输出 H×W×D×2维度的代价体积,H和W分别表示输入图像的高、宽,D表示最大视差。在代价体积中,最后维度(第4个维度)的第1个值表示每个像素在当前视差下的代价,第2个值表示异方差不确定度。

图2 PSM-net网络结构Fig.2 Structure diagram of PSM-net network

训练一个可以同时输出深度图和异方差不确定的深度网络,需要学习函数 f来推断后验分布,f 将一对立体输入图像 IL和 IR映射到视差估计和由方差给出的异方差不确定度量如(1)式:

式中:Np表示图像中的像素数量; Ep和 σp分别定义如(3)式和(4)式。(2)式中的损失函数由2部分组成:残差回归和一个不确定性正则项。实验中,我们不需要“异方差不确定性标签”来学习异方差不确定性,相反,只需要监督学习预测视差,就能从损失函数中隐式地学习异方差不确定 σ。正则化的目的是防止网络对所有数据点预测无限大的 σ,导致损失函数为零。同时,为了提高PSMNU网络的收敛性和稳定性,采用 smoothL1损失函数计算视差损失,由于其具有鲁棒性且对异常值不敏感[18]。

式中:d 表示当前像素 p 的真实视差。

1.3 patch-match算法

Patch-match[1]是一个优秀的局部立体匹配算法,算法的处理流程如图3所示。

图3 patch-match算法流程图Fig.3 Flow chart of patch-match algorithm

首先,输入一对矫正后的立体图片 mL和 mR;然后,通过随机初始化对 mL和 mR中的每一个像素随机分配一个视差值 z0和 单位向量 n=(nx,ny,nz);最后,对左右视差图分别进行迭代优化。迭代步骤包括4个阶段:1)空间传播,将位于 p邻域内的像素 q的平面 fq给予 p,如果 m(p,fq)<m(p,fp),则接受fq作为p的新平面;2)视图传播,将位于 p第2个视角中的对应像素 p′的平面 fp′给予p,如果m(p,fp′)<m(p,fp),则接受 fp′作 为 p的新平面;3)时间传播,这种形式的传播只适合处理视频序列立体重建,将上一帧像素的 fp′给予当前帧相同位置 p,如果m(p,fp′)<m(p,fp),则接受 fp′作为 p 的新平面;4)平面细化:不断更新 z0和 n=(nx,ny,nz),从而获取一个新平面fp′,如果 m(p,fp′)<m(p,fp),则接受 fp′作 为p的新平面。根据平面f计算匹配像素p的聚合代价,如(6)~(8)式:

式中:WP表示以像素 p 为中心的方形窗口; af、 bf、cf表示位于像素 q处 的平面参数; qx、 qy分别表示像素 q在图像坐标系中的水平坐标和竖直坐标;权重函数 w(p,q)利用颜色相似性判断p与q位于相同平面的可能性; Ip、 Iq分别表示像素p、 q的灰度强度;函数 ρ(q,q′)用于计算像素p、 q′之间的不相似性;∂、 τcol、 τgrad是超参数,具体细节可参考文献[1]。

1.4 修正patch-match

在文献[1]中,作者利用像素点坐标、法向量表示 fp。首先,分别定义2个参数,表示3D点中z坐标所允许的最大变化范围,即:表示法向量 n所 允许的最大变化范围。作者在区间中随机估计 Δ z0并计算=z0+Δz0,从而获取一个新的3D点 P′=(x,y,。类似的,在区间估计3个随机值用于形成向量 Δn,然后计算修正后的法向量 n′=u(n+Δn),其中 u()用于计算单位向量。最终,用更新后的参数 P′和 n′去修正位于当前像素点p上的平面 fp,再通过(9)式求出当前视差 dp。如果 m(p,)<m(p,fp),我们就接受该平面 。

每一次更新视差、法线,需要再次代价聚合,导致patch-match的运行时间主要集中在平面细化阶段[1]。为了降低patch-match的运行时间,需对平面细化阶段进行优化。

在上述步骤中,我们通过PSMNU网络获得左右视图的视差和异方差不确定度 σ,并将和 σ作为patch-match的先验信息。在随机初始化步骤中,用初始化每一个像素视差,保证绝大数像素的初始视差有良好的初始值。因此,在平面细化阶段,不需要对所有像素进行大范围搜索。利用σ获取PSMNU对预测视差的确信程度,对于低σ的像素,可以缩小和的区间范围,降低平面细化的迭代次数。如果 σ很大,则保持和的区间范围不变。通过上述步骤,不仅可以降低patch-match的运行时间,还会保证最优的视差值被找到。利用(10)~(13)式,可以确定每一个像素初始的和

式中:t 表示当前第几次迭代;k是一个超参数,对于所有的实验设置 k =0.5。

2 分析与讨论

所有实验均在一台拥有2.90 GHz Intel Core i5-9400F CPU和8 GB RAM的PC机上的Visual Studio 2017中进行,软件环境为Windows 64位操作系统,编程语言是C++,需要的第三方库为OpenCV3.1.0。实验中,总共需要2个数据库,分别是Scene Flow[18]和Middlebury Stereo Evaluation V3[19]。Scene Flow数据库主要用来训练PSMNU网络模型,Middlebury Stereo Evaluation V3用于验证文中算法的有效性。我们从PSMNU网络模型训练、实验结果比较两个方面来介绍实验部分,为了验证文中算法的有效性,对实验结果进行定性、定量分析。

2.1 PSMNU网络训练

本文PSMNU网络结构是基于PSM-net[14]实现,通过修改PSM-net中的损失函数、网络回归层、代价体积满足实验目的,具体实现细节可参考文献[15-16]。

实验中,使用PyTorch搭建PSMNU网络模型,所有模型都使用Adam( β1=0.9,β2=0.999)进行端到端优化。在训练过程中,对所有数据集进行颜色标准化及随机裁剪处理,保证图片尺寸满足256×512像素,设定最大视差D为192。使用Scene Flow[18]数据集在3个nNvidia 1080Ti GPUs上从头开始训练模型,学习速率为0.001,最小批次为9,每个显卡3个批次,连续训练10个批次需要17 h左右。最后,我们通过PSMNU-L和PSMNU-R对Scene Flow[18]数据集进行测试,如图4所示。图4(a)、图4(b)分别表示frames cleanpass的左右视图;图4(c)、图4(d)分别表示monkaa cleanpass的左右视图。预测视差 d 和 σ均来自于PSMNU,为了更好地观看σ图,我们对异方差不确定度进行归一化操作。在物体的边缘处,如图片中的红色虚线圈区域,由于存在遮挡、视差的不连续性导致该处的 σ 会展示出很高的不确定性。

图4 PSMNU网络输出的视差 d 和异方差不确定度σFig.4 Disparity d and heteroscedastic uncertainty σ of PSMNU network output

2.2 算法比较

为了比较文中算法与原始patch-match,我们采用文献[1]中的参数设置,用像素35×35的代价聚合窗口,同时设置相同参数{10,0.9,10,2},实验数据集均来自于Middlebury Stereo Evaluation V2[19]。图5展示文中算法与原始patchmatch的实验结果。其中:图5(a)为Middlebury数据,从左到右依次为Tsukuba、Venus、Cones、Teddy;图5(b)为原始算法求取的深度图;图5(c)表示原始算法求取的视差值误差>1个像素(红色);图5(d)为PSMNU输出的深度图;图5(e)为PSMNU输出的异方差不确定度;图5(f)为本文算法求取的深度图;图5(g)表示本文算法求取的视差值误差>1个像素(红色)。

图5 patch-match算法与本文算法Fig.5 Patch-match algorithm and proposed algorithm

从实验结果可以看出:本文算法在重建精度方面基本上与原始patch-match相同,为了定性地比较性能,用表1记录实验数据,所有数据重建精度的评价指标均使用Middlebury默认错误阈值1个像素。其中,Nonocc、Disc所在列的数据分别表示无遮挡区域中绝对视差错误大于1.0像素所占百分比、不连续区域中绝对视差错误大于1.0像素所占百分比。从时间栏可以看出,本文算法在效率方面明显优于原始算法patch-match,同时,重建精度略优于原始算法。本文算法性能的提高主要归结于PSMNU输出良好的视差图和异方差不确定度,输出的视差精度越高,越有助于本文算法确定一个较好的搜索起点。视差的精度与异方差不确定度成反比关系,在平面细化步骤中,小的 σ意味着在小范围区间内就可以搜索到正确的视差。因此,PSMNU的鲁棒性影响着算法重建性能。与CSCA[20]算法进行比较时,本文算法的重建精度更胜一筹,但运行时间比较长。

表1 Patch-match和本文算法的定量分析结果Table 1 Quantitative analysis results of patch-match algorithm and proposed algorithm

3 结论

传统的patch-match算法进行立体三维重建具有良好性能,然而需要较长的运行时间。本文引用深度学习模型,该模型可以输出初始视差值并评估视差预测的不确定性,我们利用评估得到的异方差不确定度动态调整每个像素的搜索区间,从而达到减少运行时间的目标。实验结果表明,本文提出的算法在效率和精度方面优于原始算法。未来期望该算法可以在GPU上运行,以达到实时性的目的;同时,让PSMNU结合多任务学习、多视角深度重建以提高鲁棒性。

猜你喜欢
视差细化方差
基于归一化互相关的半透明遮挡视差估计
基于自适应窗的立体相机视差图优化方法研究
概率与统计(2)——离散型随机变量的期望与方差
在融入乡村振兴中细化文明实践
视差边缘优化的SGM 密集深度估计算法∗
专利名称:一种双重细化锌合金中初生相的方法
中小企业重在责任细化
“细化”市场,赚取百万财富
方差生活秀
揭秘平均数和方差的变化规律