当前位置:首页 期刊杂志

基于嵌入式的单目深度估计方法研究

时间:2024-05-04

成 怡,孟 祺

(天津工业大学电气工程与自动化学院,天津 300387)

1 引言

深度感知是计算机视觉领域的热点问题之一,对机器人完成诸如目标检测、无人驾驶、地图绘制、定位和避障等任务是必不可少的。单目相机具有成本低、体积小、能源效率高等优点,因此,出现了很多利用单目相机进行深度估计的研究。单目深度估计方法从单幅RGB图像中估计深度信息,但单张RGB图片对应的真实场景可能有无数个,而图像中没有稳定的线索来约束这些可能性[1]。典型的传统计算机视觉需要加一定的约束来解决这一问题,例如物体表面的特性、纹理元素。最等早利用机器学习方法来估计深度是基于马尔可夫随机场(MRF)[2],这类方法通常依赖人为设计的特征与概率图模型,文献[3]将深度图的估计问题变成一个搜索问题,这是在假设相似图像具有相似深度图的前提下进行的,从这时开始,深度估计从最开始的基于手动设置特征到后来的基于深度学习的方法。

Eigen等人首次将深度神经网络用于单目深度估计任务,提出使用粗尺度与细尺度两个网络来对单张RGB图片进行深度估计,首先将原始图片经过粗尺度网络后,得到全局尺度下对场景深度的粗略估计。然后将上层的粗略估计作为附加的第一层图像特征传递给细尺度网络,添加更多的细节信息来进行局部优化。Liu等人将深度卷积神经网络与CRF结合,提出了深度卷积神经场[4]。Laina等人提出了一种基于残差学习的全卷积网络架构用于单目深度估计,具有更深的网络结构,而且不需要进行后续处理[5]。

当前,在深度估计领域为了提高深度估计的精度,往往要求更复杂的网络结构,这就要求硬件具备快速计算能力。而大多数移动端和嵌入式设备其计算能力有限,吞吐量极低,无法实现实时预测,要想在嵌入式端设计算法,一个难点就是如何平衡设备计算能力与耗时性和算法本身的精确率之间的关系。由此出现了轻量级神经网络模型,如MobileNet[6]、ThunderNet[7]等,这类算法在不损失网络性能的前提下使网络参数更少[8]。例如MobileNet网络采用深度可分离(Depthwise Separable Convolution)的卷积方式降参,它将卷积方式分解为逐通道卷积(Depthwise Convolution)与逐点卷积(Pointwise Convolution),本文用DC与PC表示。

深度神经网络对单幅图像进行深度估计属于密集预测任务[9],在语义分割[10]、网络风格转换[11]等密集预测任务中编码器-解码器网络是常见的一种结构,编码器部分即卷积提取特征部分,用来捕获像素位置信息和图像特征,解码器部分利用反卷积池化或上采用等操作将其进行解析并还原图像的空间维度和像素的位置信息。本文在编码器-解码器网络结构的基础上,采用监督训练方式,提出一种可以应用于嵌入式平台Jetson TX2的单目深度估计算法,在不损失精度的情况下,大幅度降低网络的参数量以及计算量。

2 基于编码器-解码器网络的单目深度估计算法

基于编码器-解码器网络的单目深度估计算法的网络结构如图1所示。

图1 编码器-解码器网络结构图

在编码器阶段,也即特征收缩阶段,高层特征具有较高的分辨率,但是提取的信息较少,底层特征分辨率较低,但是可以提取到更多的信息。在解码器阶段,底层特征在预测像素的同时再结合高层特征利用更多的信息生成清晰度较高的特征图。对损失函数的不同选择会对训练速度以及整体深度估计的性能产生显著影响,深度估计属于深度回归问题,本文的的回归损失函数采用的误差是平均绝对误差(L1_Loss)来最小化深度像素差异重构深度图像

(1)

2.1 编码器阶段特征提取

本文编码器网络采用针对移动端和嵌入式端且广泛应用于密集预测任务的轻量化模型Mobile Net v1对输入彩色图像进行特征提取,获得高级语义信息。

