当前位置:首页 期刊杂志

基于改进YOLOv5的交通监控视频车辆检测方法研究

时间:2024-09-03

张 漪,张美月

(1.内蒙古自治区交通运输教育中心,内蒙古 呼和浩特 010051;2.长安大学信息工程学院,陕西 西安 710046)

1 引言

截至2021 年5 月,公安部公布中国全国机动车保有量达到3.8 亿辆[1],全国有70 个城市汽车保有量超过100 万辆。日益增加的机动车数量和落后的交通管理系统是导致城市道路交通拥堵的重要原因,在传统交通系统之上建立全新的智能交通系统(Intelligent Transportation System,ITS)已经成为未来的发展方向和研究热点。交通视频监控作为ITS的重要数据来源,在不同等级的公路均得到广泛应用,特别在城市路段,监控视频提供的数据对缓解城市交通拥堵、提高通行效率以及合理分配交通资源等方面起到重要作用。针对交通监控视频进行车辆目标检测是后续进行车辆识别、车辆跟踪的基础,但在城市交通拥堵路段,环境复杂,车流量高,车辆互相遮挡严重,对准确进行车辆目标检测提出了挑战。

基于图像或视频的目标检测是车辆检测的典型任务。传统目标检测方法主要是利用人工构建目标特征,之后利用分类算法进行分类,从而判断目标是否存在,常用分类算法有Haar+Adaboost[2]、Hog+SVM[2]、DPM[3]等。目标检测的传统方法采用在图像中进行滑动窗口操作,检测效率低、消耗资源高,并且手工特征鲁棒性低、迁移效果差。随着机器学习和GPU 并行计算技术的不断发展,目标检测算法最重要的特征提取工作逐渐由人工构建发展为从数据中自动学习。基于卷积神经网络(Convolutional Neural Network,CNN)逐渐发展了众多目标检测算法,按网络结构主要分为两类:One-Stage 结 构 和Two-Stage 结 构[4]。Two-Stage 结 构 是 将 检测目标定义为一个由粗到细的过程,首先生成一系列的目标候选区域,然后进行目标分类和校准,此结构检测效率低,但准确率高,代表算法有R-CNN[5]、Fast RCNN[6]、Faster R-CNN[7];One-Stage结构则是在检测时没有生成候选区域的步骤,而是对目标的类别和边界直接进行回归,准确率相比Two-Stage 结构稍低,但是检测 速 度 快,代 表 算 法 有SSD[8]、RetinaNet[9]、YOLO[10-14]。YOLO 系列算法是目前最广泛应用的目标检测算法之一,并且经过五个版本的迭代,YOLO 算法在保留检测速度快的优势的同时,补齐了检测准确率低的短板。YOLOv5 系列[10]由Ultralytics 公司发布,在COCO[15]2017测试集上的平均准确率(mean Average Precision,mAP)达到72%,在GPU 为Nvidia Tesla V100 的条件下达到2ms/img的推理速度,是目前的领先水平。

基于YOLOv5 的性能优势,在其基础上进行改进,以提高城市道路交通中车辆检测的准确率,同时降低误检和漏检率。首先是引入SE[16]通道注意力模块到YOLOv5 网络的Backbone 主干网络、Neck 网络层、Head输出端,为测试SE 模块在网络中不同位置对结果造成的影响,在网络的三个不同位置引入并进行对比实验。针对One-Stage 结构正负样本不平衡问题,将Focal Loss[9]作为目标损失函数和分类损失函数,以优化训练过程。为提高模型鲁棒性,在公开数据集UA-DETRAC[17]的基础上引入自建数据集。在UA-DETRAC数据集进行模型训练和验证,并在自建数据集上进行测试,结果表明提出的改进YOLOv5算法相较原始算法在指标精确率Precision、召回率Recall、平均准确率mAP上均有所提高,并在城市交通拥堵路段降低了误检率和漏检率[18-20]。

2 YOLOv5概述

YOLOv5 系列根据模型参数(Params)和浮点运算量(FLOPs)的不同分为s、m、l、x四个模型,从s到x模型Params 和FlOPs 不断增加。针对监控现场多为嵌入式设备,算力不高,因此采用Params和FLOPs最少的YOLOv5s 作为研究的基础模型。YOLOv5s 采用One-Stage结构,由四个模块组成,分别是Input 输入端、Backbone主干网络、Neck网络层、Head输出端,如图1所示。

图1 YOLOv5网络模型结构

3 基于YOLOv5改进的车辆检测模型

3.1 引入通道注意力机制

