«上一篇 下一篇»
  计算机工程  2021, Vol. 47 Issue (10): 236-241  DOI: 10.19678/j.issn.1000-3428.0059168
0

引用本文  

黄靖淞, 左颢睿, 张建林. 轻量化目标检测算法研究及应用[J]. 计算机工程, 2021, 47(10), 236-241. DOI: 10.19678/j.issn.1000-3428.0059168.
HUANG Jingsong, ZUO Haorui, ZHANG Jianlin. Research and Application of Lightweight Object Detection Algorithm[J]. Computer Engineering, 2021, 47(10), 236-241. DOI: 10.19678/j.issn.1000-3428.0059168.

基金项目

科技委创新项目(G158207)

作者简介

黄靖淞(1995-), 男, 硕士研究生, 主研方向为图形图像处理、人工智能、嵌入式技术;
左颢睿, 副研究员、博士;
张建林, 研究员、博士、博士生导师

文章历史

收稿日期:2020-08-04
修回日期:2020-11-11
轻量化目标检测算法研究及应用
黄靖淞1,2 , 左颢睿1 , 张建林1     
1. 中国科学院光电技术研究所, 成都 610209;
2. 中国科学院大学 计算机学院, 北京 100049
摘要:基于卷积神经网络的目标检测算法在追求较高精度的同时,忽略了检测速度,使得算法难以在有限算力的情况下实现实时检测。在YOLO目标检测算法的基础上,采用一系列轻量化的方法,运用Mobilenetv1网络替换Darknet53基础网络,将YOLO head部分3×3标准卷积替换为深度可分离卷积,根据灵敏度对卷积层滤波器进行排序和修剪,并在嵌入式GPU TX2平台上进行C++推理部署。在VOC数据集上的测试结果表明,改进算法在精度仅下降0.75个百分点的前提下实现了2.4倍加速,模型占用内存仅为原来的21.5%。
关键词目标检测    轻量化    深度可分离卷积    剪枝    嵌入式GPU    C++推理部署    
Research and Application of Lightweight Object Detection Algorithm
HUANG Jingsong1,2 , ZUO Haorui1 , ZHANG Jianlin1     
1. Institute of Optics and Electronics, Chinese Academy of Sciences, Chengdu 610209, China;
2. College of Computer Science, University of Chinese Academy of Sciences, Beijing 100049, China
Abstract: The existing target detection algorithms based on convolutional neural networks have achieved a high accuracy, but the accuracy gain comes at the cost of detection speed, making it difficult for the algorithms to implement real-time detection with limited computing power.To solve this problem, a series of lightweight methods are adopted based on the YOLO target detection algorithm.The methods employ Mobilenetv1 to replace the basic network of Darknet53, and depthwise separable convolutions to replace the 3×3 standard convolutions in the YOLO head part.On this basis, the convolution layer filter is sorted and pruned according to sensitivity.Finally, C++ inference algorithms are deployed on the embedded GPU TX2 platform.The test results on the VOC data set show that the improved algorithm provides an acceleration of 2.4 times while the accuracy is reduced by only 0.75 percentage points.Additionally, the memory occupied by the improved model is only 21.5% of that occupied by the original model.
Key words: object detection    lightweight    depthwise separable convolution    pruning    embedded GPU    C++ inferred deployment    

开放科学(资源服务)标志码(OSID):

0 概述

近年来,卷积神经网络被广泛地应用到计算机视觉、自然语言处理等领域,各种新的检测算法被不断提出,然而设计的深度学习模型多数是为了追求更高的精度[1]和更好的性能,而忽略了模型的大小和推理速度。

在目标检测领域,REDMON等提出了YOLOv1[2]、YOLOv2[3]、YOLOv3[4]系列算法。因其在速度和精度之间实现了较好的权衡,而引起了学术界和工业界的广泛关注。以Faster R-CNN[5]为代表的双阶段网络先生成候选区域,再提取特定的特征进行目标检测,虽然精度较高,但计算复杂度也很高,难以在有限算力的情况下实现实时检测。以YOLO为代表的单阶段目标检测算法将生成候选区和检测合二为一,直接得到最终的检测结果,使得网络结构变得简单,检测速度较Faster R-CNN有近10倍的提升,这使得深度学习目标检测算法满足实时检测条件成为可能。

MobileNet是由谷歌在2017年提出的,是一款专注于在移动设备和嵌入式设备上的轻量级卷积神经网络,并逐步发展为MobileNetv1[6]、MobileNetv2[7]、MobileNetv3[8]3个版本。相比于传统的卷积神经网络,在准确率小幅降低的前提下,大幅减小了模型参数和运算量,其中最重要的创新是提出了深度可分离卷积,用深度可分离卷积替换标准卷积可以减少计算量和参数量,提升前向推理速度。

