基于改进YOLOv3的车辆尾灯检测方法

2021-07-27 02:59张重阳
计算机与现代化 2021年7期
关键词:尾灯特征提取残差

李 龙,张重阳

(南京理工大学计算机科学与工程学院,江苏 南京 210094)

0 引 言

目标检测和环境感知是无人驾驶汽车领域中的重要研究问题,最有代表性的是车辆检测、车牌识别、道路线检测等。汽车在驾驶的过程中,尾灯是一个明显的、具有重要意义的对象,尾灯可以用来预测前车的驾驶意图和对后面车辆作出提醒和警示,从而避免交通事故的发生。可以看出,对于前车尾灯的检测和识别是无人驾驶汽车领域必不可少的重要环节。

在早期的研究中,检测和识别车辆尾灯所用的方法都是基于传统的图像技术实现的,并且结合了颜色、亮度、纹理等特征,然后利用对称性匹配尾灯对,最后识别尾灯灯语。文献[1-3]提出了用灰度图像来分割图像中的亮点。但是,道路上的光源会产生许多亮点,例如路灯、信号灯和反射,它们需要大量的计算时间才能单独定位尾灯位置。Chien等[4]结合形态学和逻辑运算来提取尾灯中的过度曝光区域,聚集2个尾灯候选区域,代表车辆的一对尾灯,配对标准包括灯的面积、形状和高度的相似性。文献[5-11]仅仅检测夜间的尾灯,因为夜间道路图像中的干扰因素比较少,而且夜间尾灯比较明显,易于检测。随后由于技术的提高,研究者开始在白天环境下检测尾灯,如文献[12-15]。尾灯是车辆的一部分,尾灯脱离车辆是不存在的,因此文献[16-17]是通过先检测车辆区域来进一步在边界框中搜索尾灯区域。

基于传统方法的研究,只是针对图像特征层面的研究,不能很好地满足实时性以及没有较高的鲁棒性。因此,近些年,许多学者开始使用深度学习方法研究尾灯的检测和识别。Wang等[18]利用卷积神经网络(CNN)和主动轮廓模型对前方车辆进行检测,分析了尾灯对的特点,然后利用颜色空间转换和位置相关原理对正确的尾灯对进行分割。在光线不足的时候,该方法检测效果较好,但是,当光线强度很大时,检测识别效果降低,虚警概率增大。Lee等[19]提出了一个端到端的深度学习框架,从卷积神经网络开始以提取空间特征,然后应用长短期记忆网络(LSTM)来学习时间依赖性。但是,该方法所研究的尾灯环境单一,仅仅是对车尾部的研究,并没有考虑到具体的道路环境。Chen等[20]提出了一个使用对称的SRUF检测尾灯框架,在不使用任何阈值的情况下从检测到的车辆中隔离红色成分以进行后灯检测,所以即使在各种照明条件下,也可以准确地分析各种尾灯及其状态。Wang等[21-22]提出了一种新颖的两阶段方法来检测车辆并实时从单个图像识别信号灯。在大型数据库上,通过多层感知神经网络学习“灯光模式”(LP)。但是该方法仅仅对刹车灯的操作,并没有对其他的尾灯类型进行学习。

1 改进的YOLOv3网络

为了构建性能更佳的尾灯检测框架,本文在原始YOLOv3网络的基础上,对网络结构和anchor值的获取作了一定改进。

1.1 优化网络结构

本文的研究对象是车辆尾灯,通过观察尾灯实验数据集可以得知,一张图片中车辆尾灯个数可以有很多,但是单个尾灯所占图片的比例很小,所以YOLOv3原有的特征提取结构已经不再适应。另外由于本课题是单目标检测,虽然YOLOv3引入残差结构使得训练难度降低,并且取消了池化层,但是对于单目标检测来说,原有网络参数量较多,显得过于复杂和冗余,这样会导致训练复杂、数据量需求大以及降低检测速度。

