基于改进YOLOv5 的车辆属性检测*
2022-07-21钟国韵黄斯雯刘麒麟
刘 俊,钟国韵,黄斯雯,刘麒麟
(东华理工大学 信息工程学院,江西 南昌 330013)
0 引言
目前计算机视觉研究者们在逐渐探索车辆图像数据处理的落地应用,以助力智慧交通。车辆属性检测就是其中一个基础的计算机视觉任务,主要检测车辆的车灯、车牌、车辆logo 等车辆属性区域位置,其结果可以被应用到很多下游的交通视觉任务。例如利用检测到的车灯属性来判定车辆是否变道打转向灯;车牌属性可以作为车牌OCR 识别的输入,还可结合整体的车辆属性,来实现车辆重识别等[1]。
由于早期显卡的显存和计算能力的限制,神经网络无法设计得很深,导致当时目标检测的研究还是偏向于传统的图像处理,主要可以分为区域选择、特征提取和分类三步。区域选择一般是通过在图像上进行逐块像素的遍历,来找到与目标匹配的区域;特征提取则是依据研究员的相关先验知识,如待检测目标的形状、纹理、明暗颜色等,从上一步获取的区域中提取特征,代表算法有尺度不变特征变换(SIFT)[2]和方向梯度直方图(HOG)[3];最后是训练分类器将特征分类,主要利用将待分类数据的特征向量映射到高维空间,以实现将不同类别的数据分开,经典算法有支持向量机(SVM)[4]和AdaBoost[5]。
深度学习[6]开始流行后,基于卷积神经网络的方法逐渐在计算机视觉领域占据主导地位。具体到目标检测任务,检测的实时性不断提高,速度能够超过25 f/s,准确率也在逐渐上升,已经可以满足落地使用的要求。现有的目标检测算法包括两类:One-Stage 和Two-Stage[7]。One-Stage 类的算法是一个端到端的网络直接对物体进行分类以及回归出Bounding box 的坐标,现在使用最广泛的是YOLO 系列算法[8-10]和SSD;Two-Stage 类的算法分为两步,需要先选出最有可能的区域作为候选区,然后再对这些区域进行修正,这种算法的准确率比前者要高一些,代表算法是Faster R-CNN。
Zhao Yanzhu 等人在SSD 的基础上,增加了选择更多的底层候选区域,并且将损失函数换成了focal loss 以提高车辆局部属性区域的检测[11],但是工程性、易用性和准确率还有待提高。本文采用最新的YOLOv5 对车灯、后视镜等车辆的局部零件区域位置进行检测,由于它们相对较小,为了让模型把更多的注意力放在小目标对象上,加入了卷积注意力模块;由于构建的数据集样本种类相对较少,为了增强模型的泛化能力,改进了YOLOv5的马赛克数据增强方式;最后,本文把激活函数改为自门控激活函数Swish,以抑制噪声并且加速网络训练。
1 YOLOv5 网络简介
YOLOv5 的网络架构整体上与YOLOv4 非常接近,由主干网络、颈部网络和输出三部分组成,具体结构图如图1 所示。
主干网络是用来进行提取图像底层特征的,主要包括Focus 结构和跨阶段层次结构(CSP)[12]。Focus 结构中主要是一个切片操作,具体流程为:对图像在每个通道进行均匀划分,将划分后每个图像块对应位置的像素值拼成一个新的通道。所以操作完成后会增加很多新通道,这样可以让模型学习到更多图像的局部特征。考虑到计算瓶颈和内存成本,CSP 模块通过先把底层特征图分为两部分,然后通过跨阶段层次结构再将它们合并的方式,既大大降低了计算量,又保证了准确率[13]。
颈部网络是利用特征金字塔的架构,将多个下采样(图1 网络结构图中的4、6、9 号位置) 得到的不同尺度的特征图,通过上采样的方式将高层特征信息流通并融合起来。输出模块会输出相对于原图的8、16、32 倍下采样的3 个尺度特征图,采用多个尺度是因为考虑到检测的物体大小不一,这样不会造成小目标的检测率过低。输出的预测结果包括Bounding box 的坐标、坐标的置信度分数和预测为某类别的概率。
图1 YOLOv5 网络结构
与之前的版本相比,在网络架构方面一个很大的改进是,YOLOv5 通过调节深度倍数(depth multiple)和宽度倍数(width multiple)两个参数,可以得到不同大小的网络,这样便于根据自己具体的需求来调整网络参数的大小。
2 改进YOLOv5 算法
2.1 CBAM 注意力模块
人类每天都要接收大量的视觉信息,其实它们已经超过了大脑所能处理的量,但是人类在进化中学会了将有限的注意力更多地分配到感兴趣区域。例如人类的眼睛会自动关注视野内运动或者发光的物体。这些往往是输入到大脑中信息量比较多的区域。网络模型也是如此,需要把有限的注意力放在信息量大的地方。
对于输入图像,车辆的通用目标只占整体的较小部分,大部分为背景信息,在经过多次的卷积操作后,会产生大量冗余信息,逐渐将小目标对象的信息淹没,导致网络检测不到部分小目标,如年检标志、后视镜等。因此,本文将卷积块注意力模块(CBAM)嵌入到YOLOv5 中,它通过结合通道和空间的注意力计算分配,让网络更多地关注到应该关注的小目标对象。图2 是CBAM 模块的结构,输入其中的特征图依次通过通道和空间注意力模块,分别进行通道与空间上的注意力计算[14]。
图2 卷积注意力模块
在通道注意力模块(结构如图3 所示)中,其操作具体如式(1)所示:
图3 通道注意力模块
其中,MLP()表示通过一个多层感知机;F 表示输入的特征;AvgPool()表示平均池化操作;MaxPool()表示最大池化操作;Sigmoid()表示将数据输入Sigmoid 函数中,将其映射到0~1 之间。
在空间注意力模块(结构如图4 所示)中,其具体操作如式(2)所示:
图4 空间注意力模块
其中,f7×7表示7×7的卷积操作。
虽然池化操作会造成一定程度的细粒度信息的丢失,但是这两个模块均使用了Global Max Pooling 和Global Average Pooling,这样可以减少信息的丢失,而且丰富了网络能够学习到的信息。
本文把CBAM 插入到YOLOv5 的颈部,具体方式为在图1 所示YOLOv5 网络结构图中标识的4、6、9 号3 个CSP 模块内部的最后加上CBAM 模块,这样能更好地提升模型检测小目标的性能。
2.2 改进马赛克数据增强
马赛克(Mosaic)数据增强是YOLOv5 中很重要的一种数据增强方式。即在载入一张图片时,再额外从数据集中任意选择3 张图片,先通过随机裁减,再顺时针拼接在一张图片上,最后缩放为设定的输入尺寸,并作为新的样本传入模型。这样既丰富了待检测目标的背景,又增加了每次训练每批次中小目标的数量,实现了不同尺度目标间的平衡。
由于本文构建的车辆通用目标数据集中只有7 个类别,不同的车辆总共只有776,与一些标准数据集(例如含有80 个类别,超过20 万张图片的COCO 数据集)相比,数据过少,因此需要对现有的数据进行数据增广以提高模型的泛化能力。又因为原始马赛克数据增强方式是随机裁剪的,会有很大概率将目标裁剪,使输入模型的样本只有背景;另外原始图片本身尺度也不一致,这样会使拼接后的图片有较多黑白的边界,从而会导致模型训练大量无用的特征信息,影响了模型收敛的速度,如图5(a)所示。因此,本文改进了马赛克数据增强方式。在载入图片时,再额外选择8 张图片进行拼接,再按包围图片的最小矩形面积裁剪,然后对图片增加随机旋转、平移、缩放、视角变换操作。如图5(b)所示,改进后的马赛克数据增强方式比改进前一方面减少了很多空白的边界,减少了无用信息,加快模型收敛,提高了训练效率;另一方面会形成大量的不同小目标,极大地丰富了车辆通用目标数据集,显著地改善了模型检测小尺寸目标(如车标、后视镜等)的性能[15]。
图5 马赛克增强方式对比
2.3 Swish 激活函数
激活函数在神经网络中有着至关重要的功能,它可以为网络增强非线性表达能力,让神经网络能够拟合任意的复杂函数,在YOLOv5 网络架构中的卷积模块(Conv)中使用了带泄露的ReLU 激活函数(Leaky ReLU),其表达式如式(3)所示:
其中,α 为常数,一般设置为0.01。
由于Leaky ReLU 在不同区间函数不一样,因此结果不一致,导致无法为正负输入值提供一致的关系预测。Ramachandran 等[16]提出了一种效果更好的激活函数,称为Swish,其表达式如式(4)所示,图像如图6 所示。
图6 Swish 激活函数图像
Swish 函数有以下特点:没有上边界,因此不会出现梯度饱和的现象;有下边界,当x 越靠近左半轴,纵坐标的值越小,甚至接近于0,如果x 值是-5,那么经过激活之后的值接近于0,那么就可以一定程度上过滤掉一部分信息,起到正则化的效果;非单调,处处连续且可导,更容易训练。本文在YOLOv5 网络架构中引入Swish 激活函数代替原有的Leaky ReLU。
3 模型训练过程
3.1 实验数据集
由于缺乏高质量开源的车辆属性数据集,本文在公开车辆数据集VeRi-776[17]的基础上进行车辆属性标注,共776 个不同车辆,49 357 张图片,进行了7 类标注,具体包括车标、车轮、挡风玻璃、车牌、车灯、后视镜、年检标志。本实验通过在线标注平台Roboflow 进行标注,然后导出为YOLOv5 所使用的格式,标注示例如图7 所示。
图7 标注示例
3.2 训练过程
实验环境的具体配置为Linux Ubuntu18.04.7 LTS,CPU 为Intel®Xeon®Gold 5118,显卡用的是16 GB 显存的Tesla T4,深度学习框架选择的是PyTorch,版本为1.10。采用YOLOv5 4 种模型中最小的YOLOv5s 模型以方便后续训练,因为它的参数量小,推理速度快。将标注好的数据集的60%作为训练集,20%作为验证集,20%作为测试集进行实验。初始学习率为0.01,终止学习率为0.2,批处理量(batch size)为64,训练轮数(epochs)为300轮,训练和测试图像通过等比缩放并用填充像素“0”的方式,调整为640×640 尺寸。
对于锚框,不是采用YOLOv5s 默认的锚框大小,而是使用通过K-means 聚类算法得到最适合本实验的训练数据集的锚框设置。
3.2.1 迁移学习
为了增强模型的鲁棒性和加快训练的速度,利用迁移学习,在基于COCO 数据集上训练好的模型基础上对网络模型进行微调。具体地,在训练时将类别数量修改为7,并冻结住backbone 中的前5 层,这样可以利用预训练模型在COCO 数据集上学习到的大量识别底层信息的能力,并且加快训练速度。
3.2.2 评价指标
本文采用精确率(Precision)、召回率(Recall)和平均精确率(mAP)作为模型性能评价的相关指标。精确率用来衡量模型检测的是否准确,召回率则是用来判断模型检测结果是否全面。单个类别的精确率(AP)是通过PR 曲线以及坐标轴所围成的面积得到的。mAP 是相对所有类别的平均值,通常认为模型检测输出的Bounding box与Ground Truth 的IOU=0.5 时的检测结果是正确的,此时计算mAP 值,就表示为mAP@0.5。其中IOU 为交并比,是计算mAP 的重要函数,见式(5):
其中,C、G 分别为预测框和真实框,分子为两框交集的面积,分母为两框并集面积。
式(6)~式(8)分别是精确率、召回率和单个类别的精确率的计算公式:
其中,TP 表示预测为正类的正样本,FP 表示预测为正类的负样本,FN 为预测为负类的正样本。
本文不是直接求PR 曲线的积分结果,而是采用一个平滑处理。也就是曲线上的每一个点,精度值取它右边精度的最大值。用公式描述为:
其中,C 为类别数,APi表示第i 个类别的平均精确率。
训练时的损失变化曲线如图8 所示,可以看到相比原YOLOv5 模型,改进的YOLOv5 最终收敛时的损失值更小、收敛速度也更快,其中原YOLOv5 在230 次迭代后才开始收敛,改进的YOLOv5 在180 次迭代就开始收敛了。
图8 模型训练时的损失变化曲线
模型训练时的平均精度变化曲线如图9 所示,可以看到改进的YOLOv5 模型更快地收敛,精度表现更平稳,并且精度更高。
图9 模型训练时的平均精度变化曲线
4 实验结果与分析
训练完成后,得到模型权重文件,然后将测试图片输入网络中进行推理,检测结果示例如图10 所示,图11是注意力可视化图[18],表1 是车辆各属性的检测精度。可以看到,改进后的YOLOv5 网络能够准确地检测到车辆各属性的位置,有些小目标如年检标志,由于拍摄距离较远,比较模糊,导致检测精度较低。根据注意力图可视化,可以发现网络能够更好地关注车辆本身的细节区域。
图10 检测结果可视化
图11 注意力图可视化
表1 车辆各属性的检测精度 (%)
4.1 对比分析
4.1.1 检测效果对比
为了清晰直观地观察到本文改进算法的优越性,将其与原YOLOv5 的部分检测结果进行可视化并进行对比,如图12 所示。可以看到,原YOLOv5 在图12(a)中将车辆左边的后视镜这个小目标漏掉了,而图12(b)中显示出本文改进后的YOLOv5 模型检测到了;图12(c)是原YOLOv5 模型的定位结果,其输出的边界框包含了部分检测目标外的无效区域,但在图12(d)中,可以看到本文改进后的算法检测的边界框与待检测目标重合更好,即精度更高。
图12 改进YOLOv5 与原YOLOv5 的检测效果对比
4.1.2 不同网络模型的对比
为了准确评估本文改进算法的有效性,将其与YOLOv5、YOLOv4、YOLOv3、SSD、Faster R-CNN 算法进行对比,最终得到各个模型的性能效果如表2 所示。其中YOLOv5采用的是YOLOv5s,所以推理速度极快。可以看到,最新的YOLOv5 相比之前的目标检测经典算法在精度和检测速度上都有提升,特别是速度方面,提升明显。本文改进的YOLOv5 模型,相比原YOLOv5,在轻微降低检测速度的前提下,mAP 提高了4.6%,更具实际应用价值。
表2 不同网络模型的对比
4.2 消融实验
本文在YOLOv5 模型的基础上,增加了注意力卷积模块、改进了马赛克数据增强方式、改进了激活函数,为了评估不同模块的改动和不同模块组合对于算法性能优化的程度,本文详细地进行了消融实验,表3 为消融实验数据。在实验环境配置一致的情况下,实验结果表明,每个改进都能提升模型的准确率,其中CBAM 的贡献较为明显,mAP 提升了2.7%,3 个模块的组合应用对于最终的识别精度优化效果最好。
表3 消融实验
5 结论
本文将YOLOv5 应用到车辆属性检测领域,提出了一种改进的YOLOv5 算法。但是目前,自然道路场景下的车辆属性检测识别依旧面临很多问题,如监控摄像头采集的图像质量不佳;容易受雾、不良光照干扰,从而丢失目标纹理细节,对识别造成困难。对于一些车辆属性(如车标、年检标志等),由于本文是基于VeRi-776 数据集标注的,样本较少,检测效果有待增强,后续还需要不断收集标注更多的数据。后续会基于本文的模型,构建Pipeline,进行下游任务的研究与实现。例如在道路监控视频场景下,增加选取最优帧的逻辑,选出质量高的一帧图像,结合检测到的车牌位置,再进行车牌OCR 识别;还有利用整体的车辆属性,进行车辆重识别,实现车辆轨迹还原等。