刘宇宸,石 刚,崔 青,刘明辉,郑秋萍
(新疆大学信息科学与工程学院,新疆 乌鲁木齐 830046)
随着现代科技的飞速发展,无人驾驶技术已经成为现实,其中交通标志检测是无人驾驶和辅助驾驶的重要组成部分.然而交通标志识别容易受到天气变化、遮挡、光照强度变化等影响,这给无人驾驶的应用带来了很大的安全风险[1].因此,需要设计一种实时性强、精度高的方法来解决上述问题.
自2012年文献[2]在Imagenet大规模视觉识别挑战赛取得巨大的成功后,越来越多的深度学习模型被提出并应用于交通标志牌的识别.目前交通标志牌识别的主流算法主要以Faster R-CNN(Faster Region-CNN)[3]和YOLO(You Only Look Once)[4]两大类为主,其中Faster R-CNN为双阶段模型,其检测精度高,但是检测速率略慢,YOLO为单阶段模型,其检测速率快,但是精度有所下降.
为了提高交通标志牌的检测精度,文献[5]首先提出改进的YOLOv2算法,但是其检测准确度与精度都很低,随后提出了多尺度融合的Cascaded R-CNN 算法,检测准确度虽然有所上升,但其存在检测速率慢的问题.为了更好契合实时性的特点,李旭东等[6]基于YOLOv3-Tiny提出了基于三尺度嵌套残差结构的交通标志快速检测算法,在CCTSDB上其检测速度高达200 f/s,但是精度却有所下降.陈昌川等[7]基于YOLOv3融合残差网络、下采样并且舍弃通用池化层而改用卷积层等操作,提出了T-YOLO算法,在CCTSDB上检测精度高达97.3%,但检测速率每秒传输帧数(FPS)只有19.3,最新的算法YOLOv5s虽然检测速度很快,但是检测准确度与检测精度却很低.
综上所述,为了减少算法的计算量,提高对目标的定位精度,本文提出了一种改进的MobileNetv3-YOLOv3算法,该算法与最新的算法比较,本文所提出的算法准确度和平均精度最好.
YOLOv3算法是对YOLOv2算法的改进,其借鉴残差网络(ResNet)[8]的思想,并增加了快捷链路(shortcut connections)、融合特征金字塔网络(Feature Pyramid Network,FPN)[9],相比较之前的算法,YOLOv3在小目标的检测上有了显著的提升.
YOlOv3是端到端的网络结构,以DarkNet-53为基础网络结构,由53层卷积而组成,从不同尺度来提取对应的特征,可以减少计算量并且降低低级特征在池化层中的丢失.YOLOv3算法处理流程如图1所示.
图1 YOLOv3算法处理流程
聚焦(Focus)模块的概念,最先应用于YOLOv5,聚焦(Focus)模块的作用是在图片进入骨干网络(backbone)前,对图片进行切片操作,将图片的每一个像素值进行下采样处理,经过一系列卷积操作后就可以得到没有信息丢失的特征图,可以有效地减少计算量加快处理速度.聚焦(Focus)模块处理流程如图2所示.
图2 聚焦(Focus)模块处理流程
空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet)[10]模块可以将任意分辨率的feature map转换为与全连接层相同维度相匹配的特征向量,使得特征向量不再是单一尺度,其有效避免图像因为缩放、剪裁等一系列操作而导致图像失真的问题,SPPNet试图通过增强图像处理,将图像像素映射到特征图的感受野中心,增强感受野,提高处理结果的准确性.
图片左上角映射公式为
x′=[x/S]+1.
(1)
图片右下角映射公式为
x′=[x/S]-1.
(2)
SSPNet也解决了神经网络中特征重复提取的问题,可以提高候选框的速度,从而大大降低了成本.SSPNet模块处理流程如图3所示.
图3 SSPNet模块处理流程
跨阶段局部网络(Cross Stage Partial Network,CSPNet)[11]结构在YOLO算法中最先应用于YOLOv4,CSPNet提出CSPNet是因为作者认为网络优化中梯度重复导致算法推理速度慢,CSPNet起到的作用是将梯度变化全部集成到要处里的特征图中,CSPNet常常用于与ResNet[12]模块结合,这样可以大大减少计算量,保证实验结果的准确性.
2.1.1 MobileNet模型
MobileNet系列因其检测快速、精准度高而被广泛应用于目标检测,它已经成为轻量级网络的代表.MobileNet使用的是深度可分离卷积,它相较于经典的CNN模型,其主要是将部分的全连接层来进行替换,以达到降低计算量的效果.深度可分离卷积和标准卷积结构如图4所示.
深度可分离卷积的计算成本为
DK×DK×M×DF×DF.
(3)
逐点卷积的计算成本为
M×N×DF×DF.
(4)
深度可分离卷积与逐点卷积的计算成本为
(5)
图4 深度可分离卷积和标准卷积结构
2.1.2 MobileNetv3-YOLOv3模型
MobileNetv3-YOLOv3是将YOLOv3的骨干网络DarkNet替换为MobileNetv3,利用了MobileNetv3的特性,保证模型为轻量型,其中MobileNetv3对多通道的3×3深度可分离卷积的卷积核进行操作,然后经过1×1的点卷积操作来完成特征图的融合,这样可以缩小模型的大小.MobileNetv1和MobileNetv2都具有32个滤波器的常规3×3卷积层,然而实验表明,这是一个相对耗时的层,只要16个滤波器就足够完成对224×224特征图的滤波.虽然这样并没有节省很多参数,但确实降低了计算量,利用YOLOv3处理数据快的特性,可以加快模型的训练速度,以达到实时处理数据的目的,MobileNetv3-YOLOv3算法流程如图5所示.
图5 MobileNetv3-YOLOv3算法流程
2.1.3 MobileNetv3-YOLOv3模型的局限性
MobileNetv3-YOLOv3在YOLOv3的基础上降低了计算量,但是仍然存在着一些缺点.实验表明[9],深度可分离卷积在3×3的规模的时候,其计算量比标准卷积少了很多,使得模型的体积缩小,降低了计算量和成本,但其在大规模的特征处理中,仍然存在着特征提取不足的问题,在输入一帧的情况下,多尺度特征图在YOLOv3下定义为:
Fn=tn(Fn-1)=tn(tn-1(…t1(I)));
(6)
D=fn(dn(Fn),…,dn-k(Fn-k)),n>k>0.
(7)
其中:Fn表示第n层特征图,t1(I)表示输入图像的第一层与特征图之间的非线性关系,在经过一系列卷积操作后就会得到相对应n值的非线性函数的检测结果.从以上的公式不难看出,输入的n值不同,特征图对应特征层的检测结果也会发生改变,为了保证检测结果的准确度,需要保证特征图中每一层特征层包含的信息足够多,MobileNetv3-YOLOv3虽然采用了深层卷积网络,但是在特征提取的过程中,容易忽视浅层的一些特征信息,从而导致获取到的小目标信息过少,最终检测结果也会以显示大目标为主要部分.从这点不难看出,MobileNetv3-YOLOv3对于小目标的检测并不精准,而本文所要检测的物体是交通标志牌,其属于小目标检测的范畴.
MobileNetv3-YOLOv3虽然缩短了计算量,但也存在一些缺陷,对于小目标的检测精度不高,由于分辨率低,小目标物体占用的像素低、携带的信息少、容易导致特征丢失,这是因为在进入MobileNetv3骨干网络之前没有对图像进行预处理可能导致图像特征的丢失,以及在处理过程中可能存在图像失真的问题,所以本文为了解决这些问题引用了聚焦(Focus)模块来进行图片的预处理,用来防止图像特征的丢失,以及引用空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet)防止图像失真,引入这两个模块会增强了小目标检测,但是也增加了计算量,所以最后引入跨阶段局部网络(Cross Stage Partial Network,CSPNet)消除在计算过程中产生的重复特征以及消除计算瓶颈,可以保证模型的准确率以及训练速度,同时也能缩小模型的体积,本文算法CCTSDB数据集中与YOLOv3的比较,模型体积缩小了26%,其中YOLOv3训练好的模型体积为123.3 MB,本文算法训练好的模型体积为89.9 MB,改进的MobileNetv3-YOLOv3骨干网络的结构如表1所示.
表1 改进MobileNetv3-YOLOv3骨干网络结构
改进的MobileNetv3-YOLOv3算法流程如图6所示,该网络可接受任意RGB色彩的图像格式的输入,然后经过聚焦(Focus)模块的处理,对图片进行切片操作,将图片的每一个像素值进行下采样处理,经过一系列卷积操作后得到没有信息丢失的特征图,然后将其经过深度可分离卷积的操作后,传入空间金字池化网络(Spatial Pyramid Pooling Network,SPPNet),可以使得特征图转换为与全连接层相同维度相匹配的特征向量,可以加强网络层,更进一步确定特征图信息的准确率,最后进入跨阶段局部网络(Cross Stage Partial Network,CSPNet)消除在计算过程中产生的重复特征以及消除计算瓶颈,达到模型的最优化.
图6 改进的MobileNetv3-YOLOv3算法流程
改进的MobileNetv3-YOLOv3采用CIoU为损失函数.IoU表示交并比,是目标检测的常用指标,用预测检测框与真实检测框进行比较,比较值越趋于1说明效果越好,越接近真实值,IoU计算公式为
(8)
IoU作为损失函数也会出现一些问题,如目标检测框与正式检测框没有相交,那么IoU的值为0,不能反应两者的重合度,同时loss的值也为0,没有进行梯度回传的问题,那么模型将无法进行训练.GIoU的提出就是为了解决框值不重叠而导致无法进行梯度回传的问题,GIoU的公式为
LGIoU=1-IoU(A,B)+|C-A∪B|/|C|.
(9)
其中:A表示预测框,B表示真实框,C是A和B的最小包围框,但是GIoU存在着收敛速度慢的问题,因此,DIoU被提出,并且DIoU在IoU损失中增加了一个惩罚项,用来最小化两个检测框之间的距离,DIoU的公式为
LDIoU=1-IoU(A,B)+p2(Actr,Bctr)/c2.
(10)
其中:A表示预测框,B表示真实框,Actr表示预测检测框中心的点坐标,Bctr表示真实检测框中心的点坐标,p(·)表示欧式距离的计算公式.CIoU是DIoU的加强版,在DIoU的基础上将长宽比引入进来.CIoU的损失值不在单一化,而是包含中心点的距离、长宽比以及重叠面积,其公式为:
LCIoU=1-IoU(A,B)+
p2(Actr,Bctr)/c2+αυ;
(11)
(12)
(13)
其中:A表示预测框,B表示真实框,Actr表示预测检测框中心的点坐标,Bctr表示真实检测框中心的点坐标,wgt和hgt表示真实检测框的宽和高,w和h表示预测检测框的宽和高.
本文所采用的数据集来自文献[13](CSUST Chinese Traffic Sign Detection Benchmark,CCTSDB),是在2018年由文献[5]制作完成,总共包含3大类:禁止、警告、指示,如图7所示.为了保证结果的准确率,需要庞大的数据量的支持,该数据集有16 123张图片,其中15 000张图片作为训练集,400张图片作为测试集.
(a)禁止标志(红色) (b)警告标志(黄色) (c)指示标志(蓝色)
实验是在Ubuntu18.04.4LTS系统下进行的,采用的是pytorch1.8.1深度学习框架,CUDA10.0,硬件配置为NVIDIA RTX 2080Ti显卡,12 GB显存.训练时的参数配置:输入为640×640像素比例的图像,lr0为0.01,lrf为0.2,momentum为0.937,weight_decay为0.000 5,训练批次为110,批量大小为12.
实验使用多个指标来对算法进行评估,包括精确度(P),召回率(R),平均精度值(mAP)以及FPS,它们的计算过程如公式(14)—(17)所示,其中TP表示预测正确的正样本的数量,FN表示预测失败的正样本的数量,p(rc)表示在召回率为rc的情况下的p值.
(14)
(15)
(16)
(17)
为了对本次提出的算法进行有效的验证,本文在公开数据集CCTSDB上进行了消融对比实验,其检测结果如表2所示.表2列出了P,R,mAP 3种评价指标,在(CIoU取值为0.6)的情况下,对比baseline可以得出,本文所提出的算法P提升了8.6%,R值提升了0.5%,mAP值提升了3.3%.根据上述消融实验的对比可以得出本文所提出的算法有了明确的提升,本文算法在CCTSDB数据集下的P,R,PR的曲线分别如图8所示,测试集的测试效果如图9所示,以YOLOv3与本文的算法对比为例,其中0表示警告类交通标志,1表示指示类交通标志,2表示禁止类交通标志,值越接近1效果越好.
表2 改进的MobileNetv3-YOLOv3在CCTSDB数据集上消融实验结果
(a)P值曲线;(b)R值曲线;(c)PR值曲线
(a)YOLOv3算法1 (b)本文的算法1
(c)YOLOv3算法2 (d)本文的算法2
为了验证本文所提出的算法的有效性,将本文的算法与最新文献所提出的算法在CCTSDB公开数据集上进行了对比,对比结果如表3所示.从表3可以看出,YOLOv3以及T-YOLO均不是最优解,YOLOv3的准确度很低,而T-YOLO虽然准确度上升了,但是FPS却下降到了极低的水平,根本无法满足实时检测的目的,改进的YOLOv3-Tiny虽然R得到最优的结果,但是最关键的指标mAP却很低,无法满足精准测量的目标,最新的算法YOLOv5s虽然FPS是最高的,但是P、R以及mAP均不如本文所提出的算法,综上对比可知,本文的算法在交通标志牌检测方面具有很好的效果.
表3 不同算法在CCTSDB数据集中的表现
为了改进目前主流算法对交通标志牌检测精度低、处理速度慢的问题,本文提出了改进的MobileNetv3-YOLOv3算法,引入SSPNet去除重复特征,可以提高候选框的速度,加快模型的推理速度,引入CSPNet消除计算瓶颈,节省了计算量,引入Focus层防止特征图信息丢失,保证模型的准确度.从CCTSDB的对比实验可以看出,本文的P以及mAP值均取得了最优的结果,与YOLOv3算法相比,本文的P、R、mAP值、FPS都得到了有效的提升,分别提升了6%,1.8%,1.8%以及15%,虽然FPS比YOLOv3以及T-YOLO高,但还不是最好的,未来还会在检测速度方面进行提升以达到最优的效果.