基于改进SSD 算法的车辆检测
2022-01-14李国进艾矫燕
李国进,胡 洁,艾矫燕
(广西大学电气工程学院,南宁 530004)
0 概述
近年来,中国机动车数量随着经济的发展迅速增长,通过人力进行交通监管的方式已经无法满足当前需要,采用智能交通系统来解缓当前交通监管面临的巨大压力已经成为一种必然趋势。在智能交通管理系统中,车辆目标检测是其中的一个重要环节,是后续车型识别、车标识别的基础。利用机器视觉对交通图像中的车辆进行快速且准确识别和定位,能够节约人力管控资源,对交通管理系统智能化有重要的研究意义。
传统的车辆检测方法主要依据人工设计特征,将特征提取算法与分类器相结合进行检测。如裴明涛[1]等提出基于HOG 特征的车辆检测算法,周行等[2]提出基于HOG 特征和局部二值模式(LBP)特征融合的车辆检测算法,黎向锋等[3]提出基于Haar 特征的车辆检测算法。在受到光照、物体遮挡和车辆重叠的影响下,传统的车辆检测方法由于是人工设计的特征,对于多样性的变化鲁棒性较差,不能满足实时性要求。
目前,随着深度学习在计算视觉领域的发展,对于车辆的目标检测方法主要采用基于深度卷积神经网络的方法。深度卷积神经网络能够自主提取车辆图像中不同层级的特征,鲁棒性更好,解决了上述传统方法的不足,为车辆目标检测提供了新的思路。基于卷积神经网络的目标检测算法主要分为两类:一类是以YOLO[4]、SSD[5]、RefineDet[6]等为代表的分类回归方法;另一类是以R-CNN[7]、Fast R-CNN[8]、Faster R-CNN[9]等为代表的基于候选框的两阶段方法。王斌等[10]结合特征金字塔网络(Feature Pyramid Network,FPN)提出一种改进的Faster-RCNN 算法对航拍图像中的车辆进行了检测,平均检测精度达到77.2%;吴水清等[11]通过改进损失函数提出一种改进的SSD 算法进行车辆检测,其检测精度可达76.3%;刘肯等[12]借鉴DenseNet 的思想提出改进YOLO 算法对车辆进行检测,其小目标的检测精度可达70.7%。
针对经典的车辆检测算法对中小目标车辆仍存在漏检的问题,本文提出一种改进SSD 算法。该算法在SSD 算法的基础上设计了改进的Inception[13-15]模块替换网络中的新增特征提取层,以增强网络的特征提取能力,提高检测速度和中目标车辆的识别率。同时给出多尺度特征融合均衡化网络实现车辆特征的多层复用和融合均衡化,从而提升小目标车辆的检测效果。通过引入通道注意力机制(SENet)[16],提取更多车辆图像中含有车辆的通道特征,以在增加较少计算量的同时提高检测精度。
1 改进的SSD 算法
1.1 SSD 算法原理
SSD 算法沿用了YOLO 算法中回归的思想,但不同于YOLO 算法只利用最高层特征图进行预测,SSD 算法利用多尺度特征图进行分类和位置回归,检测小目标效果明显优于YOLO。SSD 算法将原始输入图像缩放至固定大小,由改进的VGG16 网络和五层级联卷积层组成的SSD 网络提取目标特征图,得到尺寸大小为64×64、32×32、16×16、8×8、4×4、2×2、1×1 像素的多尺度特征图;通过对不同尺寸的特征图设置不同长宽比和不同数量先验框,可产生一系列边界框集合,给定后的先验框会根据标注框进行IoU 匹配,计算如式(1)所示:
其中:SA表示先验框的面积;SB表示真实标注框的面积;FIoU表示预测框和真实框的面积的交集和并集之比。当真实框与先验框的IoU 值大于阈值0.5 时,则保留该先验框,且该先验框的类别就为该真实框的类别,将所有先验框回归,使用3×3 的卷积核得到先验框的类别置信度和位置偏移值两部分预测值;最后,通过极大值抑制算法进行边界框的调整,以获得最后的定位边界框。
SSD 算法网络结构如图1 所示。
图1 SSD 算法网络结构Fig.1 Network structure of SSD algorithm
1.2 SSD 算法的改进
本文提出结合改进Inception 模块、多尺度特征融合均衡化网络以及注意力机制SENet 的改进SSD算法对复杂环境下的车辆进行检测。改进方法如下:以Inception 网络为基础,结合不同空洞率的空洞卷积[17]提出改进的Inception 模块,将其替换SSD 算法中的Conv8 层、Conv9 层和Conv10 层,加快计算速度且增加有效感受野,可提取到更多的车辆特征信息;但由于没有很好地重复利用具有丰富车辆位置信息的低层特征层和语义信息的高层特征层,导致部分车辆信息在多层传递时信息流失,每层得到的特征信息不均衡。本文借鉴特征金字塔网络[18]的思想,提出多尺度特征融合均衡化网络,实现车辆特征的多层复用和融合均衡化;在SSD 网络特征提取层后都接入注意力机制SENet,重新标定特征通道权重,能够获得更多车辆图像中含有车辆的通道特征,增强网络的特征提取能力,进一步提高模型的检测精度。改进SSD 网络结构如图2 所示。
图2 改进SSD 算法网络结构Fig.2 Network structure of improved SSD algorithm
1.2.1 改进的Inception 模块
SSD 算法在基础网络VGG16 后增加的级联卷积层中只采用1×1 和3×3 的卷积核进行了一次卷积,对特征的提取能力较弱。为增强SSD 网络额外特征层对中目标车辆的特征提取能力,本文提出改进的Inception 模块。该模块是在综合考虑Inception-V1到Inception-V4 对Inception 原始网络做出改进的基础上引入空洞卷积组成的。改进的Inception 模块网络结构如图3 所示。在图3 中,通过3 组不同大小卷积核组成的级联卷积层和一个最大池化层并行合并,从增加网络宽度的角度来提升模型性能。首先,利用1×1 的卷积在卷积操作前和池化操作后进行降维,极大减少了计算成本;其次,为提取更多车辆目标的细节特征且进一步提升计算速度,从加深非线性层的角度出发,将5×5 的卷积核替换为能带来同等感受野的两个3×3 的连续卷积;然后,为解决利用不同尺寸的卷积核来获得不同大小感受野的方法造成的内部数据结构损失和车辆目标信息丢失的问题,在每条普通卷积并行支路上引入了不同空洞率的空洞卷积(Dilation rate=1,3,5)代替普通卷积,在参数量不变的情况下增大了有效感受野,并将不同感受野的信息融合,提高网络对中目标车辆的特征表示能力;最后,为保留更多的车辆原始特征信息,借鉴残差结构,增加一条剪接支路,进一步提升模型性能;另外,在卷积层后通过批量标准化操作(Batch Normalization,BN)[19]和ReLU 激活函数的非线性映射,加速网络训练速度和增强鲁棒性。改进的Inception 模块相比SSD 算法中的高层特征提取卷积层,对车辆信息的提取能力更强并且加快了网络的计算速度,提高了中目标车辆的识别率,故用此模块替代了SSD 算法中的Conv8 层、Conv9 层和Conv10 层。
图3 改进Inception 模块网络结构Fig.3 Network structure of improved Inception module
1.2.2 多尺度特征融合均衡化网络
FPN 在SSD 算法自底向上形成的多尺度特征图基础上,采用自顶向下的方式从最顶层的特征图做2 倍上采样,并把得到的特征图逐层与前一层的特征图横向连接叠加形成新的增强的特征图,重复以上步骤,形成特征金字塔,FPN 结构如图4 虚线框所示。但是FPN 长距离信息流动会导致车辆信息的流失以及更多地关注相邻分辨率的这种融合方式会产生车辆特征信息不平衡问题,所以本文在FPN 的基础上进行改进,提出了多尺度融合均衡化网络。
图4 多尺度特征融合均衡化网络结构Fig.4 Network structure of multi-scale feature fusion equalization
首先将通过FPN 网络形成的每层特征图根据上采样或下采样等一系列操作变成相同尺度,再进行像素级的聚合均值,然后将聚合均值化的特征图通过与之前相反的采样操作形成不同尺度的特征图,从而得到车辆特征信息更平衡的多尺度特征图,实现车辆特征的多层复用和融合均衡化,提高小目标车辆的检测精度[20-21]。
多尺度特征融合均衡化网络具体实现过程如图4 所示。首先基于SSD 算法生成的多尺度特征图,考虑到算法的检测速度,只选取了Conv7、Conv8_2、Conv9_2、Conv10_2、Conv11_2 层的特征图构成FPN 生成融合后的特征图{P1,P2,P3,P4,P5},然后对P1、P2分别采用步长为4 和步长为2 的极大值池化生成与P3分辨率一样的特征图,对P4、P5分别进行2 倍上采样和4 倍上采样生成与P3分辨率一样的特征图,再将做变换后的相同大小的5 个特征图进行求和取均值,得到聚合后的特征图,接着经过一个3×3 的卷积来增强特征。最后将聚合均值后的特征图通过4 倍上采样和2 倍上采样分别得到C1、C2,通过步长为2 和步长为4 的极大值池化分别得到C4、C5,从而得到与之前FPN 相同的多尺度特征图{C1、C2、C3、C4、C5}。但与FPN 算法生成的特征图相比,利用相同深度融合的平衡语义特征来增强多层次的特征,使每层包含的车辆语义信息与位置信息更丰富,提高了小目标车辆的识别率。
1.2.3 SENet 模块
SENet 模块主要是能让模型关注通道与通道之间的关系,希望模型可以自动学习到不同通道特征的重要程度,并对其重要程度进行标定[22]。SENet这种注意力机制可以让模型更加关注信息量大的通道特征,而抑制那些不重要的通道特征。SENet 可以分为3 个阶段:挤压(Squeeze),激励(Excitation)和加权(Scale),其具体实现方式如图5 所示。
图5 SENet 模块Fig.5 SENet module
首先输入特征图x经过一系列卷积操作后得到特征图u,对特征图u通过全局平均池化(Global Average Pooling)操作进行特征压缩,得到长度为C2的实数列,即“挤压”操作,使较低层也能利用来自网络全局感受野的信息。其运算公式如式(2)所示:
其中:H、W表示特征图的高和宽;uc表示特征图的第c个通道;uc(i,j)表示第c个通道中的第i行、第j列的像素;zc为挤压操作的输出。
然后将squeeze 操作得到的全局特征先经过一个全连接层将维度从C2降为12,用ReLU 函数进行激活,再经过一个全连接层将维度升维到原始维度C2,使用sigmoid 激活函数得到各个通道的权重系数,即“激励”操作。运算公式如式(3)所示:
其中:W1和W2为全连接操作;z为挤压操作的输出;δ为ReLU 激活函数;σ为sigmoid 激活函数;sc为激励操作的输出。
最后将Excitation 操作得到的权重系数与特征图u相乘,实现对特征重要性的重新校准,以此更新特征图,即“加权”操作。其运算公式如式(4)所示:
其 中:sc是特征图第c个通道的权重是加权操作的输出。
由于SENet 本身增加的参数主要来自于两个全连接层,对算法的实时性影响较小,因此本文在每个特征层后都加入了SENet。
2 实验结果与分析
2.1 数据集
本次实验采用的车辆数据集是由相机拍摄和从公开数据集下载的共2 887 张路面车辆图片,数据集中包含不同颜色、大小、外观的车辆图片,并随机划分其中的2 300 张为训练集,587 张为测试集。通过LabelImage 图像标定工具手工标注图片中的车辆目标区域以及其所属类别,生成相应的XML 文件,最后将图片和对应的标注文件按照PASCL VOC12 数据集格式进行存储。
2.2 实验配置与评价指标
本文实验是在配置为CPU Intel Core i5-8250U、英伟达Tesla V100 显卡、主频3.6 GHz 和内存8 GB的PC 端上完成。使用的操作系统为Windows10 专业版,训练和测试框架均为Python3.7.3 环境下的PaddlePaddle 1.7.1 机器学习开发框架。在模型训练过程中,每次实验进行8×104次循环迭代,每迭代5×103次保存一次训练模型,目标类别数为1,训练批量大小设为8,采用衰减学习率,初始学习率设置为1×10-3,当网络训练迭代4×104次和6×104次时,学习率分别降为1×10-4和1×10-5。
为更准确地衡量本文所提出算法的性能,本次实验采用的评价指标为平均精度(Average Precision,AP)和速度指标每秒处理图片数(Frame Per Second,FPS)。平均精度AP 是综合数据样本中某个类别的精确率(P)和召回率(R)的评价指标。其中,精确率是指被正确检测出来的车辆占全部检出区域的百分比,其计算方式如式(5)所示,召回率是指被正确检测出来的车辆占全部车辆的百分比,其计算公式如式(6)所示:
其中:TP 表示正确检测出来的车辆数量;FP 表示非车辆被检测为车辆的数量;FN 表示车辆未被检测出的数量。
根据检测结果绘制一条纵轴为精确率、横轴为召回率的P-R 曲线,平均精度值即为P-R 曲线的面积,其计算公式如式(7)所示:
其中:p为精确率;r为召回率。
2.3 算法复杂度分析
算法的复杂度可分为算法的运算复杂度和空间复杂度。其中,算法的运算复杂度即模型的运算次数,常使用浮点运算次数FLOPs(Floating Point Operations)来衡量,同时,1 GFLOPs=109FLOPs。算法的空间复杂度即模型的参数数量,体现为模型本身的体积。为探究改进SSD 算法相对于SSD 算法的优越性,对算法的计算量和模型大小进行了对比,结果如表1 所示。
表1 不同检测算法复杂度对比Table 1 Comparison of complexity of different detection algorithms
从表1 可以看出,改进后的SSD 算法前向传播一次的GFLOPs 为54.69,所需的计算量远低于原始的SSD 算法。同时,改进后的SSD 算法模型大小为75.51 MB,比原始SSD 模型大小缩小了近1/4,这在内存受限的情况下非常重要。结果表明,改进后的SSD 算法通过压缩通道以及在改进的Inception 模块中使用两个小的卷积核级联代替大卷积核等操作,运算量和参数数量相比于原始SSD 算法得以有效削减,更适用于车辆目标检测。
2.4 结果分析
本文将SSD 算法用改进的Inception 模块替换了不同的新增特征提取卷积层。因为Conv12 层输出的特征图尺寸大小为1×1 像素,不宜使用尺寸3×3 卷积核对其进行特征提取,故只对Conv8、Conv9、Conv10 和Conv11 共4 层新增级联卷积层进行了实验,并与未做任何替换的SSD 算法进行了对比。实验结果如表2 所示。从表2 可以看出,将SSD 算法中新增的特征提取层采用改进的Inception 模块替代较原SSD 算法均有明显的速度提升效果,在精度上也有小幅上升。在3 种替代方式中,将Conv8 层和Conv9 层采用改进的Inception 模块替换,在检测速度上较原SSD 算法提升效果明显,在精度上也有一定的提升;将Conv10 层也用改进的Inception 模块替换后,其在速度和精度比上一种替换方式有较小的提升;但将Conv11 层也进行替换后,其速度虽提升了0.13 frame/s,但精度却下降了0.15 个百分点。综合考虑,将改进的Inception 模块替换Conv8、Conv9和Conv10 层时性能提升效果最好,故本文采用此替换方式。
表2 改进Inception 模块替换不同特征层的性能对比Table 2 Comparison of performance of improved Inception block replacing different feature layers
通过调用训练过程保存的模型权重文件,可对车辆数据集中的图片进行相应的测试,测试后可自动识别并定位测试图片中的车辆,显示相应的定位信息和类别信息。不同复杂背景下车辆的部分测试结果如图6 所示。其中粗线矩形边界框对目标车辆做出了定位,边界框的左上角标明了该目标的类别为车辆和被识别车辆的概率。从图6(a)~图6(d)可以看出,在不同光照、不同天气、图片中车辆有重叠或车辆密集的情况下,模型均能准确识别和定位图片中的车辆。
图6 不同背景下模型检测结果示例Fig.6 Examples of model detection results under different backgrounds
为验证本文算法的检测效果,本文针对SSD、YOLO v4[23]、Faster R-CNN 和本文提出的改进SSD算法在相同的实验环境和车辆数据集下进行对比实验。部分实验结果如图7 所示。图7 中的图像1 左上角车辆目标小且密集,从图7(b)和图7(c)可以看出,YOLO v4、Faster R-CNN 比SSD 算法检测出了更多的小目标车辆,但仍存在漏检的现象,而图7(d)中本文改进的算法能将右上角的车辆全部正确检测出;图7 中的图像2 左上角车辆目标被树木严重遮挡且右上角车辆高度重叠,从图7(e)~图7(g)可以看出,原SSD 算法只能检测出近处的大目标车辆,YOLOv4 算法和Faster R-CNN 能将没有严重重叠和遮挡的车辆目标正确识别和定位,而图7(h)中本文改进的算法能正确识别图片中有重叠和遮挡的车辆目标。图7 结果表明,本文提出的改进SSD 算法不仅可以检测到小目标,而且对遮挡目标的识别率也较高,能够实现复杂背景下更全面、精准的车辆目标检测。在本文的数据集上不同算法实验后的平均精度和检测速度如表3 所示。
表3 不同检测算法性能对比Table 3 Comparison of performance of different detection algorithms
图7 不同算法模型检测结果示例Fig.7 Example of image detection results of different algorithms
从表3 可以看出,本文的改进算法与SSD 和YOLO v4 算法对比,平均精度分别提高了2.65 和1.55 个百分点,检测速度分别提高了17.41 frame/s和19.07 frame/s,提升效果明显。Faster R-CNN 在3 种对比算法中检测精度最高,但在检测速度上存在明显劣势,本文的改进算法相较于Faster R-CNN 算法而言,不仅在检测速度上有大幅的提高,提高了53.63 frame/s,而且在检测精度上提升了0.98 个百分点。
为验证改进后的SSD 算法对特定场景的适用性,对非路面的地下车库场景进行了车辆检测。通过自己采集和从互联网上下载的地下车库车辆图片组成了一个小型车辆测试集,在该测试集上本文算法的性能评估结果如表4 所示。
表4 在地下车库场景下不同检测算法性能对比Table 4 Comparison of performance of different detection algorithms in underground garage scene
从表4 可以看出,本文改进SSD 算法在地下车库车辆图片测试集上平均检测精度和检测速度分别达到了87.59%和59.51 frame/s,与算法YOLOv4 和Faster R-CNN 相比,在检测精度和检测速度上都占据很大的优势。其次,尽管其平均检测精度远高于原始SSD 算法10.82 个百分点,但其检测速度与其相比也提高了16.03 frame/s,提升效果明显。实验结果表明,本文改进的SSD 算法对于特定的场景,能够较好且快速地完成检测任务。为更加直观地感受本文改进的SSD 算法的检测效果,选取检测图像进行分析,如图8 所示。
图8 地下车库场景下模型检测结果示例Fig.8 Example of model detection results in underground garage scenario
从图8(a)~图8(c)可以看出,改进SSD 算法在地下空间内的车辆目标较少、重叠程度较小且被遮挡情况不严重的情况下,均能表现出较好的检测效果。而对于如图8(d)中相对于路面场景包含大量的侧面严重重叠的小目标车辆时,改进的SSD 算法能检测出大部分的重叠小目标,但仍存在一些漏检的情况,检测效果有待提升。图8 结果表明,本文改进SSD 算法在特定场景地下车库空间进行车辆检测时,能正确识别和定位出大部分的车辆,但对极端情况的小目标车辆仍存在少量的漏检情况,需扩充数据集和进一步改进算法,实现在地下车库空间内对车辆更为精准和全面的检测。
3 结束语
为对图像中的车辆进行准确且快速的检测定位,本文提出一种基于改进SSD 算法的车辆检测算法。该算法通过引入不同空洞率空洞卷积的改进Inception 网络模块代替SSD 网络中的Conv8、Conv9和Conv10 层,减少了模型的参数,增强了网络对中目标车辆的特征提取能力,提高了检测速度和精度。为进一步提升对小目标车辆的识别率,设计多尺度特征融合均衡化网络,并加入通道注意力机制SENet,加强车辆特征的复用和融合均衡化。实验结果表明,本文算法具备良好的鲁棒性和实时性,能够实现实际场景下更全面、精准的车辆目标检测。