该论文提出的算法,在2018年4月14日前仍然是KITTI排行榜的首位,并且是开源的代码,有较高的学习价值。
0.摘要
最新的研究表明,利用一对立体图像来估算深度信息可以格式化为一个有监督的学习任务,进而通过卷积神经网络来解决。然而,当前基于图块匹配的Siamese网络的架构,缺少利用环境信息取寻找不适定区域(遮挡区域,弱纹理区域等)一致性的能力。为了解决这个问题,本文提出了PSMNet,一个金字塔立体匹配网络,它主要由两个模块组成:金字塔池化和3D卷积神经网络。金字塔池化模块通过聚合不同尺度和不同位置的环境信息构建匹配代价卷(cost volume)来充分利用全局环境信息。3D CNN通过将多个堆叠的
沙漏网络(hourglass network)与
中间监督(intermediate supervision)结合起来,去调整匹配代价卷。所提出的方法已经在多个数据集上做了评估。本文的方法在2018年3月18日前依旧是KITTI2012和2015排行榜的第一位。
1.介绍
从立体图像中估计深度信息对于计算机视觉的应用至关重要,包括车辆的自动驾驶,3D模型重建和物体的检测与识别。得到一对矫正过的立体图像,深度信息估计的目标就是计算参考图像上每一个像素点的视差值d。视差值就是左右两幅图像上对应点之间在水平方向上的位置差。对于左图中的像素点(x,y),它在右图中对应点的坐标为(x-d,y),这个点的深度值可以通过fB/d来计算,其中f是摄像机的焦距,B是两个摄像头之间的距离。典型的立体匹配流程包含基于匹配代价去寻找匹配点和后处理过程。近些年,在MC-CNN中卷积神经网络用于学习如何匹配对应点。早期的方法使用CNNs通过相似性计算来解决匹配一致性的估计问题,CNNs计算一对图块的相似性得分进而判断他们是否匹配。尽管CNN方法与传统方法相比在速度和准确度方面都取得了重要突破,但他依旧很难在不适定区域(例如遮挡区域,重复纹理区域,弱纹理区域和反光表面等)找到精确的匹配点。仅仅利用不同视角下光照强度的一致性约束已经不足以在不适定区域得到精确的匹配一致性估计了,并且对于弱纹理区域这个约束是完全无效的。所以,部分来自于全局环境信息的支持必须融合到立体匹配过程中。
当前基于CNN立体匹配方法的一个主要的问题就是如何有效的利用环境信息。一些研究试图结合语义信息去大量的优化匹配代价卷和视差图。Displets方法利用车辆的3D模型信息去解决匹配中有歧义的点。ResMatchNet学习去计算视差图的反射置信度(reflective confidence)来提高不适定区域的表现。 GC-Net采用编码解码结构(encoder-decoder architecture)混合多尺度的特征信息去调整匹配代价卷。
在本文中,我们提出一个全新的金字塔立体匹配网络(PSMNet)在立体匹配过程中利用全局环境信息。空间金字塔池化(SPP)和空洞卷积(dilated convolution)用来扩大感受野。通过这个方法,PSMNet将像素级别的特征拓展到包含不同尺度感受野的区域级别的特征,将全局和局部特征信息结合起来构成匹配代价卷以获得更加可靠的视差估计值。除此之外,本文还设计了一个结合了中间监督的堆叠沙漏3D卷积神经网络去调整匹配代价卷(
类似传统算法中的代价聚合过程)。这个堆叠的沙漏3D-CNN重复进行由精到粗再由粗到精(top-down/bottom-up)的过程来提高对全局信息的利用程度。
本文的主要贡献如下:
- 本文提出了一个端到端的学习框架来进行立体匹配,不用任何的后处理过程
- 本文引入了金字塔池化模块将全局环境信息结合到图像特征中
- 本文提出一个堆叠的沙漏3D CNN来扩展匹配代价卷中的环境信息支持
- 本文提出的算法在KITTI数据集中达到最高准确度
2.相关工作
为了从立体图像中获得深度估计值,文献中提出了许多方法用于匹配带价计算和匹配代价卷的优化。根据参考文献,一个典型的立体匹配算法包括四步:匹配代价计算,代价聚合,优化和视差精细化。
当前最前沿的研究聚焦于如何利用CNNs准确的计算匹配代价和如何利用半全局匹配(SGM)去优化视差图。Zbontar 和 LeCun 设计了一个深层的Siamese网络去计算匹配代价,利用一对9*9的图块,该网络被训练去学习预测图块之间的相似性。他们的方法同样采用了经典的立体匹配流程,包括代价聚合,SGM和其他视差优化方法来提高匹配结果。更进一步的研究用于改善立体深度估计,Luo等人提出一种更快的Siamese网络,该网络将匹配代价计算转化为多标签的分类问题。Shaked 和 Wolf 提出一个高速网络(highway network)来计算匹配代价和一个全局的视差网络去预测视差置信度得分,这方便进一步优化视差图。
一些研究聚焦于视差图的后处理方面。Displets方法是基于物体通常表现出一个规则的结构并且不会随意变化这样一个事实提出来的。在该算法中,车辆的3D模型被用来解决弱纹理区域和反光表面的匹配模糊问题。除此之外,Gidaris 和 Komodakis 提出一种网络架构通过检测错误标签,用新标签代替并优化新标签的方法(DRR)来改善分类情况。他们利用该方法得到的视差图在没有后处理的情况下仍然得到很好的效果。SGM-Net学习预测SGM的惩罚项来代替人工调整规则化的惩罚项。
近期,用于预测整个视差图并不用后处理的端到端的网络得到极大发展。Mayer等人提出一个端到端的网络来估算视差(DispNet)和光流(FlowNet)。他们也提供一个大型合成数据集(SceneFlow)用于网络训练。Pang等人拓展了DispNet并引入了一种两级网络,称为级联残差学习(CRL)。第一级和第二级网络分别计算视差图和多尺度的残差。然后两级网络的输出相加构成最终的视差图。Kendall等人介绍了GC-Net网络,一种使用3D卷积去调整匹配代价卷的端到端网络。上面提到的端到端方法都利用多尺度特征去估算视差图。DispNet和CRL都利用了较低层次和较高层次的级联特征(concatenating features)和多层信息(hierarchical information)。CRL还使用了多层监督来计算不同分辨率下的视差值。GC-Net使用编码解码结构去调整匹配代价卷。该方法的核心思想是结合环境信息去减少模糊区域的误匹配情况,进而改善深度估计。
在语义分割领域,聚合环境信息对于物体分类同样至关重要。主要有两种利用环境信息的方法:编码解码结构和空间金字塔池化。编码解码结构的核心思想是通过跳跃连接(skip connnection)结合由精到粗再由粗到精的信息。全卷积网络(FCN)是第一个提出聚合由粗到精预测去改善分割结果的算法。U-Net用聚合由粗到精的特征来代替聚合由粗到精的预测,并在分子生物学图像中得到很好的分割结果。更多的研究包括SharpMask,RefineNet和分类优化网络遵循这一核心思想,提出了更加复杂的结构来融合多尺度特征。除此之外,堆叠的多层编码解码结构用于改善特征融合效果,这种结构被命名为沙漏结构(hourglass)。
金字塔池化是基于在深层网络中实际的感受野要远小于理论上感受野的尺寸这一现实情况提出来的。ParseNet演示了一种配合FCN的全局池化方法来扩大实际感受野的大小,去在整幅图像水平上提取信息进而改善语义分割的结果。DeepLab v2提出一种神色空间金字塔池化(ASPP)用于将多尺度特征与带有不同放大比率的空洞卷积相结合。PSPNet提出一个金字塔池化模块去优先收集有效的多尺度环境信息。受PSPNet的启发,DeepLab v3提出一种扩展为全局池化的新ASPP模块。
相似的空间金字塔思想同样应用在光流环境中。SPyNet介绍了一种图像金字塔按照由粗到精的方式去估算光流。PWCNet利用特征金字塔改善了光流估算效果。
在本文关于立体匹配的工作中,我们将语义分割研究的经验和在整幅图像的水平上利用全局环境信息的思想结合起来。如下文所述,我们采用多尺度环境信息聚合,通过一个金字塔立体匹配网络完成深度估算。
3.金字塔立体匹配网络
本文提出的PSMNet,包含一个SPP模块用于有效结合全局环境和一个重叠的沙漏模块用于匹配代价聚合。PSMNet网络结构如图1所示。
图1.PSMNet结构概述。左右立体图像输入两个权重共享的CNN网络通道用于计算特征图,一个SPP模块用于获取特征,通过串联不同尺寸的次级区域的表现和一个用于特征融合的卷积层。左右图像的特征被用于构成一个四维的匹配代价卷,再通过一个3D CNN来完成代价聚合和视差回归
3.1网络结构
表1.PSMNet结构参数表。残差块的结构由带有堆叠层数的方括号表示(如conv1_x就是由3个由2层卷积核为3*3的输出特征图个数为32的残差网络构成)。在conv0_1和conv2_1层中采用了步长为2的下采样(池化,因此输出图像尺寸缩小了一倍)。批量正则化(Batch nomalization)和ReLU 的用法与ResNet中相同,除了PSMNet并不在求和之后使用ReLU。H和W分别表示输入图像的高和宽,D表示最大视差。
与其他研究中使用较大的7*7卷积核用于第一级卷积层不同,本文采用三个较小的卷积核(3*3)卷积层串联起来构成一个更深层的网络,可以获得同样尺寸的感受野(在VGG中提出)。conv1_x,conv2_x,conv3_x,conv4_x是最特征基本的残差块用来学习提取一元特征(unary feature)。对于conv3_x,conv4_x层空洞卷积被用来扩大感受野。输出特征图的大小是输入图像的1/4。SPP模块用于获得环境信息。我们将左右特征图结合成一个匹配代价卷,并把它送入一个3D CNN中进行调整,最后用回归的方法计算视差图。SPP模块,匹配代价卷,3D CNN和视差回归在下面的章节详述。
3.2 空间金字塔池化模块
单独从一个像素的强度(灰度或RGB值)很难判断环境关系。因此借助物体的环境信息来丰富图像特征能够有助于一致性估计,尤其对于不适定区域。在本文中,物体(例如汽车)和次级区域(车窗,轮胎等)的关系由SPP模块学习来结合多层级的环境信息。
在何凯明的论文中,SPP被设计用来去除CNN中的尺寸约束。由SPP生成的不同级别的特征图被平整后送入全卷积层用于分类,在此之后SPP被用于语义分割问题。ParseNet使用全局平均池化来结合全局环境信息。PSPNet拓展了ParseNet,采用包含不同尺度和次级区域信息的分层全局池化。在PSPNet中,SPP模块使用自适应平均池化把特征压缩到四个尺度上,并紧跟一个1*1的卷积层来减少特征维度,之后低维度的特征图通过双线性插值的方法进行上采样以恢复到原始图片的尺寸。不同级别的特征图都结合成最终的SPP特征图。
在本文中,我们为SPP设计了4个尺度的平均池化:64*64,32*32,16*16,8*8。并与PSPNet一样,采用了1*1卷积和上采样。在简化模型测试中(ablation study),我们设计了大量的实验来展示不同级别的特征图的影响,在4.2章详述。
3.3 匹配代价卷
与使用距离测定方法不同,MC-CNN和GC-Net方法都结合左右图特征使用深层网络来学习匹配代价的估计。跟随GC-Net的方法,我们通过结合左右图中每个视差值对应的特征图,采用SPP特征来构成一个四维的匹配代价卷(高*宽*视差*特征大小)。
3.4 3D CNN
SPP模块通过结合不同级别的特征有助于立体匹配。为了在视差维度和空间维度上聚合特征信息,我们提出两种类型的3D CNN结构来调整匹配代价卷:基础结构和堆叠的沙漏结构。在基础结构中,网络由简单的残差块构成。基础结构包括12个3*3*3的卷积层。然后我们通过双线性插值的上采样将匹配代价卷的尺寸恢复到H*W*D。最终,我们利用回归的方式来计算尺寸为H*W的视差图,将在3.5节详述。
为了得到更多的环境信息,我们使用一个沙漏(编码解码)结构,由多个重复的带有中间层监督的由精到粗再由粗到精的过程构成。这个堆叠的沙漏结构有三个主要的沙漏网络,每个都会生成一个视差图。这样三个沙漏结构就会由三个输出和三个损失。损失函数在3.6节详述。训练过程中,总的损失是由三个损失值的加权求和得到的。在测试过程中,最终的视差图是由三个输出中的最后一个得到的。在我们的简化模型测试中,我们用基础结构来测试SPP模块的表现,因为基础结构没由通过编码解码结构学习额外的环境信息。
3.5 视差回归
我们使用视差回归的方式来估算连续的视差图。根据由softmax操作得到预测代价Cd来计算每一个视差值d的可能性。预测视差值d'由每一个视差值*其对应的可能性求和得到,如下式
视差值回归比基于分类的立体匹配方法鲁棒性更强。
3.6 损失函数
因为视差回归,我们采用了平滑的L1损失函数来训练PSMNet。平滑的L1在物体检测的边缘箱型回归中应用十分广泛,因为它比L2损失函数具有更高的鲁棒性,对于异常点更不敏感。损失函数定义如下:
式中:
其中,N是标记的像素的数量,d是真实视差值,d'是预测的视差值。
原文链接:https://arxiv.org/abs/1803.08669
代码链接:https://github.com/JiaRenChang/PSMNet
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“**深视**”。