面向资源受限无人系统的深度神经网络轻量化软件设计与应用
2022-01-20梅继林杨隆兴孙自浩姜甜甜
梅继林,杨隆兴,孙自浩,陆 顺,邢 琰,姜甜甜,胡 瑜*
1.中国科学院计算技术研究所,北京 100190
2.中国科学院大学,北京 100049
3.北京控制工程研究所,北京 100094
4.空间智能控制技术重点实验室,北京 100094
0 引 言
随着我国深空探测任务的逐步开展,地外探测无人系统承担着越来越多的任务[1],对系统的智能化水平提出更高的要求.以深度学习为基础的感知、定位和决策算法可有效提升无人系统的智能化水平,而这类算法对算力、存储和功耗有着较高的需求[2],难以直接应用于探测系统.深度神经网络轻量化技术旨在保持模型精度的基础上减少模型参数量和复杂度,加速推断速度,使模型在资源受限条件下高效运行,具有重要的研究意义和实用价值.
当前,深度神经网络轻量化技术已有大量的研究,可分为轻量化网络设计与轻量化网络优化.轻量化网络设计从网络的拓扑结构出发,旨在设计出参数更少、效果更好的网络.常见的网络有手工设计的MobileNet[3]、LightDet[4]等,基于神经网络架构搜索技术[5]自动化搜索出的DU-DARTS[6]、DDSAS[7]等.轻量化网络优化则是在已有的网络基础上,利用神经网络的冗余性质进行网络压缩和加速,常见的方法有剪枝、量化、知识蒸馏和低秩分解.上述轻量化技术中,剪枝和量化算法通用性强、成熟度较高,具备大规模应用的前景.
深度神经网络的参数量远远超过其训练数据量,却具有良好的泛化能力,表明神经网络是过参数化的[8],这是剪枝的理论基础.剪枝方法可分为非结构化和结构化2种.以神经元连接为粒度的剪枝方法称为非结构化剪枝.韩松等[9]提出使用权重作为神经元显著度的指标,对AlexNet、VGG等网络进行压缩,在没有精度损失的情况下,分别实现了9倍、13倍的参数压缩量,这种剪枝的特点是能够实现显著的参数压缩比,但却不能实现有效的加速比.因此,结构化剪枝应运而生,其特点是对特征图的通道或卷积核的滤波器进行剪枝,这样无需特定硬件或软件支持就可以实现高加速比.结构化剪枝有启发式方法,如基于卷积核幅值[10]、基于批归一层尺度因子[11]、基于卷积核的中值[12];另外,结构化剪枝还可与贝叶斯概率理论结合[13]以及与自动化搜索方法结合[14].
深度神经网络使用单精度浮点数(FP32)训练和推理,32比特的存储要求和庞大的参数量对设备的存储空间和计算能力提出极高的要求.量化方法从压缩参数比特数的角度实现网络的轻量化.针对神经网络训练和推断中的权重、激励和梯度,量化方法可以用不同的比特数来表示,如8比特或1比特[15-16],从而有效地压缩网络参数并提升训练或推断速度.半精度浮点数(FP16)相较单精度浮点数只占用一半的存储,GUPTA等[17]的工作对其进行了研究,实现不错的效果.在韩松提出的 DeepCompression[18]方法中,量化与霍夫曼编码的组合显著地压缩了网络的参数,但精度损失严重.在工业界量化算法也同样受到关注,英伟达开发的TensorRT[19]使用标定集对特征图激励的分布进行分析,结合英伟达硬件设备,能够实现4倍以上的加速压缩比,同时几乎没有精度上的损失.
本文首先在公开数据集上对多种剪枝、量化算法进行了定量分析,提出基于剪枝、量化的轻量化计算方案,以此为基础,实现了一种基于模块化配置的轻量化计算软件StarLight,对深度神经网络模型进行快速轻量化和性能评估,解决了模型难以直接应用到计算资源受限系统的问题.相比于已有的开源方案主要针对公开数据集的分类任务,StarLight不仅在公开数据集上对多种轻量化方法进行评估,还针对火星模拟数据集实现目标跟踪、目标检测和语义分割等多种算法的轻量化并部署到低算力嵌入式平台;同时提供可视化界面易于使用和调试.
1 轻量化方法的建立
1.1 剪枝方法
表1 剪枝方法的选取Tab.1 Selection of pruning methods
FPGM算法采用几何中值作为度量因子,指出靠近几何中值的滤波器可由其他滤波器线性近似表示,几何中值处的滤波器冗余性较大,可以剪去.该算法首先计算几何中值:
(1)
对于第i层,选择距离几何中值最近的一个或多个滤波器:
(2)
(3)
相比于上述以滤波器的参数为标准设计度量因子,NetAdapt直接将运算时间和算力消耗作为约束条件,以经验测量值建立搜索空间,自动的优化预训练模型,直到满足约束条件,该过程中还可获得不同折衷度的简化网络.优化过程如下:
maximizeNetiAcc(Neti)s.t.Resj(Neti)≤Resj(Neti-1)-ΔRij,j∈[1,m]
(4)
Acc(·)为精度,Resj(·)为第j个资源消耗,ΔRij为在第i次迭代中第j个资源消耗和约束的差值.该方法需要根据部署设备构建经验测量值.
AutoCompress提出一种自动化的剪枝算法,设计基于启发式的搜索算法对参数进行采样、评估,作为决定每层剪枝率和剪枝策略的依据.流程包含动作采样、快速评估、策略选取和实际剪枝等4个步骤.采用交替方向乘子法ADMM(alternating direction multiplier method)作为优化算法,ADMM的特点是动态正则化,在每轮迭代都会调整、惩罚不同的参数.
1.2 量化方法
本文主要讨论FP16和INT8量化,这2种方式已在研究界和工业界得到了广泛的验证.相比于神经网络中常用的基于单浮点精度的推理方式,量化后的网络模型对存储的需求降低,并能提升推理速度.量化是神经网络模型在实际部署时所需的一项重要技术,如表2所示,目前已有多种量化解决方案.本文首先对表2中的方案进行调研,总结出以下4个方案选择原则,1)支持Nvidia Jetson Xavier平台,Xavier属于低算力嵌入式设备,并针对INT8的张量计算提供了硬件加速,是常用的量化算法评估平台;2)易用性好,量化方案的选取需要考虑使用成本;3)文档完善度高,加快方案的学习和推广;4)社区活跃,对于实际使用中遇到的问题,可在社区进行讨论,以快速解决.对比英特尔、微软、百度、英伟达以及其他多种方案,结合提出的4个选择原则,确定了Nvidia TensorRT满足需求.需要注意,TensorRT仅支持常见网络层的量化,对于新的网络层或者自定义操作则需要手动编写量化插件.
表2 量化方法的选取Tab.2 Selections of quantization method
TensorRT支持FP16和INT8量化,其中INT8量化需要标定数据,仅适用于网络推理.FP32转INT8的过程中,如何选取缩放因子是影响量化效果的关键因素.有非饱和与饱和2种映射方法.非饱和方法将张量的最大范围线性映射为±127,这种方法忽略了数值分布的不连续性,会导致大量无用数值被量化.饱和方法则是选取阈值|T|,将阈值±|T|之内的张量映射为±127,为降低量化带来的精度损失,TensorRT使用INT8分布和原始FP32分布的KL散度作为优化目标,KL散度越小表示INT8量化后的信息损失越小.具体实现是选取验证集的一个子集作为校准集,计算每一层FP32的激活值分布,使得INT8精度的激活值尽可能接近FP32的激活值.
1.3 轻量化方案选取
从上述2小节可看出,目前存在多种剪枝和量化方法可供选择,这些方法的实际使用效果如何,以及如何搭配剪枝和量化实现高效的轻量化方案,本小节以公开数据集和网络模型为基础,定量分析各种方法的优缺点,并尝试给出高效的网络压缩方案.
各种方法的测试结果如表3所示,采用ResNet50作为基础模型,TinyImageNet为数据集进行分类任务测试.评价指标包括Top1分类精度、运算量(FLOP)、参数量(param)、存储量(storage)以及推理时间(latency).网络模型轻量化的目标是在保证精度不降或者小幅降低的条件下,尽可能减少计算资源的消耗.
本文在TinyImageNet上重新训练ResetNet50,其精度为60.4%,该结果小于当前的SOTA方法,本文更关注轻量化前后精度的变化;选择重新训练的原因在于,部分算法在剪枝过程中需要进行模型的参数更新,为保证对比的公平性,尽可能保持该过程的超参数和原始模型训练的一致.
针对剪枝的5种算法评估结果如表3所示,在原始模型上进行剪枝,可看到精度均有不同程度的下降,FPGM精度降低最小,AutoCompress降幅最大接近20%,另外3个剪枝模型的精度基本一致;无论哪种方法,剪枝后的计算量、参数、存储和推理时间指标均有降低,这也验证了剪枝可作为轻量化计算的一条重要途径.在实验过程发现,AutoCompress方法过于复杂、超参数多,并对超参的调整敏感,需要较多时间进行参数调试,在实际使用中不推荐该方法.NetAdapt算法在参数量和存储上有优势,但运算量上要高于其他方法,这也使得它的推理时间明显变长.FPGM算法在精度、计算量和推理时间上均有优势.Taylor和AGP算法压缩效果接近,使用难度较低,也可以作为备选的剪枝算法.综合的各方面指标,推荐FPGM、Talyor和AGP作为候选的剪枝算法.
在量化的定量分析中,选取TensorRT作为工具,对FP16、INT8和混合精度量化(Mix)进行测试.表3中的Mix表示根据每个网络层的特点自动选择FP16或INT8.对原始模型直接进行量化,表3显示,量化的特点是不改变计算量(FLOP)和参数量(param),但可以大幅降低存储和推理时间,以FP16为例,存储减少约50%且推理时间获得超过20倍提升.从精度来看,3种量化方法相差不多,FP16量化没有对精度造成影响.在存储上,INT8最低,FP16最高,Mix处于两者之间,这符合我们的预期.在推理时间上,3种方法的效果基本一致.结合以上分析,建议在实际使用中,这3种均可作为候选的量化方法.
表3 基于公开数据集的轻量化算法定量对比Tab.3 Comparison of different lightweight algorithms on public dataset
从上述剪枝、量化的单独测试中,可发现以下规律,剪枝算法可有效降低计算量、参数量、存储和推理时间;而量化算法不改变计算量和参数量,但能大幅降低存储和推理时间.基于这个现象,表3中给出了剪枝+量化的结果,先对原始模型进行剪枝,再对剪枝后的模型进行量化.我们对候选的3种剪枝和3种量化算法进行组合,共有9组测试结果.以FPGM+FP16为例,2种轻量化算法结合后,相比于仅用剪枝,存储和推理时间得到了大幅降低.从表3的数据中可发现,先剪枝后量化的策略可结合2类算法的优势,进一步提升模型轻量化的效果.表3中剪枝后的模型和INT8组合,其推理时间反而高于仅使用INT8,原因有2方面:1)表3的实验是在Nvidia Tesla V100 GPU上进行,该GPU属于Volta架构,没有INT8的硬件张量加速核,使得INT8量化推理时间和FP16相比几乎没有提升;缺少硬件张量加速核仅影响推理时间,对其他指标没有影响.2)剪枝之后网络层的通道数不再是2的指数幂,这对GPU的并行计算是不友好的方式,可能导致推理时间增加0.5~0.8 ms;量化过程使用了TensorRT方案,其核心代码闭源,无法进行深入的调试,该现象的深层次原因目前无法定位.
2 轻量化软件StarLight
以上述剪枝、量化等算法为核心,设计了基于模块化配置的轻量化软件StarLight,提供用户友好的使用界面,降低轻量化算法的调试难度并提高易用性.
2.1 系统功能描述
StarLight支持从原始模型到轻量化模型嵌入式平台部署的整个流程,如图1(a)所示,目前StarLight可处理物体分类、目标检测、语义分割和目标跟踪等多种类型的神经网络模型.在获取轻量化模型后,可直接部署到低算力嵌入式平台,比如Nvidia Jetson Xavier,以下简称为Xavier.StarLight的剪枝部分可在Intel CPU、Nvidia GPU上正常运行,剪枝算法的策略是一边剪枝一边微调模型权重,对并行算力有较大的需求,采用Nvidia GPU可大幅降低运行时间,且在高算力GPU下会进一步降低.在本文的实验中,使用了Nvidia Tesla V100 GPU,以下简称为V100 GPU.另外,StarLight的量化部分采用了Nvidia TensorRT方案,目前只支持Nvidia GPU平台.
如图1(b)所示,整个软件包含输入界面、输出界面、轻量化算法和数据回放等4个模块.软件共有4个线程.主线程中有参数配置、指标设置和数据回放等功能;轻量化算法、推理可视化和训练/模型可视化各自对应一个子线程.输入/输出界面的各模块可根据需求打开或者关闭.
图1 轻量化计算软件系统流程图Fig.1 The system framework of lightweight computing software
在功能上,StarLight包含在线和离线2种模式.在线模式指通过软件实时监测轻量化的过程,并对中间结果进行可视化.离线模式指轻量化已完成,对中间过程进行数据回放,以检查结果的合理性和正确性.2种模式可在UI界面中随时切换.
在软件设计上,采用前端-可视化界面和后端-轻量化算法分离的策略.后端保存运行过程中的日志和中间结果,通过数据回放模块以2Hz的频率分发给输出界面.这种方式实现了前后端的分离,具体优势体现在,轻量化算法的运行时间较长,可随时打开或关闭主界面而不影响算法的运行.
在软件实现上,采用PyQt设计UI主界面,其优点在于统一使用python接口,可与轻量化算法的输入输出无缝对接.采用多线程、多进程机制充分利用计算资源,实现流畅的人机交互体验.在可视化效果上,引入ECharts[25]进行表格和曲线的可视化,并提供模型和特征图的可视化,对轻量化算法的运行过程进行回放和展示.
2.2 输入界面
参数配置:包括数据集、待压缩神经网络、剪枝方法和量化方法的选择,在线/离线模式的选择,神经网络超参数配置,如学习率、训练轮数和批处理大小等,剪枝算法超参数配置,如剪枝的优化学习率、微调轮数和稀疏度等;此外还包含数据回放的路径配置.神经网络模型和剪枝算法均对超参数的设置敏感,在软件中,对每种可能的轻量化算法组合均提供初始的超参数.在UI实现上采用Qt的输入、按钮等组件,结合Qt的信号槽机制,实现对应的回调函数.
指标设置:对轻量化算法的指标设置,有2个功能,第一是作为剪枝过程中的约束条件,比如NetAdapt[22]方法;而对于FPGM[12]和AGP[21]等这类无法添加优化约束的方法,指标设置仅用于可视化展示.实际使用中的指标可根据具体需求设置,常用的包括参数量、计算量、存储和推理时间等.与参数配置模块一致,在UI实现上采用了Qt内置的组件.
2.3 输出界面
训练可视化:本文轻量化的输入是已完成训练的模型,StarLight首先判断该模型是否存在,若不存在则重新训练,再进行轻量化处理,所以此处沿用训练可视化表示该过程.模块主要实现训练过程中间结果的可视化.包括损失值、精度和时间分布等指标.实现上采用开源JavaScript图表库Echarts[25],如图2所示,可视化的元素包括柱状图、饼状图、折线图和曲线图等.基于Qt的QWebEngineView类进行Echarts图库的实时渲染.模型训练过程时间较长,StarLight具备后端和前端分离的功能,关闭主界面后再次打开,训练可视化自动加载历史数据,并动态更新当前数据.
图2 模型训练和推理过程的可视化组件Fig.2 The visualization elements used in model training and testing
推理可视化:该模块的功能相对独立,加载轻量化后的模型和数据集,实时动态显示推理过程中各项指标的变化,比如参数量、计算量和存储等,同时提供原始模型的指标,以方便结果对比.在可视化实现上,采用和训练可视化类似的组件,此处不再详述.
模型可视化:该模块实现了模型拓扑图的可视化,以及特征图的可视化.如图3所示,左边显示的是模型节点,点击后会显示节点的名称和特征图形状等属性;右边显示的特征图,点击不同的节点,则实时可视化对应的特征图.该模块有助于模型的调试,以及剪枝前后结果的对比.本模块基于开源工具QuiverPytorch[26]实现.
图3 模型可视化效果图Fig.3 Model visualization
2.4 轻量化算法的集成
StarLight支持的轻量化算法和神经网络模型如表4所示,后续随着新的算法和网络模型提出,我们也将同步更新软件.对StarLight在分类、检测、分割和跟踪等多种任务上进行了验证,轻量化效果在后续实验中进行详细说明.
表4 StarLight集成的轻量化算法和神经网络模型Tab.4 The neural network models and lightweight algorithms in StarLight
基于松耦合的设计思路,StarLight具有良好的可扩展性,如图1(b)所示,轻量化算法模块的输入是参数配置,输出日志信息以及模型,仅需修改算法的输入输出接口;这种方式降低了算法集成过程中的代码改动量,另外一个优点是算法可以通过命令行启动,方便对算法进行单独调试.在StarLight运行过程中,启动轻量化算法会创建一个新的独立线程,实现与主UI线程的分离,如果用户不主动从UI界面结束算法线程,UI的意外退出或关闭不会对算法的运行产生影响,轻量化算法运行结束后自动退出线程.
3 实验验证
如图1(b)所示,轻量化计算软件StarLight主要包含后端轻量化算法和前端可视化2部分,其中核心是轻量化算法,可视化主要提供用户友好的接口,降低软件的调试和使用难度.StarLight软件仍处于更新中,本文主要对后端的轻量化算法进行实验验证.
3.1 实验平台
实验中使用高算力V100 GPU服务器和低算力嵌入式设备Xavier,这2种设备的软件环境统一为pytorch1.5、TensorRT 7.1.3.4.StarLight运行在V100 GPU服务器上,得到轻量化模型后,在Xavier上部署测试,实验中将Xavier的功耗模式设置为15 W.
3.2 网络模型
目标检测、语义分割和目标跟踪算法可有效提升火星车实验系统的智能化水平.为此,我们分别选取3种主流的深度神经网络模型,测试StarLight的轻量化能力.针对目标检测,选取Cascade RCNN[27],评价指标为正确率,即正确检测的物体数量和总物体数量的比值.针对语义分割,选取DeepLabv3+[28],评价指标为平均交并比(mIoU).针对目标跟踪,选取Siamese RPN[29],评价指标为跟踪的成功率和FPS.
3.3 数据集
如图4所示,采用模拟的火星场景数据集,主要材质有石头、沙粒等.算法对场景中的高风险物体,比如石头,进行识别、分割和跟踪.如表5所示,数据集包含1213张RGB图像,将其分为训练集、验证集和测试集.针对目标跟踪的Siamese RPN模型,还使用公开数据集VOT2015进行训练[29].
表5 数据集统计信息Tab.5 The distribution of dataset
3.4 实验分析
如表6所示,以目标跟踪算法为例,使用V100 GPU服务器进行实验分析.baseline表示轻量化前的模型.FPS1表示对1个目标跟踪的跟踪速度,FPS2表示2个目标,其他以此类推.剪枝方法选取FPGM,测试不同稀疏度对效果的影响,如FPGM0.2代表稀疏度0.2,稀疏度越大表示网络层剪去的通道数越多.随着稀疏度增加,模型计算量和存储量随之降低,且运行速度得到提升.稀疏度为0.2和0.5时,成功率没有降低,但性能得到了提升.当稀疏度到达0.8时,成功率降幅较大.基于以上观察,选择稀疏度0.5能够较好的兼顾各项指标.而对于量化算法,3种方法均能做到不降低精度的条件下,大幅降低存储并提升FPS,需要注意的是,量化并不会改变计算量和参数量.最后,结合FPGM0.5和3种量化方法进行组合测试,即先剪枝后量化的操作;从结果来看,相比于baseline,在成功率不降或小幅降低的条件下,实现了神经网络模型的轻量化且大幅提高计算速度;针对目标检测任务,考虑到成功率指标,我们推荐FPGM0.5+FP16的组合方式.针对目标检测和语义分割任务,我们进行类似的组合实验测试,得到最优轻量化途径.
火星车实验系统计算资源受限,无法使用高性能的GPU服务器,在获得轻量化模型后,我们将其部署到低算力嵌入式平台Nvidia Xavier上,结果如表7所示.在任务指标基本不变的情况下,对检测、分割和跟踪网络实现了约30%~75%的计算量压缩、20%~65%的参数量压缩和20%~80%的存储压缩;同时功耗均低于15 W,主频低于1.2 GHz,存储低于1TB,实现了算法在低算力嵌入式平台运行的功能.
表7 基于Xavier平台的轻量化模型部署结果Tab.7 The deployment of lightweight model on Xavier
4 结 论
本文首先分析基于剪枝和量化的轻量化方法,之后在公开数据集上对多种剪枝、量化方法以及它们的组合进行定量分析.以轻量化算法为核心,实现了一种基于模块化配置的轻量化计算软件StarLight,包含剪枝模型、量化模型及可视化方法,对深度神经网络模型进行快速轻量化和性能评估.基于StarLight,对应用于火星车这种典型无人系统的多种任务模型实现轻量化,并完成嵌入式平台部署,在保证任务指标的前提下,解决了深度神经网络模型难以直接应用到计算资源受限系统的问题.