APP下载

双路融合的深度估计神经网络方法研究

2020-10-19吴一珩

计算机工程与应用 2020年20期
关键词:网络结构标定卷积

刘 春,吴一珩

湖北工业大学 计算机学院,武汉 430068

1 引言

深度感知问题属于计算机视觉领域3-D重建部分,是各类机器人与无人驾驶技术环境感知与自主决策能力的基础,其中完全基于视觉的深度估计是近年来的热点研究问题。双目立体视觉深度估计[1-2]的准确性与左右图像像素点的匹配精确度以及基线长度相关,适于测量距离较近、视场范围较小的场景。单目视觉深度估计精度受摄像头分辨率、成像畸变、焦距精度影响相对较差,且需要预先知道参照物的实际长宽高等参数,还要能准确预知目标物的像素高度,目前通过单目相机获取实际深度信息在实用化上还存在较大问题,但这种方法在功耗、安装、成本、标定步骤等方面相对其他测距方法具有难以比拟的优点。

单目深度估计的经典模型有模糊度模型、大气散射模型、物体阴影模型、曲率模型、消失线模型等,基本上都属于在约束条件下求病态优化的问题。用机器学习方法求解的代表是Ng A Y[3],他基于MRF 把各种约束关系放在模型的data term 和connectivity term 中求解。Make3D[4]项目进一步将图像分割得到super-pixels,从而得到更平滑的结果。Hoiem D等[5]在图像分割基础上又增加了一层语义分割,即对分割部分标注像素,然后采用平面billboard 做纹理映射后得到“pop-up”的3-D 景物,但这种像素级标注工作挑战性巨大。

使用深度学习做单目图像深度估计可形式化描述为:

对2d图像I,找到一个变换函数F来求取I上像素点对应的深度d=F(I)。

直接求解F几乎不可能,而将深度学习方法引入深度估计则提供了一个迂回解决的方法,即以相对深度的方式反映真实距离。

2014 年Eigen 组的经典文献[6]提出用Multi-Scale的深度神经网络来解决单目深度估计的问题,2015 年文献[7]将AlexNet 换成了更深的VGG16 网络,并引入了池化层和上采样过程提高了效果和适用性。文献[8]则去掉了全连接层,建立了完全卷积网络结构,并将高层的语义信息与深层的外观信息结合起来,生成精确和详细的语义分割,使得准确度提高了近一倍。其后深度估计的进展从暴力运算转为与各种经典传统算法相结合,例如结合表面法向图的联合训练方法GeoNet(Geometric Neural Network)[9],利用双目立体视觉产生空间约束用作无监督学习的单目深度估计方法[10],采用帧间运动辅助单目视频深度估计的方法[11],结合全连接CRF的深层网络联合训练估计深度信息的方法[12],结合视觉综合中的几何约束和成像特性的方法[13],结合运动和边缘信息的联合训练方法[14],结合光流和姿态[10]的联合训练方法,以及融合光流、物体运动信息、语义分割的方法[15-17]等。上述这些深度学习方法逐渐融入了传统方法的约束和先验知识,一定程度上缓解了数据标注的压力,并通过多任务联合训练提升了模型和算法的性能。

本文提出了一种结合深度与深度梯度语义信息的融合神经网络,从两个方面对深度与RGB 图像进行端到端的估计,能保留足够的深度信息,该方法原理类似语义分割法,但过程更简便,并设计了一种单次标定方法,大幅度减少了场景的标注工作量,广泛适用于户外远距离和图片分辨率较高的场景。

2 双路融合的深度感知神经网络结构

2.1 双路神经网络架构

同一目标物体的各个像素点在深度图中可以认为具有相同的深度,换言之,深度图中拥有相同轮廓的物体映射区域可以认为拥有相同的深度信息,而轮廓在图像中表现出梯度信息变化剧烈的特征[18],因此本文在提取单张RGB 图片的特征信息之外,又增加了额外一路结构相同的神经网络用于提取深度梯度信息。设置该网络有助于辅助判别前景与背景及目标物体,减少深度计算中的错误概率,如果不提取这种深度梯度特征,画面中前景与后景的分层不够清晰分明,深度图中目标物体表现为易与背景融合导致边界模糊。

但同时提取RGB图片特征和深度梯度特征会造成网络结构过于复杂,且由于本文需要采用的网络输入远大于常见的网络输入,在不加入额外一路神经网络时,时间复杂度为6 871 MFLOPs,空间复杂度为681 Mparams。

