刘 鹤,李建义
(北华航天工业学院,河北 廊坊 065000)
随着近些年私家车数量的增加,交通问题日益凸显,智慧交通对满足人们的生活需求、提高交通运输效率具有重要意义[1]。车辆类型检测是智慧交通的重要部分,例如在高速路口根据车辆类型会有不同的收费标准。目前,车辆类型检测的方法主要有基于CNN的车辆目标检测[2]、基于改进的Harris角点检测的车型识别[3]、基于SVM的车型检测和识别算法[4]、基于特征融合的车型检测。基于CNN与SVM的算法特征维数高、训练时间长,而且在面对较多车辆时会有遗漏情况。基于改进的Harris角点检测与基于特征融合的车型检测实时性差,不能及时检测车辆类型。因此,以上算法都不能满足车辆类型实时检测的需求。
为解决以上问题,本文选择目前流行的YO‐LOv5s[5]为基础框架,进一步高效地检测识别车辆类型。针对YOLOv5s算法使用Giou[6]作为损失函数时,如果两个目标边界框出现包含关系,或长宽高相同,差集会变为0,无法评估相对位置等问题,提出使用Ciou[7]作为损失函数代替Giou,既提高了模型训练的速度,又进一步改善了模型的精度。仿真实验结果表明:该改进方法对车辆类型的检测具有较好的实时性和较高的精确度。
YOLOv5是一种单阶段目标检测算法,它和YOLOv3、YOLOv4整体布局相似,由Input、Back‐bone、Neck、Prediction四部分构成[8],车辆检测流程结构如图1。v5系列总共有四个版本:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,这四个版本在结构上一致,其中YOLOv5s网络最小[9],精确度不如其余三种,但是速度最快。其余三种网络在YOLOv5s的基础上不断加深和加宽,精确度高但是速度较慢。由于本次实验是对车辆的类型进行检测,对检测的速度有较高的要求,因此,选择YOLOv5s作为本实验目标检验的框架基础。
图1 车辆检测流程结构
YOLOv5s输入端结构如图2所示,它采用Mo‐saic数据增强的方式[10],将输入的四张汽车图像进行随机缩放、裁剪、排布拼接[11]。YOLOv5s针对采集的车辆图像信息不一致问题,采用自适应图片缩放的方式,将输入的汽车图像缩放或填充到608*608尺寸。对统一长宽的汽车图像设定初始长宽的锚框,每次训练将预测车型锚框与真实锚框比对,计算两者差距并更新网络参数,自适应找出最佳锚框。
图2 Input结构
Backbone[12]是YOLOv5s网络的主干部分,车辆图像依次经过一次Focus结构,X次CBL、CSP1[13]结构和一次SPP[14]结构。
Focus结构的主要工作是对车辆图像进行切片操作,结构如图3所示。Focus将3*608*608切成四个3*304*304的切片,然后采用Concat拼接这四个切片,经过卷积层提取车辆特征。最后使用Leaky_relu激活函数输出一个没有信息丢失的采样特征图[15]。
图3 Focus结构
经Focus输出的车辆采样特征图会依次经过X次CBL、CSP1结构。CBL由卷积层、归一化层、激活层组成,即采样特征图先经过卷积层进一步提取不同的特征,其次经过归一化层,实现特征结果的归一化,最后经过Leaky_relu激活函数输出结果到CSP1。
CSP1的结构如图4所示,CSP1的工作是提取特征,一个CSP1由两条“路径”组成,其中一条只有一个卷积层,另一条包含一个或多个CBL块、多个残差组件和一个卷积层。两条“路径”由Concat层拼接经归一化层和激活函数Leaky_relu输出。
图4 CSP1结构
SPP结构由Conv、max pooling和Concat三部分组成,结构如图5所示。SPP接收的图像尺寸为512*20*20,将输入图像通过Conv层进行特征提取之后输出尺寸为256*20*20,将提取后的特征在fea‐ture map上选取候选框,再经过四个max pooling提取固定大小特征,最后由Concat层拼接输出。
图5 SPP结构
Neck区域采用FPN[16]的反向扩展结构FPN+PAN[17],如图6所示。自顶向下传递的FPN结构与两个自底向上的PAN结构结合操作,极大加强了网络特征的融合能力。
图6 FPN+PAN结构
Prediction负责将输入的车辆图像进行识别和分类。Prediction有三个输出,每个输出都是由卷积层与全连接层构成。针对每个输出,使用非最大抑制(NMS)[18]算法来消除多目标检测。
损失函数作为评价模型预测值和真实值差距的关键指标,损失函数和构建模型的性能呈正相关关系。传统YOLOv5s采用Giou作为损失函数。不同于Iou只关注重叠区域,对于非重合区域Giou同样关注,但是当两个目标边界框出现包含关系,或长宽高相同时,差集为0,Giou退化成Iou,无法评估相对位置,同时,Giou收敛速度慢。为解决此问题,本文采用Ciou作为损失函数,它可以充分考虑重叠面积、中心点距离、长宽比3个几何参数,使检测框更加符合真实框。因此,本实验采用基于Ciou损失函数的YOLOv5s模型。
Ciou损失函数公式如下:
式中α是权重函数;υ用来度量宽高比的一致性;ρ2(A,B)表示A(预测框)与B(目标框)的中心距离;c代表A与B最小并区间对角线距离;Iou等于A和B的交集除以二者的并集是矩形对角线倾斜角度。
本次实验自制了一个车辆信息数据集,包括家用轿车、公交车、消防车、卡车、吉普车、SUV、面包车、出租车八种车型。车辆数据来自街道、校园和汽车展厅,共1260张图像,如图7所示。通过使用LabelImg软件将收集的图片标注出车辆类别,并将每个图像标注好的结果以.txt文件保存,该文件名和图像名称一致,包含对象的类别,对象中心的坐标、宽度和高度。本次实验将以7:3的比例划分训练集和测试集,分别用于本实验模型的训练和测试。
图7 车辆数据集图例
本实验运行环境:操作系统为Centos7,CPU为Intel Xeon Platinum8156,GPU为NVIDIA GeForce RTX 3080 Ti,内存16G,通过Python编程语言实现,使用框架为Pytorch。
为了查看训练周期对训练模型的影响,本实验对同一数据集训练四次:25、50、75和100个周期,实验周期对比结果见表1。
表1 周期对比结果
从表1中可以看出,训练的周期长短影响YO‐LOv5训练模型的质量,当接近100个周期时,参数增加幅度极低,因此,epochs为100时是最佳次数。
本实验使用mAP作为模型的评价指标,mAP值越大说明车辆类型检测识别率越好,mAP公式如下:
其中,AP代表平均精度,是P-R曲线下的面积,mAP为AP的平均值。P表示预测为正例的样本中有多少是预测正确的,R表示真正为正例的样本中有多少被预测正确。P和R公式如下:
本实验的YOLOv5s与传统YOLOv5s在训练100个epochs后,新YOLOv5s的mAP收敛速度明显高于YOLOv5s,而且起伏较小,如图8所示。
图8 mAP对比结果
从上图可以得出,本实验中的mAP值在60轮时就已经比传统YOLOv5s在100轮的效果要好,可以节省大量的训练时间,在有限时间下改进YOLOv5s会取得更加显著的效果。
除mAP外,本实验训练模型的Precision、Recall分别能达到0.995和0.996,如图9所示。
图9 Precision和Recall结果
为了直观检验训练车辆检测模型的效果,随机从测试集抽取部分图片作为输入,这些图片包含多种角度、多种拍摄距离下的交通照片,结果如图10所示。从图中可以看到能够准确识别消防车、公交车和私家车,证明了本实验可以精确的识别车辆类型,满足实际交通应用需求。
图10 优化后检测效果
本实验为满足智能交通中对车辆类型检测精度以及速度的需求,提出以YOLOv5s为基础框架,用Ciou代替Giou作为损失函数。实验结果表明,本实验改进的YOLOv5s在mAP上明显优于原YO‐LOv5s,且收敛速度提升20%,实现了速度与精度两个方面的提升,非常适用于车辆类型识别的任务。