Mobile Net v1结构如上节所述是基于深度可分离卷积所构成,其主体网络结构与深度可分离基本结构分别如表1所示。本文网络输入为224×224×3的彩色图像,首先是一个3×3的标准卷积,步长为2下采样,之后是DC与PC进行逐层堆积,每一层卷积后面跟着批量归一化层(Batch Normalization,BN)以及ReLu非线性激活函数。卷积步骤可以看作3×3 DC+BN+Relu与1×1 PC+BN+Relu的逐层堆积。对于标准卷积,每个Filter与所有通道数卷积造成参数量很大,而DC中每一个Filter只与单个通道进行卷积,Fliter数与输入通道数相同,完成后的特征图(Feature Map)数与输入通道相同。使用1×1×M 的PC提取不同特征图在相同空间像素位置上的信息,其中M为上一层通道数,有几个Filter就生成几个特征图,最终参数的计算是由以上两部分相加得到,得到的参数个数是远远低于标准卷积。

表1 Mobile Net网络主体结构

此模型几乎将95%的计算量都放在了PC的1×1卷积中,而1×1的卷积在数值线性代数算法里是最优的一类,Mobile Net v1中1×1的卷积占参数总量的74.59%,参数量很小,这对嵌入式端神经网络算法是很重要的。经过编码器网络的14层时,特征图的分辨率会逐渐降低,并且更高级的特征被提取到,当输入到解码器网络时,许多的特征将会丢失,这种方式缺乏对多层级特征的利用,使解码器很难预测到稠密数据,考虑到不同层级的特征图空间分辨率与特征提取程度,本文采用在U-Net中被验证对稠密数据输出很有效的跳跃连接方式,从Mobile Net v1网络中引出Level-1,Level-2的输出作为跳跃连接的输入,以解决不同尺度特征的融合问题。

2.2 解码器结构

解码器根据编码器输出的特征图进行上采样,并在空间上缩小特征映射,生成与输入尺寸相同的深度图。本文使用插值与卷积的方式降低卷积层的特征图。编码器输出有高级语义信息的特征图,其空间分辨率低而通道数大,Mobile Net v1输出特征图的大小为7×7(宽×高),而通道数为1024。与编码器操作不同,解码器需要经过几层放大特征图,同时降低通道数,本文采用双线性插值的方法加倍特征图分辨率,使用5×5的卷积操作降低通道数,使输出通道数量降低为输入通道的一半。但是,会出现预测深度只能覆盖中心区域,深度图与地面真实深度(Ground Truth)在像素极上出现不一致性的问题。为此采用膨胀卷积的方式增大感受野,7×7的卷积层正则等效于3个3×3的卷积层的叠加,同时参数量也会降低。当多次叠加3×3的膨胀卷积会使Kernel不连续,出现感受野不连续问题(Gridding effect)。所以可以通过设置不同的膨胀率d(dilation rate)灵活控制不同的膨胀卷积大小。本文使用了3个卷积核为3×3的膨胀卷积,为了防止感受野不连续的发生,将膨胀率分别设置为d=1,d=2,d=5,得到的感受野分别为3×3,5×5,11×11,与堆叠的方法相比,相加操作减少了网络参数量,膨胀卷积模块的卷积层采用ReLu作为激活函数,结构如图2所示。在网络最后一层使用PC进一步降低卷积层复杂度,构成解码器结构又薄又快。

图2 膨胀卷积模块

3 实验验证及结果分析

3.1 实验环境及评价指标

本文实验环境为Ubuntu16.04,64位操作系统,STRIX-GTX1080TI服务器,8G内存,使用pytorch作为深度神经网络的训练平台,并以32位浮点型精度实现,采用Adam作为优化器,初始学习率为0.001,训练进程到70%和90%时学习率减半,批量大小(Batch Size)设置为8,由于当地面真实深度值越大时,误差部分往往也会变大,本文使用原始深度yorig的倒数m/yorig作为损失函数计算中的真实深度值y,其中m是最大深度值。本文所用数据集NYU Depth v2中深度值最大为10米,因此m设为10。编码器部分Mobile Net v1的权重由公开数据集ImageNet预训练。

NYU Depth v2公开数据集由RGB相机和Microsoft Kinect深度相机同时采集室内场景的RGB信息和深度信息,总共收集了407024帧RGB-D图像对,并对1449幅深度图片利用着色算法进行填充得到了稠密的深度图,同时人工标注了语义信息,数据集中的深度范围为0.5~10 m,划分为795个训练样本与654个测试样本。训练过程中,为了增加训练数据较常用的方法是进行几何变换,本文对数据预处理做如下操作:(1)原始数据集的分辨率为480×640(宽×高),为了得到224×224×3的图,先对数据采样到一半240×320,再中心裁剪。(2)对RGB-D图同时随机旋转r∈[-5°,5°]。(3)对RGB-D图以二分之一概率随机垂直翻转。