在双路架构下总时间复杂度可达12 000 MFLOPs,空间复杂度为1 200 Mparams,因此对训练时使用的硬件设备有较高要求,也很容易引起过拟合的现象。为此本文采取了模块化神经网络方法,模块化神经网络模型[19]的优点包括,降低网络复杂性和实现难度、鲁棒性和容错能力强、可扩展性强、计算效率高、学习能力和泛化能力强等。本文提出的网络结构划分为几个小的训练模块后,网络结构被解耦,在训练过程中不需要同时对全部的参数进行操作,而是仅针对某一模块中参数进行调整,该模块的结果再作为下一模块的输入,整体参数量虽然没有减少,但是训练与识别过程中每次仅会出现总体参数量一部分,这种做法不仅可以解决复杂度过高带来的训练和预测难题,也给予了快速验证模型有效性的能力。

本文中的双路融合深度感知神经网络包括深度估计网络和深度梯度计算网络两路,如图1 所示,每一路分别又包含特征提取、特征融合、特征细化三个模块,从粗糙到细致,逐步优化,并在特征细化后对两路的输出特征拼接融合成新的联合特征,然后再次训练和微调参数。不同模块的卷积层之间部分以残差结构相连,在提高训练速度和减少参数量的同时,保证了高层的语义在网络中能稳定地传递,并能减少参数量过大引起的网络臃肿。双路结构中的每个模块都融入了原有的RGB语义信息,模块中的卷积网络也融入高层的语义信息,六个模块根据自身的结构设计出相应的训练策略,分模块的训练将漫长的训练过程阶段化,缓解了超大参数量和计算量带来的硬件压力。该网络结构的输出为150×600的深度矩阵,代表了输入图片的相对深度信息,最后通过一个标定参照物可解得全局最终的真实深度信息。

图1 网络整体结构

2.2 输入层

常用于环境深度感知算法的神经网络结构包括Alexnet[6]、VGG-16[14]与VGG-19[14],这些算法也多是针对细节丰富图片分辨率较低的室内场景,因此网络的输入仍然可以选择常见的224×224 或者是300×300,参数量与计算量可以有效控制在一定范围内,甚至可以在网络结构中加入参数量极大的全连接层。但户外的场景不仅包括一些难以测量的物体,例如蓝天白云,而且画面内物体的体积也普遍大于室内物体,由此带来的影响是,户外场景图像分辨率远大于室内场景并且为了有更宽阔的感知域,图像长宽比也远大于室内场景图像,例如特斯拉无人驾驶汽车使用的三眼摄像头Apollo 2.0,为了获得更加宽阔的视野,三眼摄像头拍摄的鱼眼画面被拼接一起,其画面长宽比远大于普通相机照片。作为神经网络的输入时,单纯地将其下采样至一个方形矩阵等同于舍弃相当大部分的深度信息,对于神经网络提取特征十分不利,结合本文使用的KITTI深度预测数据集和户外环境深度信息预测的实际情况,如图1 所示,本文提出的网络结构输入大小为352×800×C,深度信息标定训练时C=3,表示三通道,深度梯度信息标定训练时C=2,表示图片加权平均灰化后的梯度矩阵。采用反复堆叠小卷积核的方式来达到大卷积核的感受野,逐层稳定地减小卷积图的大小扩充卷积图的通道,尽可能地多保留语义信息。

2.3 特征提取模块设计

如图2所示,特征提取模块采用了64个通道步长为1 大小为3×3 的卷积核,完成了较为粗糙的采样,此时所采集到的特征是最原始的特征,然后使用4×4 大小步长为4 的最大池化层快速降低参数量,此后连续使用3×3 步长为1 的卷积核和2×2 步长为2 的最大池化层4次,将卷积特征图大小降为11×25×256,由于原图较大,为提取更多的特征信息,该层卷积特征图之后进行了小卷积核的多次堆叠卷积,最后的五层卷积特征图同时引入特征融合模块,形成残差结构,该结构在有效削减参数量的同时,保证了特征重用。

最后的结果经FLATTEN等处理后对参数数量稍作修改。在获得相同感受野的情况下,多个3×3 卷积核相比大尺寸卷积核存在更多的非线性因子,使得判决函数更有判决性,因此本模块的设计并没有沿袭传统的5×5、7×7 卷积的做法,实验证明这样训练的模型效率更高。

2.4 特征融合模块设计