由于尾灯的尺寸较小和单目标检测的情况,本节对YOLOv3原先的特征提取网络做出改进,改进策略如下:

1)减少大型尺度的特征提取:尾灯目标小,大尺度特征提取显然不是特别需要,所以删除了大型尺度提取模块,也就是删除Darknet53网络最后一个残差单元。

2)增加小型尺度的卷积层和残差块的个数:在小型尺度特征提取的模块上,增加了残差单元重复的次数。

3)减少主体网络的层数:原先的Darknet53网络的主体网络为 52层,经过改进之后的主体网络为1+(1+2×2)+(1+8×2)+(1+8×2)+(1+4×2)=49层,减少了参数量。

4)张量改为18维:原先的YOLOv3的训练物体类别为80,输出的边界框是一个四维向量(x,y,w,h),加上置信度一共有5个信息,而每个点能够预测3个bounding box,所以输出的张量大小为(80+5)×3=255。对于单目标检测而言,物体类别为1,所以输出张量大小应为(1+5)×3=18。

改进后的YOLOv3网络结构如图1所示。重复残差单元的个数由原先的5个变成了4个,因为尾灯检测是小目标检测,所以在改进的过程中删掉了大尺度特征提取残差单元,并且改变了原先用52×52、26×26和13×13大小尺度划分特征图,改用104×104、52×52和26×26大小尺度划分特征图。同时增加了小尺度特征提取残差单元的重复次数,减少了中尺度特征提取残差单元的重复次数,由原先的1×、2×、8×、8×分别变成2×、8×、8×、4×。由于尾灯检测是单目标检测,所以YOLOv3的输出模块的张量由255维变成了18维。

图1 改进后的YOLOv3网络结构

1.2 K-means++算法获取anchor

在Faster R-CNN中,锚点框(anchor boxes)的思想就已经被提出来了,目的是通过选取初始候选框来提高网络的精度和速度。YOLOv3延续了这种方法用来预测合适的候选区域边界框,并且将anchor的个数增加到9个。比较合适的anchor大小是通过聚类方法得到的,anchor最可能代表的是目标的宽和高,因为在一张图片中,车辆尾灯可以算是比较小的目标,当然也需要比较小的anchor,这样可以更加适应实际问题。YOLOv3原网络采用的聚类方法是K-means聚类算法,为了获得适合本课题研究使用的anchor值,本文对YOLOv3的聚类方法做出改进。采用K-means++聚类算法并结合IOU作为距离衡量指标。

K-means聚类算法采用的是贪心算法的思想,并不一定能得到最优解[23],K-means聚类算法存在着缺陷:1)需要事先设定k值。在实际问题中,人们并不知道目标会被分为多少类,也就不能确定聚类中心的个数,从而会影响具体的实验效果。2)对初始聚类中心的位置敏感:K-means的思想是随机地在数据集中选择k个初始点,不同的初始点位置很可能会导致不同的聚类结果。因此,本文使用K-means++聚类方法来求anchor值。K-means++是对K-means初始点敏感的一种改进算法,其选择聚类初始点的原则是:每个初始聚类中心的相对位置要尽可能远一些。

通常的聚类方法采用的是欧氏距离,对框的大小比较敏感,具体表现在大的框会比小的框产生更多的误差,而本文所研究的车辆尾灯的目标框大小不一,所以本文采用IOU值来度量距离,即anchor boxes和ground truth的重叠面积比值,这样就可以避免anchor boxes尺寸不同带来的误差。每个数据点到聚类中心的距离计算公式如式(1)所示:

d(box,centroid)=1-IOU(box,centroid)

(1)

其中,d(box,centroid) 是anchor box到聚类中心的距离,希望距离越小越好,所以IOU值越大,距离越小。改写的K-means++算法流程如下:

Step1随机选择任意一个初始点:

(xi,yi,wi,hi),i∈{1,2,…,N}

作为初始聚类中心,这里的anchor boxes只包含框的宽和高(wi,hi)。