深度学习算法最后是部署在Nvidia Jetson TX2平台上。本文使用一种让框架自适应的寻找最优或者次优的算子优化-TVM编译器堆栈部署[12],最大化发挥硬件性能,使用神经网络编译器为特定的目标平台生成一个可执行文件,直接在目标平台上运行。前提在主机端以及TX2端都需要安装Cuda以及LLVM作为目标后端。工作流如图3所示。

图3 TVM工作流

首先在主机端通过交叉编译生成适合于Jetson TX2的动态链接库,然后在Jetson TX2端安装运行时环境,调用动态链接库,target_host参数需要指定目标平台TX2,设为aarch64-linux-gnu,对于算力(CUDA ARCH)的设置,设置为 sm_62,编译后获得三个参数TVM模块库、json执行图以及模型参数,其中与运行平台有关的是TVM模块库(lib文件)。

图像的深度估计是一个回归问题,因此,本文的评价指标选择准确率δ与均方根误差(RMS),指标表达式为

准确率:

(2)

均方根误差(RMS):

(3)

3.2 实验结果对比分析

为了验证提出算法的性能,从NYU depth v2公开数据集中随机挑选三幅图像做深度估计测试。对比本文方法与文献[5]中所使用的全卷积残差网络(FCRN)方法结果对比如图4所示,图中颜色越深表示物体离相机原点越接近。

图4 不同深度估计方法比较

从图4可以看出,本文方法与文献[5]所提方法相比,可以得到较好的深度估计效果,从图4第一行第三行可以看出,文献[5]所提出的方法的周边会存在黑框的情况,本文的预测结果与真实深度值较为接近。本文的方法和典型的深度估计方法的准确率与均方根误差对比如表2所示。

表2 不同深度估计方法对比

由表2可以看出本文提出的方法在均方根误差指标上优于文献[13],文献[1],文献[15],文献[14]所提出的方法,本文方法与文献[13]相比在δ<1.25指标上高了约70%,比文献[1]高了约24%,比文献[15]高了约14%。本文使用深度学习的方法不需要额外的后处理操作,而其它多数方法需要对CNN的输出做后处理,例如CRF,这些操作会增加额外的计算与运行成本耗费,不利于深度估计算法在嵌入式设备上的运行。

为了比较网络轻量化效果,使用所引文献中准确率最高的文献[5]中的方法在TX2端使用GPU加速且最大功耗模式Max-N下,测得帧率为每秒3帧左右,而使用本文算法在相同最大功耗模式下帧率则为每秒160帧左右,为文献[5]全卷积残差网络算法的53倍左右。在TX2端测试更具体的不同工作模式状态下的算法的吞吐量如图5。

图5 TX2不同工作模式吞吐量

目标平台是由一个GPU 和一个CPU集群组成,CPU集群由双核Denver2处理器和四核ARM Cortex-A57组成,通过高性能互连架构连接,通过对处理器的搭配组合以及CPU、GPU频率的不同构成总共五种工作模式,其中Max-N模式下Denver2处理器和ARM Cortex-A57六个CPU都同时运行,为最大功耗模式,Max-Q模式为均衡和节能模式。通过对图5进行分析,使用本文算法在目标平台上当使用GPU加速时,每一种模式得到的帧率都是远大于文献[5]的,而Max-N工作模式下的吞吐量为最高的160帧,在其它各种模式下根据调用ARM Cortex-A57与Denver2的数量不同,吞吐量也有所不同,但是使用轻量化网络的作用是明显优于其它神经网络的。

4 结束语

本文基于Mobile Net v1深度卷积神经网络,对传统编码器-解码器网络模型进行改进,以解决嵌入式端的单目深度估计的问题,实现高准确率高吞吐量算法,在编码器端利用Mobile Net v1深度可分离卷积的优势进行高级语义信息提取,作为解码器的输入,并使用两级跳跃连接的方式将编码器更多细节映射到解码器中,在解码器端,利用先卷积后双线性插值操作,放大特征图并降低通道数。同时使用不同膨胀率的膨胀卷积在不增加卷积核参数的情况下捕获多尺度特征信息,有利于提升精度。实验结果表明,在NYU depth v2 数据集上,深度估计效果评价指标在优于或者与其它方法相当的情况下,在TX2端的运行时间及吞吐量有着很好的表现。但是可以看出在细节部分的深度估计还是会有误差,并且随着轻量化方法的陆续增多,在提升精确度,部署在移动端及嵌入端等方向还有很多要改进的地方。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!