2. 中国科学院大学 计算机学院, 北京 100049
2. College of Computer Science, University of Chinese Academy of Sciences, Beijing 100049, China
开放科学(资源服务)标志码(OSID):
近年来,卷积神经网络被广泛地应用到计算机视觉、自然语言处理等领域,各种新的检测算法被不断提出,然而设计的深度学习模型多数是为了追求更高的精度[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 |
假设输入的特征图大小为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 |
网络剪枝的目的是减掉对检测结果贡献不大的网络层,以提升前向推理的速度[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 |
本文实验训练平台是远程云端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 |
如果将训练好的模型用到实际工程中,需要在一些嵌入式硬件平台进行部署,以达到项目落地的效果。将训练好的模型导出为推理模型,并在嵌入式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 |
本文在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. |