Step2对每一个数据点计算它与最近的聚类中心的距离d(box,centroid)。将其分到d(box,centroid)最小的类别中去。

d(box,centroid)=1-IOU([(xi,yi,wi,hi),(xi,yi,Wj,Hj)])

i∈{1,2,…,N},j∈{1,2,…,k}

Step3选择一个新的样本作为聚类中心,选择标准是:包含数据点最多的点意味着其很可能是一个类别,所以被选作为新的聚类中心的可能性较大。

Step4重复Step2和Step3,直至有k个聚类中心被选出来。

Step5将被选出的k个聚类中心作为K-means的k个初始聚类中心,运行K-means聚类算法。

2 实验与结果分析

2.1 数据集描述

本实验的数据集来源于自动驾驶场景下的BDD100K数据集,从中选取了1000张原始图片,大小为1280×720。其中800张作为训练集,剩下的200张作为测试集。图片中的尾灯种类包含常见的制动灯和转向灯,制动灯主要包括高位制动灯、车尾两侧的制动灯,颜色主要为红色;转向灯主要为黄色,位于车尾两侧。

2.2 损失函数

损失函数是度量预测值和真实值之间误差的标准,在一定程度上可以衡量网络的学习速度和模型检测效果的优劣。YOLOv3的损失函数是在YOLOv2上做了改动,主要是将分类损失和置信度损失改为二分交叉熵,如式(2)所示。

(2)

2.3 实验环境和训练参数

本文实验环境为:CPU是Inter(R)Xeon(R)CPU E5-2630 v4@2.20 GHz, GPU为NVIDIA TITAN XP,操作系统为Ubuntul16.04,内存12 GB,编程环境是Visual Studio 2015,编程语言为C++,OpenCV版本为3.40,CUDA版本为9.0,采用Darknet深度学习框架。

在训练之前,对Darknet深度学习框架的实验训练参数作了修改,具体如下:学习率lr为0.001,学习率衰减值为0.0005,Batch Size为16,最大迭代次数45000,IOU值设置为0.5。

改进前后YOLOv3模型训练的loss曲线如图2所示,从loss曲线可以看出,当训练次数达到20000次左右,2种模型的loss值趋于稳定,直至迭代45000次结束。YOLOv3模型的loss值最终下降到0.3左右,改进的YOLOv3模型的loss值最终下降到0.18左右,由此说明本文改进的YOLOv3模型在训练集中的预测结果和真实结果更接近。

图2 Loss收敛曲线

2.4 性能评价指标

本文使用的性能评价指标是mAP(平均准确率均值)。假设将目标分为2类,正例(positive)和负例(negtive),则:

TP(True positives):被正确地划分为正例的样本个数,即实际为正例,且被划分为正例的实例数。

FP(False positives):被错误地划分为正例的样本个数,即实际为负例,但被划分为正例的实例数。

FN(Flase negatives):被错误地划分为负例的样本个数,即实际为正例,但被划分为负例的实例数。

TN(True negatives):被正确地划分为负例的样本个数,即实际为负例,且被划分为负例的实例数。

P:准确率(precision),R:召回率(recall)。公式(3)和公式(4)分别是准确率、召回率的计算方式。

P=TP/(TP+FP)

(3)

R=TP/(TP+FN)

(4)

AP是平均准确率,mAP是所有类别的平均准确率的均值,本课题实验检测目标只有一类(尾灯),所以在本文中所使用mAP即是AP。

2.5 结果分析