特征融合模块的设计是为了强化原图的语义信息,从特征重用的角度提升网络性能,其输入与上一模块相同。原图RGB矩阵或梯度矩阵经过特征融合模块的六层连续卷积,如图2 所示,其中五层与上一模块之间通过残差结构相连,这五层分别为Conv13至Conv17按照顺序与上一模块的Conv6 至Conv11 两两相连,实验表明这种做法比跨越较小层数的连接在深度重建的精确度上略有提升。除了第一个卷积图使用的卷积核为4×4 之外,其余的卷积核都为3×3,这也是为了将原图快速处理成适应神经网络的大小的同时,尽可能减少参数,特征提取模块的输出大小为178×398,略微修改形状后大小变为[120,480],与上一模块的结果相融合后作为第二个模块的最终输出。

2.5 特征细化模块

实验过程中发现,仅有前两个模块的输出深度信息仍然不够精确,对于一些障碍物的边缘准确度不够。因为前两个模块的卷积输出大小仅有原深度图的八分之一,会损失大量的边缘信息和深度信息,使得边缘模糊,因而对深度的恢复非常不利,造成输出深度信息不够精确。

另外[120,480]分辨率对于神经网络的参数量和计算量是一个很好的折中,但是考虑到目前摄像头的分辨率都在百万像素甚至千万像素以上,此输出分辨率损失的信息过多,画面中的一些细节易被掩盖。因此在特征融合模块结束后还对输出矩阵进行了最邻近上采样处理,但倍数过大的上采样又进一步加重了图像的失真,体现在深度图上就是画面出现“马赛克”现象,加重了边缘准确性不足的问题。

图2 特征提取模块和特征融合模块示意图

因此需要通过特征细化模块同时对输出特征图和原图进行操作处理,并将得到的语义信息与上采样结果融合,来保证每个模块都存在来自原图最原始的特征信息。如图3所示,采用与特征融合模块中相同的结构将原图处理成大小为[176,400]的特征图,对此特征图略作参数量的调整后,将其与上一模块的输出结构相融合,得到[150,600]大小的特征图矩阵,为使最终结果进一步接近标定结果,采用1×1 大小的卷积核继续逐步修正。由于整体结构属于端到端的网络,最后的1×1卷积核修正不再影响输出结果的分辨率,因此可以根据实际情况增加或减少修正卷积层的层数,本文选择五层作为修正。

图3 特征细化模块示意图

经过上文的处理之后,双路网络的输出最终融合,进行最后的整体调整提升精度。特征细化模块专为融合特征信息后提升精度而设计,在此模块中仅使用1×1大小的小卷积核,小卷积核带来的非线性变换操作使得模型的泛化能力进一步提高。

2.6 归一化输出

在训练期间,该双路结构网络的输入为单张RGB图片,预处理之后得到归一化的尺寸为352×800×3 的矩阵和此RGB图片加权平均灰化后大小为352×800 的梯度矩阵。为了保证输出结果的有效性,该网络结构没有使用真实的深度信息作为输出,网络输出为双路融合后得到的大小为120×480 的归一化相对深度信息矩阵,即为深度估计结果。

3 双路融合的参数训练过程

本文提出的网络结构由于分成了多个模块,并且双路的结构基本一致,网络结构在实现的难度上不大,如图4所示,由于双路神经网络的训练方式相同因此只画出其中一路的完整训练过程。分模块训练过程中,减少了每个模块的训练参数量,也降低了每个模块迭代的次数,但是分模块相当于增加了代码的循环迭代层数,为了将原图信息融入到各模块中,双路结构相当于进行了三次不同的特征融合过程,相应增加了训练的复杂度。

图4 训练过程示意图

图5 所示为本模型使用的数据集,来源于KITTI 数据集中的单目深度预测数据集:总共包含1 000 张图片及其相应的深度图,抽取其中800 张作为训练集,剩余200 张作为测试集。与常见的NYU 单目测距数据集比较,该深度图由激光雷达采集得来,因此深度信息表现为3D云点,深度信息中包含部分空值,上一章所述网络结构中最大池化层也是基于此考虑,若选择平均池化则必定减小边缘部分的深度,为减少其影响,在标定时根据邻近的像素值对物体所在区域进行数值填补。训练时标定的图片由原深度图的最邻近差值下采样得来,下采样的最终大小分别为120×480 与150×600,分别作为分模块训练时的标定。

图5 KITTI数据集

