王亚群,戴华林,王 丽,李国燕
(天津城建大学计算机与信息工程学院,天津 300384)
近年来,随着计算机技术的发展,各种人工智能产品层出不穷,如无人驾驶汽车[1]、智能家居、智能机器人[2]、医学成像[3]等。这些人工智能产品为了能够更好地感知周围环境,必须要对所接收的图像进行深度估计。
传统图像深度估计方法主要分为两类:一类通过硬件设备测量得到图像深度,现在市场上推出了各种用于感知3D 场景的传感器,如激光雷达、Kinect硬件设备等,然而它们在应用过程中存在成本高、受限多、捕获的深度图像分辨率低等问题,导致无法被广泛推广使用;另一类是基于图像处理的深度估计方法,该类方法根据视觉传感器数量的多少分为单目视觉系统和多目视觉系统,实际应用中大多使用双目或多目方法来获取深度信息,如利用三角测量法[2]转化2 幅图像之间的视差关系为深度信息,但这类方法易受外界因素的影响,难以获取高质量的视差图。为解决该问题,学者们开始研究如何利用深度学习的方法从单幅图像中估计场景深度信息,相比双目或多目视觉系统,通过单目视觉来进行图像深度估计具有成本低、应用灵活方便的优点,且现实生活中提供的数据信息多为单视点数据[4-6]。但是,从单幅图像估计场景深度具有一定的模糊性,导致通过单目图像来估计深度信息难度较高。
在基于深度学习的单目图像深度估计研究过程中,EIGEN 等[7]将深度估计、表面法线预测和语义标注3 个任务统一在一个三级神经网络中,并将结果的分辨率降为输入图像的一半。LIU 等[8]将CNN 与条件随机场(Conditional Random Filed,CRF)相结合,提出一个两步框架:用深度网络提取深度特征,用CRF 进行深度信息优化。但上述2 种方法都没有实现端到端的训练,需要分布进行。LAINA 等[9]采用ResNet-50 残差网络并用小卷积代替大卷积来实现上采样,同时提出一种新的损失函数,其能得到更好的估计结果。
TEED 等[10]针对视频中单眼深度估计的问题,提出一种DeepV2D 方法,其在端到端架构中结合2 种经典算法。DeepV2D 网络包括深度估计模块和摄像机运动模块,深度估计模块将摄像机运动作为输入并返回初始深度图,摄像机运动模块获取预测深度并输出精确的摄像机运动。此外,网络在这2 个模块之间交替运行以预测最终的深度图。GODARD 等[11]提出一种自我监督方法,使用完全连接的U-Net 并利用位姿网络来估计图像对之间的位姿,使用外观匹配损失解决像素遮挡问题,利用自动遮蔽方法忽略在训练过程中没有相对移动的像素点。YIN 等[12]提出一种利用3D几何约束来估计深度图的监督框架,其直接利用深度图估计场景和表面法线来重建3D 结构,在重建的三维空间中随机抽取3 个点确定的虚拟法向,从而显著提高深度预测精度,该方法深度图鲁棒性强且具有强大的全局约束。LEE 等[13]在网络结构解码阶段插入局部平面指导层,将各层的输出串接到最后的卷积层中,得到深度图。TOSI 等[14]提出一种自我监督的框架,使用端对端的单眼残差匹配来估计深度图,利用结构相似性重建损失,其利用具有边缘感知项的视差平滑度损失和反向Huber损失来训练网络。GUIZILINI等[15]将有监督和自监督2种方法相结合,提出一个新的有监督损失项,利用该损失项来训练鲁棒的半监督单目深度估计模型。
目前,在单目图像深度估计的各项研究过程中,随着网络层数的不断加深,感受野越来越小,虽然能够提高网络分类的准确性,但是网络的训练越来越困难,同时所预测出的深度图存在深度信息不准确、误差偏大等问题。为了解决以上问题,本文提出一种基于密集卷积网络的单目图像深度估计方法。编码器采用密集卷积网络(DenseNet)[16],每一层都与其之前的所有层进行连接,前面所有层的输出都作为这一层的输入,从而实现特征重用,减少参数,同时防止梯度消失问题发生。解码器采用上投影模块和双线性插值模块来放大特征图,上投影模块引入空洞卷积[17],在不增加参数量的条件下其比标准卷积拥有更大的感受野,从而避免信息丢失,使得高层次的特征信息能够更有效地传播,并逐步提高特征图的分辨率,最终适应网络的输出。
本文提出一种密集卷积的编解码网络结构,以对单目图像进行深度估计。编码层使用DenseNet 网络对输入的图像进行特征提取,解码层结构采用加入了空洞卷积的上投影模块对编码层提取的特征进行上采样,从而解决因网络加深而引起的梯度消失问题,同时提高精度,简化网络结构,降低网络复杂度。深度估计网络结构如图1 所示。
图1 深度估计网络结构Fig.1 Depth estimation network structure
目前,在针对图像深度估计的研究中,编码器结构大多采用ResNet 网络[18],因为其跳跃连接的结构特点,可以在一定程度上解决梯度消失和网络退化问题,但是,ResNet 网络在运行过程中易产生大量冗余且每一层学习的特征信息较少,在实际应用场景中成本较高。DenseNet 网络使用密集连接,能够使每一层互相连接。传统的N层卷积网络在每层及其后续层之间有N个连接,而DenseNet 网络有(N×(N−1)/2)个连接,这种连接方式称为密集连接。DenseNet 网络的非线性变换方程如式(1)所示:
其中:Hl代表非线性转化函数,是一个组合操作,其可能包括一系列的批标准化(Batch Normalization,BN)[19]、线性整流函数(Rectified Linear Unit,ReLU)、池化(Pooling)、卷积(Conv)操作。l层与(l-1)层之间可能包含多个卷积层。
DenseNet网络包括卷积层、密集连接块(Denseblock)、过渡层(Translayer)、全连接层。
Denseblock 是一个紧密连接的模块,结构如图2所示。在这个模块内,每一层的输入来自于这个模块内这一层之前所有层的输出,一个密集连接块包含BN、ReLU、Conv、Dropout[20]操作,是DenseNet 的重要结构。本文在每个密集连接块中3×3 卷积的前面都加入一个1×1 的卷积操作,称为瓶颈层(Bottenlayer)。原始的密集连接模块BN+ReLU+Conv(3×3)+Dropout 如图3(a)所示,加入1×1 卷积之后的密集连接模块表示为BN+ReLU+Conv(1×1)+Dropout+BN+ReLU+Conv(3×3)+Dropout,如图3(b)所示。
图2 密集连接块结构Fig.2 Denseblock structure
图3 不同的卷积层结构Fig.3 Different convolutional layer structures
过渡层由1×1卷积层和2×2平均池化层构成,如图4所示,其负责连接相邻的密集连接块,对其输出执行BN、ReLU、Dropout、Pooling 等处理。过渡层中压缩系数的参数θ∈(0,1),当θ=1 时,特征图的数量保持不变。本文实验将θ参数设置为0.5,使传递到下一个密集连接块的通道数减半,这样可以在不影响准确率的情况下降低网络复杂度,提高计算效率,加快网络模型的收敛。
图4 过渡层结构Fig.4 Translayer structure
本文采用的DenseNet 包含4 个密集连接块和3 个过渡层,同时在DenseNet 原有网络的基础上去除了末尾的全局平均池化层和用于分类的全连接层,直接输出图像作为解码器模块的输入,如图1 中Encoder 模块所示。网络结构参数如表1 所示,其中,Conv 代表BN-ReLU-Conv。
表1 Encoder 网络结构参数Table 1 Encoder network structure parameters
解码器的主要作用是表达编码器所提取到的图像特征,得到与输入图像相对应的深度图,从而实现端对端训练。目前主要通过上采样(Up-sampling)、上池化(Un-pooling)、反卷积(Deconvolution)3 种方法[21]来实现这一过程。
本文采用的解码器结构属于上采样的一种,其包括4 个带有空洞卷积的上投影模块(Up-projection),上投影模块是在标准上卷积模块的基础上进行的改进。标准上卷积模块如图5 所示,首先经过一个2×2的上池化层,进行最大池化的反向操作,除最大值位置外其他位置补零,使得特征图扩大一倍;然后经过卷积核为5×5 的卷积操作,并进行ReLU 函数激活。本文采用的上投影模块结构如图6 所示,包括2 个扩张率(dilatation)为1 的5×5 空洞卷积[22]和3×3 卷积操作。在相同的计算条件下,使用空洞卷积能够提供更大的感受野,使得每次输出的内容保留更多的特征,减少信息丢失。上投影模块的连接使高级信息在网络中更有效地向前传递,同时逐步增加了特征图的大小。
图5 上卷积模块结构Fig.5 Up-convolution module structure
图6 上投影模块结构Fig.6 Up-projection module structure
本文在4 个带有空洞卷积的上投影模块后采用3×3 的卷积操作以实现降维,然后采用双线性插值操作输出预测深度图。双线性插值的计算方法为:假设已知函数f在Q11=(x1,y1)、Q12=(x1,y2)、Q21=(x2,y1)、Q22=(x2,y2) 4 个点的 值,首先在x方向进 行线性插值,当R1=(x,y1),有:
损失函数的选择对优化网络模型具有重要意义。本文采用Berhu 损失函数对网络进行训练,Berhu 损失函数如式(6)所示:
以c值作为界限,在c点的值是连续且一阶可微的。当x∈[ -c,c]时,Berhu 损失保证预测值与真实值相近时也能保持一定的梯度下降速度,从而获得更好的收敛性能;在x大于c时保证梯度迅速下降。设置能够取得最好的训练效果。
NYU Depth V2 是常用的室内深度预测图数据集,其原始数据集图像尺寸均为640 像素×480 像素,涵盖了464 个场景,这些场景均为微软公司采用Kinect相机采集的视频帧序列,包含RGB 图像及深度图。其中,训练场景为249 个,测试场景为215 个。因为训练集的数据量太少,所以需要对采样所得的数据通过左右翻转、颜色变换、尺度变换的方法进行扩充。
本文使用双线性插值将图像从原始大小640像素×480 像素降采样为320 像素×240 像素,然后裁剪其中心部分以获得304像素×228像素的图像。为了进行训练,深度图会下采样为152像素×114像素以适合网络输出。
实验硬件配置为Intel®CoreTMi7-7700CPU@3.60 GHz 处理器,模型在16 GB 内存的NVIDIA Tesla K20M GPU 上进行训练。网络训练是基于RGB 图像的输入,用对应的真实深度进行训练。实验将批处理大小(batch size)设置为8,最大迭代次数(max epoch)设置为1 000,初始学习率(learing rate)设置为0.001,随着迭代的增加,学习率会逐渐减小,直到网络收敛。
在对图像深度进行预测时,为了评估预测深度与真实深度之间的差异,通常采用以下的评价指标进行判断:
本文通过3 个对比实验,分别验证选择Berhu 作为损失函数的有效性、编码器结构采用DenseNet 网络的有效性、解码器结构采用带有空洞卷积的上投影模块的有效性。
2.4.1 损失函数的有效性
本文在网络结构相同的条件下,分别使用L1、L2、Berhu 这3 种不同的损失函数进行对比实验,结果如表2 所示,最优结果加粗表示(下同)。从表2 可以看出,使用Berhu 作为损失函数预测出的图像深度误差更小,原因是Berhu 损失函数的权值能够根据误差大小而发生较明显的幅度变化。
表2 损失函数对比Table 2 Comparison of loss functions
2.4.2 DenseNet 模块的有效性
为了验证DenseNet 模块的有效性,本文将编码器结构分别替换为VGG 网络、ResNet 网络,并与本文提出的DenseNet 网络进行对比,实验结果如表3所示。从表3 可以看出,由于DenseNet 网络自身密集连接的结构特点,因此其能保留更多的特征信息,加强特征的前向传播,使得实验结果误差更小,准确率更高。
表3 不同模块的有效性对比Table 3 Comparison of effectiveness of different modules
2.4.3 上投影模块的有效性
本文在其他条件相同的情况下对不同的上采样模块进行对比,包括3×3的反卷积(模型1)、上卷积(模型2)、没有添加空洞卷积的标准上投影模块(模型3)以及本文提出的带有空洞卷积的上投影模块(模型4),对比结果如表4 所示。从表4 可以看出,使用本文提出的带有空洞卷积的上投影模块作为解码层结构时,均方根误差RMSE 为0.553,δ<1.25 时的准确率为0.840,这是因为空洞卷积扩大了感受野,提取特征的范围更广,在分辨率提高的同时能够精确定位目标。
表4 不同上采样模块的有效性对比Table 4 Comparison of effectiveness of different up sampling modules
2.4.4 NYU Depth V2 数据集结果
将本文方法测得的评价指标与其他单目深度估计方法进行对比,实验结果如表5 所示(表中各方法的评价指标直接引用原文献中的值,空白处表示原文献未计算该评价指标)。从表5可以看出,本文方法的均方根误差RMSE为0.482,与文献[8]方法相比降低了34.2个百分点;δ<1.25时,本文方法的准确率为0.851,与文献[7]方法相比提高了8.2 个百分点,与文献[8]方法相比提高了23.7 个百分点。由此可见,本文方法预测的图像深度误差更小,准确率更高。
表5 NYU Depth V2 数据集上的评价指标Table 5 Evaluation indicators on NYU Depth V2 dataset
在NYU Depth V2 数据集上的测试结果如图7 所示,将本文方法得到的深度图与文献[7]方法、文献[9]方法进行比较,可以看出,本文方法得到的深度图与真实深度图更为接近,且图中物体轮廓更清晰分明。
图7 NYU Depth V2 数据集上得到的深度图Fig.7 Depth maps from NYU Depth V2 dataset
本文提出一种对单目图像进行深度估计的密集卷积网络结构。编码层由DenseNet 组成,采用密集连接的方式加强特征重用和特征的前向传播;解码层采用上投影模块和双线性插值操作,逐步提高分辨率并降低通道数,上投影模块负责恢复深度信息,其中引入的空洞卷积扩大了感受野,双线性插值模块输出预测深度图,在不需要引入其他参数的情况下能够放大特征图。在NYU Depth V2 室内数据集上的实验结果表明,在δ<1.25 时本文方法的准确率达到了0.851,均方根误差RMSE控制在0.482以内,且减少了网络参数。但是,目前本文模型对数据样本有较高的要求,需要在有监督的情况下进行训练,下一步将构建适用于无监督方式的网络模型,同时改善损失函数,从而加强边缘信息并改善边缘失真的情况。