面向嵌入式设备的深度学习物体检测优化算法①

2019-04-29 08:58戴雷燕杨小利
计算机系统应用 2019年4期
关键词:网络层剪枝寄存器

戴雷燕,冯 杰,董 慧,杨小利

(浙江理工大学 信息学院,杭州 310018)

1 引言

物体检测是计算机视觉领域的一个重要问题,物体检测算法从传统的人工特征(如梯度方向直方图,SIFT 角点)和经典的统计机器学习方法(如支持向量机,朴素贝叶斯)[1-5]发展到现今的基于卷积神经网络的物体检测算法,物体检测效果令人惊叹.2014年,R.Girshick 等人将卷积神经网络应用到物体检测中,提出了基于区域的卷积神经网络(R-CNN)算法[6],使得检测效果远远优于当时的传统物体检测算法.随后的Fast R-CNN[7]和Faster R-CNN[8]等都在检测准确率和定位精度上不断突破,而2015年Joseph Redmon 等提出的YOLO[9]算法和2016年Wei Liu 等提出的SSD[10]算法都是在算法速度上进行突破.在物体检测算法不断突破的同时,神经网络架构也在不断更新.

最早的卷积神经网络LeNet[11]是Yann LeCun 在1998年设计并提出的,它一开始是针对识别手写数字问题,网络结构较为简单,但是包含了卷积神经网络的基本单元,是以后各种模型的始祖.2012年,在ImageNet比赛上大放异彩的AlexNet[12]虽然只比LeNe 多了几层,但效果远远优于最早的LeNet,AlexNet 将激活函数由Sigmoid 换成了ReLU,解决了因为网络层更深时的梯度弥散问题,还加入了dropout 层,有效解决过拟合问题.2014年出现的VGG[13]相较于AlexNet 而言网络层越来越深,整个网络层全部使用3×3 大小的小卷积核和2×2 的最大池化核,使得整个网络结构简洁,具有更好的泛化性.Network in Network[14]模型的亮点在于1×1 卷积核和全局平均池化层(Global Average Pooling)的应用,使得整个网络模型的参数规模锐减,有利于网络的加深,训练时间也得到提升.2014年的GoogLeNet[15]中使用了基础卷积块Inception,最后的全连接层借用NiN 模型思想换成Global Average Pooling,整个模型的参数量大大减小,效果更好.2015年的ResNet[16]中包含了Residual 单元,允许原始输入信息直接传递到后面的网络层中,解决了因为网络层过深而梯度消失,无法反向传播的问题.2017年谷歌公司提出的MobileNets使用深度分离卷积[17],进一步减小计算量,压缩模型,可以满足嵌入式设备的需求.

随着硬件计算能力的快速发展,深度学习技术已经应用到很多便携式嵌入设备中,比如各种刷脸支付、相册智能分类、图片风格迁移等,但是目前一大挑战是如何将庞大深度模型移植到资源有限的嵌入式设备上[18].

2 优化流程

本文针对嵌入式设备进行的深度学习物体检测优化算法研究主要在PC 端和嵌入式平台ARM 上完成.首先,准备好训练数据,选择合适的物体检测框架和神经网络架构进行构建;然后在此网络结构下,对训练数据进行模型训练,得出原始物体检测模型;接着对原始物体检测模型进行模型剪枝,以上过程都是在PC 端上完成.将PC 端上完成模型剪枝的物体检测模型移植到嵌入式设备ARM 平台上,针对该物体检测模型的各个网络层进行运算代价计算,根据计算结果,对运算代价较高的网络层进行汇编优化.汇编优化后的物体检测模型在ARM 平台上对冰箱内采集到的视频内容进行前向推理,在ARM 平台上显示检测结果,上述过程在ARM平台上完成,图1为整个物体检测优化算法的流程图.

2.1 网络结构选择

本文整体网络架构选用MobileNets,MobileNets中的深度可分解卷积是将标准卷积分解成一个深度卷积和一个点卷积.

