APP下载

深度估计网络的可学习步长轻量化研究

2022-01-21陈迟晓甘中学

小型微型计算机系统 2022年1期
关键词:解码器编码器轻量化

胡 坤,陈迟晓,李 伟,甘中学

(复旦大学 工程与应用技术研究院,上海 200433)

1 引 言

近年来,用深度神经网络对单目图像进行深度估计已经有了很大的发展.随着精度上升,但是网络结构却变得越来越大,如图1所示.随之而来的是对计算设备的高要求和高功耗,出现了研究与实际应用间的背离.这样的高要求使得在小型化的硬件设备(如机器人、无人机、AGV设备)上部署神经网络[1-3]变得困难.而且由于神经网络稀疏的特性,计算过程中对内存利用率不高,这对硬件资源造成了很大的浪费.因此,对深度估计神经网络的轻量化研究有着重大的应用价值.

对神经网络的轻量化工作通常可以分为两个方向:1)网络参数位宽量化;2)神经网络计算结构压缩.由于深度神经网络的参数是用32bit单精度浮点数来表示.可以将参数位宽 较高的浮点数转换为位宽低的定点数.虽然损失了一定的表示精度,但网络占用却可以大幅压缩.同时,网络参数改为定点数计算时计算效率会有所提升.

图1 深度估计网络参数总量和绝对相对误差趋势对比Fig.1 Parameters and relative absolute error trend of depth prediction network

计算结构的压缩则是根据不同任务调整网络结构.在一般的网络参数量化的研究工作中,多是对图像分类任务进行参数量化,而结构相对复杂的特征金字塔网络(FPN)结构量化工作较少.一般的图像分类任务神经网络往往结构相对简单,网络层与层之间几乎是单个特征图传递,同时由于输出的全连接层参数依赖小故对参数的精度敏感度低;而目前对于深度估计等采用全卷积网络的网络结构来说,首先卷积的输出层对参数的精度敏感度高;其次网络中往往存在跳跃连接(skip connection),而且跳跃连接的特征图传递需要占据很大的空间,影响网络的推理的内存布局.故对于深度估计网络的轻量化实现是一个很有挑战性的课题.

本文提出了轻量化的单目深度估计网络.该网络采用可学习步长量化的方式使得网络的参数体积大大减小,同时保证其精度损失在可接受范围内.同时经过对网络结构的设计,网络的运行所占内存空间也远小于传统的基于ResNet的深度估计网络.

2 相关工作

2.1 深度估计

从2D的RGB图像中对其深度进行估计,一直是计算机视觉的焦点,由于从单纯的2D图片中对图像深度进行建模不但可以减小深度估计对硬件的要求和降低成本,而且对理解图片中的3D场景有着重大的研究价值.与利用不同位置的摄像机记录同一个物体的视差信息来估计图像的深度的双目深度估计不同.单目图像的深度估计需要依据图像不同尺度的特征进行深度估计.但由于单个图片中仅根据尺度信息是无法判断图像的绝对深度,Eigen[4,5]使用多尺度网络的方法,利用不同尺度网络对图像进行特征提取,于此同时Eigen还提出了一种可以反映像素之间的相对误差的尺度无关损失函数.在随后的工作中,通过增加条件随机场(CRF)的方式[6,7],或者是使用采用对图像语义信息有更好提取的全卷积网络[8]来对单张图像进行语义级别深度预测[9],又或者改变损失函数让深度估计变成像素基本的分类问题[10]等都提升了对单目图像的深度估计准确率.

一个好的单目深度估计需要大量的像素级别的深度标签,这是一个非常有挑战性的工作.在一些近期的工作中,Godard[11,12]通过将单张图片的深度估计网络放在一个自监督结构中训练,通过自监督网络产生像素级别的深度标签,提高了单目深度估计的鲁棒性和泛化性.

2.2 神经网络量化

神经网络从诞生以来就伴随着其网络模型越来越大的问题,这让部署工作变得非常困难,比如在机器人抓取任务中神经网络的处理物体深度信息并识别的速度为13.5s每帧[1],在微创手术中深度处理等的神经网络需要部署在特定的机器上[2].对神经网络进行压缩的尝试很早就已经开始,通过对比将网络参数从浮点数转换为定点数或动态定点数对网络体积以及精度的影响,发现将网络量化到比较低的比特依然能保持精度[13,15].而且在早期的尝试中,发现如果强制将全连接层神经网络的权值绑定到一个随机哈希函数以提高网络参数复用率[16],或者将神经网络的全连接换成矢量量化的方式[17],可以在几乎不损失精度或者损失较少的情况下使得网络的计算效率变高,网络的模型变小.因此人们开始将这种量化方法推广到整个深度神经网络中[18],同时采用更激进的策略把网络参数降到更低的位宽,如2bit甚至1bit.