另外,网络剪枝也是网络压缩和加速中一个重要的方向,剪枝就是去除网络中一些不重要的神经元,大幅降低了计算量和权重数量,提高了网络运行效率[9]。目前剪枝主要分权重剪枝和滤波器剪枝两种。滤波器剪枝相对于权重剪枝具有一系列优点,包括它可以得到规则的模型、减少内存消耗、加速网络推理等。

本文在YOLOv3目标检测算法的基础上,使用轻量级的Mobilenet基础网络,将深度可分离卷积替换为标准卷积,并在此基础上对网络进行剪枝,以在不损失检测精度的情况下提升检测速度。

1 YOLOv3算法与Mobilenet基础网络 1.1 YOLOv3算法

YOLOv3网络以Darknet53网络为backbone,因其有52个卷积层外加1个全连接层,所以命名为Darknet53。其中卷积层是由1×1和3×3的卷积层组成,每个卷积层后都会有1个BN层和1个LeakyReLU层。YOLOv3主体是由许多残差结构[10]组成,减少了梯度爆炸的风险,加强了网络的学习能力,Concatenate层用于将当前层的多个输入进行拼接,UpSample层表示上采样,每进行一次上采样操作,输出特征层就扩大1倍。YOLOv3预测的3个特征层大小由浅到深分别是输入特征图的1/32、1/16、1/8,对3个不同尺度的特征图进行检测,因而实现了多尺度检测[11]。另外由于浅层网络提取到的边缘、纹理等几何特征较多,感受野较小,对小目标敏感,而深层网络提取到的语义信息较多,感受野较大,对大目标敏感,所以浅层输出适合检测小型目标,中层输出适合检测中型目标,最深层输出适合检测大型目标。每个预测的输出可以表示为S×S×3×(5+类别数)。YOLO将图像划分为S×S的网格,当目标中心落在某个网格中时,即用该网格去检测,另外每个网格需要检测3个尺度的anchorbox,5表示的是(x,y,w,h)以及置信度5种位置信息。最后3个输出经过非极大抑制[12]得到最终的坐标信息和类别的预测值。YOLOv3算法网络结构如图 1所示。

Download:
图 1 YOLOv3算法网络结构 Fig. 1 Network structure of YOLOv3 algorithm

本文借鉴了Mobilenetv1网络深度可分离卷积的思想[13],将YOLOv3的backbone由Darknet53替换为Mobilenetv1,并将YOLO head网络中的部分3×3标准卷积替换为深度可分离卷积,深度可分离卷积包括深度卷积和逐点卷积两部分[14],其在尽量提取特征的同时减少了计算量。标准卷积和深度可分离卷积的结构如图 2所示。

Download:
图 2 标准卷积和深度可分离卷积结构 Fig. 2 Structure of standard convolution and depthwise separable convolution
1.2 Mobilenet基础网络

假设输入的特征图大小为Wi×Hi×C,分别代表输入特征图的宽、高、通道数,标准卷积大小为Wc×Hc×C×N,分别代表标准卷积的宽、高、通道数、滤波器个数,输出特征图大小为Wo×Ho×N。那么标准卷积的计算量如下:

Amount(Conv)=Wo×Ho×N×Wc×Hc×C

相应的深度可分离卷积是用Wc×Hc×1×C(分别表示宽、高、通道数、组数)的卷积先进行逐通道卷积,再用1×1× C×N的卷积进行逐点卷积,其计算量如下:

Amount(dw)=Wo×Ho×C×Wc×Hc×1+Wo×Ho×

N×1×1×C

两者之比为:

Amount(dw)/Amount(Conv)=1/N+1/(Wc×Hc

若输入3×608×608的特征图,经过256×3×3×3的卷积核,那么计算量的比值为1/256+1/(3×3),也就是说将标准卷积替换为深度可分离卷积后,计算量会减少8~9倍。

基础网络Mobilenetv1输入为1×3×608×608的图片,网络参数如表 1所示。网络包括1层标准卷积,后面接13层深度可分离卷积,每1层卷积后都跟1个Batch_norm层和Relu层。其中,Conv3_2、Conv4_2、Conv6层深度可分离卷积的3个输出分别作为YOLO_head网络部分的3个输入,另外YOLO_head网络中只包含1×1和3×3的卷积,将其中部分3×3卷积也改为深度可分离卷积。表 1是Mobilenetv1的网络结构。

下载CSV 表 1 Mobilnetv1网络结构 Table 1 Structure of Mobilenetv1 network
2 网络剪枝技术 2.1 剪枝

网络剪枝的目的是减掉对检测结果贡献不大的网络层,以提升前向推理的速度[15],由于大量的运算量都在卷积层部分,因此本文主要讨论对卷积层滤波器个数的剪枝,对于某一层卷积层,对其所有filter进行重要性排序,将排在后面不重要的filter减掉,这样能在减少整体运算量的同时,对检测精度没有太大影响。

对滤波器重要性排序的方法如下:

1)以filter非零权重值的个数为基准进行排序,即权重L0范数[16]

