一种基于PSMNet改进的立体匹配算法
2020-02-12刘建国冯云剑纪郭颜伏伍朱仕卓
刘建国 冯云剑 纪郭 颜伏伍 朱仕卓
(武汉理工大学 现代汽车零部件技术湖北省重点实验室∥汽车零部件技术湖北省协同创新中心∥湖北省新能源与智能网联车工程技术研究中心,湖北 武汉 430070)
在许多高级视觉任务中(如无人驾驶[1]、机器人控制[2]和虚拟现实[3]等),获取物体的距离信息是至关重要的。双目测距方法因其成本低、精度高、布置简单等优势,具有广泛的应用前景。在双目测距任务中,如何快速准确地获得视差信息是亟待解决的关键问题。从一对双目图像中寻找到对应的匹配点来计算视差,进而根据相似三角形原理计算距离的过程就是立体匹配。在过去的几十年,出现了许多优秀的立体匹配算法,如半全局匹配SGM[4]等。传统算法将立体匹配分解为匹配成本计算、成本聚合、视差值计算和视差优化4个步骤[5],但传统算法普遍存在计算速度慢、匹配精度低等问题,这极大地限制了立体匹配算法的应用。近几年,卷积神经网络在众多视觉任务中取得了引人注目的突破性进展,如目标检测[6]、语义分割[7]等。许多关于深度学习在立体匹配领域中的应用的研究也在逐步展开,Zbontar等[8]提出的MC-CNN网络首次将卷积神经网络应用于匹配成本计算,利用卷积从一对立体图像中获取更加抽象、更具鲁棒性的特征,并计算出两者之间的相似性作为匹配成本;随后,Mayer等[9]提出了端到端训练的立体匹配网络DispNetC,将立体匹配的4个步骤整合在一个网络中,该网络能够从一对立体图像中直接计算得到对应的视差图,这逐渐成为立体匹配算法的主流研究方向;为了满足卷积神经网络训练的需求,Mayer等还公开了一个带有真实值的大规模合成数据集SceneFlow,这极大地方便了立体匹配网络的研究和试验。
Kendall等[10]提出的GCNet(Geometry and Context Network),则采用了一种新的计算视差的方法。首先,分别从左右图像中提取特征图,将不同视差下的特征图级联起来构成了匹配代价卷(Matching Cost Volume),匹配代价卷明确地表达了图像的几何特征;然后对匹配代价卷进行3D卷积,3D卷积能够从高度、宽度和视差3个维度提取特征表征,这对于学习环境信息和改善立体匹配效果是十分重要的,3D卷积同样带来了维度增加、运算量过大的问题,编码解码(EncodE-decode)结构很好地解决了这个问题。除此之外,由于实际应用场景中,物体的尺寸是多种多样的,如果将注意力集中在大的物体上(如地面、墙壁、天空等),则会忽视许多精细的细节信息;如果将注意力集中在小的物体上(如行人、栅栏、交通标志等),则在处理弱纹理表面,反光表面等需要全局环境信息的情况下,存在较大的困难。因此如何充分利用多尺度下的环境信息,是构建立体匹配网络时所要解决的关键问题。Chang等[11]提出了PSMNet(Pyrmaid Stereo Matching Network)网络,在特征提取部分,采用深层的残差神经网络(ResNet)[12]作为主干网络,再利用SPP (Spatial Pyrmaid Pooling)空间金字塔结构[13]获取不同尺度感受野下的特征信息,将全局信息和局部信息结合起来构成匹配代价卷。
与卷积神经网络在其他视觉任务中的发展过程相似,虽然立体匹配网络的精度在不断提高,但网络的深度也在不断增加,随之而来的是网络参数数量迅速增加、计算成本越来越高。He等[12]提出的带有跳跃连接的残差神经网络,其网络层数超过了100层,网络参数甚至超过千万,这使得网络需要多个高性能的GPU训练上百个小时。为了提高计算速度,许多网络不得不利用带有步长的卷积或者池化操作来缩小图像尺寸、降低图像的分辨率,再通过反卷积或者双边上采样来恢复图像尺寸,这一过程无疑会丢失许多空间细节信息。在卷积神经网络中,低层级的神经网络能够提取更直接的空间特征(如颜色、边缘和角点等),而高层级的神经网络用于提取更加抽象的特征(如语义信息)。立体匹配作为一个低层级的视觉任务,更多的依赖于图像的空间结构、颜色等特征。因此,本研究提出一个问题,即在立体匹配任务中,如此深层次的网络结构是否是必要的。
基于上述的问题,本研究在PSMNet的基础上,抛弃了深度卷积神经网络结构,试图建立一个层级更少,但视野更加宽广的网络,以保留更加丰富的空间结构信息。首先,利用3个卷积层从输入图像中提取特征图;然后利用深色空间金字塔结构(Atrous Spatial Pyramid Pooling,ASPP)[14]取代ResNet+SPP结构的组合,以扩大感受野,获得不同尺度下的空间信息,并通过一个特征融合模块,将不同尺度的特征信息融合起来;通过级联每个视差级别上的左特征图和对应右特征图,得到匹配代价卷,利用一个沙漏型的3D卷积网络,聚合视差维度上的特征信息,寻找在不同视差条件下特征点之间的对应关系;最后采用回归的方式得到视差图。
1 网络结构
文中提出一种具备浅层结构和宽阔视野的立体匹配网络SWNet,该网络由3个部分构成:特征提取、3D卷积和视差回归。其网络的结构如图1所示(图中天蓝色矩形表示2维的卷积运算;立方体则表示3维的卷积运算;虚线包围的内容为编码解码器),具体的网络参数见表1(其中K表示卷积核尺寸,C表示输出通道数,S表示卷积步长,B表示空洞卷积扩张率,BN表示批规则化,ReLU表示使用激活函数,H表示图像的高度,W表示图像宽度,D表示最大视差值,concat表示特征图级联操作,SElayer表示为每个特征图分配权重,de表示反卷积层)。受篇幅限制,表中只展示了一个沙漏型结构的参数,其他沙漏型结构与其相同。
1.1 特征提取
与PSMNet[11]采用更深的残差神经网络提取特征的方法不同,本研究采用了一种结构更简单但视野更宽广的网络结构。首先,一对立体图像分别经过3个卷积核大小为3*3的卷积层,每一层都跟随着批规则化层(Batch Normalization Layer)和ReLU激活函数层,其中只有第一个卷积层的步长为2,将图像的尺寸缩小为原来的二分之一,其余的卷积层步长均是1,以保留更多的空间结构信息。由上文可知,捕捉多尺度的空间信息是非常重要的,为此PSMNet采用了SPP模块来聚合多尺度的空间信息。而文中所提出的网络由于层数较少,所以感受野的尺寸受限,如果使用SPP模块效果并不好(具体见后文实验部分)。因此,受DeepLab v2[14]的启发,本研究采用了ASPP(Atrous Spatial Pyramid Pooling)结构。
图1 网络结构图
表1SWNet网络结构参数表
Table1Network structure parameters of SWNet
表1(续)
对于普通的卷积层,其感受野的大小与卷积核的尺寸直接相关,通常卷积核的尺寸为3*3,如果需要获得更大的感受野,可以选择更大尺寸的卷积核(如7*7或9*9);另一种方法则是采用多个卷积层的级联,比如3个3*3的卷积层级联起来,感受野的尺寸等效为7*7的卷积核。这两种方法都会增加参数数目、增加计算成本,这与本研究的初衷背道而驰。空洞卷积则能够在不增加参数数目的条件下扩大感受野的范围,甚至通过调整扩张率,可以获得不同感受野尺寸的卷积层,其结构如图2所示,其数学原理如式(1)所示:
w[n][m]
(1)
式中:N表示卷积核的宽;M表示卷积核的高;参数r表示扩张率,对于普通的卷积层,r=1,即卷积核是一个密集的二维矩阵,如图2(a)。
空洞卷积则可以选择不同的扩张率,得到一个带有空洞的卷积核,增加感受野的范围,且参数数目不变,如图2(b)。这种结构的弊端也是显而易见的,感受野是稀疏的,空洞部分会损失信息,为了解决这个问题,本研究引入了ASPP结构。采用不同扩张率(如:4、8、12、16)的空洞卷积构成4个平行的分支,特征图分别经过4个分支提取不同尺度的空间信息,4个分支之间可以互为补充,将输出累加起来得到包含不同尺度信息的、拥有大范围感受野的特征图。
与直接将不同尺度的特征信息累加起来的处理方式不同,文中采用一个特征融合模块将不同尺度的特征信息快速有效的融合起来。首先,将各个分支得到的特征图级联起来得到一个特征图组,由于每个特征图中所包含信息的重要性不同,因此受SENet[15]的启发,本研究为每个特征图赋予一个特定的权重,权重的计算方法如图3所示,特征图组经全局平均池化转化为一维的特征向量,瓶颈结构用于限制参数数量,再利用sigmoid函数获得各个通道之间的权重,其中瓶颈结构是由两个1*1的卷积层和一个ReLU激活层构成的,第一个卷积层将通道数压缩至原来的四分之一,经ReLU函数激活之后,再由第二个卷积层将通道数恢复,将权重系数与对应的特征图相乘,即得到加权的特征图组;然后将初始特征图通过跳跃连接与加权的特征图组级联起来,经过2个3*3的卷积层将通道数压缩为32,得到最终的融合特征图。
图2 普通卷积与空洞卷积示意图
使用两个结构相同且权值共享的特征提取网络分别从输入的左右图像提取特征信息,以保证匹配点在对应通道上的特征值是相同的。
图3 ASPP和特征融合模块结构图
1.2 3D卷积
如GC- Net[10]一样,本研究利用融合特征图构成了匹配代价卷,通过将左特征图和每个视差下对应的右特征图串联起来,得到了一个4D的卷,包含高度、宽度、视差和特征4个维度。这种方法保留了特征维度,并将其融入到匹配代价卷中。相比于计算特征相关性或使用其他距离度量函数,该方法能够有效地提升立体匹配网络的表现。
鉴于已获得的匹配代价卷,需要学习一种模型来聚合并规则化其所包含的视差信息和环境特征信息。与GC- Net[10]和PSMNet[11]相同,本研究采用了3D卷积神经网络(3D CNN)的方式,其能够从高度、宽度和视差3个维度上学习特征表示。利用编码解码结构解决了3D CNN造成的运算量过大的问题,在编码器部分利用2个步长为2的3D卷积对卷进行下采样;在解码器部分,对称地使用2个步长为2的3D反卷积层恢复卷的尺寸。但该结构不可避免地会造成空间信息的损失,因此参照ResNet的跳跃连接结构,将编码器和解码器对应尺寸的卷连接起来,如图1所示。该方法能够在反卷积恢复卷分辨率的过程中,补充丢失的细节信息和来自低层级卷的高频信息。为了保证网络能够提取到足够多的细节信息,将3个相同的编码解码器连接起来,并计算每个编码解码器输出的损失,以实现对网络的深度监督。最后,由编码解码器得到的匹配代价卷,通过双边线性插值的方式恢复到原始尺寸,用于接下来的视差回归计算。
1.3 视差回归
采用Soft Argmin[10]操作以回归的方式估计视差,该方法是完全可微分的并且能够得到平滑的视差估计结果。首先,计算对于每一个像素点属于每一个视差值的概率,匹配代价卷经过3D CNN和上采样处理,得到在所有视差下每个像素的匹配成本,成本越大则表示匹配的概率越低,因此取预测成本的负值,并通过Softmax操作进行正则化处理,得到每个像素属于不同视差的概率;然后,以概率值作为权重,对视差进行加权求和,得到每个像素点处的视差值,如式(2)所示:
(2)
式中:d表示预测视差值;Cd表示在视差d下的匹配成本;σ(·)表示Softmax操作,其数学表达式为
(3)
式中,j=1,2,…,K。
1.4 损失函数
由于平滑的L1损失函数具有较强的鲁棒性和对异常值的低敏感性[16],本研究同样采用其作为基础损失函数,如式(4)所示:
(4)
其中,
(5)
文中采用了一种深度监督的训练方式,不仅对网络最终的输出结果进行监督,并且对网络中间层级得到的结果进行监督。具体来说,就是对每个编码解码结构输出的卷进行视差回归,并计算损失值。最终的损失值是由每一个层级的损失值加权求和得到的,如式(6)所示:
(6)
式中:wi表示不同层级损失的权重;M表示受监督的层级数。根据参考文献[11]的实验结果,文中取M=3,各层对应的权重参数分别为w1=0.5、w2=0.7、w3=1.0。
2 实验结果
在这一节中,展示了本网络在两个数据集(SceneFlow[9]和KITTI2015[17])上的试验和测试结果。首先,详细地介绍了本网络的实现细节以及训练策略;其次,介绍了两个数据集的相关信息;然后,对不同的网络结构进行消融实验,以测试网络结构和参数设置对结果的影响;最后,展示了在KITTI2015排行榜上文中所提算法的结果与其他优秀算法结果的比较。
2.1 实现细节
在Ubuntu环境下,使用Pytorch深度学习架构,实现了本研究提出的立体匹配网络SWNet。使用NVIDIA1080Ti GPU对模型进行端到端的训练,批尺寸设置为3,使用Adam优化器,优化参数分别设置为β1=0.9、β2=0.99。对于所有数据集,训练图像的尺寸设置为512×256,所有图像的RGB数值被归一化至[-1,1]范围内,最大视差值Dmax设置为192。对于SceneFlow数据集,以固定的学习率0.001训练10个周期;对于KITTI2015数据集,本研究使用在SceneFlow数据集上预训练得到的模型进行进一步的优化训练。优化训练共300个周期,其中,前200个周期,学习率为0.001,后100个周期,学习率调整为0.0001。
2.2 数据集
本研究使用了两个公开的数据集进行网络的训练和测试。
SceneFlow:一个大规模的合成数据集,包含35454张训练图片和4370张测试图片,图片的尺寸为960×540,提供稠密的视差图作为真实值。其中部分像素的视差值超过了本研究设置的最大视差值,在计算损失时这部分像素点将被忽略掉。
KITTI2015:一个在真实的街道场景下采集的立体数据集,包含200张训练图片和200张测试图片,图片的尺寸为1240×376,对于训练集提供了由激光雷达采集得到的稀疏视差图作为真实值。为了方便试验,本研究随机选择训练集中的40对立体图像作为测试集,其余160对立体图像作为训练集。
2.3 消融实验
在本节中,将对SWNet的每一个组成部分的作用进行细致的研究,并测试不同的参数配置对于结果的影响。在接下来的研究中,以与文中提出的网络最为相似的PSMNet作为参考,在SceneFlow和KITTI2015测试集上评估文中提出的网络。
对于SceneFlow数据集,本研究采用终点误差(End- point Error,EPE)表示匹配的准确率,计算每个像素点的预测视差值与真实视差值之间的欧氏距离并取平均,误差越大表示匹配准确率越低。终点误差的计算方法如下所示:
(7)
对于KITTI2015数据集,本研究采用3像素误差(3px-Error)表示匹配的准确率,3像素误差是指预测视差值与真实视差值之间差值的绝对值超过3的像素点的数量占整幅图像的比例。比例越高说明误匹配点的数量越多,匹配准确率越低。3像素误差的计算方法如下所示:
(8)
其中,
(9)
本研究首先对SPP结构进行测试,并以此为参照,通过减少卷积步长,测试图像尺寸对于匹配效果的影响;然后,对ASPP结构以及特征融合模块的作用进行实验;最后,将本研究提出的具备浅层结构和宽阔视野的网络与基于残差网络的深度特征提取网络进行对比。实验结果如表2所示。
表2 不同网络结构的效果评估
注:“√”表示在特征提取网络中增加了对应的模块;“×2”表示图像的尺寸相对于PSMNet放大了2倍。
由表1中的实验结果可以发现,SPP模块在SceneFlow数据集上起到一定作用,但在KITTI 2015数据集上的表现并不好;增加图像尺寸能够有效提高匹配精度;ASPP结构与特征融合模块的引入,使得本研究设计的网络在精度上超过了参考网络PSMNet。
2.3.1 对SPP结构的消融实验
首先对SPP结构进行了实验。分别采用了平均值池化和最大值池化两种方式,金字塔池化结构中选择的池化核的尺寸为[64×64,32×32,16×16,8× 8],其结果如表3所示。
表3 SPP结构的实验结果
结合表2和表3中的实验结果可知,在SceneFlow数据集上,SPP结构改善了视差估计的效果,应用平均值池化可以将终点误差从1.23降低到1.15;应用最大值池化的效果更好,误差由1.23降低到1.08。但在KITTI 2015数据集上,SPP反而使得结果有所恶化,研究认为这是由于KITTI 2015数据集中的场景更为复杂,而本研究设计的网络层次较少,导致感受野范围较小,直接使用SPP结构会导致池化和上采样的过程中损失较多的空间信息,使得网络的表征效果变差。
2.3.2 对图像尺寸的消融实验
在PSMNet网络中,由于采用了ResNet结构,网络层级较深、参数较多,受到计算机内存和计算能力的限制,必须利用卷积或池化降低输入图像的分辨率,以降低计算成本。由于文中使用的网络层级更浅,允许对更大尺寸的图像进行处理,因此在特征提取阶段,仅使用一次步长为2的卷积操作,使输入图像的尺寸缩小至原来的1/2,而不是PSMNet中采用的缩小至原来的1/4的方式。由表1可知,虽然只是一个微小的改动,但无论是对SPP结构还是ASPP结构,其效果都有明显的改善,对于SPP结构,图像尺寸相对于PSMNet放大2倍后,在数据集SceneFlow上的误差由1.15降低为1.11、在数据集KITTI 2015上的误差由2.09%降低为1.91%。
这说明维持图像的原始分辨率对于保留图像的空间信息至关重要,因此在解决立体匹配等需要空间结构信息且输出图像与输入图像分辨率相同的任务时,更浅但更宽的网络结构更加适合。
2.3.3 对ASPP结构的实验
由于在ASPP结构中,扩张率是需要人工确定的超参数,为了实现最优化,本研究对ASPP结构中扩张率进行试验,共设置了6组参数,前3组参数以3为基数,后3组参数以2为基数,实验结果如表4所示。需要注意的是,为了避免特征融合模块对ASPP结构的影响,在本实验中,取消了特征融合模块,而采用传统的特征图累加的方式。
表4 ASPP结构的实验结果
由表4可知,扩张率对于视差估计的准确率有一定影响。如果扩张率过小,则感受野的范围较小,无法得到足够的环境信息;如果扩张率过大,则感受野的范围较大,容易丢失目标的细节信息;而且以2为基数的扩张率,其效果普遍优于以3为基数的参数选择方案。因此根据实验结果,文中选择扩张率的范围是[4,8,12,16]。
2.3.4 对网络深度的实验
为了探究网络结构的深度与宽度对立体匹配效果的影响,本研究利用深度不同的ResNet结构作为主干网络进行了测试。实验结果如表5所示。
由表5可知,随着网络深度增加,立体匹配的误差逐渐下降,但参数数量也迅速的增加,运算时间也有明显增长。从ResNet- 34到ResNet- 50,网络深度增加16层,参数数量增加了6×105个,KITTI 2015的3像素误差降低了12.4%;但从ResNet- 50到ResNet- 101,网络深度增加51层,参数数量也增加了一倍,且运算时间增加了0.05 s,KITTI 2015的3像素误差只下降了3%,由此可知,一味增加网络深度的代价很高,受益却有限。
表5 对网络结构深度的实验结果
网络参数数量与KITTI 2015的3像素误差的对应关系图4所示。由图4可见,SWNet通过增加网络的宽度,虽然网络参数只有不到ResNet- 101的1/4,却实现了超过ResNet- 101的效果。所以,通过增加网络结构的视野宽度,收益率会更高。
图4 网络参数数量与KITTI 2015的3像素误差的对应关系
Fig.4 Relationship between the number of network parameters and KITTI 2015 threE-pixel error
2.4 KITTI 2015排行结果
将训练好的网络得到的结果上传至KITTI评测网站,与其他优秀的算法进行比较。表6中展示了KITTI 2015数据集上部分算法的表现。
由表6可知,本研究提出的网络,与之前的网络[9- 10,18- 20]相比在精度上有较大的提高,并且参数数量最少;与参考网络PSMNet相比,整体的误匹配率由2.32%下降至2.24%,且参数数量缩减了将近50%(从4.5×106个下降到2.3×106个),这为立体匹配网络应用到移动端平台(如Jetson TX2)提供了可能。运行时间方面,为保证数据的可信度,表6中的各项数据均来自于公开发表的论文,但运行时间这一指标与实验设备的性能紧密相关,在相同的试验条件下PSMNet的运行时间为0.52 s,本研究提出的算法的计算时间为0.40 s,效率提高了约23%。
表6 KITTI 2015立体匹配排行榜
注:D1表示视差图中误匹配点所占的比例,bg表示背景区域,fg表示前景区域,all表示整个区域。
图5展示了GC-Net、PSMNet和本研究提出的SWNet网络生成的部分视差图和KITTI测评网站给出的误差图(误差图中蓝色的点表示正确匹配的点,黄色的点表示误匹配点,黑色表示忽略的点)。图中黑色的圆圈标记出了GC-Net和PSMNet匹配效果较差的部分,通常出现在铁索、栅栏等包含细小结构的位置,而本研究设计的网络通过增加ASPP结构,改善了在这些病态区域的匹配精度。
(a)输入左图
(b)GC-Net视差图
(c)PSMNet视差图
(d)SWNet视差图
(e)SWNet误差图
3 结语
本研究提出了一种具备浅层结构和宽广视野的立体匹配网络——SWNet。浅层结构的特征提取网络减少了对于图像的压缩,保留了更加完整的特征信息。利用ASPP和特征融合模块有效地扩大了网络的感受野范围,并提取了不同尺度的特征信息,用于构建四维的匹配代价卷。3D卷积神经网络进一步的规则化匹配代价卷,并利用带有跳跃连接的编码解码器,聚合了上下文信息。最终采用回归的方式得到视差图。与其他立体匹配网络相比,本研究提出的网络,层数更少、参数更少、处理速度更快,并且匹配的准确率更高。但网络仍然存在泛化能力有限,在重复纹理区域和弱纹理区域等病态区域匹配效果较差的问题。最近,无监督网络与多任务融合网络发展迅速,无监督网络不再依赖大规模的带有真实值的数据集,这使得网络的训练将更加容易,有助于提高网络的泛化能力,而多任务融合网络则是将其他视觉任务与立体匹配相结合,这有助于解决立体匹配在病态区域误匹配率较高的问题,这将是我们下一步的研究目标。