3 实验方法

该节描述了多尺度特征融合的单目深度估计网络结构以及网络轻量化的方法.

3.1 深度估计网络

多尺度的特征融合的目的是将让网络在图像不同尺度的特征之间提取出深度空间信息.本文设计的多尺度特征融合网络主要分成两个结构:编码器和解码器,分别负责对输入图像进行特征抽取和对特征的解码,如图2所示.

图2 多尺度特征融合网络Fig.2 Multiscale feature fusion network

编码器(Encoder).是用于自下而上提取图像不同尺度下的特征信息,每一个层级特征网络会提取出以2为倍数缩小的图像特征信息.由于编码器部分的不同尺度特征信息提取跟卷积网络结构无关,因此可以更换不同的特征网络,本文采用Efficientnet-b0的深度可分离卷积块[19]作为特征提取网络(参看3.2小节).

在这里,编码器网络会提取7个不同尺度的图像特征图(feature_maps)fm1、fm2、fm3、fm4、fm5、fm6、fm7,分别为原图像的1/2、1/4、1/8、1/16、1/16、1/32、1/32.

解码器(Decoder).用于对不同尺度的图像特征进行融合.由于解码器网络输入的特征图尺度大小不一致,因此对于不同尺度的特征图要有一定的放缩,解码器中会插入上采样层使得特征图以2的倍数放大,使得其可以与编码器输出的特征信息的尺度相匹配.在这里解码器的通道数数量与编码器特征图输出的通道数量一致,因此编码器的特征图可以和解码器的特征图进行一对一的元素叠加.在解码器的最后输出是和输入图像为1∶1等大.为了减小神经网络激活层的输出特征图的内存占用,Efficientnet-b0采用了ReLU6作为激活函数限制了激活函数的输出位宽.故有可能会带来解码器中的特征图表示范围不足的问题.因此在这里增加了两个具有相同放缩尺度的特征图,用以减小ReLU6带来的影响.

3.2 减小网络参数

轻量化网络目的是为了减小神经网络的体积,使其可以适应内存有限的设备.本文描述的深度估计网络体积由网络中的卷积核权重和偏置量决定,因此对于该网络的轻量化考虑有两个方向,即减小参数总数量以及减小参数量体积的大小.

图3 深度可分离卷积网络对比Fig.3 Depthwise separable convolution network

3.3 网络量化

在计算机中神经网络每一个神经网络参数表示为32bit浮点数.通过将网络参数进行量化,可以将每一个神经网络参数用一个低位宽的定点数来表示,以此来达到减小网络体积的目的.随之带来的好处是不单只网络的体积被压缩,由于网络原来的浮点数参数被定点数替代,计算的效率也大大提高,在神经网络Z=act(a⊗w)中,设网络的量化函数为:

(1)

(2)

神经网络Z中a和w分别表示上层神经网络的输入和该层神经网络的权重.式(1)表示的量化函数中clip(x,a,b)为分段函数,当x∈(a,b)时返回x,当x≤a或x≥b时返回a或b.N为需要输出量化值x的bit位数,而range(xfloat)为原精度浮点数xfloat的表示范围.式(2)所示的xstep为量化函数的步长.因此,神经网络Z可以表示为:

Z=act((astep·aquan)⊗(wstep·wquan))
=act((astep·wstep)·(aquan⊗wquan))

(3)

如图4所示输入a和网络权重w先分别量化成低比特位数的参数再进行卷积操作,由式(3)中Z可以看出由于astep和wstep均为给定的浮点数标量,若a和w的参数量分别是m和n则整个网络卷积运算中浮点数运算次数由原来nm次减小到了m次,带来了指数级别算法效率的提升.

图4 网络量化示意图Fig.4 Diagram of network quantization

所以可以把高位宽的神经网络参数量化到低位宽,以此来减小神经网络的体积和提高计算效率.但随之带来的问题是由于网络的参数位宽不够,参数的表示范围和精度出现下降导致整体网络的准确率下降.因此在网络量化过程中,对于量化函数中的量化步长选择至关重要,往往需要针对原网络的权重分布特征进行权衡.对此,本文采用了可学习步长[20]的量化方法,令:

(4)

(5)

Cw=wstep·wquan

(6)

Ca=astep·aquan

(7)

3.4 内存优化

在日常部署中,小型计算机不单只是计算资源的限制而且最重要的是计算内存的限制.由于待计算的数据必须储存在内存中,因此对于内存的优化也至关重要.计算内存占用分为两种:1)运行时内存占用;2)运行时产生的临时占用.

