改进YOLOV3实时交通标志检测算法

2022-04-21 05:22雷印杰陈浩楠
计算机工程与应用 2022年8期
关键词:损失卷积精度

王 浩,雷印杰,陈浩楠

四川大学 电子信息学院,成都 610065

随着科技发展,自动驾驶乃至无人驾驶正逐渐成为现实,交通标志的检测与识别在行车安全中扮演着重要角色。但在真实自然场景下,交通标志检测精度受光照、自然环境、遮挡等因素等影响[1],并且考虑到实际场景对于检测速度的要求,设计的算法需要兼顾高精度、实时、对于环境变化鲁棒性强的特点。

目前基于卷积神经网络的各类目标检测算法在准确性和模型泛化性上都远超传统图像处理方法。主流的检测算法可以分为以Faster R-CNN[2]为代表的双阶段检测算法,和以YOLOV3(you only look once)[3]为代表的单阶段检测算法。前者先筛选出包含目标的ROI(region of interest),再送入分类器进行分类和回归;而单阶段目标检测算法则省略生成ROI的步骤,直接利用CNN提取特征,完成目标的分类和位置定位。

张建明团队[4]提出了融合注意力机制的Cascaded R-CNN算法,在CCTSDB数据集上准确率超过99%,但检测速度仅为7.6 frame/s;而YOLOV3算法因其检测速度快的特点,在交通标志检测任务中有着广泛应用。江金洪等[5]在YOLOV3结构中引入深度可分离卷积,减少模型参数量,同时引入GIoU(generalized intersection over union)[6]和focal loss代替原始MSE损失,虽然精度相较YOLOV3提升8%,但检测速度仅为12 frame/s;陈立潮等[7]引入密集卷积连接,虽然提高了YOLOV3的精度,但检测时间相对较长;白士磊等[8]为了能在嵌入式平台上部署YOLOV3模型,通过剪枝算法压缩模型权重,减少了模型占用内存空间,但精度下降了4.3%;鲍敬源等[9]引入FireModule以及short-cut对模型进行压缩优化,虽然提高了检测速度,但精度有较大损伤;李旭东等[10]采用YOLOV3-tiny作为基础网络,提出了一种三尺度嵌套残差结构,相较原始结构保留了更丰富的空间信息,提高精度的同时,检测速度高达200 frame/s。

针对道路交通标志检测任务,YOLOV3及各种改进算法一般都无法同时兼顾精度与速度,为此本文提出一种兼具高检测精度和速度的改进YOLOV3算法EYOLO(enhanced YOLOV3)。主要工作如下:

(1)采用跨阶段局部网络(cross stage partial network,CSPNet)[11]来代替YOLOV3中Darknet-53[3],通过将梯度的变化从头到尾集成到特征图中,在减少了模型计算量的同时可以保证网络的学习能力,CSPNet是一种处理的思想,可以和ResNet[12]、ResNeXt[13]结合,考虑到减少参数量,本文将CSPNet和ResNeXt结合,作为主干网络。

(2)为了提高目标框的定位能力,采用路径聚合网络(path aggregation network,PAN)[14]来预测回归目标框,通过增加自下而上的信息流通路径,来提供坐标回归所需要的细节信息,提高了目标框坐标的回归精度。

(3)引入完备交并比(complete intersection over union,CIoU)[15]损失函数,通过最小化预测框与目标框间的中心距离以及加入与宽高比相关的惩罚项,使得模型可以快速收敛,并且提高回归精度。

1 EYOLO网络结构

1.1 YOLOV3算法

YOLOV3是Redmon等[3]在YOLOV2[16]提出的Darknet-19基础上借鉴ResNet的思想,加入残差模块,并进一步加深网络,构建了Darknet-53,同时参考FPN(feature pyramid network)[17],从不同尺度提取特征。相比YOLOV2,YOLOV3提取3种不同尺度的特征图,通过将顶层特征上采样到与低层特征图相同大小,然后拼接,再进一步在各个尺度特征图上分别独立预测。多尺度特征融合有效提升了对于小目标的检测效果。实际推理时则通过非极大值抑制(non maximum suppression,NMS)过滤掉不同尺度上多余的输出框,留下最终得预测框。YOLOV3结构示意图如图1。

