拥有巨大参数数量的深度卷积神经网络(Convolutional Neural Networks, CNNs)[1- 2]在当前机器视觉领域取得的成绩有目共睹。然而更大更深的卷积网络意味着训练生成的模型具有大量的参数和浮点计算量。而在计算能力以及存储资源有限的移动设备上需要部署的是低功耗,低存储以及低延迟的神经网络模型,所以如何将训练得到的大模型轻量化成为了一个重要的研究课题。在深度学习领域中,神经网络轻量化主要包括三个方面内容:第一:设计一种轻量化的卷积神经网络架构如MobileNet[3],ShuffleNet[4]以及SqueezeNet[5]等。第二:模型剪枝。将不重要的连接或者卷积核进行裁剪以减少模型的冗余,如方法[6]。第三:模型量化。将模型中的浮点数转化为定点数以达到减少模型的大小以及加快前向计算的效果,如二值神经网络[7],三值权重网络[8],三值训练网络[9]等。
基于卷积神经网络的目标检测算法大多都是设计更加复杂的神经网络来提高检测的精度,如两阶段检测器Faster RCNN,Mask RCNN等以及单阶段阶段检测SSD,YOLO等。这些典型的检测器虽检测精度比较高,但是都存在着设计的网络参数量过大的问题,如基于深度学习的目标检测算法SSD(Single Shot MultiBox Detector)[10],使用VGG16作为特征提取网络并采用多尺度进行检测,该算法在目前检测基准上有着优秀的竞争水平,不仅检测精度高,而且帧速达到28FPS/s[11],具有较高的实时性。但该算法使用深度神经网络VGG16,该网络参数量以及计算量过大,很难部署到硬件源有限的移动设备中。为了检测精度和实际部署效率之间的权衡,人们设计轻量级检测器时绝大部分都是采用轻量化的神经网络结构在内存有限的设备中实现目标检测任务,如文献[12]。
在SSD算法的基础上,本文提出了一种检测精度高且占用内存非常小的目标检测器。我们的工作主要包括有:(1)基于ResNet50[13]和MobileNet神经网络重新设计了一种高精度低参数量的目标检测网络。该网络不仅具有多尺度检测的功能,而且检测头部网络非常轻量化所以能够极大的提高检测速度。(2)在此网络框架上基于ResNet50预训练模型训练一个全精度参数模型,然后基于此全精度模型采用一种逐块量化策略将特征提取层的权重精度降低到三值。原先一个32位浮点参数在计算机内存中存储需要占用4个字节数,经过三值量化后,一个参数仅仅需要0.25个字节数即可。所以该方法后能够极大的压缩整个目标检测网络。
原SSD目标检测器使用神经网络模型VGG16为特征提取网络,而在VGG16网络中使用了大量的3×3卷积,由于3×3的卷积参数量很大,所以整个检测器网络有大约52M的参数量。它与SSD-MobileNet,Tiny-Yolo[14],PeleetNet等仅有几M参数量的轻量化检测器相比,占用的内存空间太大,很难部署到内存有限的移动设备中。而诸如SSD-MobileNet,Tiny-Yolo等轻量化检测器,虽然参数量低,占用内存空间小,但是检测精度往往不尽如意。
针对以上目前检测器存在的问题,我们提出了一种改进的轻量化网络。
我们提出的网络架构如图1所示。为了在降低参数量的同时尽可能的保持精度不下降,我们首先将ResNet50作为检测的特征提取网络。ResNet50与VGG16相比,由于使用了较多的1×1卷积,参数量小了很多,同时,ResNet的结构可以加速神经网络的训练,模型的准确率也能有进一步的提升。其次,在特征提取网络后,为了保持多尺度的预测,我们增加了几个卷积层以得到更多的检测尺度,最终总共选取了6种尺度(38×38,19×19,10×10,5×5, 3×3,1×1)进行检测,其中为每种尺度分配的先验框的个数依次为4,6,6,6,4,4。
在检测头部用于定位和分类的网络中,为了使得整个网络更加轻量化,我们不使用普通的3×3卷积,而是将其替换为成一个3×3深度可分离卷积和一个1×1的逐点卷积级联的操作,其具体结构如图2所示。
图1 轻量化SSD网络结构
Fig.1 Lightweight SSD network structure
图2 拆分的卷积结构
Fig.2 The split convolution structure
H W C H W K=
(1)
参数量压缩比为:
(2)
所以对于一个3×3的卷积,计算量和参数量大约减少到原来的1/9。我们提出的网络架构在300×300的输入下参数量大约为26M,为SSD原始网络架构52M参数量的一半。
在现有的轻量化目标检测器设计中,基本上都是采用单一的技术来实现轻量化,比如文献[15]采用MobileNetv2替代VGG作为基础网络的方法来减少模型的大小,文献[16]则以DenseNet为基础,结合深度可分离卷积,逐点分组卷积与通道重排提出轻量化特征提取最小单元来减少参数的数量。本文不同的是仅仅在检测的头部网络中使用深度可分离卷积的结构,而为了保持检测精度,特征提取网络采用深度残差网络ResNet50。由于ResNet的结构占用参数量较多,我们进一步的采取参数量化的方法来压缩未使用轻量级网络结构的单元模块,即通过参数量化将卷积层的权值精度降低到三值。文献[17]采取一种迭代量化的方法不断进行训练使量化误差达到最小值,文献[18]基于一种局部三值模式进行人脸识别。而我们采取的方法是参考文献[9],在原文中该方法只应用于分类任务,在这里,我们将其应用到更困难的目标检测任务中。
具体的量化过程如图3所示(其中,黑色箭头表示loss是由量化的三元权重参数计算得到;紫色箭头表示通过反向传播学习更新两个正负缩放系数,其计算如公式(4)所示;黄色箭头表示通过反向传播学习全精度权重的参数,其loss对全精度权重的参数的计算如公式(5)所示)。我们在前向传播时首先将全精度模型的浮点值归一化到正负1之间,然后选取阈值三值量化为+1,-1,0,其中阈值设置为每层中所有参数绝对值的最大值乘以阈值因子t,阈值因子t在所有层当中都设为相同的超参数以便缩小搜索空间,最后乘以两个缩放系数得到最终的量化参数网络,其中,两个缩放系数是经过反向传播训练学习得到的,通过阈值进行量化的计算如公式(3)所示。
图3 量化的具体过程
Fig.3 The specific process of quantification
(3)
由量化后的网络参数进行计算loss,在反向传播中,我们利用全精度权重来进行更新参数来学习三元分配即将网络模型参数重新量化为+1,-1,0,利用学习到的量化缩放系数来学习量化后三元值,反向传播中各参数的梯度计算如公式(4)和公式(5)所示。
(4)
(5)
其中:
(6)
三值量化后,一个参数在计算机内存中仅仅用2 bit就能表示,而一个全精度权重参数所需的内存空间是32 bit,所以采用方法能够极大的对网络进行压缩。若对整个网络的全精度权重进行三值量化,模型能压缩16倍,同时,由于大量的浮点乘法变为整数乘法,模型的推理速度也能够得到极大的提高。
我们首先给出改进的SSD轻量化网络中各层的参数量统计(输入为300×300分辨率)以及每一卷积层的量化情况。如表1所示。
表1 参数量与量化的统计情况
Tab.1 Statistics of parameters and quantification
层参数量/个比特数/bit所有的BN层5312032conv1940832block12129922block212124162block370778882block4149422082conv05445442Conv15900802Conv2328962Conv32951682Conv4328962Conv52951682Smooth106700832定位层8473632分类层33715232
从表1中可以总结出,整个网络的总参数量约为26.7M,其中保持全精度的参数量1.55M,被量化为2 bit的参数量为25.2M,占总参数量的大约94%。由于大量的参数精度被降低到2 bit,所以我们极大的压缩了该目标检测网络模型体积。
从大量的实验中我们发现,对目标检测任务的网络参数进行三值量化时很难实现,并且若一次性对整个网络进行量化,训练无法收敛。因此,我们采取了一种有效的量化策略:逐块量化。我们将网络结构分成多个模块:第一块:block1+block2+block3+block4,第二块:conv0+conv2+conv4,第三块:conv1,第四块:conv3,第五块:conv5依次对每块进行三值量化,其中每量化完一个模块之后固定住该模块参数然后继续量化下一模块。我们在图4给出了采取逐块训练后检测的评估指标平均精度均值(Mean Average Precision, mAP)值变化的情况,从图4可以看出,mAP指标下降主要发生在量化block1+block2+block3+block4的阶段,而在量化conv0~conv5的阶段能够保持检测性能甚至能提升一些性能。为了进一步探究在量化block1+block2+block3+block4阶段性能下降的原因,我们重新依次对block1, block2,block3,block4这四层进行了量化,但是性能并没有得到提升。
图4 采用逐块量化后mAP变化情况(2007+2012)
Fig.4 mAP change after block-by-block quantization (2007+2012)
同时,在实验中我们并没有对Conv1,Smooth以及定位层和分类层进行量化。Conv1层作为网络的第一层对输入比较敏感,在量化时一般不进行量化。定位和分类层对参数的精度要求比较高,当参数精度降低到2 bit时,网络训练无法收敛。在进行逐块三值量化时,应当注意每块的参数量的大小,当参数量过大时(大约大于1M的参数量),量化该块时比较困难如Smooth层,应该将此模块分成参数量较小的几部分进行量化。因为某块参数量较大表示它能提取的信息量更多,若一次性对该块进行三值量化,那么2 bit的参数精度不足以满足信息量提取的性能要求。虽未对Smooth层以及定位和分类层进行量化,但这几层我们使用的是深度可分离的卷积结构,参数量较少。基于这种逐模块量化策略,我们分别在Pascal VOC2007和VOC2012数据集上进行了实验。
在本文中,我们选择Pascal VOC2007和Pascal VOC2012的Trainval数据集作为训练数据,并在VOC2007的Test数据集上测试训练效果。本文实验平台为NVIDIA Tesla P100显存,软件环境为Ubuntu14.04,CUDA8.0以及Pytorch深度学习框架。
在实验中,我们首先从头开始训练一个全精参数模型。其中,定位损失选择Smooth L1函数,分类损失选择Softmax函数。在具体的设置中我们选择优化器SGD。采用如图5所示的学习率下降策略共迭代400轮训练模型。其中需要注意的是0~2个epoch学习率从1e-6线性增加到1e-2,在200和300个epoch时,学习率对应减小0.1。
图5 学习率的设置情况
Fig.5 Setting of learning rate
然后,我们在全精度模型的基础上采取逐块量化策略来对特征提取层中的绝大部分卷积层的参数进行三值量化(如表1),在对ResNet50特征层进行量化时选择SGD优化器。并加大到600轮训练,学习率下降的关键点设置为[200,320,450],在量化conv0~conv5时优化器设置为Adam并保持600轮训练,学习率对应下降一个量级。
从表2中可以看到,我们训练的全精度模型在VOC2007的数据集上取得了69.16%的mAP,并且帧速达到了76 FPS。比原SSD算法检测精度提高了1.16%的mAP,帧速提高了69%。在VOC2007+2012的混合数据集上测试得到的mAP是76.10%,帧速是66 FPS,比原SSD算法检测精度提高了1.8%。
同时,将特征提取层的参数精度降低到三值后,在VOC2007+2012的混合数据集上测试仍然能得到72.54%的mAP,同时模型所占用的内存大小从103M减少到11.9M,压缩率达到了88.5%。同时,大量的浮点运算变为整数运算,因此在定制的硬件设备上,此模型能够极大的加快模型的推理速度。
表2 轻量化SSD算法性能
Tab.2 Performance of lightweight SSD algorithm
模型数据参数量/M占用内存/bytemAP/%FPS全精度模型200726.7103M69.1676全精度模型2007+201226.7103M76.1066量化模型200726.711.9M64.41-量化模型2007+201226.711.9M72.54-
我们还将提出的改进的SSD检测算法轻量化方案与其他先进的轻量型检测器进行了比较。如表3所示。
表3 性能对比
Tab.3 Performance comparison
模型数据占用内存/bytemAP/%Tiny-YOLOv207+1259.36M57.10SSD+MobileNet07+1222.01M68.00文献[16]07+1222.00M67.62PeleeNet07+1220.71M70.90LVP-DN(300)[15]07+1218.50M73.20Ours07+1211.90M72.54
从表3中可以看出,我们提出的方法比SSD-MobileNet,Tiny-Yolov2,以及PeleeNet等表现较好的轻量型目标检测器占用的内存空间都要小,仅占内存11.90M,检测精度也优于绝大部分检测器,mAP值能够达到72.54%,比典型的轻量型检测网络PeleeNet检测器的检测精度高了近2%。
针对移动设备部署对小内存的需求,本文提出了一种基于改进的SSD轻量化目标检测器。首先,基于ResNet50和MobileNet我们重新设计了SSD目标检测框架,并训练了一个全精度权重的模型。然后,在全精度权重模型的基础上,采取逐块量化的策略将特征提取层中卷积层的权重精度降低到三值(零和正负一)。实验结果表明,本文提出的联合方案在Pascal VOC2007数据集上测试能够达到72.54%的mAP,和其他业界领先的轻量级目标检测方法相比检测精度更高且能使模型占用的内存空间更小。
[1] Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.
[2] Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]∥Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015: 1-9.
[3] Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv: 1704.04861, 2017.
[4] Zhang X, Zhou X, Lin M, et al. Shufflenet: An extremely efficient convolutional neural network for mobile devices[C]∥Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2018: 6848- 6856.
[5] Iandola F N, Han S, Moskewicz M W, et al. Squeeze- Net: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size[J]. arXiv preprint arXiv: 1602.07360, 2016.
[6] Liu Z, Li J, Shen Z, et al. Learning efficient convolutional networks through network slimming[C]∥Proceedings of the IEEE International Conference on Computer Vision, 2017: 2736-2744.
[7] Rastegari M, Ordonez V, Redmon J, et al. Xnor-net: Imagenet classification using binary convolutional neural networks[C]∥European Conference on Computer Vision. Springer, Cham, 2016: 525-542.
[8] Li F, Zhang B, Liu B. Ternary weight networks[J]. arXiv preprint arXiv: 1605.04711, 2016.
[9] Zhu C, Han S, Mao H, et al. Trained ternary quantization[J]. arXiv preprint arXiv: 1612.01064, 2016.
[10] Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]∥European Conference on Computer Vision. Springer, Cham, 2016: 21-37.
[11] 张索非, 冯烨, 吴晓富. 基于深度卷积神经网络的目标检测算法进展[J]. 南京邮电大学学报:自然科学版, 2019(5): 10.
Zhang Suofei, Feng Ye, Wu Xiaofu. Recent advances on object detection using deep CNNs: an overview[J]. Journal of Nanjing University of Posts and Telecommunications: Natural Science Edition, 2019(5): 10.(in Chinese)
[12] Wang R J, Li X, Ling C X. Pelee: A real-time object detection system on mobile devices[C]∥Advances in Neural Information Processing Systems, 2018: 1963-1972.
[13] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]∥Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2016: 770-778.
[14] Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]∥Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2016: 779-788.
[15] 郑冬, 李向群, 许新征. 基于轻量化SSD的车辆及行人检测网络[J]. 南京师大学报: 自然科学版, 2019, 42(1): 79- 87.
Zheng Dong, Li Xiangqun, Xu Xinzheng. Vehicle and pedestrian detection model based on lightweight SSD[J]. Journal of Nanjing Normal University: Natural Science Edition, 2019, 42(1): 79- 87.(in Chinese)
[16] 吴天舒, 张志佳, 刘云鹏, 等. 基于改进SSD的轻量化小目标检测算法[J]. 红外与激光工程, 2018,47(7): 47-53.
Wu Tianshu, Zhang Zhijia, Liu Yunpeng, et al. A lightweight small object detection algorithm based on improved SSD[J]. Infrared and Laser Engineering, 2018,47(7): 47-53.(in Chinese)
[17] 甄俊杰, 应自炉, 赵毅鸿, 等. 深度学习和迭代量化在图像检索中的应用研究[J]. 信号处理, 2019,35(5): 919-925.
Zhen Junjie, Ying Zilu, Zhao Yihong, et al. Research of deep learning and iterative quantization in image retrieval[J]. Journal of Signal Processing, 2019,35(5): 919-925.(in Chinese)
[18] 郑秋梅, 谢换丽, 王风华, 等. 一种基于局部三值模式的深度学习人脸识别算法[J]. 计算机与现代化, 2018(2): 112.
Zheng Qiumei, Xie Huanli, Wang Fenghua, et al. A deep learning face recognition algorithm based on local three ternary pattern[J]. Computer and Modernization, 2018(2): 112.(in Chinese)
Reference format: Feng Ye, Zhang Suofei, Wu Xiaofu. A Light-weighted SSD Network Design for Object Detection[J]. Journal of Signal Processing, 2020, 36(5): 756-762. DOI: 10.16798/j.issn.1003- 0530.2020.05.015.
冯 烨 男, 1995年生, 安徽金寨人。南京邮电大学通信与信息工程学院硕士研究生。主要研究方向为深度学习以及目标检测。E-mail: 1442042181@qq.com
张索非 男, 1982年生, 江苏镇江人。博士, 南京邮电大学讲师。研究方向包括图像与视频信号处理、 机器学习、 物联网技术等。E-mail: zhangsuofei@njupt.edu.cn
吴晓富 男, 1975年生, 江苏南京人。博士, 南京邮电大学教授。研究方向为信息论与编码、 机器学习与计算机视觉、 密码学与信息安全。E-mail: xfuwu@njupt.edu.cn