2)对filter每个权重值求绝对值之和进行排序,即权重L1范数[17]

3)基于几何中心的卷积核剪枝方法FPGM[18]

L0范数以当前卷积层的每个滤波器矩阵非零元素个数为排序依据,非零元素个数越多就越重要,对检测结果的贡献也越大。L1范数以当前卷积层的每个滤波器矩阵元素绝对值之和为排序依据,绝对值之和越大,该滤波器就越重要。文献[18]提出了基于几何中心的滤波器评价指标FPGM(Filter Pruning via Geometric Median),认为很多方法都是基于“较小范数不重要”的准则进行剪枝,其有效性依赖于2个要求:卷积核的范数值分布偏差必须大,即方差大;卷积核中的最小范数必须足够小。为解决在不满足上述2个要求的情况下也能压缩网络,该方法的思想是计算每个filter与其他所有filter的欧式距离之和作为得分,得分越低表示该滤波器信息跟其他滤波器重合度越高,可以用其他滤波器替代该滤波器。

2.2 敏感度分析

本文依据L1范数对滤波器进行重要性排序,只对YOLO_head网络进行剪枝,保持基础网络Mobilenetv1的完整性。剪枝率取0.1~0.9、步长为0.1的一系列剪枝比率,然后对所需要剪的每一层卷积层按不同剪枝率进行剪枝,分析不同剪枝情况下检测精度的损失情况,并绘制敏感度曲线。卷积层敏感度曲线如图 3所示,如果曲线上升很快,则表示当前卷积层比较敏感,如果剪枝率过大会有较大的精度损失,否则如果曲线上升平缓,则表示该卷积层对检测结果的贡献不大,可以采用较大的剪枝率。据此对于给定的可接受的精度损失来确定每个层的剪枝率。

Download:
图 3 卷积层敏感度曲线 Fig. 3 Sensitivity curve of convolution layer

图 3可以看出,某些卷积层比如yolo_block. 0.0.1_sep_weights、yolo_block.0.1.1_sep_weights、yolo_block.0.tip_sep_weights等层上升曲线很快,对检测结果的贡献很大,所以只剪很少比例的filter数目,而对于例如yolo_block.2.1.1_sep_weights、yolo_block.2.2.conv.weights、yolo_block.2.tip_sep_weights等层,当剪枝率达到0.9时也几乎不丢失精度,本文实验以剪枝率0.7作为剪枝上限。

2.3 剪枝网络配置

对于标准卷积(Conv)和逐点卷积(sep),给定剪枝率后,其filter的个数会相应减少,而深度卷积(dw)的组数等于输入特征图的通道数,所以不需给出剪枝率,其组数会随上一层卷积层滤波器的个数而变化。表 2是剪枝前后YOLO_head的网络结构。

下载CSV 表 2 剪枝前后YOLO_head网络结构 Table 2 YOLO_head network structure before and after pruning
3 软硬件配置 3.1 软硬件平台

本文实验训练平台是远程云端GPU Tesla V100,显存16 GB,推理部署平台是英伟达嵌入式GPU Jetson TX2,该平台拥有256颗Pascal架构CUDA核心,6颗CPU核心[19-20]。所用训练集和测试集来自VOC2007、VOC2012,模型的评估指标mAP。所使用深度学习框架为百度飞桨Paddle[21]框架、PaddleSlim压缩框架以及Paddle Inference C++推理预测库,并用CMake管理项目文件,CMake全称为Cross platform Make,是一个跨平台的构建系统,可以编写一个与平台无关的CMakeLists.txt文件定制整个编译流程,然后再进一步生成所需的Makefile和工程文件[22]。使用pycharm作为python集成开发环境,clion作为C++开发环境。

3.2 训练设置及测试结果

在进行训练时,与预训练模型相匹配的层直接加载该部分网络的参数,不匹配的部分则读取程序中定义的网络结构。训练的最大batch数设置为28万,batch_size为16,初始学习率为0.000 5,在batch数为11万和12.4万的地方学习率变为之前的0.1倍。