图1 YOLOV3结构示意图Fig.1 YOLOV3 structure diagram

1.2 CSPNet

残差模块虽然缓解了网络过深带来的梯度消失问题[12],提升了网络学习能力,但随着网络层次加深,常规卷积带来的庞大计算量和参数量则对模型的实际部署提出严峻考验。采用深度可分离卷积虽然可以减少模型参数量和计算量,但性能也随之下降。

受DenseNet启发,CSPNet[11]设计了一种新型网络结构,如图2(a),在减少计算量和冗余梯度信息的同时,实现更丰富的梯度组合,保证网络的学习能力。本文选择ResNeXt与CSPNet结合,构建了新的特征提取模块BottleXNeck,如图2(c)。在BottleXNeck中,输入为来自上一层输出特征图,被分别送入左右两个分支,左侧分支为简单的1×1卷积操作,输出通道数减半;右侧分支包含了ResNeXtBlock,其采用了分组卷积,大大减少计算量,并且为了保证最终输出通道数不变,添加1×1卷积层,降低左侧分支输出的通道数为输入通道数一半。最后将左右跨阶段分层的特征拼接在一起,通过这种方式使得梯度流在不同的网络路径中传播,在缓解梯度消失的同时,拼接的操作也使得传播的梯度信息可以有很大的相关性差异[11],避免了类似DenseNet中过多的重复梯度信息。

以输入特征图大小Ci×H×W,输出特征图相同尺寸为例,在不考虑偏置的情况下,BottleXNeck的计算量为,其中g为分组数;若将BottleXNeck替换成图2(b)ResBlock,计算量为算量压缩系数本文取g=32,则,计算量减少了约38.46%。

图2 三种特征提取模块Fig.2 Three feature extraction module

1.3 PAN

为提高算法对小目标检测的精度,YOLOV3中采用了FPN结构来实现多尺度特征融合,如图3中蓝色虚线框中内容,FPN自顶向下,将高层的语义特征传递下来,对整个特征金字塔进行增强,但单一自顶向下路径只能增强语义信息,而缺少对于定位有效的信息。低层级的特征可以帮助目标定位,但如图3中绿色虚线所示,低层级特征和高层级特征之间有很长的传播路径,增加了准确访问定位信息的难度。基于上述问题,PAN[14]在FPN之外,增加了自下而上的特征金字塔,如图3中红色虚线所示,新增加的结构缩短了高层级特征和低层级特征间的信息路径,来自低层级的准确定位信息可以沿此路径增强整个特征金字塔。

图3 EYOLO网络结构图Fig.3 EYOLO network structure

1.4 EYOLO网络结构

EYOLO整个网络结构如图3所示。受YOLOV3中Darknet-53结构启发,并考虑到模型大小,减少了原结构中特征提取模块的重复次数,为了弥补网络学习能力,以1.2节中的BottleXNeck作为特征提取模块,替代ResBlock,同时引入1.3节的PAN来提高模型对于低层级特征的准确访问,改善模型对于目标的定位能力。图中各个模块含义如下:BottleXNeck(Co,n),Co代表模块最终输出的通道数,n代表模块重复的次数;Conv(Ci,Co,k,s),Ci代表输入通道数,Co代表输出通道数,k代表卷积核尺寸,s代表卷积核滑动间隔;SPP(Ci,[k1,k2,k3]),代表空间金字塔池化(spatial pyramid pooling,SPP)[18],Ci为输入通道,[k1,k2,k3]代表三种尺寸的最大池化层,结构示意图如图4;Upsample代表最近邻插值。

图4 SPP Fig.4 SPP

2 EYOLO损失函数

YOLOV3在训练过程中,针对目标框坐标回归采用了均方误差(mean square error,MSE)损失函数,而类别和置信度则采用了交叉熵损失函数,具体形式分别如下:

整个网络的损失函数为:

其中,λcoord、λ(no)obj、λclass分别代表坐标损失、(不)含object的置信度损失以及类别损失占总loss的权重;表示第i个网格的第j个anchor是否负责该目标(1或0);(x i,yi,w i,hi,ci,pi)分别代表真实目标框的中心坐标和宽高、置信度、类别;(x^i,y^i,w^i,h^i,c^i,p^i)则依次代表预测目标框的中心坐标、宽高、置信度、类别。

然而对于目标框坐标回归采用的MSE损失函数(即L2损失),其并不能准确反映预测框和目标框之间的IoU,如图5(a)、(b)、(c)所示,三种情况下具有相同的L2损失,但IoU却不同,且L2损失对于尺度敏感,不具有尺度不变性[15]。

IoU是目标检测中最常用的指标,通过将目标的形状属性(如宽度、高度、位置)编码成归一化度量来衡量预测框与目标框之间的相似度,因此其具有尺度不变性。其计算过程如式(5),其中B与Bgt分别是预测框与目标框的面积。

但若以lbox=1-IoU作为损失函数,会有以下缺点:

(1)若预测框与目标框之间没有相交,则IoU为0,lbox=1,不能反映两者之间的差异。

(2)IoU无法精确地反映二者的重合程度,如图5(b)、(d)所示,两者IoU相同,但可以看出d的重合程度更高。

图5 IoU对比Fig.5 IoU comparison

针对上述问题,GIoU[6]提出新的度量标准,如式(6)所示,其中M是目标框与预测框的最小闭包区域面积。式(6)不仅关注两者的重叠区域,也关注了两者非重叠区域,其避免了目标框和预测框没有交集时IoU=0导致梯度无法更新的缺点。

但由图5(b)、(d)可以看出当预测框在目标框内部时,GIoU便退化成IoU,且GIoU严重依赖IoU项,在训练前期会倾向先增加预测框的尺寸,以使得两者出现交集,因此需要迭代更久才能收敛[15]。

图6 CIoU Fig.6 CIoU

CIoU考虑了目标框坐标回归中的三个重要因素:重叠面积、中心点距离、宽高比,作为度量标准,与GIoU类似,均满足非负性、对称性和三角不等性[10];且对尺度不敏感,具有尺度不变性;由式(7)可以所知,当目标框和预测框重叠时,CIoU=1,lbox=0;而两者无交集且无限远时,由于αυ∈[0,1],故CIoU∈[-2,-1],lbox∈[2,3]。

3 实验与分析

3.1 实验配置

本文实验是在Ubuntu16.04系统下进行,采用PyTorch 1.6深度学习框架,硬件配置为NVIDIA GeForce GTX 1080 Ti,12 GB显存,Intel Xeon®CPU E5-1650 v4@3.60 GHz×12,62 GB RAM。训练过程中参数设置如下:输入大小512×512;采用SDG优化器,初始学习速0.01,动量大小0.937,权重衰减系数0.000 5,学习率采用余弦降火衰减策略,训练110个epoch,批量大小72。

3.2 实验数据集

本文在德国交通标志检测数据集(German traffic sign detection benchmark,GTSDB)[19]上进行了消融实验,验证前文所述方法的提升效果,同时在规模更大的长沙理工大学中国交通标志检测数据集(CSUST Chinese traffic sign detection benchmark,CCTSDB)[4]上进行训练和测试,验证了EYOLO算法整体结构的优势。

GTSDB包含900张高分辨率图片,分辨率1 360×800,其中600张用作训练,其余300张作为测试,如图7(a)所示,包含危险、禁止、指示三种类型标志。考虑到数据量过少,本文在训练时通过对单一图片添加噪声、模糊、亮度变化、仿射变换等11种增强技巧,最终得到训练集7 200张。另外考虑到图片中的标志大小仅为16~120像素,属于小目标,且图片中数量较少(0~2个),为此在训练时将4张随机抽取的图片组合在一起,如图7(c),并对相应的标签进行处理,不仅可以提高图片中小目标的数量,还可以丰富检测物体的背景,增强网络对于小目标的检测能力。