假设输入F的维度为DF×DF×M,其中DF为输入F的宽和高,M为输入层的通道数.标准卷积时,卷积K的参数量表示为DK×DK×M×N,其中DK为卷积K的维度,N为输出通道数,则此时的计算代价为C:

深度可分解卷积时,将标准卷积K拆分为深度卷积DK×DK×1×M和点卷积1×1×M×N,计算代价为C’:

将深度可分解卷积的计算代价C’与标准卷积的计算代价C相除,进行比较:

在ImageNet 数据集上,深度分离卷积的参数量约是标准卷积参数量1/7,而准确率只下降了不到1%[17].

深度分离卷积在网络结构上的变化如图2所示,将标准卷积拆分成深层卷积和点卷积,在每层卷积后面都有BN 层和激励函数ReLU.

图2 网络结构变化

在物体检测算法方面,R-CNN 系列都是物体定位和物体分类分开进行的物体检测方法,虽然准确率很高,但是速度较慢;而YOLO 和SSD 则都是一步完成物体定位和物体分类,其中YOLO 的速度很快,但是准确率不尽人意,而SSD 综合了Faster R-CNN 的高准确率和YOLO 的快速率优点,使得物体检测方法更加适合应用在嵌入式设备上,故选择SSD 作为本次面向嵌入式设备的深度学习物体检测优化算法研究的物体检测框架.

2.2 模型剪枝

在PC 端上的模型剪枝流程图如图3所示.

首先,对MobileNets-SSD 网络进行神经元重要性的评估,然后根据评估结果将其中最不重要的神经元置零,对部分神经元置零后的网络进行微调,判断微调后的网络是否达到预定标准,如果达到预定的标准,则可以停止剪枝;如果未到到预定的标准,则需要重复神经元重要性评估、不重要神经元置零、微调等步骤.

本文在模型剪枝过程中采用了一种基于一阶泰勒展开的新的神经元重要性评估准则[19].该准则中对神经元的评估公式为:

上式中,D表示训练样本集,W表示未修剪前的权重参数,W’表示修剪后的权重参数,C(D|W)为修剪后的代价函数,而C(D|W’)表示的是修剪后的代价函数,最优化的剪枝就是使得修剪后的代价函数C(D|W’)尽可能地逼近修剪前的代价函数C(D|W).将剪枝前后的代价函数差值赋值给|ΔC(hi)|,找出令式(4)中|ΔC(hi)|值最小的非零权重参数,将该参数置零,即完成一次剪枝.又因为C(D|hi)=C(D|(w,b)i),所以式(4)可以变换为式(5):

在式(5)中的C(D,hi=0)部分引入一阶泰勒展开式,如式(6)所示:

其中,R1(hi=0)为高阶项,因为ReLU 激活层中含有高阶信息,同时为了避免复杂的计算,高阶项R1(hi=0)可以忽略不计.

图3 模型剪枝流程图

综合式(5)和式(6)可得式(7):

将特征图看作变量的向量表示,当有M个变量时,剪枝前后的损失函数差值可表示为:

2.3 汇编优化

嵌入式设备主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,而树莓派是一款基于ARM 的微型电脑主板,是作为学习计算机编程的首选嵌入式设备.本文使用的是树莓派3 B,它有1.2 GHz 和64 位处理器,满足物体检测模型汇编优化和前向推理的性能需求.

在该ARM 平台上,通过对表1模型剪枝对比中各个网络层的耗时比较,决定针对其中卷积层Conv_0、Conv_1、Conv_2、Conv_3、Conv_4、Conv_5、Conv_6、Conv_7、Conv_8、Conv_9、Conv_10、Conv_11、Conv_12、Conv_13、Conv_14_1 和Conv_14_2 进行汇编优化,主要策略分为指令调整、寄存器分配和条件执行[20].

表1 模型剪枝对比(单位:ms)

(1)指令调整:通过展开循环对装载指令进行人工优化,仔细安排装载指令的时间次序,防止流水线终止.

(2)寄存器分配:限制局部变量的个数;把多个局部变量存放在一个寄存器中.