目标检测模型随着网络层次的加深,提取的信息越来越抽象,对于监控图像中远处小目标车辆的检测就更加困难,对于拥堵路段的车辆遮挡问题难以准确检测。为此文章通过在网络结构中添加注意力机制(Attention Mechanism,AM)的方法改善这一问题。

SE-Net 是典型的通道注意力网络,SE 模块的有效性在一些应用中已经得到验证,但是在具体将其嵌入网络中的哪些位置更有效果,目前还没有完整的理论说明[21]。文章针对YOLOv5 设计了三种融合SE 模块的网络模型形成YOLOv5s。如图1 所示,YOLOv5 包含四个模块,Input输入端主要进行图像的预处理,没有任何提取特征的操作,因此无需引入注意力机制。由于SE注意力机制本身是对重要的特征通道进行增强,因此将SE 模块分别嵌入Backbone、Neck、Head 三个网络模块中,由此产生的三个新的网络模型分别记为SEA_YOLOv5s、SEB_YOLOv5s和SEC_YOLOv5s。

3.1.1 SEA_YOLOv5s网络模型

SEA_YOLOv5s 是将SE 模块嵌入Backbone 形成的网络,如图2 所示。Backbone 在YOLOv5 中的主要作用是学习数据中的高中低不同层次的特征,其中Focus、CBL、BottleneckCSP 和SPP四个模块主要起到特征聚合作用的是BottleneckCSP。考虑到计算量的问题,将SE模块嵌入BottleneckCSP结构中。

图2 SEA_YOLOv5s网络结构

SE 模块在Bottleneck 具体的嵌入位置如图3 所示。SE模块在Concat之后,也就是在特征融合之后,可以对不同通道的特征进行重新标定。Backbone 中的四个SE_BottleneckCSP均为此方式。

图3 SE_BottleneckCSP结构

3.1.2 SEB_YOLOv5s网络模型

SEB_YOLOv5s是将SE嵌入Neck形成的网络,如图4 所示。Neck 网络层主要包括加强信息传播的PANet结构,将SE模块嵌入到特征的融合阶段,即Concat结束之后,BottleneckCSP2_1开始之前。

图4 SEB_YOLOv5s网络结构

3.1.3 SEC_YOLOv5s网络模型

SEC_YOLOv5s是将SE嵌入Head形成的网络,如图5 所示。Head 输出端用于最终的目标检测,将SE 模块嵌入到模型的每一个YOLO检测头之前。

图5 SEC_YOLOv5s网络结构

3.2 引入Focal Loss损失

3.2.1 原始损失函数

原始YOLOv5 的损失函数包括目标损失函数和分类损失函数、边界框回归损失函数。

①目标损失函数和分类损失函数。YOLOv5 使用BCE With Logits作为目标损失函数和分类损失函数,二分类交叉熵损失函数的计算公式见公式(1)。式中,y为真实样本标签;p为经过Sigmoid函数的预测输出,见公式(2),取值在[0,1]之间。

3.2.2 改进损失函数

在原始损失函数的基础上对损失函数进行改进,提出利用权重控制不平衡样本的损失计算方案——焦点损失函数Focal Loss。主要包含三个步骤。

①正负样本的权重控制。

③两种权重控制方法合并。

通过将两种方法得到的公式合并得到

4 基于YOLOv5改进的车辆检测模型

4.1 数据集

UA-DETRAC[17]数据集在北京和天津两个城市不同地方进行拍摄,拍摄照片如图6 所示,拍摄角度和交通监视视频的角度一致。选用UA-DETRAC 数据集作为本文的车辆检测数据集,文献[22,23]同样选用此数据集。UA-DETRAC数据集包含训练和测试集,由于训练集中的图像数量已经满足需求并且已经进行标注,因此本文仅采用训练集数据。去除数据集中夜间图像,其余剩余共50051 张,其中40000 张作为网络的训练集,剩余10051张作为验证集。

图6 UA-DETRAC数据集拍摄车辆效果图

为验证模型的性能,在西安市南二环文艺路天桥上再次进行数据采集,共得到5000张图像,作为实验的测试集。图像按照UA-DETRAC的标准,使用标注工具LabelImg[24]进行人工标注,如图7所示。

图7 LabelImg标注

4.2 结果与分析

实验所用GPU为Nvidia GeForce GTX 1660,网络框架为Pytorch1.8.0。使用SGDM 优化器,初始学习率为0.001,动量设为0.9,衰减系数设为0.0005,batchsize 设为8,共训练100epochs。

4.2.1 改进注意力机制实验

