基于梯度压缩的YOLO v4算法车型识别
2022-04-12仇俊政孙传龙刘晓童
牟 亮,赵 红,李 燕,仇俊政,孙传龙,刘晓童
青岛大学机电工程学院, 青岛 266071
随着人工智能与计算机视觉的发展,智能交通系统[1](Intelligent traffic system, ITS)在两者的基础上得到了快速的发展,车辆及其车型的识别也在该领域受到了广泛的关注. 智能交通系统将先进的信息技术、数据通信技术、传感器技术、电子控制技术以及计算机技术等有效地综合运用于整个交通运输管理体系,从而建立起一种大范围内、全方位发挥作用的,实时、准确、高效的综合运输和管理系统. 车辆检测[2]是智能交通系统数据前端采集的一个重要环节,并且分不同车型进行识别,能够为交通流量统计、交通智能控制以及解决拥堵问题提供更加详细的数据保障.
近几年,深度学习在目标检测、语音识别等方面取得了重大的突破[3-5],这很大程度上归功于大型数据集、计算机强大的计算能力、复杂网络架构和优化算法的进展. 本文所涉及的车辆检测属于目标检测算法的一项应用,目前应用到车辆检测的主要有传统机器学习和基于深度学习的目标检测.
对于传统机器学习的目标检测算法主要是通过对选定区域中车辆的基本信息及其运动特征进行分析,并提取候选区中的特征,将提取到的特征送入分类器[6]来判断是否为车辆. 现有的主要研究有,马泊宁[7]提出的基于方向梯度直方图(Histogram of gradient,HOG)特征、支持向量机(Support vector machine,SVM)的车辆识别算法和基于卡尔曼滤波的车辆跟踪算法; Cai等[8]提出了一种基于场景模型和模式识别相结合的概率框架,由可变形组件模型(Deformable part model,DPM)和条件随机场(Conditional random field,CRF)描述的车辆模型,使用DPM生成的根和组件的分数及其空间配置来学习CRF模型. 基于机器学习的目标检测算法没有针对性区域选择会造成大量的冗余窗口,并且因为交通场景的复杂性与多变性,难以实现针对该任务设计的特征提取,数据规模的缺失和提取特征的质量问题,会造成泛化能力差及识别精度低等问题.
基于深度学习的目标检测算法,主要是通过建立数据之间多层的、非线性的模型,通过数据集的训练来更新层与层之间的权重. 该类目标检测算法主要分为两类,一类是以SSD(Single shot multibox detector)[9]、 YOLO(You only look once)[10]、RefineDet(Single-shot refinement neural network for object detection)[11]等为代表的分类回归算法,而另一类是基于候选区域生成的算法,主要有R-CNN(Region-based convolution neural networks)[12]、Faster R-CNN(Faster region-based convolution neural networks)[13]、SPP-Net(Spatial pyramid pooling in deep convolutional networks)[14]等. 其中基于回归的YOLO系列算法是当前比较流行的目标检测算法,将模型的训练与检测均放到一个单独的网络中来完成原始数据从输入到检测类别和检测目标位置输出的过程. 赵坤等[15]针对弱光照下交通标志易发生的问题改进了YOLO v3算法来提高交通标志的检测和识别;曹凯宁[16]针对在视频检测过程中对远端物体检测效率低下和实时性等问题,基于改进的YOLO算法来提升车辆目标检测的速率和准确率.
针对交通复杂多变的环境特点及智能交通领域对目标检测的实时性要求,本文选取YOLO v4目标检测算法作为基本算法进行研究,最新的YOLO v4算法在YOLO v3的基础上实现了检测精度的提升,但是增加了网络的复杂程度,造成训练时间较长,本文在该算法的基础上进行了如下工作:
(1)针对青岛地区道路及车辆特点进行数据采集,拍摄青岛地区四个路段的车流,根据不同的车流密度对每个视频进行分帧,从中剔除冗余的训练集,剩下2870张构成自建数据集,在网络车辆信息检测数据集UA-DETRAC中采用同样的方法挑选1500张,对货车进行数据增强所构建的数据集包含210张3D图片,共组成含有4580张图片的训练集.
(2)改变学习率余弦退火衰减法的更新方式,学习率的改变会帮助算法在训练过程中跳出局部最优并防止网络模型超调.
(3)对于检测算法的检测精度及泛化能力,本文考虑直接在梯度上进行操作,通过采用一种合适的梯度压缩方法来平滑梯度曲线,同时梯度压缩也会带来权重空间与输出特征空间的正则化,从而提高检测算法的性能.
1 YOLO v4 算法
本文选用的YOLO v4是在YOLO v3检测框架的基础上从主干特征提取网络、激活函数、数据处理和损失函数等方面进行优化,检测部分与YOLO v3相似,经参考得知YOLO v4算法具有较好的检测速度与精度,故本文将在YOLO v4算法的基础上开展工作.
1.1 主干特征提取网络
YOLO v4算法的主干特征提取网络采用CSPDarknet53,如图1所示. 该特征提取网络主要由卷积块CBM(Conv + Batchnorm + Mish)与通过CSPnet结构修改的残差块(Resblock_body)组成.YOLO v4采用Mish激活函数替换原有的LeakyReLU激活函数,CSPnet结构将原来的堆叠残差块拆分成两部分,主干部分继续进行原先的残差块堆叠的操作,而另一部分则通过一个大的残差边实现跨阶段层次合并,在减少计算量的同时保证了特征提取的完整.
图1 CSPDarknet53特征提取网络Fig.1 CSPDarknet53 feature extraction network
1.2 激活函数
激活函数将非线性的特性引入神经网络算法中,就是在神经元中运行的函数,负责神经元输入端与输出端之间的映射,其对于神经网络模型学习并理解非常复杂和非线性的输入特性具有重要的作用. 目前广泛使用的激活函数ReLU[17]存在着负值时会被直接截断和梯度下降不够平滑的问题,因此YOLO v4采用Mish激活函数[18]来代替ReLU,图2为Mish与ReLU激活函数的图像.
图2 两种激活函数图像. (a)Mish 激活函数;(b)ReLU 激活函数Fig.2 Two kinds of activation function images: (a) Mish activation function; (b) ReLU activation function
Mish和ReLU激活函数的公式如下:
其中,x表示输入节点的值. Mish激活函数在负值时不是像ReLU一样完全不被激活,而是以较小的负梯度流入神经网络进而保证了信息的流动性.并且Mish也保留了激活函数无边界的优点,巧妙避开了在两边极限梯度趋向于1而造成的饱和问题.
1.3 损失函数
IoU(Intersection over Union)就是所谓的交并比,是目前检测中比较常用的指标,可以反映出预测检测框与真实检测框的检测效果.
YOLO v4目标检测算法回归损失函数采用CIoU Loss(Complete-IoU Loss),该回归损失函数将目标与anchors之间的距离、重叠率、尺度及惩罚项都考虑进去,使得目标框回归变得更加稳定,不会出现训练中发散的问题,公式如下:
其中,gt为groundtruth的缩写,表示真实框的信息,为真实框的宽度,为真实框的高度,代表了预测框和真实框中心点的欧式距离,表示同时包含预测框和真实框的最小闭包区域的对角线距离,为权重函数,用来度量长宽比的相似度.
2 算法改进
2.1 梯度压缩
目前目标检测算法的优化方法主要有在激活函数中起作用的 BN(Batch normalization)[19]和在权重上操作的 WS(Weight standardization)[20],除了在这两方面操作外,本文考虑直接在梯度方面进行操作,来优化训练过程和检测精度.
目标检测算法中对梯度进行操作的优化算法中,最常用的就是计算梯度的动量. 借用物理中动量的概念,模拟物体运动时的惯性,在更新时一定程度上保留之前更新的方向,并根据梯度微调下一步的更新方向. 利用动量思想的优化算法主要有SGDM(Stochastic gradient descent with momentum)[21]和Adam(Adaptive moment estimation)[22]. 经过文献参考,Adam相比于SGDM算法具有更高的性能,它利用梯度的一阶矩估计(即梯度的均值)与二阶矩估计(及梯度的方差)对更新步长进行动态调整. 为进一步提高算法性能及方便操作者使用本文方法,提出了一种在Adam优化器上根据训练的epoch自动更新梯度的方法,称为梯度压缩,改进后的优化器简称为Adam-GC.
梯度压缩的公式如下:
其 中 , wi(i=1,2,···,N)代 表 权 重 向 量 , ∇ wiL代 表损失函数对权重向量的梯度,为当前训练次数 t 与总训练次数的比值. 在这里为梯度平滑曲线,选取的值为0.4,该曲线的图像如图3所示.
图3 梯度平滑曲线Fig.3 Gradient smoothing curve
只需求得梯度矩阵的均值,在每个梯度的列向量中减掉该均值后再与梯度平滑系数相乘,就可以得到最优的权重更新方向. 该方法的计算廉价,不涉及除法运算,只需要几行代码就可以实现. 实验表明,采用卷积神经网络模型来训练Mnist数据集,每个epoch只需多花费0.5 s左右的时间.
将上述公式写成矩阵形式如下:
图4 Adam-GC 的几何解释Fig.4 Geometric interpretation of Adam-GC
2.2 更新余弦退火衰减
在深度学习的算法中,对学习率的调整策略[24]有着十分重要的作用. 合适的学习率不仅会帮助模型在训练过程中跳出局部最优,更会加速模型收敛、提高模型识别精度.
余弦退火衰减法会使学习率先线性上升后模拟余弦函数下降,更新前的学习率衰减法只一次上升与下降,但经过验证可知该方法的学习率变化缓慢,导致训练收敛速度较慢,并且易陷入局部最优值,所以实现学习率的多次上升与下降,更新前后的学习率对比如图5(a)所示.
将更新前后的学习率衰减方法在Mnist数据集中利用卷积神经网络进行验证,设置epoch为50,learning_rate_base为 0.1,训练过程的 Loss及Acc如图5(b)~(c)所示,经过更新后的学习率衰减方式对训练收敛更加快速,更加稳定.
图5 学习率衰减策略及 Loss、Accuracy 图. (a)更新前后学习率衰减策略;(b)Loss图; (c)Accuracy 图Fig.5 learning rate decay strategy and Loss, Accuracy chart: (a) learning rate decay strategy before and after update; (b) Loss chart; (c) Accuracy chart
3 车辆检测数据集
3.1 车型描述
市区中主要车辆类型分为轿车、公交车和货车,本文将分这三种车型进行识别,获取的样本如图6所示.
图6 市区中主要车型样本图. (a)小汽车;(b)公交车;(c)货车Fig.6 Sample map of the main models in the urban area: (a) car; (b) bus; (c) truck
3.2 实地采集的数据集
本文旨在建立针对市区的车辆目标检测系统,故采集实际交通道路中的车流图作为网络训练的数据集,对于提高系统的实用性及准确性有着十分重要的意义. 选用型号为Canon EOS700D的摄像机,数据采集地点位于青岛市福州北路及重庆南路的两处过街天桥,摄像机的安装位置、角度及高度均与交管部门安装的摄像头的方式相似. 本文主要研究市区交通中3个具有代表性的时段[25],分别为8:00—9:00为阻塞流(900<每小时车流量≤1300)、9:00—10:00为同步流(300<每小时车流量≤600)、10:00—11:00为自由流(每小时车流量≤300).
为使训练样本保持多样性并减少冗余和训练成本,采取将视频隔帧抽取的方法,根据不同密度车流采取不同间隔帧数来优化训练样本,阻塞流因车速最低故每10帧抽取一次,同步流每5帧抽取一次,自由流则每2帧抽取一次,抽取数据采集后的样本,如图7~9所示.
图7 阻塞流车流样本. (a)福州北路 1;(b)福州北路 2;(c)重庆南路 1;(d)重庆南路 2Fig.7 Traffic flow sample of blocked flow: (a) Fuzhou North Road 1; (b) Fuzhou North Road 2; (c) Chongqing South Road 1; (d) Chongqing South Road 2
3.3 数据增强
在构建数据集的过程中,发现货车的样本数量较少,会造成因样本缺少而识别不准确,为解决该问题,需对货车样本进行数据增强,在交管部门摄像头的角度上截取厢式货车3D场景下的图片作为训练的数据增强样本,部分如图10所示.
图8 同步流车流样本. (a)福州北路 1;(b)福州北路 2;(c)重庆南路 1;(d)重庆南路 2Fig.8 Traffic flow sample of synchronous flow: (a) Fuzhou North Road 1; (b) Fuzhou North Road 2; (c) Chongqing South Road 1; (d) Chongqing South Road 2
图9 自由流车流样本. (a)福州北路 1;(b)福州北路 2;(c)重庆南路 1;(d)重庆南路 2Fig.9 Traffic flow sample of free flow: (a) Fuzhou North Road 1; (b) Fuzhou North Road 2; (c) Chongqing South Road 1; (d) Chongqing South Road 2
图10 货车数据增强样本图. (a)样本 1;(b)样本 2;(c)样本 3Fig.10 Truck data enhancement sample diagram: (a) sample 1; (b) sample 2; (c) sample 3
3.4 UA-DETRAC 网络数据集
UA-DETRAC车辆检测数据集是北京和天津地区中24个不同地点由交管部门摄像头拍摄的视频,以每秒25帧的拍摄速度录制,共超过14万帧,手动标注了8250辆车. 从中选取与市区道路状况相似的1500张图片作为样本输入到训练网络中,来提高训练样本的数量及多样性.
4 试验验证及结果分析
本次实验的数据集包括自建的市区数据集2870张,UA-DETRAC网络数据集1500张,货车数据增强数据集200张,在训练模型的过程中用于训练与验证的图像随机按照90%和10%的比例分开,用这个训练集来训练一个可以综合有效地识别不同车流密度场景下车辆的模型. 本文关于YOLO v4的一系列算法均是在Pytorch 1.2框架下搭建的,硬件配置CPU为Intel(R) Core(TM) i7-9700 CPU@3.00GHz,GPU为 NVIDIA GeForce RTX 2070 SUPER,8 GB显存,CUDA核心数2560个,运行内存为16 GB,操作系统为Windows10.
4.1 模型训练
根据上文中提到的改进方式,分别组合来验证这些方法的有效性,记录其在训练过程中Loss的变化情况,为防止训练模型过拟合导致模型泛化能力差,采用Pytorch中的早停法(Early stopping),当训练达到收敛和权重更新小于一定的阈值时,则停止训练,最大迭代次数设为2000次,每隔100代保存一次模型权重. 训练过程的Loss如图11所示.
图11表示加入GC后的YOLO v4算法训练过程的Loss更加稳定,收敛更快并且平均的Loss值更低,在1950代左右达到early stopping的条件停止迭代. 同时加入CD优化算法的学习率调整策略使得跳出局部最优的能力变强,Loss值相对降低,在1900代左右时满足停止条件,得到的训练效果更优. 接下来仅拿出YOLO v4与YOLO v4 GC CD训练得到的模型进行测试对比.
图11 各种算法训练的Loss曲线Fig.11 Loss curves trained by various algorithms
4.2 试验验证及对比分析
为验证本文方法的泛化性能,分析不同交通道路条件对检测结果的影响,在第二天拍摄同一地点同一时间段内的3种不同车流密度的数据作为检测的样本,进行测试对比的模型均采用算法在训练迭代1900次保存的模型,分别验证其在3种不同车流密度场景下对车型的识别能力.
图12为自由流样本检测,自由流测试样本在相同时间内通过的车辆数较少,场景复杂度与检测难度相对较低,两种算法检测的准确率都相对较高,但改进后算法在整体的精确度上优于改进前的. 图13~14为同步流与阻塞流测试样本的检测,车辆数量的增加导致场景更加复杂,车辆遮挡情况严重,目标检测难度大大增加. YOLO v4 GC CD算法可以在相同的训练迭代次数中很好地学习到模糊不清、远处的小目标和被遮挡车辆的特征.
图12 自由流样本检测对比. (a)YOLO v4在场景 1的检测结果;(b)YOLO v4在场景 2的检测结果;(c)YOLO v4在场景 3的检测结果;(d)YOLO v4 GC CD在场景1检测结果;(e)YOLO v4 GC CD在场景2检测结果;(f)YOLO v4 GC CD在场景3检测结果Fig.12 Comparison of free flow sample detection: (a) detection results of YOLO v4 in scenario 1; (b) detection results of YOLO v4 in scenario 2; (c)detection results of YOLO v4 in scenario 3; (d) detection results of YOLO v4 GC CD in scenario 1; (e) detection results of YOLO v4 GC CD in scenario 2; (f) detection results of YOLO v4 GC CD in scenario 3
图13 同步流样本检测结果对比. (a)YOLO v4在场景 1的检测结果;(b)YOLO v4在场景2的检测结果;(c)YOLO v4在场景3的检测结果;(d)YOLO v4 GC CD在场景1检测结果;(e)YOLO v4 GC CD在场景2检测结果;(f)YOLO v4 GC CD在场景3检测结果Fig.13 Comparison of synchronous flow sample detection: (a) detection results of YOLO v4 in scenario 1; (b) detection results of YOLO v4 in scenario 2; (c) detection results of YOLO v4 in scenario 3; (d) detection results of YOLO v4 GC CD in scenario 1; (e) detection results of YOLO v4 GC CD in scenario 2; (f) detection results of YOLO v4 GC CD in scenario 3
4.3 车型识别的准确性分析
为分析训练后的模型对车型的识别性能,从上述验证数据集中选取100张包含3种不同车流密度的图片,车型包括小轿车2316辆,公交车172辆,货车108辆,分别绘制针对不同车型识别的P-R曲线如图15所示.
图14 阻塞流样本检测结果对比. (a)YOLO v4在场景 1的检测结果;(b)YOLO v4在场景2的检测结果;(c)YOLO v4在场景3的检测结果;(d)YOLO v4 GC CD在场景1检测结果;(e)YOLO v4 GC CD在场景2检测结果;(f)YOLO v4 GC CD在场景3检测结果Fig.14 Comparison of blocked flow sample detection: (a) detection results of YOLO v4 in scenario 1; (b) detection results of YOLO v4 in scenario 2; (c)detection results of YOLO v4 in scenario 3; (d) detection results of YOLO v4 GC CD in scenario 1; (e) detection results of YOLO v4 GC CD in scenario 2; (f) detection results of YOLO V4 GC CD in scenario 3
图15 针对不同车型的 P-R 曲线. (a)小汽车;(b)公交车;(c)货车Fig.15 P-R curves for different models: (a) car; (b) bus; (c) truck
从上图可知,YOLO v4 GC CD算法的模型在识别小轿车和公交车时的平均精度(Average precision,AP)均大于原始算法的,由于加入货车的3D模型图使得两个算法都可以很好地学习到货车的特征,从而两个算法模型的AP值相差不大.
4.4 不同车流密度的准确性分析
同上述实验方法类似,取100张不同车流密度下的图片输入到网络中进行检测,通过记录模型在检测过程中出现的错检的个数来分析两个模型的准确性,其中错检个数是漏检和误检个数的总和,实际个数是由人工计数得到的实际车辆数量,正确检测的个数与实际个数的比值为准确率,两个模型在不同车流密度上的准确率测试结果对比如表1所示.
经实验验证,在检测时由于阻塞流具有复杂的道路状况和严重的遮挡,检测难度较高. YOLO v4 GC CD在三种密度的车流中检测的准确率均优于原始算法,在自由流的检测时较原始算法准确率提高1.9%,在同步流检测时准确率提高1.86%,在阻塞流检测时准确率提高1.87%. 可见经改进的算法有效解决了误检和漏检问题,并且学习图像的特征能力增强,具有更好的检测效果.
4.5 不同场景的泛化性分析
为验证改进后算法在其他场景下的检测效果,选取UA-DETRAC网络数据集中场景为雨天和夜间的图片作为另一个验证集,数量都为100张. 利用该验证集来测试YOLO v4 GC CD算法对其他场景下车辆的检测效果,结果如表2所示.
表2 YOLO v4-GC-CD在雨天和夜间场景下的准确性Table 2 Accuracy of YOLO v4 GC CD in rainy and nighttime scenarios
部分检测效果如图16所示.
图16 YOLO v4 GC CD算法在夜间和雨天场景下的检测效果. (a)夜间场景 1;(b)夜间场景 2; (c)雨天场景 1;(d)雨天场景 2Fig.16 Detection effect of YOLO V4 GC CD algorithm in night and rainy day scenarios: (a) night scene 1; (b) night scene 2; (c) rainy day scene 1; (d) rainy day scene 2
经验证YOLO v4 GC CD算法在其他场景下也保持了较好的准确性,但场景的更换确实对检测的准确率造成了一定的影响. 雨天检测的准确率要高于夜间,主要因为光线的问题,夜间较暗同时又有车辆灯光的影响,从而导致识别准确率的下降.
5 结论
本文在YOLO v4的基础上提出了梯度压缩和一种新的学习率调整策略,分为3种典型城市车流进行了一系列的验证并得到如下结论:
(1)本文方法可以满足智能交通系统中对实时性的要求,实现对车辆分不同车型识别的目的,为智能交通中路况分析、拥挤度检测等方面提供有力的支持.
(2)构建了适合市区的车型识别的数据集,并通过截取货车的3D模型图来增加数据集的多样性,并且取得了较好的检测效果.
(3)经过验证,本文改进的方法比原始算法的准确率有较大的提高,并且检测效果良好.
(4)经实验验证,YOLO v4 GC CD算法在其他场景下也保持了很高的准确性,但为得到更优的效果应该增加关于其他场景的训练集或者对其进行图像处理等手段.