该网络的训练采取分步的方式进行,损失函数的选择是深度学习网络模型训练过程重要环节之一,选择正确的损失函数能提供更好的收敛方向,获得更好的训练结果。对于深度信息,目前通用的损失函数为l2损失函数,以最小化预测结果与真实值差的欧式范数平方作为收敛方向。

首先只训练前两个模块,目的是为了使输出结果更加接近标定,所使用的损失函数为:

和分别表示某一张RGB图像的深度信息矩阵与预测深度信息矩阵,这个矩阵共计有n个因子,也就是n个像素点,p表示矩阵中第p个因子。

为了增强网络模型在色彩对比度低、色调阴沉、背景单一环境下的性能,训练时对训练图片直方图均衡处理,也作为训练集喂入神经网络中。

训练完成后,冻结当前模型,进入特征细化模块训练,此时使用的损失函数仍然为公式(1)。

基于深度梯度信息的神经网络损失函数如下:

和分别表示某一张RGB图像的深度梯度信息,在x轴和y轴上的数值,表示标定与训练输出矩阵。其训练过程与深度信息神经网络完全一致。

两个网络的结果在特征细化模块相遇后进行融合和再训练,此时的联合损失函数为:

联合损失函数是公式(1)、(2)的结合,为了从深度信息和深度梯度信息两个方面细化最终结果。

训练时使用的框架为tensorflow,并基于GTX 1080ti加速,考虑到参数量较大的因素,batchsize设置为32,初始学习率为0.01,每经过10 000次学习率下降至原来的1/10,为避免过拟合,在每个卷积运算中加入滑动平均模块。由于网络训练分模块进行,其收敛速度非常快,网络的梯度下降情况如图6所示,将其与Eigen[7]的网络结构相比,其收敛速度有明显优势。

图6 损失函数数值变化

模块化的设计拆分了原本结构较深的网络结构,整个训练过程中可以非常灵活地单独取出某个模块网络结构的权重,并进行微调修正。

4 单目测距的标定方法

目前的深度估计神经网络在计算图像特征和像素间距离关系时采用了归一化值,因而最终的输出为真实距离的归一化关系值,也就只能获得深度之间的相对关系,还需要至少预知一个标准参照物的真实距离才能恢复出各像素的实际距离。但如果拍摄内容千变万化,则预知标准参照物距离实际成为一个标注与目标识别问题,加大了工作量和复杂度。

本文采用了一种简便方法,如图7 所示,利用在摄像头前固定安装带标尺的标杆方法,可简便地获得标定参考值。从而在保证标杆与镜头之间距离不变的情况下,已知该距离就可以从前文中获得的相对深度信息图还原出整体的画面距离。如图7所示,标杆可固定在摄像头前方。相较于传统利用几何关系推导的单目测距方案,本文方法的优势在于应用简便,几乎不受环境限制,也无需预知画面中各种物体的种类和大小。

图7 标杆示意图

5 实验

5.1 深度估计测试

由于激光束测距的局限性,实验所用的KITTI数据集图片中的每个像素点并不都有相应的深度数据,为避免不存在的真实深度信息对测试结果的干扰,实验只对有深度数据的像素点进行比较,并采用了常用的衡量指标评估结果[20]:

平均相对误差(average relative error,Rel):

对数空间平均误差(average lg error,lg):

均方根误差(Root Mean Squared Error,RMSE):

准确率:

通过实验将得到的输出结果与文献[8,10,21-22]的训练方法输出结果进行对比,其结果如表1 所示,获取的深度图如图8 所示。CNN 卷积神经网络模型能够灵活地从图像中提取出丰富的特征信息,且特征提取和统计分类的过程无需人工辅助。

表1 准确率对比实验(前三列数值越小越好,后三列数值越大越好)

图8 KITTI深度图对比实验

图9 实际场景对比实验

图10 单目测距实验

实验采用的对比对象分别代表融合双目立体视觉[10],使用全卷积层[8],融合CRF与超像素池化的网络结构[21]和融合CRF序列结构的多尺度网络结构[22]。

实验结果如表1所示,本文提出的网络结构误差上略低于文献[10],但在整体像素点的距离预测上表现更优。

文献[10]网络结构的深度恢复能力来源于它创新性地使用了双目立体视觉标定的无监督网络,因此该网络结构也继承了双目立体视觉的缺点,由于在训练时使用的左右眼数据有着相同的基线,而基线是双目立体视觉的测距精度的决定性因素之一,当图像不再是此方法所使用的数据集时,相当于特定镜头与空间点发生了变化,因此该方法在实际场景的应用中(图9),它的表现较差,距离略远一点的汽车被认为是背景,双目立体视觉不适用于单调缺乏纹理的场景,比如天空与墙面,所以文献[10]网络结构对于背景中的一些物体提取深度信息的能力较差。