表 3是在Tesla V100显卡上进行测试的结果,可以看出在YOLOv3_MobileNetV1网络基础上,将YOLO_head网络部分卷积改为深度可分离卷积之后再进行剪枝,在几乎不损失精度的前提下,使得FPS分别提升了25.9%和40.8%。实验结果表明:单纯增大batch_size后速度并不一定会比减小batch_size快,并且GPU利用率也会明显增加,这可能跟CPU与GPU之间的数据传输、硬盘的读写速度等因素有关。

下载CSV 表 3 Tesla V100测试结果 Table 3 Test results of Tesla V100
4 算法嵌入式部署

如果将训练好的模型用到实际工程中,需要在一些嵌入式硬件平台进行部署,以达到项目落地的效果。将训练好的模型导出为推理模型,并在嵌入式GPU TX2平台以C++进行前向推理,并用CMake管理头文件和库文件。除Paddle本身的依赖库之外,还用到了第三方开源库gflags,gflags是Google的一个命令行参数处理的开源库,用于将命令行参数传入到程序中,另外还有yaml-cpp开源库,用于对yaml文件的读取,两者也都是用CMake来进行构建和编译的。在TX2上的部署流程如图 4所示,首先通过命令行判断读取磁盘图片或者板载摄像头读取视频帧,然后进行目标检测,最后将检测结果进行显示,并不断重复。

Download:
图 4 TX2推理流程 Fig. 4 TX2 inferential procedure

表 4是在嵌入式GPU TX2平台上的测试结果,计算4 952张VOC测试数据集的网络前向推理帧率。YOLOv3_MobileNetV1的帧率是5.0 frame/s,将YOLO_head网络中部分卷积层改为深度可分离卷积后的帧率为9.6 frame/s,在此基础上进行剪枝后帧率达到了12.0 frame/s,分别实现了1.92倍和2.4的加速,模型规模分别减小了67.9%和78.5%,有效提升了嵌入式设备上目标检测的推理速度。这是在尽可能不丢失精度的前提下的实验结果,如果实际情况对速度有更高的要求,则还可以提高剪枝率,进一步加速前向推理。

下载CSV 表 4 TX2测试结果 Table 4 TX2 test results
5 结束语

本文在YOLOv3目标检测算法的基础上,采用轻量级的Mobilenet分类网络作为backbone,并将深度可分离卷积替换YOLO_head网络部分标准卷积,在此基础上通过L1范数对卷积层filter打分,并以此作为排序依据对网络做剪枝。测试结果表明,改进算法在检测精度丢失很少的前提下,较大地提高了算法的检测速度,并实现了算法在嵌入式平台上的部署。由于该算法具有通用性,下一步将研究算法在其他不同平台的部署,以实现诸如手机移动端等硬件平台的目标检测。