(3)条件执行:使用ARM 处理器特有的条件执行指令来减少判断跳转和分支等对流水线影响较大的操作.

通过以上策略最大程度地利用平台资源,发挥处理器最大效能,来满足物体检测模型直接在嵌入式设备上快速前向推理的需求.

3 实验分析

3.1 数据集制作

通过冰箱内的USB 摄像头对总共76 种蔬菜水果饮料等冰箱常见食材进行训练样本采集,一共采集5 万张图片,最后挑选出45 488 张作为训练样本,如图4所示.

图4 训练样本

图5 数据标注

利用网上标注系统对挑选出的训练样本进行数据标注,网上标注系统的界面如图5所示,可以对物体进行种类选择和位置定位.

3.2 训练优化

训练时采用MobileNets 作为本次实验的基础网络架构,其中总共有35 层卷积层,在Conv_11、Conv_13、Conv_14_2、Conv_15_2、Conv_16_2 和Conv_17_2后进行物体检测方法SSD 的分类器分类、位置回归和锚框的生成.最后,将以上6 个卷积层生成的类别特征、位置特征和anchor box 信息进行concat、Softmax和flatten.MobileNets 的网络层与本文的MobileNets-SSD 网络层如表2所示.相比于MobileNets,本文的MobileNets-SSD 多8 层卷积层,且最后的平均池化层、全连接层和Softmax 变成了conf_reshape、conf_softmax 和conf_flatten.对训练集进行训练后,最终本文的MobileNets-SSD 模型的mAP 达到84.7%.

表2 MobileNets 与本文的MobileNets-SSD

MobileNets-SSD 完成训练后进行基于一阶泰勒展开的模型剪枝.控制裁剪的整体过程为:1)前向传播2)获取排序后的卷积窗口3)计算需要剪枝的卷积窗口个数4)裁剪.主要函数如下所示:

(1)forward

(2)compute_rank

(3)normalize_ranks_per_layer

(4)get_prunning_plan

(5)lowest_ranking_filters

其中函数(1)表示模型的前向传播过程;函数(2)用在梯度更新时,其输出的计算值用于卷积窗口排序;函数(3)是将每层的结果归一化;函数(4)和函数(5)表示利用最小堆方法得到N个排名最低的卷积窗口.

完成一次剪枝后,进行模型微调和迭代.所有参数参与训练与学习,重新训练模型10 个迭代.

具体实验时,N分别设置为512 和1024,此时每层网络层耗时情况如表1模型剪枝对比所示.N为512 时,物体检测模型的mAP 为85.1%;N设为1024 时,物体检测模型的mAP 为82.3%.可以看出,N为512 时,物体检测模型的mAP 有所提升;而N为1024 时,物体检测模型的mAP 有所下降,说明N设置为512 时,模型剪枝后的物体检测模型复杂度更为适合本次实验训练数据集和测试数据集,前向推理效果更好.

所以,综合表1模型剪枝对比中N为512 和1024 时的耗时情况以及相对应的物体检测模型的mAP 值,本实验选择针对N为512 的模型剪枝后的MobileNets-SSD 物体检测模型进行汇编优化.经过模型剪枝后的MobileNets-SSD 模型体积由23.1 MB 缩减为20.8 MB,模型体积减小9.96%.

3.3 ARM 平台优化

由表1模型剪枝对比可知,物体检测模型中卷积层Conv_0、Conv_1、Conv_2、Conv_3、Conv_4、Conv_5、Conv_6、Conv_7、Conv_8、Conv_9、Conv_10、Conv_11、Conv_12、Conv_13、Conv_14_1 和Conv_14_2 无论是模型剪枝前还是模型剪枝后,耗时都比较久.我们通过指令调整、寄存器分配和条件执行等手段对模型剪枝前和模型剪枝后的耗时多的网络层分别进行汇编优化.主要应用到的是NEON 技术,它是ARM 处理器的128 位SIMD 架构扩展,旨在为消费性多媒体应用程序提供灵活、强大的加速功能.它具有32 个64 位寄存器和16 个128位寄存器.寄存器的具体调用代码如下所示:

