轻量级目标检测网络:MobileNet-SSD
摘要
作为计算机视觉领域基本且最为重要的研究课题之一,目标检测(Object Detection)
已越来越受到计算机视觉领域甚至人工智能领域的重视,近几年来也涌现出了较多基于
深度学习技术的经典且高效的目标检测算法。同时考虑到运行实时性是目标检测的重要
检测指标之一,许多轻量级网络应运而生并极大提高了目标检测效率和算法落地应用的
可能性。本文旨在介绍深度学习下经典的目标检测算法和轻量级网络结构的发展背景,
并重点介绍一个轻量级目标检测网络:MobileNet-SSD,最后通过其在美国车牌识别的应
用实验中分析该网络在目标检测和识别任务上的优势。
关键词: 深度学习、目标检测、轻量级网络、MobileNet-SSD、车牌识别
1 技术背景
1.1 目标检测算法
目标检测是计算机视觉领域一个长期存在的基础性问题,近几十年来一致受到相关
领域的广泛关注和研究。目标检测的任务是使用相关模型和算法确定图片中是否存在预
定义类别内的目标实例,并在存在指定类别的目标实例的情况下,通常以一个边界框
(bounding box)返回目标实例在整张图像空间内的位置和范围[3],并给出边界框中物体
实例所属的类别和置信度。作为计算机视觉领域的基础性问题,目标检测任务是进行其
他更高层次、更复杂的计算机视觉任务的前提和必须步骤,其中更复杂的计算机视觉任
务包括目标跟踪、图像分割、场景理解等。
传统的图像处理下,目标检测与识别算法主要可以表示为: 目标特征提取、目标定
位、目标识别,其中所涉及的特征都是传统图像处理领域下人为设计的特征,例如
SIFT[1]、HOG[2]等。而近几年兴起的基于深度学习技术的目标检测与识别算法则摒弃了
传统图像处理下较为繁琐的分阶段、分任务的思路,而采用图像的深度特征提取和基于
深度神经网络的目标定位和检测,其中主要使用到的深度学习框架则是卷积神经网络
(CNN),相比较于传统图像处理中分阶段处理的思路,深度学习下的目标检测技术能够
直接从图像中学习特征表示[4],达到端对端的定位预测和分类的目的,该方法已经为一
般目标检测领域带来了显著的突破。在深度学习技术下,目标检测(generic object
detection)算法旨在从大量已经预标识的自然图像数据集中训练学习,以达到在新图像数
据集中准确定位目标实例的位置并进行识别分类的目的。
基于深度学习的目标检测算法主要分为:1.two-stage,该类算法在待检测的图片上生
成目标候选区域,再通过 SVM 或神经网络等在候选区域上进行目标识别分类[5][6][7]。
该类中具有代表性的算法包括 R-CNN、SPPNet、Fast R-CNN、Faster R-CNN 等。2.one-stage,
该类检测算法将整个图片作为架构网络的输入,使用一个单一的前向传播网络同时预测
整个图片中存在的物体位置和各自的类别标签。该方法完全摒弃了 two-stage 目标检测
算法中区域建议生成和随后的像素或特征重采样阶段,将所有计算封装在单个网络中。
整个检测流程是一个统一的网络,它可以直接端到端对检测性能进行优化。该类中具有
代表性的算法包括 YOLO 系列[3][10][11]和本文将重点介绍的 SDD 算法[12]。
1.2 轻量级网络
基于深度学习的目标检测算法已经极大提高了目标检测的准确性。但是除了准确度
外,计算复杂度和运行效率同样也是 CNN 网络要考虑的重要指标。过于精细的网络结
构虽然能够达到较好检测效果,但是其庞大而复杂的计算过程可能会导致运行速度很
慢,甚至不能达到实时的检测效果,则导致无法运行在低延迟要求的特定场景,如无人
车自动驾驶领域等。此外过大的参数模型和苛刻的模型环境也导致这类检测算法无法在
移动手机等嵌入式设备中达到较好的检测效果。
相比较于复杂的网络结构,小的模型具有很多优点: (1) 训练等更快。(2) 在部署时
需要更少的带宽要求,例如自动驾驶应用。(3) 可以部署到 FPGA 等。[13]
现阶段,在建立小型高效的神经网络工作中,通常可两种思路[14]:
(1) 压缩预训练模型。通过减小、分解或压缩预训练网络来获得压缩模型,例如量
化压缩(product quantization)、哈希(hashing )、剪枝(pruning)、矢量编码( vector quantization)
和霍夫曼编码(Huffman coding)等;此外还有各种分解因子(various factorizations )用来加
速预训练网络;还有一种训练小型网络的方法叫蒸馏(distillation ),使用大型网络指导小
型网络进行训练。
(2) 直接构建并训练参数量较少的小型模型。例如 Flattened networks 利用完全的因
式分解的卷积网络构建模型,显示出完全分解网络的潜力[15];Factorized Networks 引入
了类似的分解卷积以及拓扑连接的使用;Xception network 显示了如何扩展深度可分离
卷积到 Inception V3 networks[16];Squeezenet 使用一个 bottleneck 用于构建小型网络。
这些轻量级网络克服了传统卷积计算量大的缺点,对传统卷积模块进行了改进,使
得网络结构更高效,通过在速度和准确度之间做了很好地平衡,这些轻量级的网络为在
移动设备上部署高效的算法模型带来了可能,同时也极大推动了深度学习领域的发展。
2 MobileNet-SSD 算法
在现代深度学习算法研究中,通用的骨干网络加特定任务网络头成为一种标准的设计模
式。比如 VGG + 检测头,或者 inception + 分割头。而本文所介绍的 MobileNet-SSD 则是使
用 MobileNet 提取特征和运行加速后再使用 SSD 算法进行目标检测。具体地,MobileNet- SSD
采用 MbileNet 前 13 层卷积作为骨干网络,并仿照原 SSD 算法中对于 VGG16 的扩展,在
MobileNet 的 Conv13 后面添加了八个卷积层,并采用其中 6 层作为不同尺度下的目标检测
层。
2.1 SSD 算法
SSD 算法是基于深度学习的 one-stage 下目标检测的经典算法。其接受整张输入图片,
通过标签和数据端到端地训练和预测图片中的物体定位和类别。SSD 算法对于 300x300 大小
的输入图片的识别速度达到 59FPS,已完全达到实时的效果,其网络结构图如下:
SSD 采用 VGG16 作为基础模型,并做了以下修改:
(1) 分别将 VGG16 的全连接层 FC6 和 FC7 转换成 3x3 卷积层 Conv6 和 1x1 卷积层 Conv7。
(2) 去掉全连接层 FC8 和所有的 Dropout 层。
(3) 将池化层 pool5 由原来的 stride=2 的 2x2 变成 stride=1 的 3x3。
(4) 在 VGG16 的基础上新增了卷积层来获得更多的特征映射用于检测。
SSD 算法通过多尺度特征图检测对大目标和小目标都具有较好的检测效果,因为不同大
小的特征图中含有不同的特征,而基于不同的特征及其组合方式能够极大提升目标检测的效
果,其中浅层卷积层对边缘更加感兴趣,可以获得一些细节信息,而深层网络对由浅层特征
构成的复杂特征更感兴趣,可以获得一些语义信息。此外,SSD 算法中的硬负样本挖掘、数
据增强、设置不同比例的候选框、孔洞卷积等对于检测效率的提高均具有一定的作用。
SSD 算法的运行速度可以和 YOLO 相媲美(59FPS),检测精度可以和 Faster R-CNN 相媲美。
其相比较于这两种算法具有以下优势:
(1) Faster R-CNN 是一个 two-stage 类的目标检测算法,尽管 Faster R-CNN 相比较于 R-CNN 产
生较少的候选区域,但是仍产生大量的候选区域;而 SSD 是一个 one-stage 类的目标检测算法,
只需要一个端到端的训练和预测即可以同时得到目标的位置和类别。
(2) Faster R-CNN 不仅需要训练产生目标候选框的 RPN,也要训练对候选框精修和目标分类
的 Fast R-CNN; 而作为 one-stage 的 SSD 算法,相当于一个优化了的 RPN 网络,不需要进行
后面的检测,同时训练和预测物体的位置和类别。
(3) YOLO 网络虽然比 SSD 网络简单,但是 YOLO 网络中含有大量的全连接层。
(4) SSD 算法调整了 VGG 网络的架构,将其中的全连接层替换为卷积层,这相比于仍使用全
连接层的 YOLO 不仅能够减少参数量,也能够大大提升检测速度。
(5) Faster R-CNN 和 YOLO 都是在特定层(最后一层卷积后特征图)上产生候选框,导致对小目
标不具有较好的检测效果;而 SSD 同时在不同阶段的特征图上产生不同尺寸和不同比例的候
选框,这也帮助 SSD 算法对于大目标和小目标均具有较好的检测效果。
2.2 MobileNet
MobileNet 是为解决复杂网络和”大”模型在移动或嵌入式设备难以部署的问题而提出
的。同时通过两个简单的全局超参数(width multiplier 和 resolution multiplier)来权衡精度和速
度。
MobileNet 通过深度可分离卷积(depthwise separable convolutions)能够极大减少网络所
需要的参数量并显著降低模型大小和计算量,其核心思想是将传统卷积分解为深度可分离卷
积与 1 * 1 的卷积。深度可分离卷积是指输入特征图的每个通道都对应一个单通道的卷积
核,这样输出的特征的每个通道只与输入特征图对应的通道相关,而并非与原特征图的所有
通道有关。
传统的卷积操作通过一个和上层特征图具有相同通道的卷积核进行卷积得到该层特征
图的一个通道,为了在该层产生多个提取不同特征的特征图通道,则需要多个卷积核在上层
,输出
特征图进行卷积。假设输入特征图的大小为
,使用卷积核大小为
WHC
in
KK
in
in
特征图的大小为
C
out
H
out
W
,则对于标准的卷积,其计算量为:
out
CKK
W
H
C
out
out
in
out
对于可分离卷积,其计算量为:
HCKK
in
W
out
C
in
C
out
H
out
W
out
out
则使用深度可分离卷积后,对于该层卷积的计算量相比较原传统卷积下降的比例是:
CKK
/()
W
W
H
H
C
C
C
out
out
out
in
out
out
W
out
)
对于标准卷积中 3x3 的卷积核,计算量降低了 7~9 倍。具体的深度可卷积示意图如下:
(
HCKK
/1
Cout
in
2
K
/1
out
out
in
深度可卷积层可以保证原始网络结构不变的情况下,针对每一层传统卷积进行修改。
如图针对网络中原本存在的标准 3x3 卷积、归一化层和激活层(下图左)使用深度可卷积过程
操作,只需要将标准卷积层分解为同样大小的单通道下深度可卷积层(3x3 Depthwise Conv)
和 1x1 卷积(1x1 Conv)后,分别在两个层后各添加归一化层和激活层。
模型整体结构与 VGG 类似,都采用逐层堆叠的方式构建网络,不同的是 MobileNet
除了第一层卷积使用标准卷积外,其余卷积操作均使用深度可分离卷积。具体网络结构
如下:
另外该模型还可以引入两个额外的参数来分别控制特征图的通道数和输入分辨率,
从而得到更高效的模型,可以在速度和精度的权衡下选择合适的模型。
3 实验
本实验采用 MobileNet-SSD 算法,针对美国车牌进行车辆、车牌检测并进行车牌识别,
具体步骤则分为以下两步:1.使用 300*450 的图片作为定位网络(L-Net)的输入,定位图片中的
车辆和车牌。2.将步骤一得到的车牌区域缩放至 200*400 作为识别网络(R-Net)的输入,进行
车牌识别。
我们通过不同的渠道收集到美国 3 个州的共 3 万多张图片,TX 州、PA 州、CA 州各约一
万张图片,并各自按照 7:3 的比例分成训练集和测试集。其中每张图片仅有一辆车并将其车
辆区域、车牌区域、车牌号码作为整张图片的标签。在每次训练后将参数权重持久化,以便
减少下次的训练时间。本实验采用 OpenVino 作为模型优化器和推理加速引擎,转换后 L-Net
和 R-Net 的模型文件平均为 23.9MB。
L-Net 和 R-Net 除输入图片尺寸和输出类别不同外,其余均使用相同的 MobileNet-SSD 作
为训练和推理的主干网络。其中 L-Net 同时进行车牌定位,识别类别除背景、车牌、车辆还
包括三个州名;R-Net
对于车牌字符识别,本实验在 L-Net 定位的车牌基础上直接进行端到端的字符和识别。
而对于州名识别,本实验进行了两次尝试:1.在 L-Net 进行车辆和车牌定位的同时,直接进
行州名识别,其中车牌区域采用多标签形式,除本身的州名标志外,还有一个父标签-”plate”。
该父标签提供了对其他州车牌数据的较好支持,并给出一个友好的车牌区域提示。2.使用
R-Net 同时进行端到端的州名识别和字符检测识别。
在方法 1 下进行州名识别,主要因为车牌区域相对于整张图片比例较小,导致州名识别
精度较低,三个州的平均州名识别精度仅有 83.4%;而在 R-Net 下,输入即为完整车牌区域,
这有助于网络提取较为完整的车牌特征并进行较高精度的州名识别。
本实验在 GeForce GTX 1080 的 Ubuntu 系统下分别对 L-Net 和 R-Net 进行端到端的训练,
在迭代 15000 步后,车辆检测、州名识别和车牌号码识别精度和速度如下:
TX
PA
CA
车辆检测(%)
99.7
96.1
99.6
州名识别(%)
99.3
98.9
99.6
车牌号码识别
99.0
97.8
98.6
速度(FPS)
28.5
25.4
24.8
具体识别效果图如下:
4 总结
Mobile 本文采用 MobileNet-SSD 算法进行美国车牌的州名识别和号牌识别,并在三个州
的数据上进行训练测试,平均州名识别精度达到 99.2%,平均车牌号码识别精度达到 98.4%,
平均识别速度达到 26.2FPS。得益于 MobileNet 模型强大的特征提取能力和”小模型”优势,
本实验采用的两个模型文件平均仅 23.9MB。
综合网络模型和实验结果分析,MobileNet-SSD 算法在车牌识别项目能够达到较高和较
快的识别效果,且小模型的存储空间使该应用可以较为方便的部署在嵌入式设备上。
参考文献
1. Lowe D. (1999) Object recognition from local scale invariant features. In: ICCV .
2. Dalal N., Triggs B. (2005) Histograms of oriented gradients for human detection. In:
CVPR .
3. Redmon J., Divvala S., Girshick R., Farhadi A. (2016) You only look once: Unified,
real-time object detection. In: CVPR .
4.Lenc K., Vedaldi A. (2018) Understanding image representations by measuring their
equivariance and equivalence.In: IJCV .
5.Girshick R , Donahue J , Darrelland T , et al.(2014) Rich feature hierarchies for object
detection and semantic segmentation[C]. 2014 IEEE Conference on Computer Vision and
Pattern Recognition. IEEE.
6.Girshick R.(2015). Fast R-CNN[J]. Computer Science, .
7.Ren S, He K, Girshick R, et al.(2017). Faster R-CNN: Towards Real-Time Object Detection
with Region Proposal Networks[J]. IEEE Transactions on Pattern Analysis & Machine
Intelligence, 2017, 39(6):1137-1149.
10. Redmon J., Farhadi A. (2017) YOLO9000: Better, faster, stronger. In: CVPR .
11. Redmon J, Farhadi A. (2018) YOLOv3: An Incremental Improvement[J] .
12. Liu W, Anguelov D, Erhan D, et al.(2016). SSD: Single Shot MultiBox Detector[C]//
European Conference on Computer Vision.
13.Iandola F N , Han S , Moskewicz M W , et al.(2016). SqueezeNet: AlexNet-level accuracy
with 50x fewer parameters and <0.5MB model size[J].
14.Howard A G , Zhu M , Chen B , et al. (2017).MobileNets: Efficient Convolutional Neural
Networks for Mobile Vision Applications[J]. 2017.
15. Jin J , Dundar A , Culurciello E .(2014). Flattened Convolutional Neural Networks for
Feedforward Acceleration[J]. Computer Science, 2014.
16. Chollet, François.(2016). Xception: Deep Learning with Depthwise Separable
Convolutions[J].