参考文献
[1]
HU T, ZHU Y X, TIAN L, et al. Lightweight convolutional neural network architecture for mobile platforms[J]. Computer Engineering, 2019, 45(1): 17-22. (in Chinese)
胡挺, 祝永新, 田犁, 等. 面向移动平台的轻量级卷积神经网络架构[J]. 计算机工程, 2019, 45(1): 17-22.
[2]
REDMON J, DIVVALA S, GIRSHICK R, et al. You only look once: unified, real-time object detection[C]//Proceedings of IEEE International Conference on Computer Vision & Pattern Recognition. Washington D.C., USA: IEEE Press, 2016: 259-268.
[3]
REDMON J, FARHADI A. Yolo9000: better, faster, stronger[C]//Proceedings of IEEE International Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2017: 6517-6525.
[4]
REDMON J, FARHADI A. Yolov3: an incremental improvement[EB/OL]. [2020-07-01]. https://arXivpreprintarXiv:1804.02767.
[5]
GIRSHICK R. Fast R-CNN[C]//Proceedings of IEEE International Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2015: 1440-1448.
[6]
HOWARD A G, ZHU M, CHEN B, et al. Mobilenets: efficient convolutional neural networks for mobile vision applications[EB/OL]. [2020-07-01]. https://arXivpreprintarXiv:1704.04861.
[7]
SANDLER M, HOWARD A, ZHU M, et al. MobileNetV2: inverted residuals and linear bottlenecks[C]//Proceedings of IEEE International Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2018: 4510-4520.
[8]
HOWARD A, SANDLER M, CHU G, et al. Searching for MobileNetV3[C]//Proceedings of IEEE International Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2019: 589-571.
[9]
ZHOU Z, WANG H P, XU F, et al. A SAR image ship detection optimization algorithm based on channel pruning[J]. Shanghai Aerospace, 2020, 37(4): 48-54. (in Chinese)
周舟, 王海鹏, 徐丰, 等. 基于通道剪枝的SAR图像舰船检测优化算法[J]. 上海航天, 2020, 37(4): 48-54.
[10]
ZHAN H, ZHU Z C, ZHANG Y H, et al. Image sequence closed-loop detection method based on residual network[J/OL]. Progress in Laser and Optoelectronics: 1-13[2020-10-11]. http://kns.cnki.net/kcms/detail/31.1690.TN.20200916.1254.008.html. (in Chinese)
占浩, 朱振才, 张永合, 等. 基于残差网络的图像序列闭环检测方法[J/OL]. 激光与光电子学进展: 1-13[2020-10-11]. http://kns.cnki.net/kcms/detail/31.1690.TN.20200916.1254.008.html
[11]
ZHAO H P, ZHOU Y, ZHANG L, et al. Mixed YOLOv3-LITE: a lightweight real-time object detection method[J]. Sensors, 2020, 20(7): 1861-1875. DOI:10.3390/s20071861
[12]
ZHAO W Q, YAN H, SHAO X Q. Target detection based on improved non-maximum suppression algorithm[J]. Journal of Image and Graphics, 2018, 23(11): 1676-1685. (in Chinese)
赵文清, 严海, 邵绪强. 改进的非极大值抑制算法的目标检测[J]. 中国图象图形学报, 2018, 23(11): 1676-1685. DOI:10.11834/jig.180275
[13]
WANG W X, ZHOU X, HE X H, et al. Facial expression recognition based on improved MobileNet network[J]. Computer Applications and Software, 2020, 37(4): 137-144. (in Chinese)
王韦祥, 周欣, 何小海, 等. 基于改进MobileNet网络的人脸表情识别[J]. 计算机应用与软件, 2020, 37(4): 137-144. DOI:10.3969/j.issn.1000-386x.2020.04.023
[14]
CAO Y K, GUI L Y. Design of lightweight time convolutional network based on deep separable convolution[J]. Computer Engineering, 2020, 46(9): 95-100, 109. (in Chinese)
曹渝昆, 桂丽嫒. 基于深度可分离卷积的轻量级时间卷积网络设计[J]. 计算机工程, 2020, 46(9): 95-100, 109.
[15]
JIN L L, YANG W Z, WANG S L, et al. Mixed pruning method for convolutional neural network compression[J]. Journal of Chinese Computer Systems, 2018, 39(12): 2596-2601. (in Chinese)
靳丽蕾, 杨文柱, 王思乐, 等. 一种用于卷积神经网络压缩的混合剪枝方法[J]. 小型微型计算机系统, 2018, 39(12): 2596-2601. DOI:10.3969/j.issn.1000-1220.2018.12.007
[16]
LI H, KADAV A, DURDANOVIC I, et al. Pruning filters for efficient ConvNets[EB/OL]. [2020-07-01]. https://www.researchgate.net/publication.
[17]
BOOIL O. Machine learning intelligent systems[D]. [S. 1. ]: University of Sistan and Baluchestan, 2020.
[18]
HE Y, LIU P, WANG Z, et al. Filter pruning via geometric median for deep convolutional neural networks acceleration[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition. Washington D.C., USA: IEEE Press, 2019: 324-336.
[19]
QI J. NVIDIA Jetson TX2 platform: accelerating the development of miniaturized artificial intelligence terminals[J]. Intelligent Manufacturing, 2017(5): 20-21. (in Chinese)
齐健. NVIDIA Jetson TX2平台: 加速发展小型化人工智能终端[J]. 智能制造, 2017(5): 20-21.
[20]
ZHANG Y H. Minimum application system hardware design of Jetson TX2 platform[J]. Single-chip Microcomputer and Embedded System Applications, 2019, 19(10): 52-54. (in Chinese)
张永合. Jetson TX2平台的最小应用系统硬件设计[J]. 单片机与嵌入式系统应用, 2019, 19(10): 52-54.
[21]
MA Y J, YU D H, WU T, et al. Flying paddle: an open source deep learning platform derived from industrial practice[J]. Frontiers in Data and Computing Development, 2019, 5(1): 105-115. (in Chinese)
马艳军, 于佃海, 吴甜, 等. 飞桨: 源于产业实践的开源深度学习平台[J]. 数据与计算发展前沿, 2019, 5(1): 105-115.
[22]
HAN M M. Research and implementation of source code analysis methods for large-scale CMake projects[D]. Beijing: Beijing Jiaotong University, 2019. (in Chinese)
韩梦梦. 大型CMake类项目源码分析方法的研究与实现[D]. 北京: 北京交通大学, 2019.