基于改进YOLOv3 的ETC 车辆检测算法研究*
2022-02-16赵加坤
赵加坤 韩 睿 孙 俊 金 举
(西安交通大学软件学院 西安 710049)
1 引言
随着高速公路的迅速发展,ETC 通道车辆违规行为却日渐严重,出现各种各样的跟车闯关、大车小标、偷换标签等情况[1],这些庞大数量的违规车辆不但造成收费站重大的经济损失,而且也严重阻碍了我国智慧高速公路的健康发展。在这种情况下,传统的车型管理方法慢慢被社会所淘汰,需要一种更智能化的、能够基于车牌以外的其他车辆特征来对监控视频中的车辆进行自动、准确地识别技术[2]。目前已有的车辆检测算法大致可以分为两类:基于车辆特征信息的传统检测算法和基于深度学习的检测算法。传统车辆实时检测算法主要是依据车辆的边缘和几何特征来识别汽车,目前主流的算法主要分为光流法[3]、帧差法[4]、背景差分法[5]等。在实际的ETC应用场景中,车辆的识别比较复杂,传统车辆识别算法存在着很多局限性,例如:光流法很容易受到光源、噪声等因素的影响而降低检测率;帧差法不容易检测到运动速度缓慢的车辆;背景差分法对场景变换比较敏感,而在ETC场景中存在天气、光照等复杂多变的不同场景,这会在很大程度上影响检测结果。
针对传统检测算法存在抗噪能力差,计算复杂,准确率低等缺点。在大量的车辆检测算法中,基于深度学习的车辆检测算法引起了学者极大的关注并被广泛使用。目前基于深度学习的车辆检测算法主要有R-CNN[6]、Fast R-CNN[7]、SSD[8]、YOLOv3[9]。R-CNN 通过一些传统图像处理方法实现候选区域的选取,再通过卷积神经网络提取对应的车辆特征向量,最后使用SVM[10]对区域进行分类,使用线性回归损失来校正边界框,以实现车辆分类并得到车辆的检测框。Fast R-CNN 在R-CNN 的基础上进行改进,取代R-CNN 原本的串行特征提取方式,直接采用一个卷积神经网络对全图提取特征,同时利用金字塔池化层的思想[11],解决了R-CNN 输入图像尺寸固定的问题。相对传统的目标检测算法,R-CNN 和Fast R-CNN 在车辆特征提取方面有了较大的提升,但是依旧存在计算量大,没有实现端到端的训练与测试等问题,无法满足在ETC 场景下车辆实时检测的需求。SSD 基于VGG16[12]网络融合不同卷积层的特征图来增强系统的特征表征能力,在保证实时的同时,大幅度提升检测精度,但是SSD融合多个卷积特征时没有考虑卷积层之间的相互关系,从而导致检测精度并不是很高[13]。相比于SSD 和Fast R-CNN,YOLOv3 算法借鉴了残差神经网络[14]的思想,并实现了多尺度预测,在保证实时检测的同时获得了目前最好的检测精度。
为了提高算法在车辆检测方面的适用性和准确性,我们采用GIOU[15]来替换边框回归损失函数的思想对YOLOv3 进行改进,同时分析数据集中目标的分布情况修正anchor box,使得anchor box更加符合目标尺寸,增强收敛效果。通过ETC数据集上的实验结果,可以发现改进的YOLOv3 在达到实时性要求的同时依然能够保持着较高的准确度。
2 YOLOv3算法模型
2.1 YOLOv3介绍
YOLOv3 借鉴了残差网络的思想,提出了全新的特征提取网络Darknet53,作为骨干网络提取车辆的特征。Darknet53 主要有卷积层和残差层组成。残差层如图1 所示,其中带加号的标志是一个相加的操作,公式表示为
图1 残差网络块
其中xt和xt+1是第t 个残差层的输入与输出向量,Ft(xt)是xt经过两次卷积操作后得到的结果,两次卷积操作的卷积核尺寸分别为1×1和3×3,步长均为1。Darknet53 在每层卷积后都添加了批量归一化层和线性单元的激活函数,这样组成的残差网络易于特征提取且更易于收敛。
通过特征提取网络Darknet53的特征提取,YOLO 卷积层会得到大小为52×52、26×26、13×13 的特征图,但是在特征图预测结果之前,卷积层会将提取到的特征进行特征融合,将浅层的低语义高分辨率特征与深层的高语义特征进行结合,采用上采样和融合的做法,融合了三个尺度(13*13、26*26 和52*52),在多个尺度的融合特征图上分别独立检测,最终使得高分辨的车辆特征也包含了丰富的语义信息。对于输出预测的三个特征图,特征图上每个像素点格子预测三个框,每个框都预测中心点坐标x、y,高宽h、w,存在物体的置信度p 和k 个类别的得分值。最终通过非极大抑制算法筛选出的预测框作为车辆的最终检测框。
原始的YOLOv1 中,网络会直接预测检测目标的中心点坐标x,y 和检测框的宽高w,h,但是预测结果的微小变换会导致检测框的波动较大,预测结果不准确。YOLOv2 对预测值进行了改进,其公式为
其中tx、ty、tw、th均为网络预测值;cx、cy为当前cell距离左上角的偏移量;pw,ph代表与真实框重合度最大的anchor box 的宽高;σ函数是sigmoid 函数,其目的是将预测偏移量缩放到0~1之间。
2.2 对YOLOv3损失函数的改进
损失函数作为神经网络用来评估模型的预测值与真实值之间的差异程度,可以在很大程度上影响模型收敛的效果。在YOLOv3 中,原始的损失函数Loss为[16]
主要的损失函数分为三大部分,坐标损失,置信度损失及分类损失,λobj在预测框检测到目标车辆时为1,其他时候为0。
YOLOv3 的损失函数采用误差平方和的计算方式,整合了预测框定位误差、有无目标的IOU 误差以及分类误差,其中预测框定位误差的计算采用的都是边框回归损失的计算方式,这些计算损失值的方式都是检测框的“代理属性”——距离,而忽略了检测框本身最显著的性质——IOU。
如图2所示,在L1及L2范数取到相同的值时,实际上检测效果却是差异巨大的,直接表现就是预测和真实检测框的IOU 值变化较大,这说明L1 和L2 范数不能很好的反映检测效果。但是直接用IOU 作为损失函数来反映预测检测框与真实检测框的检测效果,我们会发现检测框与真实框之间没有重合时,IOU为0。而在优化损失函数时,梯度为0,意味着无法优化,且在检测框与真实框之间IOU相同时,检测的效果也具有较大差异,如图2所示。
图2 同一L2范数的不同IOU,GIOU对比图
基于IOU 的优良特性和其作为损失函数时的缺点,我们引入GIOU的概念:
假如现在有两个任意性质A,B,我们找到一个最小的封闭形状C,让C 可以把A,B 包含在内;计算C 中没有覆盖A 和B 的面积占C 总面积的比值;用A 与B 的IOU 减去这个比值;相比于IOU 会出现梯度为0 的问题,GIOU 引入了包含A,B 两个形状的C,所以当A,B 不重合时,依然可以进行优化,且以GIOU 为边框回归的损失函数,可以直接反映模型的检测效果。
1)计算BP的面积公式如下:
2)计算Bg的面积公式如下:
3)计算BP,Bg的重叠面积公式如下:
4)计算可以包含BP,Bg的最小边框Bc公式如下:
5)计算Bc的面积公式如下:
6)计算IOU的公式如下:
7)计算GIOU的公式如下:
8)计算改进的YOLOv3 边界框损失函数公式如下:
2.3 基于ETC场景数据集的anchors改进
YOLOv3 采用维度聚类的方法得到一般化的anchor box。即采用K-means[17]的方法在VOC 2007和COCO 数据集上得到9 个anchor box。每个尺度预测三个检测框,与YOLOv2 相比,YOLOv3 采用了多个不同的尺度的特征图,每一张特征图上均采用三个候选框。如图3所示。
图3 原始anchors尺寸图
现有的YOLOv3采用的是COCO数据集上得到的9 种聚类结果:(10,13),(16,30),(33,23),(30,61),(62,45),(59,119),(116,90),(156,198),(373,326)。
根据高速公路车型的固有特点,本文确定目标先验框数量和对应宽高值;其次根据聚类结果优化网络anchor 参数,我们对anchors 的大小进行了改进。基于ETC 场景下的数据集,我们重新计 算 了anchors 的 聚 类 结 果:(162.66666667,96.53333333),(114,219.2),(84.6,86.4),(74.3,123.7),(133.6,304.),(87.6,170.6),(104.,123.7),(204.3,371.7),(57,62.9),为边界框的预测提供更优化的初始值,使训练网络在车辆检测和识别方面具有一定的针对性。
3 实验结果与讨论
3.1 数据集
首先按照高速公路收费标准对数据集类别进行划分:7 座以及7 座以下轿车为car1,8 座到19 座客车为car2,20 座到39 座客车为car3,40 座以及40座以上为car4,卡车为其他类别。其次由于训练模型需要大量的训练样本,在数据集的收集过程中,通过ETC 收费站的摄像头视角收集到了可供定位和识别训练车辆图片训练集数据共有规整图片7984 张,车辆21204 辆。其中car1 类客车15030辆,car2 类客车1500 辆,car3 类客车160 辆,car4 类客车800 辆,卡车共3714 辆,涵盖各种主要的场景(例如:夜晚,白天)车型条件(普通客车,大面包车,依维柯全顺,柯斯达,大型客车等),车辆品牌(东风,大众,丰田,本田,宝马,奔驰等),车身的远近视角,车身的平视视角和俯视视角,车身的倾斜程度等。
在实际的ETC 场景下,小型巴士(即20座到39座客车)的数据样本较少,通过对小型巴士的样本进行随机的旋转、翻转、裁剪、随机设置图片的亮度和对比度以及对数据进行标准化(数据的均值为0,方差为1)[18],如图4 所示。通过这些操作,可以获得更多的图片样本,原来的一张图片可以变为多张图片,扩大了样本容量,对于提高模型的准确率和提升模型的泛化能力非常有帮助。
图4 原始数据和增强之后的样本数据
3.2 实验平台
实验主要在PC 端完成的。PC 主要配置为i5处理器,GPU(GTX-1080ti)和16G 内存。SSD 和YOLOv3 使用了Pytorch 框架,使用的编程语言为Python。
3.3 实验结果及有效性分析
本文使用改进的YOLOv3可以得到如图5所示的检测结果。
图5 检测效果
我们使用均值平均精度(mAP)与传输速率两项指标作为评估标注,结果如表1所示。
表1 实验结果对比
表1 显示了目前主流的目标检测算法SSD、YOLOv3、YOLOv2、Fast R-CNN、R-CNN 与本文提出的改进的YOLOv3 方法的实验结果。这些方法均使用本文收集的ETC 场景数据集进行训练与测试。从表中可以看出,改进的YOLOv3 获得了90.2%的mAP,在精度方面优于所有其他方法,并且以34f/s 的速度实现了ETC 场景下实时检测。相比于基于回归思想的SSD 与YOLO 系列,基于区域的目标检测算法的实时性太低,无法达到实时检测的要求。YOLOv2 的检测速度较快,但对于一些复杂场景车辆的特征提取较少,导致检测精度有所欠缺。
1)为了验证改进的YOLOv3相比于SSD在ETC场景下的车辆检测更具有优势,我们收集了五个车辆类别的mAP 数据,如图6 所示,我们将改进的YOLOv3定义为G-YOLOv3。
图6 各类别车辆mAP对比结果
从图6中可以看出改进的YOLOv3算法与目前主流的车辆识别算法SSD 相比,改进的YOLOv3 算法对各种类别的车辆,有着更高的mAP。
通过对检测结果的分析,我们发现对于近处的车辆,SSD 基本上可以满足检测的要求,但是对于远处的车辆略显不足。相比于SSD,改进的YOLOv3 通过借鉴特征金字塔的思想,采用多尺度对不同尺寸大小的车辆进行检测,可以达到很好的检测效果。
2)为了验证GIOU相比于原有的回归损失在收敛速度方面所获得的优势,采取每个epochs保存一次模型的方式,收集了100 个epochs 的不同损失函数的数据,如图7、8所示。
图7 原始YOLOv3在验证集上的收敛效果图
与原始的YOLOv3 相比,改进的YOLOv3 的边界回归损失函数、有无目标的IOU损失函数的收敛速度更快,收敛的曲线也更加平缓。相对于原始YOLOv3而言,改进的YOLOv3用GIOU 作为边界回归的损失函数,生成的检测框可以更好地适应不同角度的车辆,在ETC复杂多变场景下的车辆识别也有着更好的检测效果。
图8 改进的YOLOv3在验证集上的收敛效果图
4 结语
目前针对ETC场景下复杂多变的车辆视角,本文采用改进的YOLOv3 实现车辆检测,取得了较高的检测准确率与实时的检测速度,基本上达到了ETC 场景对车辆检测的要求。对于拥堵场景导致的车辆遮挡问题以及夜晚条件下光照不足导致的车辆识别问题,会在后续的工作中继续研究与改进。