(1).macro MobileNets-SSD

(2)vldl.32 {d16-d19},[BO]!

(3)vldl.32 {d0-d3},[AO]!

(4)vldl.32 {d16-d19},[BO]!

(5)vldl.32 {d4-d7},[AO]!

(6)vmla.f32 q12,q0,d16[0]

(7)vmla.f32 q12,q2,d18[0]

(8)vmla.f32 q12,q3,d20[0]

(9)vmla.f32 q12,q4,d22[0]

(10)...

(11)vstl.32 {d24-d27},[CO]!

(12)vstl.32 {d28-d31},[CO]!

(13).endm

上述代码(1)行,.macro 后面的字符串表示该宏的名称,在后续的调用中可以直接利用该宏来替代内部的具体实现代码.代码(13)行的.end 为宏的载止位置.

代码(2)-(5)行为数据加载指令,其中A0 表示矩阵起始地址,B0 为右矩阵的起始地址,两者均为地址寄存器.vldl,32 指令的调用可以将数据按照32 位为一个数据单位的顺序加载到NEON 寄存器当中,数据的连续性能够减少指令的访存时间.

代码(6)-(9)行为结果矩阵第一列的计算过程,vmla.f32为乘加指令.

代码(10)行表示其他几列的计算方式.

代码(11)-(12)行将寄存器当中的结果矩阵的值存储到内存当中,当存储位置是连续的情况下,指令的访存将同样是连续的,减少数据存储所需时间.

汇编优化后的结果如表3汇编对比所示.

由表3汇编对比可知,模型剪枝后的MobileNets-SSD 模型前向推理速率相较于未进行模型剪枝时的速率加快了1.16 倍,而汇编前后模型的mAP 无变化;又结合表1模型剪枝对比和表3汇编对比,经过模型剪枝和汇编优化的MobileNets-SSD 模型前向推理速率相较于原始模型加快了8.82 倍.

本文还选择其他两个前向推理框架进行了对比,使用的都是剪枝之后的网络模型,如表4所示.Mini-Caffe 是对Caffe 的前向推理版本,汇编优化比较少,Ncnn 是腾讯开发的带汇编优化的前向推理框架,做了比较深度的汇编优化.与它们相比,本文最终的前向推理时间是最低的.

表3 汇编对比

表4 与其他框架的对比

3.4 检测结果

在ARM 平台上的前向推理时,测试样本检测结果如图6所示.

部分物体未被检测的原因有以下几点:

(1)遮挡物过多,未能检测到整个物体;

(2)离USB 摄像头太远,暴露面积太小;

(3)只暴露物体部分特征,前向推理困难等.

前期的训练样本的选择对最后嵌入式设备上物体检测模型的前向推理检测结果有一定影响.整体效果较为理想.

图6 检测结果

4 结论与展望

本文选择了合适的物体检测框架SSD 和神经网络架构MobileNets,训练出一个满足嵌入式设备需求的物体检测模型,并通过模型剪枝对该物体检测模型进行优化,在移植到ARM 平台上之后又进行汇编优化,进一步加快前向推理速率.在准确精度和模型大小方面还可以有进一步的研究:

(1)MobileNets V2 的准确率和速率都有提高,可以在此网络结构上进行物体检测算法优化.

(2)因为模型中参数的存储精度为32 位的浮点数,可以在ARM 平台上针对模型参数进行量化,更大程度地压缩模型,加快前向推理速率.

猜你喜欢
网络层剪枝寄存器
人到晚年宜“剪枝”
利用KL散度度量通道冗余度的深度神经网络剪枝方法
基于YOLOv4-Tiny模型剪枝算法
常用电子测速法在某数字信号处理器中的应用*
飞思卡尔单片机脉宽调制模块用法研究
移位寄存器及算术运算应用
论物联网安全威胁及其应对策略
剪枝
物联网技术在信息机房制冷系统中的应用
浅析TDCS/CTC系统中心网络防火墙的链接