而本文提出的监督学习网络结构对画面的抗干扰性更强,由于在训练过程中没有引入光照亮度等因素,融合了深度梯度信息的本文网络结构对于单调背景下的物体边缘深度信息获取得更为准确。在整体训练过程中做到了兼顾全局特征与局部特征,每个模块都可以接收来自原图的语义信息和高层卷积层的特征信息,同时模块化的设计从多个角度优化了网络性能,残差结构的随机丢弃特性有效避免了参数庞大层数过深引起的过拟合,对于较远距离的物体也能从图片的梯度信息中提取出边缘,表现出较强的鲁棒性。

5.2 实际环境测试

实地环境测试包括几个不同的场景,如图10所示,图中标尺为此次实验中使用的距离标定物。选用基于几何关系推算的单目测距方案做对比实验[23],测距准确率的对比实验结果如表2 所示,误差与实际距离之间的距离如图11 所示,实际距离与误差之间进行线性拟合得:

本文方法:

基于几何关系的单目测距:

图11 误差分析

表2 测距准确率对比试验

基于几何关系的单目测距随着测量距离逐渐增加,误差快速上升并越来越大[24]。本文提出的方案则是从单张图片中获取完整的相对深度信息,再通过一次标定求出所有真实距离,误差率仅与相对深度信息有关,深度图的精度越高,标定物得到的距离越准确,误差率就越低,在对于有充分训练数据的测距范围,神经网络的深度估计误差范围能被控制在一定范围之内,该范围与深度计算误差、训练数据中激光雷达对于远距离物体的分辨率等有关。若画面中的目标距离超过一定范围时,其边缘可能会与背景融合导致其深度信息产生较大误差,极限条件下,超过一定距离范围都会被处理为1,表示无穷远,导致误判。因此测试时选取了具有明显轮廓的目标物体作为测距对象,实验测试集中物体真实距离最远为17 m,实验结果如表2 所示,在该距离段内误差范围小于7.0%,与标定物距离远的物体的测量结果比距离标定物近的物体的测量结果误差略大但不是线性增加。该误差与深度识别的精度有关,而神经网络的深度识别精度直接受训练时标定数据集的影响,本文中使用的训练数据集来自KITTI的激光雷达深度图,受设备调制频率和大气折射率影响,激光雷达测距的比例误差随距离而增加,对中远程精密测距影响明显,这也从源头对神经网络的深度识别结果产生了一定影响。

6 结语

针对单目图像深度估计问题,提出了双路融合的深度感知神经网络模型,为保留更多特征信息扩张网络的输入利用残差结构特征重用以及减少参数的特性,分阶段地训练网络并逐步细化输出结果,有效地实现了全局预测和局部预测。引入单张RPG图片的梯度作为预测的特征之一,相较于其他的深度学习单目深度算法对于物体轮廓的表达更加细腻。设计了单次标定方法,并将标杆制作为标准图叠加大幅度减少了图像标注工作量,也不必要进行目标识别。

此模型与一些经典的CNN网络模型相比有着实际场景深度信息恢复的优势。但目前此模型仍然是基于有监督的训练,对于深度图数据集的要求较高,参数量仍然较大,因此实际应用时对硬件设备有着一定的要求,而为了获得更高分辨率的深度图输出,监督学习就很难避免增加更多的参数,在接下来的研究中,考虑结合无监督的学习方法,将网络修改为半监督方式,给予该网络结构进一步扩张输出大小的可能性,同时进行该网络结构在弱纹理场景中的测试并进行优化,提升算法的泛化性。

(本文的相关代码已开源:https://github.com/bb-1357/Mocular)

猜你喜欢

网络结构标定卷积
基于3D-Winograd的快速卷积算法设计及FPGA实现
使用朗仁H6 Pro标定北汽绅宝转向角传感器
卷积神经网络的分析与设计
从滤波器理解卷积
CT系统参数标定及成像—2
CT系统参数标定及成像—2
基于傅里叶域卷积表示的目标跟踪算法
基于匀速率26位置法的iIMU-FSAS光纤陀螺仪标定
基于MATLAB 的CT 系统参数标定及成像研究
基于广义混合图的弱节点对等覆盖网络结构