对于运行时内存占用可以通过尽可能缩小运行的神经网络内存占用,压缩神经网络的参数,或者将神经网络分成不同层级的阶段逐层计算来达到内存优化的目的.目前大多数神经网络量化压缩相关的文章已经作出大量的研究工作,本文第2部分亦有所介绍.

对于运行时产生的临时占用,是长期以来在神经网络量化压缩的工作中被忽视的重要问题.因此往往在一般的神经网络量化中,仅针对神经网络本身进行量化,从未真正对神经网络运行的内存进行真正的优化.特别地,在深度估计网络中,解码器对图像深度信息进解码的操作很大程度上依赖编码器部分提供的特征图信息,特征图信息是由编码器在计算途中不断产生的,但是由于在时序上解码器部分的计算需要在编码器完成之后,因此编码器产生的特征图信息需要额外占用一段内存直到解码器利用尺度特征进行计算之后释放.而在深度估计网络中,特征图信息参数总量几乎可以和解码器参数总量在同一个数量级上.因此是一个不可忽视的内存因素.因此,对深度估计网络的轻量化还需考虑内存优化的问题,通过设计网络结构尽可能减小编码器和解码器之间传递的特征图信息总量.

表1 解码器网络结构
Table 1 Structure of decoder (a)Efficientnet-b0作为编码器

in_channelsresolutionout_channelinputconv1032032192fm7conv938432192conv10,fm6conv8(upsampling)19232112conv9conv72241680conv8,fm5conv61601680conv7,fm4conv5(upsampling)801640conv6conv480840conv5,fm3conv3(upsampling)40824conv4conv248424conv3,fm2conv1(upsampling)24416conv2conv032216conv1,fm1disp conv1(upsampling)16216conv0disp conv01611disp conv1

(b)Resnet-18作为编码器

in_channelsresolutionout_channelinputconv9(upsampling)51232256fm5conv851216256conv9,fm4conv7(upsampling)25616128conv8conv61288128conv7,fm3conv5(upsampling)256864conv6conv464464conv5,fm2conv3(upsampling)128432conv4conv232232conv3,fm1conv1(upsampling)64216conv2conv016116conv1disp conv01611conv0

在这里通过使用深度可分离卷积,减小了编码器输出特征图的通道数来减小特征图占用,同时为了保证精度增加了解码器的深度,通过控制解码器深度和特征图的通道比例来保证网络运行时内存的良好布局,解码器网络结构如表1所示.

4 实验结果与分析

该节描述了任务的数据集,数据集的分割,相关实验系统环境和深度估计网络相关实验结果对比分析以及量化结果的对比分析.

4.1 数据集

KITTI深度补全与估计数据集[21],包含了93000 张带有LiDaR扫描的RGB深度信息图.

在这里对数据集进行了一系列的预处理工作.采用了Eigen[2]一样的数据集划分方式将KITTI深度补全与估计数据集划分训练集与测试集;并将数据集中的静态帧剔除,因此训练集中有45200个样本而测试集包含1776个样本,如图5所示.

图5 KITTI深度补全与估计数据集展示Fig.5 Dataset of KITTI depth completion and depth prediction

4.2 实验环境

实验采用Python3.6.6 + PyTorch CUDA的网络训练环境.实验服务器操作系统为Ubuntu 18.04,CUDA版本为10.2.

4.3 对比实验及结果指标

通过8组实验对深度估计网络的轻量化结果进行评估,实验分为两大组分别为基于ResNet以及基于Efficientnet解码器的估计网络.对于每一大组实验进行4组对比实验,分别是网络未量化,仅对编码器部分量化,仅对解码器部分量化以及全量化.实验的结果主要对比绝对相对误差(abs_rel),均方根误差(RMSE),精确度(δ),以及延伸的平方相对误差(sq_rel)和对数均方根误差(RMSE_log).

4.4 实验结果

实验结果如表2所示.表中Res和Eff分别表示基于ResNet-18以及Efficientnet-b0 编码器的深度估计网络,后缀quen、qude、quan分别表示对网络进行了仅编码器部分量化,解码器部分量化以及全网络3bit量化.

表2 深度估计网络实验结果
Table 2 Results to the depth prediction network experiments

abs_relsq_relrmsermse_logδ<1.25δ<1.252δ<1.253Res0.1140.9144.9500.1980.8760.9550.978Res-quan0.1841.6796.3000.2660.7510.9120.962Res-enqu0.1721.6336.1930.2550.7780.9160.964Res-dequ0.1230.9385.0640.2030.8610.9540.979Eff0.1140.9765.0910.2070.8620.9500.976Eff-quan0.1601.5236.1460.2550.7740.9120.963Eff-enc-qu0.1621.6456.1340.2540.7760.9140.962Eff-dequ0.1471.3055.9090.2430.8000.9270.967

