交通标志蕴含丰富的语义信息,这些信息或提醒或警告或禁令行驶在道路上的司机,保障行人和司机的安全。并且随着自动驾驶技术的快速发展,行驶在道路上的车辆只有快速、准确、高效地识别车道线、交通信号灯、交通标志等关键信息,并综合分析其他来源信息,才能提高自动驾驶的安全性。所以,交通标志检测的研究对于智能驾驶相关技术具有重大意义。
随着算力水平的提高,基于深度学习的目标检测算法已经成为科研人员的主流选择。两阶段目标检测算法和单阶段目标检测算法相继被研究学者提出。Girshick等[1]提出的R-CNN(region convolutional neural networks)被认为是两阶段检测算法的先驱,该算法先提取候选区域,再使用卷积神经网络和SVM分类器进行分类预测。在此基础上,科研人员相继提出Fast R-CNN[2]、Faster R-CNN[3]、Mask R-CNN[4]等更高效的两阶段检测算法,但囿于其特点,两阶段算法很难达到实时检测的要求。另一类目标检测算法为YOLO(you only look once)系列,YOLO算法由Redmon等[5]提出,该算法创新性地将检测视为回归问题,使用预设锚框的方式代替候选区域选取。此后,YOLO9000[6]、YOLOv3[7]、YOLOv4[8]等YOLO的算法以及SSD(single shot multibox detector)[9]算法相继被提出,在精度和速度方面的表现也越来越优秀。
国内外学者针对交通标志的检测探索出不同的研究方案。Sudha等[10]通过使用新的随机梯度动量序列和形状特征提取方法进行检测,然后使用卷积神经网络(CNN)分类器对训练输出标签进行分类,最后在训练与测试阶段将交通标志转换为音频信号,帮助视障人士解决问题。Han等[11]提出一种针对小目标交通标志检测的Faster R-CNN,首先使用小的区域候选网络(region proposal network, RPN)提取建议框,然后将Faster R-CNN与在线硬示例挖掘(online hard example mining, OHEM)算法相结合来提高定位小目标的能力。Wan等[12]使用改进的YOLOv3进行模型剪枝和多尺度预测,在减小模型参数量的同时提高检测速度,但是在实时检测时性能不高。尹靖涵等[13]使用改进YOLOv5对雾霾场景下的交通标志进行识别,运用削减特征金字塔深度、限制最高下采样倍数、调整残差模块的特征传递深度等方法提升检测精度。张毅等[14]在Faster R-CNN算法的基础上进行改进,提出了一种多尺度卷积核的ResNeXt模型,使用多维特征融合的方法,在TT100K数据集上取得了90.83%的平均精度,但是算法的实时性无法保证。李宇琼等[15]基于YOLOv5算法,增加卷积块注意力机制,使用DIoU损失函数提升模型检测性能,改进后模型精度更高,但同时检测速度下降。郭继峰等[16]将深度可分离卷积应用于YOLOv4-tiny的特征提取网络中,使用BiFPN融合多尺度特征,在TT100K数据集上获得87.5%的准确率,但模型参数量依然较大。
综上所述,由于交通标志检测的实时性要求较高,而目前模型无法同时满足检测速度快并且检测精度高的要求,因此,为了在提高模型检测速度的同时不损失检测精度,并降低模型的参数量和计算量,本文提出一种轻量化的YOLOv5算法用于交通标志检测。使用本文构建的GhostBottleneck替换主干网络中的Bottleneck,并融合到主干网络(Backbone)和颈部网络(Neck)中,利用Ghost卷积减少计算量和参数量;为了维持模型检测精度,本文使用双向加权特征金字塔网络(bidirectional feature pyramid network, BiFPN)替换PANet结构,提升网络特征学习能力;将CIoU损失函数替换为SIoU损失函数,优化定位损失,提高算法精度。
YOLOv5是首款使用Pytorch框架编写的YOLO系列算法,适合在生产环境中使用,更容易部署,模型参数更少。目前YOLOv5系列仍在继续优化改进,不断更新迭代新的版本,本文以6.1版本的YOLOv5s为基础进行实验和改进。
该版本的YOLOv5模型可以分为输入端、主干网络、颈部网络及检测端4个部分。数据首先在输入端经过马赛克数据增强,丰富了数据的多样性,提高训练效率。主干网络使用C3模块,即简化版的BottleneckCSP,大幅减少参数量。颈部网络借鉴PANet网络[17],采用FPN+PAN结构,FPN结构通过将深层的语义特征传到浅层,增强多个尺度上的语义信息。PAN结构则相反把浅层的定位信息传导到深层,增强多个尺度上的定位能力。Neck部分还增加了快速空间金字塔池化(spatial pyramid pooling fast, SPPF)模块,SPPF使用3个5×5的最大池化代替SPP的5×5、9×9、13×13最大池化操作,为此达到使用小卷积核大幅提升计算速度的目的。检测端含有3个并行的卷积层,当输入图片大小为640×640×3时,3个卷积层的输出分别为80×80×255,40×40×255,20×20×255。YOLOv5的网络结构如图1所示。
图1 YOLOv5结构
Figure 1 Structure of YOLOv5
Ghost模块是Han等[18]在2020年提出的一种轻量级特征提取模块,使用更少的参数量生成特征图。Ghost模块的基本结构是Ghost卷积,普通卷积与Ghost卷积结构如图2所示。
图2 普通卷积与Ghost卷积
Figure 2 Normal convolution and Ghost convolution
由图2可以看出,Ghost卷积首先对原始图片经过一次小计算量的普通卷积操作,得到本征特征图;然后对本征图中的m个通道的基础特征使用低成本的线性运算,即卷积核大小为d×d的深度卷积,得到m个新的相似特征图;最后将本征特征图和m个相似特征拼接,得到最终的特征图。
普通卷积的计算量可表示为
n×h′×w′×c×k×k。
(1)
式中:n表示特征图个数;h′和w′分别表示输出图片的高度和宽度;c表示输入图片通道数;k表示标准卷积核大小。
Ghost卷积操作的计算量可以表示为
(2)
式中:s表示本征图参与线性变换的数量;d表示深度可分离卷积的卷积核大小。
因为d×d的卷积核与k×k的卷积核大小相似,且s<<c,因此普通卷积与Ghost卷积计算量的比值rs≈s,证明Ghost卷积相比普通卷积更节省计算量。
普通卷积的参数量可以表示为
n×c×k×k。
(3)
Ghost卷积的参数量可以表示为
(4)
同理,普通卷积与Ghost卷积的比值rc≈c,证明Ghost卷积比普通卷积也能在参数量上得到削减。
GhostBottleneck模块就是以Ghost模块为基础构建的一款骨干网络,Han等[18]给出了2种骨干网络,如图3所示。步长为1(图3(a))与步长为2(图3(b))都采用残差结构,且图3(b)在Ghost模块中间多了1个深度卷积,并且残差路径由1个下采样层和1个步长为2的深度卷积实现。
图3 GhostBottleneck模块
Figure 3 GhostBottleneck module
本文中采用步长为2的GhostBottleneck结构替换YOLOv5主干网络中的C3结构的Bottleneck,从而达到进一步降低计算量和参数量的目的,如图4所示,图4中的CBS模块指的是卷积+批量归一化+SiLU激活函数。
图4 本文使用的GhostBottleneck
Figure 4 GhostBottleneck in this article
基于GhostBottleneck构建的C3-Ghost结构如图5所示,用该结构替换YOLOv5网络中除第1个C3外的其他C3模块。
图5 基于C3构建的C3-Ghost模块
Figure 5 C3-Ghost module based on C3
由于使用Ghost卷积降低参数量和计算量的同时也造成了检测精度下降,因此选择将BiFPN引入YOLOv5的Neck网络部分,构建Concat操作替换普通Concat层,通过可学习权重进一步增强网络特征融合能力。
BiFPN[19]是谷歌大脑提出的一种加权双向特征金字塔网络,由于特征金字塔网络(feature pyramid network, FPN)仅通过一条自顶向下的路径传递特征,可能会遇到特征信息丢失的情况,精度不高,结构如图6(a)所示。PANet是在上述网络的基础上增加一条相反的路径,用于传达丢失的位置信息,如图6(b)所示。BiFPN则是在PANet的基础上删除只有一个输入的节点,在不丢失重要信息的前提下简化网络,同时若输入节点和输出节点位于同一层则添加一条额外的边,以融合更多特征,其结构如图6(c)所示。更重要的是,BiFPN提出使用带权重的特征融合机制,给每条路径分配一个可学习的权重,通过对数据特征的学习不断更新权重,从而获取更重要的信息。以中间层P6层为例,其最终输出可以表示为
(5)
图6 FPN、PANet与BiFPN结构
Figure 6 Structures of FPN, PANet and BiFPN
式中:分别为各自层输入的权重;为P6层的输入;为P5层的输出;ε取0.000 1,作用是避免分母为为P6中间层的输出,可由式(6)表示。
(6)
式中:w1、w2为各自可学习权重;为P7层的输入。
YOLOv5的损失函数包含3个部分,分别为定位损失box_loss、置信度损失obj_loss及分类损失cls_loss。定位损失用于计算预测框与真实框的误差;置信度损失用于计算网络的置信度;分类损失用于计算锚框与对应的标定分类是否正确。
针对定位损失,Gevorgyan[20]认为应该进一步考虑预测框与真实框的角度信息,从而提出了新的损失函数SIoU损失函数,该损失函数由预测框与真实框的角度、距离和形状以及传统IoU 4部分损失组成,其中角度损失可以表示为
(7)
式中:σ表示真实框与预测框中心点连线与水平轴的夹角,ch表示真实框中心点与预测框中心点之间的垂直距离,二者计算公式为
(8)
(9)
式中:与表示真实框的坐标;bcx与bcy表示预测框的坐标。
距离损失可以表示为
(10)
式中:和ch为预测框与真实框最小外接矩形框的宽和高;γ=2-Λ。
形状损失可以表示为
(11)
式中:分别表示预测框和真实框的宽高信息;θ负责控制对形状损失的关注程度,一般取[2,6]。
最后一项为传统的交并比损失,因此SIoU损失函数的最终损失可以表示为
(12)
因此,为了提高因Ghost卷积丢失的检测精度,本文选择将用SIoU损失代替CIoU损失,更加关注真实框与预测框之间的角度位置信息,提高锚框精度。
改进后的轻量化YOLOv5模型如图7所示,使用C3-Ghost替换原始YOLOv5中的C3模块,在颈部网络引入BiFPN结构,以及使用SIoU损失函数。
图7 轻量化YOLOv5结构
Figure 7 Structure of lightweight YOLOv5
改进后模型的算法流程如下。
步骤1 图片经过输入层的处理,计算预设锚框与真实锚框的差值并聚类得到新的一组预设锚框。
步骤2 将图片送入新的主干网络,利用加入Ghost卷积的模块和卷积层提取特征。
步骤3 图片经过在颈部网络设计的BiFPN结构增加短接和跳跃连接,加强特征融合能力。
步骤4 图片到达输出层,通过使用SIoU计算真实框与预测框之间的误差,降低定位损失。
目前开源的和针对中国实际道路的交通标志数据集有CCTSDB,以及腾讯和清华大学使用街景图像构建的TT100K[21]数据集等。CCTSDB数据集仅仅将数据分为指示、警告和禁止标志3类,没有详细内容的区分。而TT100K数据集对实地采集且有详细分类,因此选择TT100K数据集作为本次实验的数据集。
TT100K数据集一共包括了上百个交通标志类别,但大多数标志实例个数较少。数据集分布不均衡,有些实例的个数在3 000以上,有些实例数量仅为个位数,并且包含上百个种类,因此需要先对数据集进行筛选,将得到的交通标志实例个数在200个以上的类别进行实验,避免由于数据集的缺陷无法得到最优模型。以下为预处理步骤。
步骤1 读取json标注文件,遍历标注信息,保存实例个数大于等于200的标签。
步骤2 对原始json标注文件中的标注信息按照训练集与验证集为8比2的比例划分为2个json文件。
步骤3 将划分好的json格式标注信息转换成YOLOv5训练需要的TXT格式进行保存。
步骤4 根据划分好的标注文件将原始图片分开存放。
经过上述步骤后得到24个常见交通标志类别,共8 521张图片,其中训练集6 801张,验证集1 720张,具体类别如图8所示。
图8 24个交通标志类别
Figure 8 24 traffic sign categories
准确率P指预测正确的正样本数量占所有预测为正样本数量的百分比;召回率R指预测正确的正样本占所有正样本的比值;平均精确率AP表示PR曲线与坐标轴所围成的图形面积;mAP@0.5表示在IoU阈值为0.5时所有类别AP的平均值;mAP@0.5∶0.95表示不同IoU阈值(从0.5到0.95,步长0.05)上的平均mAP;参数量用来衡量模型大小,参数量和计算量越小说明模型越轻量;帧率表示每秒刷新的图片数,可以用来评估模型在检测时的效率。
本次实验使用的硬件平台GPU为NVIDIA RTX3090,显存24 GB,CPU为Intel(R) Xeon(R) Platinum 8350C@2.60 GHz,内存45 GB。系统环境为Linux,CUDA版本11.1,Pytorch版本1.8.1,Python版本3.8,batch-size设置为16,进行200个epoch迭代。超参设置为系统默认,即初始学习率设置为0.01,使用SGD优化器,初始动量设置为0.937,权重衰减系数设置为0.000 5。
训练过程如图9所示,由图9可以看出,改进后的YOLOv5大概在130个轮次之后达到峰值并趋于稳定,而原始YOLOv5则在160个轮次之后才趋于稳定状态,并且改进后的YOLOv5训练过程更平稳,极少出现大幅度变化过程,说明改进后的YOLOv5具有更良好的性能。
图9 训练过程曲线
Figure 9 Training process curve
经过实验分析,原始YOLOv5模型与改进后的YOLOv5模型在TT100K数据集上的结果对比如表1所示。
表1 改进后的YOLOv5模型与原始YOLOv5模型在TT100K数据集上的结果对比
Table 1 Comparison of results between the improved YOLOv5 model and the original YOLOv5 model on the TT100K dataset
模型P/%R/%mAP@0.5/%mAP@0.5∶0.95/%参数量/106计算量/GFLOPs帧率/(帧·s-1)YOLOv584.878.485.563.97.0716.15175本文模型84.081.285.462.95.0211.40209
由表1可以看出,改进后的YOLOv5模型的P下降了0.8百分点,R提高了2.8百分点,在参数量减少29%、计算量减少29.4%的情况下,mAP@0.5仅减少了0.1百分点,mAP@0.5∶0.95仅减少了1.0百分点,但检测的速率提升了34帧。达到了几乎不损失精确率的前提下,简化YOLOv5网络的目的。
其中每个类别的AP值如表2所示,由表2可以看出,有50%的标签在改进后网络中的平均精确率高于原始网络,说明尽管参数量和计算量有所下降,但是由于BiFPN结构和SIoU损失的加入,也使得某些特征的学习能力得到加强。
表2 每个类别AP值
Table 2 AP value of each category %
类别YOLOv5本文模型类别YOLOv5本文模型i285.286.8pl10093.488.6i493.191.8pl12091.483.3i595.096.4pl3078.480.5il6098.097.8pl4079.678.1il8090.790.5pl586.386.4io82.384.8pl5073.280.3ip81.985.4pl6076.067.5p1077.276.7pl8082.584.3pll77.981.4pn92.393.4p2387.083.6pne95.597.0p2689.287.7po77.375.5p595.794.2w5772.378.9
为了进一步研究各个模块对网络的影响,本文设置了消融实验证明改进后网络的各模块带来的影响,具体数据如表3所示。
表3 消融实验
Table 3 Ablation experiment
模型mAP@0.5/%参数量/106计算量/GFLOPsYOLOv585.57.0716.15YOLOv5+Ghost83.25.0311.30YOLOv5+BiFPN86.17.1416.20YOLOv5+SIoU85.77.0716.15YOLOv5+Ghost+BiFPN+SIoU85.45.0211.40
由表3可以看出,单独增加Ghost模块后,整体参数量和计算量都会大幅减少,但同时也会导致mAP@0.5降低2.3百分点;单独增加BiFPN结构会在稍微提高参数量和计算量的同时提高0.6百分点的mAP@0.5;单独增加SIoU损失函数则不会对参数量和计算量有所影响,却能带来0.2百分点的mAP@0.5提升。当3种改进同时添加到YOLOv5模型之后,在参数量降低29.0%、计算量降低29.4%的同时仅仅牺牲0.1百分点mAP@0.5。所以该改进方法是可行的。
本文使用SSD模型、Faster R-CNN模型、YOLOv3-tiny模型、YOLOv4模型以及本文提出的模型进行对比,实验结果如表4所示。
表4 5种算法性能对比
Table 4 Performance of five algorithms
模型mAP@0.5/%帧率/(帧·s-1)权重大小/MBSSD79.128.4159.0Faster R-CNN92.914.2100.2YOLOv3-tiny83.4120.833.8YOLOv487.820.7246.0本文模型85.5209.010.0
由表4可知,相比其他几项传统的目标检测算法,本文提出的轻量化模型在保持较高的检测精度的基础上,检测速度最快、权重最小。
为了验证轻量化模型在推理过程中的优势,本文设计了推理过程实验,考虑到现实使用时很少拥有高性能GPU资源,因此推理过程使用中等偏下配置的平台。推理所使用的GPU为GeForce 1660super,CPU为Intel I5-10400,软件环境与训练一致。使用原始YOLOv5与轻量化模型进行对比,以模型大小和推理时间作为评价指标,实验结果如表5所示。
表5 推理实验
Table 5 Interface experiments ms
模型GPU推理用时CPU推理用时YOLOv526.3167.6本文模型18.6110.5
由表5可知,在推理实验中,本文提出的轻量化模型在使用GPU推理时间相比原始模型减少了7.7 ms,使用CPU推理时间减少了57.1 ms。实验证明改进后的轻量化模型在GPU和CPU上的推理时间均有所降低。
图10为使用改进前后模型检测不同图片的结果。图10(a)、10(b)是有多个目标的图片检测结果对比,可以看出除了“限低速60”的检测精度下降之外,其标志的检测结果均有不同幅度的提升;而“限低速100”两次都没被检测出来是因为本次训练集中未包含该标签。图10(c)、10(d)则是只包含单个检测目标的图片检测结果对比,图10(c)发现有误检结果,将远处一个医院的红十字错误检测成“限速50”的标志,经改进后的网络检测结果如图10(d)所示,并没有误检现象出现,且“禁止掉头”的检测精度有略微提升。
图10 改进前后检测结果
Figure 10 Results before and after improvement
改进后的YOLOv5在参数量降低29.0%、计算量降低29.4%的情况下,mAP@0.5仅下降了0.1百分点,同时检测帧率提升了34帧/s,取得较好的效果。
(1)使用参数量大幅减少的Ghost卷积和深度可分离卷积构建GhostBottleneck,替换主干网络和颈部中的部分Bottleneck,简化网络参数和计算量。
(2)使用BiFPN替换原始的PANet结构,增强特征融合能力,提高检测准确率。
(3)将原始CIoU损失替换成更关注预测框与真实框角度位置的SIoU损失,优化损失函数,提升检测精度。
下一步将考虑在进一步降低参数量和计算量的基础上提高检测精度,加入注意力机制等改进方案,使模型能够部署到移动设备进行实际运用。
[1] GIRSHICK R, DONAHUE J, DARRELL T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]∥2014 IEEE Conference on Computer Vision and Pattern Recognition. Piscataway: IEEE, 2014: 580-587.
[2] GIRSHICK R. Fast R-CNN[C]∥2015 IEEE International Conference on Computer Vision (ICCV). Piscataway: IEEE, 2016: 1440-1448.
[3] REN S Q, HE K M, GIRSHICK R, et al. Faster R-CNN: towards real-time object detection with region proposal networks[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149.
[4] HE K M, GKIOXARI G, DOLLR P, et al. Mask R-CNN[C]∥2017 IEEE International Conference on Computer Vision (ICCV). Piscataway: IEEE, 2017: 2980-2988.
[5] REDMON J, DIVVALA S, GIRSHICK R, et al. You only look once: unified, real-time object detection[C]∥2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Piscataway:IEEE, 2016: 779-788.
[6] REDMON J, FARHADI A. YOLO9000: better, faster, stronger[C]∥2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Piscataway:IEEE, 2017: 6517-6525.
[7] REDMON J, FARHADI A. YOLOV3: An incremental improvement[C]∥Proceedings of 2018 IEEE Conference on Computer Vision and Pattern Recognition. Pisca-taway: IEEE, 2018: 1-6.
[8] BOCHKOVSKIY A, WANG C Y, LIAO H Y M. YOLOv4: optimal speed and accuracy of object detection[EB/OL]. (2020-04-23)[2023-12-18]. https:∥arxiv.org/abs/2004.10934.
[9] LIU W, ANGUELOV D, ERHAN D, et al. SSD: single shot multibox detector[C]∥European Conference on Computer Vision. Cham: Springer, 2016: 21-37.
[10] SUDHA M, GALDIS PUSHPARATHI D V P. Traffic sign detection and recognition using RGSM and a novel feature extraction method[J]. Peer-to-Peer Networking and Applications, 2021, 14(4): 2026-2037.
[11] HAN C, GAO G Y, ZHANG Y. Real-time small traffic sign detection with revised faster-RCNN[J]. Multimedia Tools and Applications, 2019, 78(10): 13263-13278.
[12] WAN J X, DING W, ZHU H L, et al. An efficient small traffic sign detection method based on YOLOv3[J]. Journal of Signal Processing Systems, 2021, 93(8): 899-911.
[13] 尹靖涵, 瞿绍军, 姚泽楷, 等. 基于YOLOv5的雾霾天气下交通标志识别模型[J]. 计算机应用, 2022, 42(9): 2876-2884.
YIN J H, QU S J, YAO Z K, et al. Traffic sign recognition model in haze weather based on YOLOv5[J]. Journal of Computer Applications, 2022, 42(9): 2876-2884.
[14] 张毅,龚致远,韦文闻.基于改进Faster R-CNN模型的交通标志检测[J]. 激光与光电子学进展, 2020, 57(18): 173-181.
ZHANG Y, GONG Z Y, WEI W W. Traffic sign detection based on improved faster R-CNN model[J]. Laser &Optoelectronics Progress, 2020, 57(18): 173-181.
[15] 李宇琼, 周永军, 蒋淑霞, 等. 基于注意力机制的交通标志识别[J]. 电子测量技术, 2022, 45(8): 116-120.
LI Y Q, ZHOU Y J, JIANG S X, et al. Traffic sign recognition based on attention mechanism[J]. Electronic Measurement Technology, 2022, 45(8): 116-120.
[16] 郭继峰, 孙文博, 庞志奇, 等. 一种改进YOLOv4的交通标志识别算法[J]. 小型微型计算机系统, 2022, 43(7): 1471-1476.
GUO J F, SUN W B, PANG Z Q, et al. Improved traffic sign recognition algorithm for YOLOv4[J]. Journal of Chinese Computer Systems, 2022, 43(7): 1471-1476.
[17] LIU S, QI L, QIN H F, et al. Path aggregation network for instance segmentation[C]∥2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Piscataway: IEEE, 2018: 8759-8768.
[18] HAN K, WANG Y H, TIAN Q, et al. GhostNet: more features from cheap operations[C]∥2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). Piscataway:IEEE, 2020: 1577-1586.
[19] TAN M X, PANG R M, LE Q V. EfficientDet: scalable and efficient object detection[C]∥2020 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). Piscataway:IEEE, 2020: 10778-10787.
[20] GEVORGYAN Z. SIoU loss: more powerful learning for bounding box regression[EB/OL]. (2022-05-25)[2023-02-18].https:∥arxiv.org/abs/2205.12740.
[21] ZHU Z, LIANG D, ZHANG S H, et al. Traffic-sign detection and classification in the wild[C]∥2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Piscataway:IEEE, 2016: 2110-2118.