CCTSDB分为训练集15 724张图片,测试集400张图片,如图7(b)所示,包含警告、禁止、指示三种类型标志。

图7 交通标志Fig.7 Traffic sign

3.3 评价指标

本文使用多个标准来评估不同算法的性能,包括召回率(recall,R)、准确率(precision,P)、F1值、平均精度均值(mean average precision,mAP),以及检测速率帧每秒(frame per second,FPS)。mAP是计算所有类别的平均精度(average presison,AP)的均值得到,计算过程如式(8),其中TP为预测正确的正样本数量,FN为预测错误正样本的数量,FP为将负样本预测为正样本的数量,p(rc)表示在c类召回率为r c时的准确率。

3.4 实验结果与分析

3.4.1消融实验

为了验证前述方法的有效性,本文在GTSDB数据集上进行消融实验,构建baseline网络(通过替换EYOLO中的BottleXNeck为ResBlock以及移除PAN中自下而上的金字塔结构得到),组合使用前述的CSPNet、PAN、CIoU,来验证不同模块对于网络性能的提升。测试集结果如表1所示。

表1 GTSDB数据集上消融实验结果Table 1 Results of ablation study on GTSDB

表1列出了precision、recall、F1和mAP(IoU阈值取0.5)四种指标。对比baseline和模型A、B、C可知,CSPNet、PAN、CIoU对于模型的性能均有所提升,在mAP上分别提高了1.77%、1.22%、2.99%。而集合三种模块的EYOLO则在precision、recall、F1、mAP上均取得最优结果,与baseline相比,分别提升了5.36%、4.97%、5.16%、5.21%。

根据消融实验结果可知,CSPNet、PAN、CIoU损失对于网络的性能提升是有效的。

3.4.2与其他目标检测算法对比

本文选取Cascaded R-CNN、YOLV3、改进YOLOV3-tiny[10]三种目标检测算法与EYOLO算法进行对比,对比实验在CCTSDB数据集上进行,选择precision、recall、F1、mAP、FPS五项指标对各算法进行评价,实验结果如表2所示(除YOLOV3,其余结果均来自原论文)。在precision上,2阶段目标检测算法Cascaded R-CNN排在首位,但速度太慢;改进的YOLOV3-tiny在recall、FPS取得最优,但precision仅为88.6%;虽然在recall和precision上,EYOLO未取得最佳,但在F1和mAP上取得最优,说明了EYOLO算法对于目标识别准确率和位置定位准确性的兼顾;EYOLO检测精度为95.2%mAP,检测速度达到113.6 frame/s,满足实时性对于检测速度的要求,相比YOLOV3,mAP提高了2.37%,速度提高1.42倍。同时在Intel®CoreTMi5-4210H CPU资源受限型平台上EYOLO检测速度依旧可以达到6.1 frame/s而YOLOV3仅为1.7 frame/s。

4 结论

为解决交通标志检测中存在的精度低和速度慢问题,本文针对YOLOV3提出了改进算法EYOLO。选取CSPNet来构建新的特征提取模块BottleXNeck,减少计算量的同时,提高推理速度;引入PAN,增加自下而上的信息传播路径,提高对于低层级特征的准确访问。采用CIoU损失函数,更符合目标框的回归机制,提高了目标定位精度。在GTSDB上的消融实验上可以看出三种模块对于baseline性能的提升的有效性;与其他检测算法在CCTSDB上的对比实验中,组合三种模块的EYOLO算法在F1、mAP指标上取得最佳,反映了其在precision和recall上取得很好的平衡;EOYOLO的mAP为95.2%,检测速度达到113.6 frame/s,与YOLOV3算法相比,分别提升2.37%和142%。

猜你喜欢
损失卷积精度
热连轧机组粗轧机精度控制
基于3D-Winograd的快速卷积算法设计及FPGA实现
胖胖损失了多少元
卷积神经网络的分析与设计
超高精度计时器——原子钟
从滤波器理解卷积
分析误差提精度
玉米抽穗前倒伏怎么办?怎么减少损失?
基于DSPIC33F微处理器的采集精度的提高
基于傅里叶域卷积表示的目标跟踪算法