对不同程度轻量化的深度估计作了对比结果.实验包括了编码器部分采用ResNet-18和Efficientnet-b0,解码器部分分别根据作出调整的深度估计网络.并包含了分别对两个不同深度估计网络进行3bit可学习步长量化后的结果.为了寻找深度估计网络对特征学习的特点,还增加了4组实验,分别对基于ResNet-18和基于Efficientnet-b0网络进行了部分量化,即仅量化编码器部分或仅量化解码器部分.

通过实验结果对比可以看出,深度估计网络对于特征提取部分的更换本身并不敏感,由于ResNet和Efficientnet本身对于图像特征提取有着几乎相同的能力,因此在未对深度估计网络进行量化之前,相对误差以及平方根误差基本维持在同一水平.但是基于Efficientnet编码器深度估计网络不仅总参数量比基于ResNet网络小了39.7%,如图6(a),同时量化后精度比ResNet高,因此可以认为,对于Efficientnet更利于将网络轻量化.

图6 基于ResNet与基于Efficientnet网络量化后参数量及参数所占空间对比Fig.6 Quantized parameters and footprint comparison of ResNet based and Efficientnet based

运行过程中,基于ResNet编码器网络特征图占用的参数总量约为2.89×106而经过结构优化的基于Efficientnet编码器特征图占用的参数量为9.06×105,因此在内存中节约了约68.61%的特征图占用.

如图6(b)所示,对于ResNet编码器,其网络总参数量约为1.48×107,由于网络参数在计算机中储存为32bit浮点数,因此未量化的ResNet编码器网络在计算机中占用储存空间约为56.62MB.经过3bit量化后ResNet编码器网络参数总量由于可学习步长的引入增加了6.831×103,但由于参数位宽从32bit缩小到3bit,故参数占用储存空间约为5.31MB.网络参数压缩率约为90.62%.

而对于Efficientnet编码器网络,参数总量约为7.09×106因此在计算机中占储存空间约为34.12MB.该网络量化引入可学习参数量为2.9983×104,量化后占用空间约为3.21MB,压缩率约为90.59%.

在对深度估计最终结果输出如图7,其中图标号1为原图2、3、4、5分别为分别为未量化深度估计输出可学习步长量化,仅量化编码器以及仅量化解码器的深度估计输出.可以看 到本文设计的深度估计网络可以很好地输出单目2D图片的深度估计图.经过量化之后虽然整体深度估计保持了比较好的水平但由于参数的精度损失而网络的表达不足致使最终结果细节处稍有缺失.因此在网络尽可能压缩的基础上,未来的研究方向是如何保持精度,因此本文做了对比实验.意在探索 由量化引入的量化误差对深度估计网络不同部分产生的影响,因此可以看到当仅量化编码器部分时,网络输出细节缺失较为严重同时深度估计输出层次丰富.而当仅量化解码器部分时,网络输出细节丰富但深度估计输出层次感缺失.因此可以得出对于深度估计网络量化的未来提升方向:由于编码器部分对于深度估计网络的细节部分特征提取起较大的作用,解码器部分对深度估计网络的最后输出深度层次起较大的作用,因此可以根据网络的不同功能采用不同的量化方法,以此来提高量化压缩比以及准确率.

图7 深度估计网络输出对比Fig.7 Outputs of the depth prediction network

5 总 结

文章讨论了对于深度估计网络的轻量化实现,提出了一个可以进行量化的单目深度网络模型设计,并完成对该模型的量化压缩工作.通过对网络的轻量化设计以及压缩,最终量化后深度估计网络参数所占空间从34.12MB下降到了3.21MB,压缩率达到了90.59%.同时考虑了网络运行的内存优化,使得网络在内存有限设备中特征图的内存占用降低了68.61%.并且极大地保持了深度估计网络的精度,使得其在KITTI数据集中绝对相对误差约为16.0%.

猜你喜欢

解码器编码器轻量化
基于ResNet18特征编码器的水稻病虫害图像描述生成
轻量化材料在商用车白车身的应用
基于ABAQUS的某轻卡车蓄电池支架轻量化
重卡车架轻量化设计
基于Android环境下的数据包校验技术分析
一种轻量化自卸半挂车结构设计
一种轻量化自卸半挂车结构设计
浅谈SCOPUS解码器IRD—2600系列常用操作及故障处理
基于TMS320F28335的绝对式光电编码器驱动设计
做一个二进制解码器