本文分别在YOLOv3以及改进后的YOLOv3模型上训练测试,单张图片在2种模型下的可视化检测结果如图3所示。其中图3(a)和图3(c)是在原始YOLOv3模型下的检测结果,图3(b)和图3(d)是对应图片在改进后YOLOv3模型下的检测结果,图中的阴影框为与真实框满足匹配的目标检测框。比较图3(a)和图3(b)可以看出,原始的YOLOv3检测模型可以检测出部分车辆尾灯,但是对于远处的、微小的尾灯却出现漏检情况;改进后的YOLOv3模型检测尾灯位置比较准确,远处的小目标尾灯可以被检测出来,这是因为改进后的YOLOv3模型在小型尺度特征提取的模块上,增加了残差单元重复的次数,所以对于很小的尾灯目标检测能力要优于原始的YOLOv3模型。

图3 2种模型下可视化检测结果

图4是YOLOv3和改进后的YOLOv3模型的P-R曲线,P-R曲线就是精确率(precision)和召回率(recall)的曲线,以召回率为横坐标,精确率为纵坐标。由P-R曲线可知,改进后的YOLOv3模型对于车辆尾灯的检测性能有了明显的提高。

图4 YOLOv3模型改进前后的P-R曲线

表1是改进前后YOLOv3模型和当前主流的目标检测框架在车辆尾灯检测上的结果对比,包含mAP和单张图片检测速度指标。由表1可知,Faster-RCNN[24]的检测准确率要低很多,检测速度也相对较慢;R-FCN[25]的检测率和检测速度都有一定程度的提高;YOLOv3[26]和本文的YOLOv3检测性能相当;另外,本文还在YOLOv3以后的版本YOLOv4模型上做了对比实验,YOLOv4的mAP相对较高,达到85.18%,但是在单张图片的检测速度上存在不足,低于本文改进的YOLOv3模型。测试集在本文YOLOv3模型上的mAP为79.63%,检测时间为0.014 s;在改进后的YOLOv3模型上的mAP为83.32%,提高了近4个百分点,检测时间为0.01 s。因为K-means++是对K-means初始点敏感的一种改进算法,其选择聚类初始点的原则是每个初始聚类中心的相对位置应尽可能远。另外,车辆尾灯检测属于小目标检测,对于大尺度特征的提取不是必要的。所以本文使用K-means++聚类函数获取anchor以及删除了Darknet53网络大尺度特征提取并着重对小尺度特征提取的改进使得mAP得到提高。改进后的Darknet53只有49层,减少了参数量,优化了模型复杂度,加快了模型的检测速度。本文提出的改进YOLOv3模型的检测准确率和检测速度都要优于前面几种目标检测框架,说明了本文的改进具有一定的科学性和实际应用价值。

表1 与其他检测框架对比结果

3 结束语

本文所研究的问题是车辆尾灯的检测,用到的网络模型是YOLOv3。因为尾灯检测属于小目标检测,所以本文改进了YOLOv3特征提取的结构,加强了对小型尺度特征提取的能力,减少了网络参数量和优化了模型复杂度。针对K-means聚类算法存在着k值难确定以及对初始聚类中心敏感的缺陷,本文提出了用K-means++作为YOLOv3模型中的聚类算法的改进,同时使用IOU作为距离衡量指标。

实验表明,改进后的YOLOv3在检测准确率和检测速度上都要优于改进前,对比其他目标检测框架,本文提出的改进方案的尾灯检测效果最佳,说明了本文的改进具有一定的科学性和实际应用价值。本文改进的YOLOv3模型的检测时间为0.01 s,已经达到车上的嵌入式系统的实时检测需求,但是模型较大,暂不适合放到嵌入式系统中,后续工作考虑使用模型剪枝压缩方法将其移植到嵌入式系统中,以满足实际应用。

猜你喜欢
尾灯特征提取残差
基于双向GRU与残差拟合的车辆跟驰建模
风的渴望
易于尾灯匹配的结构探讨
基于残差学习的自适应无人机目标跟踪算法
侧围外板尾灯处排料困难的解决方案
基于递归残差网络的图像超分辨率重建
基于Daubechies(dbN)的飞行器音频特征提取
Bagging RCSP脑电特征提取算法
重型汽车尾灯支架振动疲劳分析及优化
平稳自相关过程的残差累积和控制图