近年来, 计算机视觉技术的快速发展, 广泛应用于自动驾驶, 无人机检测以及安全检测等领域[1]. 随着科技发展、生活水平提高, 人们对私家车、公交车以及卡车需求的增加导致交通拥堵、交通事故等问题愈加严重, 给城市交通监管带来巨大压力. 道路视频监控系统的广泛应用以及面向视频的目标检测技术的不断发展, 使智能化的交通管理成为可能, 而交通目标检测则是智能交通系统中至关重要的研究内容之一, 同时, 也是保证实时获取交通监控信息及构建智能交通系统的先决条件.
传统的车辆检测方法主要分为基于图像和基于视频两类方法. 基于视频的方法包括背景差分法、光流法和帧间差分法, 背景差分法基本思想是将输入图像与背景模型比较, 分割出背景图像和运动目标, 经典算法有MOG2 (mixture of Gaussians)[2]和GMG (geometric multi gid)[3], 该算法实现简单, 且实时性好, 但模型鲁棒性差, 动态环境变化对结果影响较大. 光流法通过一段时间内像素的变化, 实现对运动对象的检测, 常用的有稠密光流[4]、稀疏光流[5], 光流法无须了解场景信息, 就可以准确检测识别运动目标, 但计算量大且抗噪声能力差. 帧间差分法将相邻两帧做差分运算得出运动目标轮廓, 模型的实时性好, 能适应动态变化的场景, 但对于运动慢的目标, 前后帧重合, 从而导致提取目标不完整. 基于图像的方法通常分为3部分: 区域选择、特征提取和分类器, 采用滑动窗口的策略遍历整幅图像, 在选择的区域中提取车辆特征, 常用的特征有形状、颜色、对称、纹理、车辆阴影、车辆的前灯和尾灯、边缘等, 使用HOG[6]、SIFT[7]、Haar[8]等算子提取特征, 一旦特征被提取出来, 就可以使用诸如SVM[9]、AdaBoost[10]等分类器算法进行车辆分类. 然而, 该类方法中但特征提取通常具有随机性和单一性, 且容易受到反射、弱光、天气条件和物体运动等因素的影响. 因此, 传统检测方法设计困难、检测效率低、检测准确性也不高, 在简单交通场景下的车辆检测效果尚可, 但其性能远远无法满足在现实情况下复杂交通环境的车辆检测.
为了克服复杂交通环境带来的挑战, 研究人员将深度学习引入车辆检测领域. 基于深度学习的检测算法大致分为两类: 一种是基于区域建议的目标检测算法, 也称作二阶段检测算法, 如R-CNN[11], SPP-Net[12], Faster R-CNN[13]等. 黄继鹏等人[14]通过改进Faster-RCNN 网络结构, 实现对小目标的多尺度检测. 实验结果证明了该算法在小目标检测任务上拥有更高的平均精度均值. 陈飞等人[15]改进Faster-RCNN 检测模型应用于道路目标检测, 并通过实验证明了该方法相比Faster-RCNN具有更高的目标检测准确率. 另一种是基于回归的目标检测算法, 也称作单阶段检测算法, 如YOLO[16], SSD[17]等. 该类算法是将目标检测看作回归问题, 如YOLO算法是直接对图片中预设的锚框进行类别的预测和回归, 拥有非常快的检测速度, 但检测精度相对较低. 孟乔[18]设计了一种多层卷积特征融合与金字塔式多尺度计算的SSD车辆检测方法. 通过实验证明了所提出方法在精度与速度等多种评估指标下的综合检测性能极佳. 张新宇等人[19]在 YOLOv4 模型中中引入注意力机制, 并验证了该方法相比于Faster R-CNN和YOLO系列算法在检测精度和速度上都具有明显优势. 基于区域建议的目标检测算法拥有较高的检测精度, 但检测速度慢, 训练时间长, 内存占用多. 基于回归的目标检测算法速度快, 但检测精度不够. 交通目标检测需要实时性和准确性兼顾, 当目标处于密集、低光照等复杂的现实环境时, 现有交通目标检测算法的精度、速度与实际需求仍有差距. 首先, 交通图像中背景复杂, 交通目标尺寸变化大、重叠遮挡严重, 运动物体成像容易发生形变等因素, 导致交通目标检查精度低; 其次, 用于交通监控的目标检测要满足的实时性需求, 对出现的交通事故、交通违规行为及时识别处理; 同时, 交通图像存在图片分辨率高、尺寸大的情况, 使用传统的卷积计算会导致提取的特征信息冗余, 计算量大, 训练慢, 模型参数大的问题. 综合以上问题, 交通目标检测算法需要平衡检查精度、速度以及模型参数3方面性能, 现有的算法很难满足需求.
为应对复杂的交通环境, 本文提出基于GhostNet[20]与注意力机制的YOLOv5[21]车辆检测模型, 从检测速度、精度、模型大小、泛化性能等角度, 多方面优化YOLOv5模型. 本文主要创新及贡献如下.
(1)设计轻量化网络, 利用GhostNet思想消除特征图冗余, 与CSP[22]结构融合, 构造出C3Ghost模块, 有效减少模型参数量, 降低模型所占资源和计算成本.
(2)添加注意力机制, 抵消使用C3Ghost带来的特征图通道间相关性不足, 加入Transformer block[23]和CBAM[24]注意力模块, 前者帮助模型获取全局信息, 后者使模型可以在密集对象的场景中找到注意力区域.
(3)在UA-DETRAC[25]公共数据集上, 设计消融对比实验, 分析各模块对YOLOv5性能影响, 并使用基于遗传算法的K-means聚类[26]、DropBlock[27]正则化等技术, 经过不断调参获取到最终模型. 实验结果表明, 对比YOLOv5算法, 多方面性能得到提升.
1 基于GhostNet与注意力机制的YOLOv5交通目标检测方法 1.1 YOLOv5算法结构YOLO 算法是目标检测领域第1个单阶段检测器, 抛弃之前先提取物体区域再分类识别的检测范式, 提出一种完全不同的理念: 用一个神经网络将图片划分为多个区域, 并同时预测每个区域的边界框和置信度. 尽管YOLO拥有很高的检测速度, 但与二阶段检测器相比, 准确度和召回率有所下降. 之后, 人们在YOLO的基础上进行一系列的改进, 将优秀的目标检测技术融入YOLO算法中, 在保证较高检测速度的同时, 提高了检测的精度. YOLOv5是YOLO系列新一代模型, 添加了一些巧妙的改进思路, 进一步提升检测的速度和精度. YOLOv5官方给出在MS COCO (Microsoft common objects in context)上各模型的性能如图所示, 最快的模型在CPU上检测速度达到22 FPS, 在V100 GPU上检测速度达到了158 FPS, 获得了45.7% mAP, 精度最高的模型以82 FPS的速度获得68.9% mAP. 基于以上YOLOv5的优越性, 本文选择 YOLOv5检测网络作为研究对象.
YOLOv5整体可以分成4个模块, 如图1所示分别是输入端、Backbone网络、Neck网络与Head输出端. 输入端主要完成图像预处理工作, 即缩放图片为网络输入大小、数据归一化以及一些数据增强技术. YOLOv5使用Mosaic数据增强方式, 通过将4张不同的图片随机剪裁、排布、拼接成一张新的图片. 同时, 作者改进了自适应图片缩放方式, 以往YOLO将不规则图片固定地缩放填充为规则的正方形, 存在填充过多, 造成信息冗余, 影响训练、推理的速度, 因此修改缩放方法, 采用自适应的填充方式, 对原始图片添加最少的黑边. Backbone网络负责提取通用的特征表示, 在YOLOv5中作者借鉴了CSPNet的设计思想, 先将基础层的特征映射一分为二, 然后通过跨阶段层次结构合, 设计了新型的CSPDarknet53结构, 减少了推理中的计算量, 降低了模型的内存成本和计算瓶颈. 值得一提的是, 在初始的YOLOv5版本中网络第1层使用Focus结构进行切片操作, 而在之后换成了6×6大小的卷积层, 并说明了两者理论上等价, 且在GPU上卷积比Focus结构更加高效. Neck网络对提取的特征加工, 提升特征的多样性, 首先对SPP做出改进, 将并行通过不同大小的最大池化层改为串行通过3个5×5大小的最大池化层, 原理是串行两个5×5的最大池化层等于一个9×9的最大池化层, 串行3个5×5的最大池化层输出结果与一个13×13的最大池化层一致, 并由实验得出修改的SPP结构速度为原来的2倍. 其次, 将FPN (feature pyramid network)[28]和PAN (path aggregation network)[29]结合起来, FPN自顶向下把深层特征的语义信息传递到浅层, PAN自底向上将浅层的定位信息传递给深层, 在多尺度上进行预测. Head检测层大体上延用了之前的YOLOv3检测头, 分类损失和置信度损失采用BCE loss, 定位损失采用CIoU loss, 并且为了消除Bounding box对于Grid网格的敏感度, 将目标中心点相对Grid网格左上角偏移量从原来的(0, 1)缩放到(−0.5, 1.5).
1.2 增加基于GhostNet的轻量化网络设计
传统的卷积网络存在特征信息冗余, 计算量大, 训练慢, 模型参数大等问题. 而YOLOv5x拥有较高的精度和召回率恰好得益于大量堆叠的卷积网络, 整个网络包括567层卷积, 参数量达到86 231272, 超大的网络结构对于硬件资源是一种挑战, 经常会超出内存限制, 在设备限制下, 模型常无法正常运行或只能在很低的batch-size下运行. 交通图像分辨率高、尺寸大, 如果使用传统卷积网络, 对硬件资源的要求极高, 势必需要减少模型的计算量和参数量.
GhostNet是华为诺亚方舟实验室在2020年提出的轻量型网络结构, 在计算性能上超越谷歌开发的MobileNetV3[30]. Ghost module从特征图冗余问题出发, 利用特征图的相似性, 通过少量计算产生大量特征图. 由此Ghost module被设计为一种分阶段的卷积计算模块, 在少量的普通卷积得到的特征图基础上, 再进行一次线性卷积获取更多的特征图, 而新得到的特征图, 就被叫做之前特征图的“ghost”, 最后将两部分特征图拼接生成最终的特征图, 以此消除特征图冗余, 获得更加轻量的模型.
假设输入通道为c, 特征图高和宽为h和w, 输出数据的高度和宽度为h'和w' , 卷积核数量为n, 卷积核大小为k, 线性变换卷积核大小为d, 变换数量为s. 理论上, 使用Ghost卷积替换传统卷积的参数压缩比推算如式(1)所示:
$ \begin{gathered} {r_c} = \dfrac{{n \cdot c \cdot k \cdot k}}{{\dfrac{n}{s} \cdot c \cdot k \cdot k + \left( {s - 1} \right) \cdot \dfrac{n}{s} \cdot d \cdot d}} \approx \dfrac{{s \cdot c}}{{s + c - 1}} \approx s \\ \\ \end{gathered} $ | (1) |
加速比推算如式(2)所示:
$ \begin{split} {r_s} = & \dfrac{{n \cdot h' \cdot w' \cdot c \cdot k \cdot k}}{{\dfrac{n}{s} \cdot h' \cdot w' \cdot c \cdot k \cdot k + \left( {s - 1} \right) \cdot \dfrac{n}{s} \cdot h' \cdot w' \cdot d \cdot d}} \\ = & \dfrac{{c \cdot k \cdot k}}{{\dfrac{1}{s} \cdot c \cdot k \cdot k + \dfrac{{\left( {s - 1} \right)}}{s} \cdot d \cdot d}} \approx \dfrac{{s \cdot c}}{{s + c - 1}} \approx s \\ \end{split} $ | (2) |
从式(1)和式(2)可以看出, 计算加速收益和参数压缩效果受变换数量影响, 即生成“ghost”特征图越多加速效果越好, 检测精度也会随之下降, 为平衡速度与精度一般将变换数量设置为1/2.
利用Ghost module的优点, 进一步可以构建出适用于YOLOv5的Ghost结构如图2所示. GhostConv首先使用原卷积一半大小的卷积生成一半的特征图, 再使用廉价计算对特征图加工, 生成另一半特征图, 最后通过Concat操作将两部分特征图拼接成完整的特征图, 其中廉价计算采用的是卷积核为5, 步长为1的卷积. Ghost bottlenecks的结构类似于ResNet的残差结构, 每个Ghost bottlenecks主要由两个GhostConv组成. 第1个GhostConv作为扩展层增加通道的数量. 第2个 GhostConv的作用是减少输出特征图的通道数使其与输入通道数相匹配. 通过shortcut将两个Ghost-Conv连接. 两个GhostConv之间的区别在于第1个Ghost 后使用的是ReLU激活函数, 而后面的每层使用的都是批量归一化处理, 通过这样的结构方式使得模型在有效减少模型参数、计算量之余, 还能通过 Ghost-Conv对特征图进行优化, 提高模型检测效率.
CSPNet结构是YOLOv5成功的关键, 利用跨阶段特征融合策略和截断梯度流技术增强不同网络层间学习特征的可变性, 从而减少冗余梯度信息的影响, 增强网络学习能力. 一方面, CSPNet在减少计算量、减少内存成本的同时, 优化网络检测精度, 所以在改进YOLOv5模型时, 并没有删除CSPNet的架构, 反而将CSPNet应用到GhostNet网络里. 另一方面, 原GhostNet网络采用MobileNetV3结构, 网络结构太深, 在YOLOv5中使用该结构多尺度地提取特征, 会使模型参数量和计算量增加, 即使使用了轻量级网络, 也没有达到最终轻量级设计的目的. 综合两方面考虑, 设计C3Ghost结构, 将一半的特征信息通过Ghost bottlenecks生成特征图, 另一部分只通过卷积、正则化和激活函数生成特征图, 再将两部分特征图拼接, 使得梯度组合的差异最大化, 并减少大量梯度信息.
1.3 增加注意力机制一方面, Ghost模块使用的廉价线性变换是depth-wise convolution (分组卷积), 分组卷积消除了通道间的相关性, 使得当前通道特征仅与自己相关, 虽然降低了参数量、计算量, 但模型对全局特征的提取减少. 另一方面, 在路测相机的图像中, 大面积的覆盖区域存在许多干扰因素, 我们希望将检测目标锁定在行驶的车辆上. 利用注意力机制提取感兴趣区域, 帮助YOLOv5抵御混淆信息, 并将算力集中在重要的特征上. 从以上两方面考虑, 需在模型中增加注意力机制, 在节约算力的同时, 提高模型检测精度.
受Vision Transformer 的启发, 在文本中多头注意力可以获取上下文的信息, 将多头注意力机制用于图片可以获取全局信息, 即当需要识别一辆汽车时, 可以注意到有哪些块与汽车相关. 在主干网络中添加Transformer block, 其结构如图3(b)所示, 在特征图放入Transformer layer训练前, 先进行reshape, 调整参数顺序和维度, 得到形状为3维的向量, 并分配给q、k、v, 放入多头注意力中训练学习. 多头注意力是多个自注意力的组合, 自注意力机制数学表达如式(3)所示:
$ Attention(q, k, v) = {\textit{Softmax}} \left(\frac{{q \cdot {k^{\rm{T}}}}}{{\sqrt {k \cdot dim } }}\right) \cdot v $ | (3) |
多头注意力将模型分为多个部分, 形成多个子空间, 让模型关注不同方面的信息, 然后将不同的信息组合起来, 帮助当前节点不仅关注当前网格, 还能获取到周围环境信息. 同时, 多头注意力可以让每个自注意力头关注图像的不同特征, 挖掘特征表示的潜能.
在研究中显示, 自注意力机制常常会在数据量小的时候罢工甚至起负作用, 为了保证模型的稳定性, 减少Transformer使用, 在主干网络和特征融合网络间加入一层Transformer层, 而之后的注意力使用CBAM模块.
CBAM模块是一种简单但有效的注意力模块, 特征图输入时, 会沿着两个独立的子模块(通道注意力模块和空间注意力模块)依次推断注意力权重, 然后将注意力权重与输入特征图相乘, 以进行自适应特征优化. 其中, 通道注意力模块将特征图进行最大池化和平均池化, 相当于把每个通道上所有特征图压缩为一个像素的特征, 再将池化后的输出经过多层感知器, 进行参数的学习, 并经过Softmax函数生成对于各个通道的重视程度, 因为特征图的每个通道都相当于一个特征检测器, 所以通道注意力可以让网络知道什么特征值得被关注. 在空间注意力中, 将经过通道注意力模块加权的结果沿着通道轴最大池化和平均池化, 把n个通道H×W的图像压缩为一个单通道的H×W的图像, 然后经过卷积层学习参数, 使用Softmax获取H×W上个像素点的重要程度, 即获取值得注意的位置. CBAM可以作为轻量级模块集成到主流的CNN架构中, 以端到端方式对其进行训练, 并且CBAM模块可以减少无关信息对检测识别的影响, 对减少误检率有很大帮助.
在YOLOv5架构中, 将FPN (特征金字塔网络)和PAN (路径聚合网络)结合进行多尺度特征融合, 其目的是将浅层网络的强位置信息和深层网络的强语义信息传递给其他网络层, 沿着这个思路把CBAM模块添加在FPN结构与PAN结构之间, 计算位置信息权重和语义信息权重, 关注重要的特征, 抑制不重要的信息. 整体注意力机制示意图如图4所示, 所有注意力模块嵌入基础YOLOv5网络, 并一起进行端到端训练.
1.4 基于GhostNet与注意力机制的YOLOv5模型本文所提算法的整体结构如图5所示, 第1层6×6大小的卷积实际上与原Focus模块作用一样, 对输入的图像做切片操作, 例如640×640×3的图片输入, 会变成320×320×64的特征图. 所以第1层卷积没有变动, 其余所有卷积替换为GhostConv, 所有C3结构用C3Ghost替代. 在Backbone网络提取特征的尾部添加C3TR模块, 该模块与C3Ghost一样借鉴CSP结构, 用Transformer block替换原本的Bottleneck. 在Neck网络进行特征融合时, 使用C3CBAM模块加强重要特征的权重.
2 实验与分析 2.1 数据集
本文使用UA-DETRAC数据集作为实验数据, UA-DETRAC是一个具有挑战性的多目标车辆检测数据集. 该数据集包括在中国北京和天津的24个不同地点使用Cannon EOS 550D相机拍摄, 数据集中有8 250辆手动注释的车辆, 121万个的目标框. 相较于其他车辆数据集, UA-DETRAC采用大倾角俯视视角拍摄, 与基于车载设备平视视角不同, 更符合交通监管的场景, 且单张图像中有超过30辆车辆的场景, 拥有夜晚、雨天不同天气的图片, 包括十字路口、三叉路口等道路场景, 能够体现现实中复杂交通情景.
UA-DETRAC数据集图片从视频中截取, 存在许多相似数据, 相邻图片差异很小, 使用完整的82 090张训练集, 训练速度非常慢, 且太多相似数据, 容易让模型过拟合. 为消除冗余的数据帧, 本文设计两个实验: 实验1, 从数据集中抽取8 000张图片实验, 其中6462张图片训练集、880张验证集、406张测试集, 主要用于消融实验, 测试每个模块对算法性能的影响; 实验2, 从训练集的每个场景中随机抽取40%的图片, 其中, 20 521张训练集, 12 312张验证集, 从测试集每个场景抽取20%的图片, 一共11233张作为测试集, 主要用于评估模型总体性能.
2.2 实验环境本实验主要配置为系统: Linux 5.4版本, 框架: PyTorch, CPU: Inter Xeon(R) CPU E5-2603 v4 @ 1.70 GHz x12 处理器, GPU: Nvidia GeForce GTX 1080 ti 10 GB, 内存: 128 GB, CUDA版本11.2.
实验设置输入图片大小为640×640, 使用统一的超参数设置: 0.0032初始学习率, 0.12周期学习率, 0.93学习动量, 0.2的IoU训练阈值, 批量大小为16, 训练100 epoch.
2.3 设计基于K-means与遗传算法的检测框获取方法在YOLO系列算法中使用anchor box作为目标框的潜在候选框, anchor box的选择将影响到YOLO算法的精度以及速度, 因此anchor box的长宽形状越接近真实的目标框越好. 由于YOLO网络的预测层包含3层感受野的信息, 每层感受野有3个锚框, 所以在模型训练前, 需要将车辆的大小聚类为9类, 替换YOLOv5初始anchor box.
常用K-means聚类方法, 将从数据集中随机选取K个点作为初始聚类的中心点, 中心点为对于数据集中的每个样本Xi, 计算它们到每个聚类中心点的距离, 并将它们划分到距离最小的聚类中心的类别中. 然后对于每个类别i, 重新计算该类别的聚类中心, 重复以上步骤直到聚类中心的位置不变或达到迭代次数. 但是传统的K-means对于初始的聚类中心和样本输入顺序非常敏感, 容易陷入局部最优解.
本文采用基于遗传算法的K-means聚类, 将K-means聚类的局部寻优能力和遗传算法的全局寻优能力结合, 通过变异概率、种群迭代次数等因素找出最优解, 避免局部最优解的情况. 实现过程如下.
(1)将YOLO基于长和宽的相对坐标转换为绝对坐标.
(2)通过K-means聚类得到n个anchors.
(3)用遗传算法随机对anchors的长宽进行变异, 使用anchor_fitness方法计算变异后的适应度, 如果变异后效果变得更好就将变异后的结果赋值给anchors, 如果变异后效果变差就跳过. 通过聚类和遗传算法计算anchor和real bbox的重合度, 使用遗传算法进化锚点. 设置变异次数1 000次, 得到新的预选框. 在80×80的网络上聚类出anchor box为(20, 31), (70, 61), (95, 154). 在40×40网络上聚类结果为(30, 43), (56, 91), (172, 162). 在20×20网络上聚类结果为(43, 54), (102, 92), (129, 384).
2.4 模型性能评价指标采用检测精度、召回率、平均精度、检测速度、模型大小作为模型性能的评价指标. 检测精度(precision, P)是模型预测目标中, 预测正确的比例, 计算公式为:
$ P = \frac{{TP}}{{TP + FP}} $ | (4) |
召回率(recall, R)是所有真实目标中, 模型预测正确目标的比例, 计算公式为:
$ R = \frac{{TP}}{{TP + FN}} $ | (5) |
平均精度(mean average precision, mAP)是所有类别预测精准度的平均值, 计算公式为:
$ AP = \int\limits_0^1 {P(R)dt} $ | (6) |
$ mAP = \frac{{\displaystyle\sum\limits_{n = 0}^N {A{P_n}} }}{N} $ | (7) |
其中, 设置IoU为0.5时, TP(true positive)表示预测框与真实标签IoU大于0.5的数量,FP(false positive)表示IoU小于0.5的数量, FN (false negative)表示没有检测到真实标签的数量. 实验中使用了两种mAP, 分别是mAP@0.5和mAP@.5:.95, mAP@0.5表示IoU设定为0.5时, 所有类别的平均精确, mAP@.5:.95表示IoU阈值在(0.5, 0.95)区间内, 步长为0.05, 分别计算mAP, 然后取平均值. 目标检测常用的是mAP@0.5, 而使用mAP@.5:.95可以更加关注预测框位置的准确性.
检测速度常用两种指标, 一种是检测每张图片所需时间, 单位为ms, 一种是每秒检测图片数量, 单位FPS, 两者间可相互换算. 模型大小的评估指标采用计算量和参数量两个指标, 计算量是模型所需浮点运算次数, 用以衡量模型时间复杂度, 单位GFLOPs, 参数量是模型参数的数量总和, 用以衡量模型空间复杂度, 单位为M.
2.5 损失函数损失函数通过衡量模型预计结果和实际数据的差距, 引导模型训练方向. 本文损失函数由3部分组成, 分别为box_loss (定位损失)、obj_loss (分类损失)和cls_loss (置信度损失), 如式(8)所示: tp,tgt为预测向量与真实向量; K,S2, B分别表示特征图数量、网格数量以及每个网格上预测框的数量; a*表示对应项的权重, 训练在hyp.scratch-low.yaml上微调,
$ \begin{split} &{L_{{\rm{total}}}}({t_p}, {t_{gt}}) = \sum\limits_{k = 0}^K \left[a_k^{{\rm{balance}}} \left({a_{{\rm{box}}}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {{\text{II}}_{{{kij}}}^{{\rm{obj}}}{L_{CIoU}} } } \right.\right.\\ &+\left.\left.{a_{{\rm{obj}}}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {{\text{II}}_{kij}^{{\rm{obj}}}{L_{{\rm{obj}}}} + } } {a_{{\rm{cls}}}}\sum\limits_{i = 0}^{{S^2}} \sum\limits_{j = 0}^B {\text{II}}_{kij}^{{\rm{obj}}}{L_{{\rm{cls}}}}\right) \right] \end{split} $ | (8) |
定位损失采用CIoU loss, 如式(9)所示: IoU为图像重叠面积;
$ {L_{CIoU}} = 1 - IoU + \frac{{{r^2}\left( {b, {b^{gt}}} \right)}}{{{c^2}}} + aV $ | (9) |
$ a= \left\{ {\begin{array}{l}0, \quad \text { if } { IoU }<0.5 \\ \dfrac{V}{(1-I o U)+V}, \quad \text { if } { IoU } \geqslant 0.5\end{array}} \right. $ | (10) |
$ V = \frac{4}{{{\pi ^2}}}{\left( {{\rm{arctan}}\frac{{{w^{gt}}}}{{{h^{gt}}}} - {\rm{arctan}}\frac{w}{h}} \right)^2} $ | (11) |
分类损失和置信度损失都采用基于Sigmoid的二进制交叉熵函数 (BCEWithLogitsLoss), 整体公式如式(12)和式(13)所示:
$ {L_{{\rm{obj}}}}\left( {{p_0}, {p_{IoU}}} \right) = BCE_{{\rm{obj}}}^{\textit{Sigmoid}}\left( {{p_0}, {p_{IoU}};{w_{{\rm{obj}}}}} \right) $ | (12) |
$ {L_{{\rm{cls}}}}\left( {{c_p}, {c_{gt}}} \right) = BCE_{{\rm{obj}}}^{\textit{Sigmoid}}\left( {{c_p}, {c_{IoU}};{w_{{\rm{cls}}}}} \right) $ | (13) |
在YOLOv5s中使用Ghost模块进行卷积操作, 模型的参数量由7071633下降到3692633, 模型参数压缩了52%, 计算量由16.5 GFLOPs下降到8.1 GFLOPs, 计算加速比为49%. Ghost轻量化的效果和式(1)、式(2)得出的结论相差不大, 使用Ghost生成50%特征图, 加速比和压缩率接近50%.
Ghost采用廉价操作生成一部分的特征图, 那么将YOLOv5的卷积全替换成Ghost卷积, 特征信息是否会因此丢失, 带着这样的疑问, 将YOLOv5s和Ghost-YOLOv5提取的特征可视化, 如图6所示, 特征图分别为经过第1个C3结构和C3Ghost结构的结果, 大体上两份特征提取的结果相近, 并且在方块圈出来的特征图里, Ghost-YOLOv5将车辆线条提取的更加明显, 车辆整体的轮廓保留在特征图中. 之后, 使用验证集得到YOLOv5s检测精度为0.970 3, 召回率为0.958 0, Ghost-YOLOv5检测精度为0.967 9, 召回率为0.938 5, 精度下降0.24%, 召回率下降2.94%, 得出结论Ghost在帮助模型压缩参数和减少计算量上十分有效, 但会损失一些精准度.
2.6.2 模块有效性评价为了分析各模型组合对模型影响, 设计消融实验, 训练采用统一超参数, 训练100 epoch, 取mAP最高的结果保存, 结果如表1所示, Ghost轻量化效果很好, 使用Ghost的模型参数量最低, 仅有3.5 M, 但是检测准确率和召回率下降. CBAM可以提升模型的精确度和召回率, mAP@.5:.95指标比YOLOv5s提升了1.82%, 说明模型边框回归的更好, 作为轻量级模块加入模型, 参数量仅增加了1 M. 值得注意的是, 将Ghost和CBAM同时使用, 对比只使用CBAM注意力的模型检测效果更好, 并且参数量更少. CBAM帮助Ghost更好的选择重要的特征, 排除干扰信息, 建立通道间相关性, 对比YOLOv5s, P提高1%, R提高1.1%, mAP@.5:.95提升2.68%, 参数量减少26%, 在模型检测性能提高的同时, 降低模型对硬件资源的需求. 本文算法将Ghost、CBAM、Transformer这3种思想融入YOLOv5s, 在消融实验中, 为了方便训练, 只抽取了8 000张图片, 但数据集太小使得Transformer模块并没有良好表现, 对比只加入Ghost和CBAM的模型, 性能有轻微下降.
2.6.3 综合性能评价
为进一步研究本文算法的性能, 数据集从8 000张扩充到44 066张, 对原始的YOLO系列检测算法和改进算法做性能对比分析, 结果如表2所示, 本文算法对标YOLOv5x, mAP@0.5由0.9763提升到0.9868, P由0.9335提升到0.9760,R由0.9544提升到0.9652, 同时参数量从86.7 M减少到47 M, 压缩了46%, 速度由37 FPS提高到65 FPS, 提升了43%. 使用11233张测试集检验模型泛化性, 本文的算法在测试集上mAP@0.5比YOLOv5x高出2.4%. 对比YOLOv5x, 本文算法在检测速度、精度、模型大小、泛化性能上都得到了优化.
对比YOLO系列优秀算法, 本文算法在检测精度、召回率、平均精度优于以往算法, 并且参数量不高, 对硬件需求不大, 在实时性方面一般将30 FPS作为标准, 一秒检测图片数量大于30张表示算法具备实时性, 改进后的模型具有65 FPS的速度, 超过标准116%.
2.6.4 DropBlock正则化UA-DETRAC数据集采集使用Cannon EOS 550D相机以固定的路测视角拍摄, 并且视频拍摄时间处于连续时间段, 训练出的模型鲁棒性低且容易过拟合. 如图7(a)所示, 模型在训练集上, 分类损失平滑地收敛; 但在验证集上, 分类损失在训练前期处于抖动状态, 在训练后期也没能很好收敛. 同时训练出的模型在训练集上mAP达到97.63%, 在测试集上mAP只有71.5%, 模型总在训练集上拥有良好表现, 可能过于依赖训练场景的某些特征, 导致模型泛化性不足.
为增强模型泛化性, 并使得分类损失较好的收敛. 本文在训练阶段先使用标签平滑技术和调整置信度损失和目标框损失权重, 但模型过拟合问题并没有得到很好的改善. 在Detect层利用卷积处理特征图的过程中使用DropBlock模块, 设置屏蔽块大小为3, 屏蔽块的数量占特征图的30%. 即模型在处理特征图时, 随机屏蔽30%相邻连续的特征区域块, 避免模型过于依赖部分特征, 获得更好的泛化性. 由图7(b)可以看出模型在验证集上的损失也变得更加平滑, 同时在测试集上mAP也提升到74%. 说明在YOLOv5检测头加上DropBlock正则化, 能够帮助模型更好地训练, 提高在验证集和测试集上的检测性能, 增强模型泛化能力.
2.7 检测结果对比
为了体现本文算法的有效性, 从测试集中选取一些图像进行检测. 检测效果如图8和图9所示, 在第1组检测图片中, 图中车辆超过30辆, 包括小轿车和公交车, 存在车辆遮挡、车辆拥挤等困难, 属于复杂交通场景. 在YOLOv5算法检测中出现许多漏检情况, 还有将中间的公交车识别成小轿车的误检情况, 使用本文改进的YOLOv5算法检测, 能够大大降低漏检情况, 并且没有出现误检. 在第2组检测图片中, 车辆处于低光照强度环境且存在车灯干扰情况, 从图8(a)和图9(a)中可以看到YOLOv5算法未检测出左上角被公交车遮挡的车辆和右下角刚刚出现的车辆, 使用本文算法能准确地将它们检测出来. 上述检测效果表明, 本文提出的模型能够实现对复杂交通场景下车辆的有效检测.
3 结论与展望
为解决车辆检测在复杂交通场景中召回率和精确率较低、模型参数量大、检测速度慢等问题, 本文提出基于GhostNet与注意力机制的YOLOv5车辆检测模型. 采用基于遗传算法的K-means聚类方法, 得到适用于车辆检测的预选框; 通过加入DropBlock, 提高模型泛化性; 将传统卷积替换为Ghost卷积并构建C3Ghost模块代替原CSP结构, 减少模型参数, 减少计算成本, 并在主干网络和检测头添加Transformer block和CBAM注意力模块, 加强模型特征提取能力和检测能力. 实验结果表明, 在YOLOv5x基础上改进的算法, 车辆检测精度达到97.57%, 召回率到达96.48%, 较YOLOv5x模型检测精度提高4.21%, 召回率提升1.03%, 参数量减少35 M, 速度提高一倍, 泛化性提高, 本文模型可以在拥挤场景下检测出重叠目标, 低光照场景下识别出更多交通目标, 减少漏检、误检情况. 目前, 模型泛化性依旧不强, 算法对预测未知数据的能力不够, 在训练集上有很好的表现, 但是在测试集上表现不佳, 除了扩充数据集、正则化以及调参外, 之后可以使用蒙特卡罗Dropout (MC Dropout)和贝叶斯神经网络对模型不确定性进行研究, 利用不确定性判断预测的可信程度, 从而避免一些错误的预测.
[1] |
Hadi RA, Sulong G, George LE. Vehicle detection and tracking techniques: A concise review. arXiv:1410.5894, 2014.
|
[2] |
Zivkovic Z, van der Heijden F. Efficient adaptive density estimation per image pixel for the task of background subtraction. Pattern Recognition Letters, 2006, 27(7): 773-780. DOI:10.1016/j.patrec.2005.11.005 |
[3] |
Godbehere AB, Matsukawa A, Goldberg K. Visual tracking of human visitors under variable-lighting conditions for a responsive audio art installation. Proceedings of the 2012 American Control Conference. Montreal: IEEE, 2012. 4305–4312.
|
[4] |
Farnebäck G. Two-frame motion estimation based on polynomial expansion. Proceedings of the 13th Scandinavian Conference on Image Analysis. Halmstad: Springer, 2003. 363–370.
|
[5] |
Lucas BD, Kanade T. An iterative image registration technique with an application to stereo vision. Proceedings of the 7th International Joint Conference on Artificial Intelligence. Vancouver: ACM, 1981. 674–679.
|
[6] |
Dalal N, Triggs B. Histograms of oriented gradients for human detection. Proceedings of the 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition. San Diego: IEEE, 2005. 886–893.
|
[7] |
Ma XX, Grimson WEL. Edge-based rich representation for vehicle classification. Proceedings of the 10th IEEE International Conference on Computer Vision. Beijing: IEEE, 2005. 1185–1192.
|
[8] |
Papageorgiou CP, Oren M, Poggio T. A general framework for object detection. Proceedings of the 6th International Conference on Computer Vision. Bombay: IEEE, 1998. 555–562.
|
[9] |
Kazemi FM, Samadi S, Poorreza HR, et al. Vehicle recognition using curvelet transform and SVM. Proceedings of the 4th International Conference on Information Technology. Las Vegas: IEEE, 2007. 516–521.
|
[10] |
Freund Y, Schapire RE. A decision-theoretic generalization of on-line learning and an application to boosting. Journal of Computer and System Sciences, 1997, 55(1): 119-139. DOI:10.1006/jcss.1997.1504 |
[11] |
Girshick R. Fast R-CNN. Proceedings of the 2015 IEEE International Conference on Computer Vision. Santiago: IEEE, 2015. 1440–1448.
|
[12] |
陶颖军. 基于OpenCV的人脸识别应用. 计算机系统应用, 2012, 21(3): 220-223. DOI:10.3969/j.issn.1003-3254.2012.03.051 |
[13] |
Ren SQ, He KM, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149. DOI:10.1109/TPAMI.2016.2577031 |
[14] |
黄继鹏, 史颖欢, 高阳. 面向小目标的多尺度Faster-RCNN检测算法. 计算机研究与发展, 2019, 56(2): 319-327. DOI:10.7544/issn1000-1239.2019.20170749 |
[15] |
陈飞, 章东平. 基于多尺度特征融合的Faster-RCNN道路目标检测. 中国计量大学学报, 2018, 29(4): 393-397. DOI:10.3969/j.issn.2096-2835.2018.04.008 |
[16] |
Redmon J, Farhadi A. YOLO9000: Better, faster, stronger. Proceedings of the 2017 IEEE Conference on Computer Vision and Pattern Recognition. Honolulu: IEEE, 2017. 6517–6525.
|
[17] |
Liu W, Anguelov D, Erhan D, et al. SSD: Single shot MultiBox detector. Proceedings of the 14th European Conference on Computer Vision. Amsterdam: Springer, 2016. 21–37.
|
[18] |
孟乔. 面向复杂场景的车辆检测跟踪及行为分析关键技术研究[博士学位论文]. 西安: 长安大学, 2021.
|
[19] |
张新宇, 丁胜, 杨治佩. 基于改进注意力机制的交通标志检测算法. 计算机应用, 2022, 42(8): 2378-2385. DOI:10.11772/j.issn.1001-9081.2021061005 |
[20] |
Han K, Wang YH, Tian Q, et al. GhostNet: More features from cheap operations. Proceedings of the 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Seattle: IEEE, 2020. 1577–1586.
|
[21] |
Jocher G. YOLOv5. https://github.com/ultralytics/yolov5. (2020-08-09).
|
[22] |
Wang CY, Liao HYM, Wu YH, et al. CSPNet: A new backbone that can enhance learning capability of CNN. Proceedings of the 2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops. Seattle: IEEE, 2020. 1571–1580.
|
[23] |
Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16×16 words: Transformers for image recognition at scale. Proceedings of the 9th International Conference on Learning Representations. OpenReview.net, 2021. 1–10.
|
[24] |
Woo S, Park J, Lee JY, et al. CBAM: Convolutional block attention module. Proceedings of the 15th European Conference on Computer Vision. Munich: Springer, 2018. 3–19.
|
[25] |
Wen LY, Du DW, Cai ZW, et al. UA-DETRAC: A new benchmark and protocol for multi-object detection and tracking. Computer Vision and Image Understanding, 2020, 193: 102907. DOI:10.1016/j.cviu.2020.102907 |
[26] |
赖玉霞, 刘建平, 杨国兴. 基于遗传算法的K均值聚类分析. 计算机工程, 2008, 34(20): 200-202. DOI:10.3969/j.issn.1000-3428.2008.20.073 |
[27] |
Ghiasi G, Lin TY, Le QV. DropBlock: A regularization method for convolutional networks. Proceedings of the 32nd International Conference on Neural Information Processing Systems. Montréal: ACM, 2018. 10750–10760.
|
[28] |
Lin TY, Dollár P, Girshick R, et al. Feature pyramid networks for object detection. Proceedings of the 2017 IEEE Conference on Computer Vision and Pattern Recognition. Honolulu: IEEE, 2017. 936–944.
|
[29] |
Liu S, Qi L, Qin HF, et al. Path aggregation network for instance segmentation. Proceedings of the 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Salt Lake City: IEEE, 2018. 8759–8768.
|
[30] |
Howard A, Sandler M, Chen B, et al. Searching for MobileNetV3. Proceedings of the 2019 IEEE/CVF International Conference on Computer Vision. Seoul: IEEE, 2019. 1314–1324.
|