在不改变损失函数的条件下,将原始YOLOv5s、SEA_YOLOv5s、SEB_YOLOv5s、SEC_YOLOv5s 在UADETRAC 数据集进行训练,并在自建数据集上进行测试,检测指标为精确率P、召回率R 以及平均准确率mAP。检测结果见表1。

表1 四个模型在测试集的检测结果

相比在Neck 和Head 引入SE 模块,在Backbone 中的特征融合层后引入SE 可以大幅度提升YOLOv5s 对车辆目标的检测性能。通过对网络算法的流程分析,认为之所以会存在很大的性能差异,是因为在Backbone中目标的特征图语义信息种类较多但是语义信息量不足,仍然保留着目标在特征图中的较浅层的数据纹理信息,而这些信息对于本文研究背景下的两种特殊情况的检测至关重要。比如车辆目标出现过多或者车辆出现在监控摄像头较远处时,在Backbone 中嵌入SE 模块能更好对特征图中目标的通道特征进行增强,较低层分辨率高,可以学习到较多的细节信息。

而在网络更深层的Neck和Head,随着卷积操作会缩小特征图的尺寸,小目标的语义信息到高层已经不存在了,高层次特征图显示出来了更丰富的语义功能、更大的感受野范围和尺度更小的特征图,SE 难以再从这种特征信息高度融合的特征图中有效地区分出重要的通道特征,导致检测精度下降。

综上所述,选择在Backbone 主干网络中引入SE 模块的SEA_YOLOv5s 是最优选择,网络定记为SE_YOLOv5s。

4.2.2 改进损失函数实验

使用Focal Loss 改进SE_YOLOv5s输出端的损失函数,得到的网络模型记为SES_YOLOv5s。由公式(8),Focal Loss 主要是通过两个参数α 和γ协调来控制不平衡样本的权重,为了确定一组适合本次车辆检测任务的最优和,选择10 组不同的和组合进行实验,结果见表2。

表2 Focal Loss中的参数设置

图8和图9是SES_YOLOv5s和SE_YOLOv5s两个网络模型在训练和测试阶段的总损失的变化曲线。可以发现,SES_YOLOv5s 的Total Loss 总损失总体趋势都是低于SE_YOLOv5s。SES_YOLOv5s 网络直到训练100 Epochs 结束,训练和测试阶段均呈现出持续下降的趋势,且还存在下降空间,说明网络仍在学习,检测精度仍有上升的可能性,而实线曲线逐渐趋于稳定,说明网络过拟合已经没有学习必要。

图8 训练阶段总损失变化曲线

图9 测试阶段总损失变化曲线

将以上两种网络与原始YOLOv5s进行检测性能指标对比,结果见表3。由表3 可知,SES_YOLOv5s 网络模型获得比SE_YOLOv5s 高1%的精确率、高0.3%的召回率以及高0.007%的mAP,与YOLOv5s 相比获得高0.5%的精确率、高2.5%的召回率以及高0.02%的mAP,三个指标均有提高。

表3 三种网络模型的目标检测性能指标

对于本文使用的单级结构YOLOv5s 目标检测算法,训练过程中自动生成大量预选框,以致于训练过程会被负样本所主导,导致精度下降。基于Head 输出端的改进从损失函数入手,将Focal Loss 分别用于目标和分类损失函数,此函数通过对二分类交叉熵损失函数进行重新构造,使算法在训练过程中对困难样本进行挖掘,更加关注难分类的样本,降低简单样本在训练中所占权重,有效解决正负样本比例严重失衡的问题。从实验结果看,在保证速度的同时达到了检测精度最优,并且Focal Loss 缓解样本的不平衡问题的途径是通过改变损失的方式,此种方式只影响训练部分的过程和时间,对检测时间影响甚小,容易拓展。

5 结语

本文通过将注意力机制SE 模块分别引入YOLOv5网络的Backbone、Neck、Head,实现了改进的YOLOv5网络对城市道路交通监控视频进行实时车辆检测。在YOLOv5s 网络的三个位置Backbone、Neck、Head 分别引入注意力机制SE 模块,并进行对比实验分析,其中改进的SEA_YOLOv5s 综合性能最好。在引入SE 的基础上,将原始的损失函数改为Focal Loss 焦点损失,改善正负样本不均衡的问题,经过实验对比选取两个参数α 和γ 的值。改进的网络模型SES_YOLOv5s 相较于原始YOLOv5s 有一定提升,其中精确率提升1%、召回率提升0.3、mAP 提升0.007,并且在对复杂的交通路段,对车辆遮挡和远处车辆目标较小误检和漏检的问题得到解决,证明了本文改进方法的有效性。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!