基于改进YOLOv3模型的交通视频目标检测算法研究
2021-10-20梁秦嘉
梁秦嘉,刘 怀,陆 飞
(南京师范大学电气与自动化工程学院,江苏 南京 210023)
随着城市建设的不断发展,公共设施逐渐完善,城市道路上交通流量也急剧增长. 如何对交通图像或视频等监控数据中的各种目标进行准确的检测已成为城市交通管理所面临的主要挑战[1]. 近年来,由于图像处理单元的性能不断提高,使得深度学习方法在目标检测领域取得了广泛的应用[2],如行人检测[3]、人脸检测[4]、航拍目标检测[5]等.
目前,以神经网络算法为基础的目标检测模型主要有两类. 一类是基于目标候选框[6]的模型,如 R-CNN[7]、Fast-R-CNN[8]、Faster-R-CNN[9]等,这类模型采用选择性搜索方法,寻找目标候选区域,然后针对候选区域采用模型进行进一步的处理,虽然检测精度较高,但速度较慢[10],无法达到实时性要求. 另一类是基于端到端[11]的模型,如SSD[12]、YOLOv2[13]、YOLOv3[14-15]等,此类算法直接通过卷积神经网络的全局特征判断目标的位置和种类,因此检测的速度更快,但精度略低[16]. YOLOv3网络模型在目标检测的精度与速度方面均有良好的表现,因此在视频目标检测领域得到了广泛的应用[17],但由于其网络结构的限制,导致原始算法较难适应视频中目标在运动时产生的尺度差异,易出现误检和漏检,以及对小目标检测不准确的问题.
本文提出一种基于改进YOLOv3网络模型的交通视频目标检测算法. 首先,针对交通视频中的目标在运动时会发生尺度变化的问题,将原始YOLOv3的检测尺度从3个扩展到4个;同时,为了在不同尺度下选择合适的锚框大小,对数据集采用k-means++聚类算法进行重新聚类;针对原始YOLOv3在检测阶段对视频中目标易出现漏检及误检的问题,将每个尺度输出检测前的6个卷积层转换为2个残差单元,提高对目标的检测准确率.
1 改进的YOLOv3算法
1.1 YOLOv3算法
YOLO是一种端到端的目标检测网络模型,可通过神经网络直接判断目标的所属类别并标示具体位置,故其检测速度较快. YOLOv3是YOLO系列的第三代算法,其网络结构如图1所示.
图1 YOLOv3网络结构图Fig.1 The network of YOLOv3
为了进行特征提取,YOLOv3使用了连续的3×3和1×1卷积层,并借鉴了残差网络的思想,设置了5个残差块,每个残差块由多个残块单元组成. 残差单元结构[18]是指在卷积神经网络的卷积层外部加入中间层实现与越层之间的快捷连接形成残差模块,从而参与后续神经网络的构成. 假设残差单元的输入为变量x,其要拟合的最终输出也即为原始映射函数L(x),同时定义残差映射函数F(x)=L(x)-x,则有L(x)=F(x)+x.这样即可认为原始映射函数等于前馈网络中主路径的残差映射函数F(x)与输入x两者相加. 与越层的快捷连接除改变函数计算公式外未引入其他参数,也不会使神经网络算法的计算速度变慢. 残差单元的结构如图2所示.
图2 残差单元结构图Fig.2 The structure of the residual unit
YOLOv3对输入图像进行了5次下采样,在预测阶段采用最后3层下采样的结果来预测3个尺度的目标. 在尺度3上,使用8倍下采样的特征图检测小目标;在尺度2上,采用16倍下采样的特征图检测中等大小的目标;在尺度1上,使用32倍下采样的特征图检测大目标. 对于卷积神经网络,网络浅层所提取的目标特征的细节信息较多,所检测到的目标位置会更为准确,因此检测的精度相对较高;而网络深层可以提取目标的语义信息,提取到的特征更全面,但目标检测精度较低,因此采用特征融合来检测目标. 为了将浅层与深层所检测到的特征进行融合,YOLOv3模型借鉴特征金字塔(feature pyramid networks,FPN)的结构,通过上采样的方式对更深一层的特征图进行大小调整,则不同尺度的特征图将拥有相同的大小. 将来自较早层的特征与来自较深层的特征合并在一起,因而YOLOv3对不同目标的检测都有很好的性能.
1.2 YOLOv3算法的改进
1.2.1 网络结构的改进
为了进一步提高YOLOv3的性能,本文提出一种增强的目标检测算法. 原始YOLOv3使用3种尺度检测不同大小的目标,特征层大小分别设定为13×13、26×26、52×52,但在交通视频中由于行人及各种交通工具的目标数量较多,运动时目标的尺度变化也较大,原算法不能将这些目标很好地检测出来. 本文将原始YOLOv3的3个检测结构增加为4个,根据网络结构将增加的特征层大小设定为104×104. 同时采用特征金字塔的思想,使用YOLOv3网络模型中的卷积层对图像进行多次卷积操作. 首先通过上采样的方法,将最底层采集到的13×13大小的特征层进行扩展,使其扩大为26×26大小的特征层,之后将其与上一个检测尺度的特征层进行融合,将结果再次输入回检测层中. 对上文设计的4个尺度进行相同的操作处理,实现4个不同的尺度融合. 本文设计了4个检测尺度,将浅层获取到的目标细节信息和深层获取到的高级语义信息进行特征的拼接融合,使得网络可以获得更为准确的目标信息,同时保持网络的复杂度,以更好地适用于视频场景中复杂环境下的多目标多尺度检测.
对N层的卷积神经网络,其训练过程中的网络梯度变化为:
(1)
式中,Lloss为计算损失;XN为任意层的输入;WN为该层卷积矩阵;bN为该层偏置项;FM(XNM,WNM,bNM)表示第M层的计算损失;XNM为第M层的输入;WNM为第M层卷积矩阵;bNM为第M层偏置项. 根据式(1)可知,当网络逐渐加深时,梯度会逐渐衰落变小甚至消失.
在YOLOv3网络的目标检测层之前,有6个卷积层. 当卷积层数较多时,易出现梯度衰落甚至消失的情况,导致检测精度降低. 由于残差结构可有效避免梯度衰落情况的发生,将卷积层转化为残差结构后,网络的梯度变化如式(2)所示:
(2)
受残差网络结构的启发,同时考虑网络层数,本文将6个卷积层转换为2个残差单元,如图3所示. 最终改进后的网络结构如图4所示.
图3 卷积层到残差结构的转换Fig.3 The conversion from convolution layer to residual structure
图4 改进YOLOv3网络结构图Fig.4 The network of improved YOLOv3
1.2.2 初始锚框的选择
借鉴Faster R-CNN,YOLOv3中引入了锚框机制. 锚框即初始候选框,其宽度与高度是固定的,选择合适的初始候选框对目标检测的精度和速度有很大的影响. 原始YOLOv3模型是通过k-means聚类算法在数据集上自动找到好的先验框,但由于在选择初始的聚类点时,k-means聚类算法有比较大的随机性,可能会导致较大的聚类偏差. 针对此问题,本文采用k-means++聚类算法,对本文所使用的数据集标注框进行重新聚类分析,以减小因随机性而带来的聚类偏差.
为了减小锚框大小对检测的影响,本文采用平均交并比AvgIOU作为目标聚类分析的度量指标. AvgIOU的目标函数如下:
(3)
(4)
式中,IIOU表示真实框和预测框交集面积和并集面积的比值;box为样本中目标框的尺寸;centroid为聚类的簇中心;nk是第k个聚类中心的样本数量;k是聚类中心个数;n为样本的总数量.
在UA-DETRAC数据集上应用k-means++聚类. 图5为不同k值下得到的AvgIOU,可以看出,随着k的增加,目标函数的变化越来越稳定. 结合图5,并考虑AvgIOU和检测层的数量,本文选择12个锚框. 对数据集进行k-means++聚类生成聚类中心后,YOLOv3将这些聚类按比例平均划分. 考虑到锚框个数给神经网络的复杂度和计算量带来的影响,对不同尺度均选择3个锚框. 通过k-means++聚类,得到各个锚框的宽和高维度的尺寸分别为(21,22),(32,24),(26,40),(45,40),(63,32),(62,56),(73,60),(106,57),(131,118),(92,116),(200,130),(316,181).
图5 不同k值下的聚类分析结果Fig.5 Clustering analysis results underdifferent k values
为了检验锚框尺寸对检测速度和精度的影响,本文将原本YOLOv3的9个锚框重新聚类,命名为YOLOv3-9anchors;同时,为了验证不同尺度个数对目标检测精度与速度的影响,在本文改进算法4个尺度的基础上增加第5个尺度,该检测尺度大小为208×208,其他处理方式与本文相同,与YOLOv3中同大小的特征图相连,记为YOLOv3-5scales,对该算法选择15个锚框.
2 实验结果及分析
2.1 实验数据集
为了验证改进算法模型的具体性能,本文以车辆目标为例,采用UA-DETRAC数据集对算法进行测试[19]. 同时,为了验证在雾霾及阴雨等恶劣天气情况下算法的有效性,部分视频场景来源于自行拍摄.
2.2 评价指标
本文对多目标检测模型的评价指标主要有平均精度、召回率以及平均检测时间. 其中,Precision表示视频中所检测的每一种目标的检测精度;mAP表示平均精度,即所有目标检测精度的平均值;平均时间为不同网络模型检测完成一幅图像时所花费的平均时间. 精度和召回率的计算公式为:
(5)
(6)
假设将公共汽车设定为需要检测的目标,TP表示正确检测的数量;FP表示将其他类型如小型汽车等被错误检测为公共汽车的数量;FN表示公共汽车被错误检测为其他目标类型的数量.
2.3 实验环境与训练
本文算法是在深度学习框架keras下进行的. 实验的设施配置为:CPU为Intel i5-9400,主频 2.90GHz,16GB内存,GPU为NVIDIA 1070,8GB显存,操作系统为windows 10.
本文对数据集进行重新标注训练,检测目标包含小型汽车(car)、公共汽车(bus)、大型货车(truck)三类. 为了提高训练的效果,使用了不同角度旋转图像和改变图像的饱和度、曝光和色调等数据增强方法. 在训练阶段,初始学习率为0.001,权值衰减为0.000 5. 当训练批次为60 000和70 000时,学习率分别降至0.000 1和0.000 01,使损失函数进一步收敛. 由于本文算法并未使模型的复杂度明显增加,因此训练时间相比原始YOLOv3没有显著变化.
2.4 结果分析
利用改进的YOLOv3模型对UA-DETRAC数据集中的目标进行检测. 同时对上文所提到的YOLOv3-9anchors与YOLOv3-5scales算法进行聚类以选择合适的锚框. 针对YOLOv3-9anchors,聚类后的锚框宽高分别为(19,21),(30,25),(27,39),(43,41),(62,33),(63,55),(71,58),(104,57),(128,119). 针对YOLOv3-5scales,聚类后的锚框宽高分别为(10,18),(12,23),(22,19),(19,31),(37,19),(31,29),(31,44),(44,39),(59,26),(57,53),(92,42),(83,74),(133,59),(142,108),(267,123).
不同目标检测算法的测试结果如表1所示. 由表可知,改进YOLOv3网络模型的检测精度为84.59%,相比原始YOLOv3网络模型,改进后算法的精度提高了7.91%;召回率为96.93%,相比 YOLOv3提高了4.57%. YOLOv3-tiny 的mAP 值为73.25%,召回率为90.65%,均低于改进 YOLOv3模型. 基于不同主干网络ResNet101和VGG16的Faster-R-CNN算法的平均精度分别为85.03%和86.42%,比本文算法分别高了0.44%、1.83%. 在检测速度方面,改进YOLOv3对图像进行检测的平均用时为30.72 ms,较 YOLOv3 稍有不足. 在YOLO系列检测算法中,属于简化版本的YOLOv3-tiny因其主干网络浅,结构简单,检测速度较快,平均用时仅为6.38 ms. 而Faster-R-CNN系列算法在检测速度方面有明显的缺陷,平均时间这一指标远高于YOLO模型,无法满足交通视频的实时性要求. YOLO模型中大部分用时在30 ms左右,检测速度大幅提升,可实现实时监测.
表1 不同算法实验结果对比Table 1 Comparison of experimental results of different algorithms
对目标框进行重新聚类后的YOLOv3-9anchors相较于原始算法的mAP和召回率分别提升了5.39%和2.17%,表明初始锚框大小的选择对目标的检测精度有着较大影响. 而YOLOv3-5scales的精度和召回率虽然相较于原始YOLOv3模型提高了6.88%和3.85%,与本文改进的YOLOv3算法精度相差无几,但检测速度相较于本文算法明显下降.
整体而言,改进YOLOv3模型在上述评价指标上均较YOLOv3更加出色. 由于采用了k-means++聚类方法,使得目标候选框的选择更适合于图像类数据;将检测层前的卷积层转化为残差单元,避免了出现梯度衰落;同时检测尺度由3个增加至4个,提高了目标检测精度,可有效检测不同尺度的目标. 改进YOLOv3方法对于候选框的分类和选择恰当,并选择了合适的尺度,未使网络模型变得过于复杂,提高精度的同时也保持了较快的速度. YOLOv3与改进YOLOv3模型在测试集上的目标检测对比效果如图6所示.
(1)~(5)为YOLOv3检测结果,(6)~(10)为改进YOLOv3检测结果图6 白天及夜间的情况下YOLOv3模型与改进YOLOv3模型算法检测效果对比Fig.6 Comparison of detection effect between YOLOv3 and the improved YOLOv3 algorithmin daytime and nighttime conditions
(1)~(5)为YOLOv3检测结果,(6)~(10)为改进YOLOv3检测结果图7 恶劣天气情况下YOLOv3模型与改进YOLOv3模型算法检测效果对比Fig.7 Comparison of the detection effect of YOLOv3 and the improved YOLOv3 algorithmunder severe weather conditions
由图6可以看出,YOLOv3对很多目标出现漏检及误检情况. 在场景1中,虽然主车道上车辆均被检出,但YOLOv3未检测出右侧树后的车辆,改进YOLOv3准确地得出了检测结果. 在场景2中,YOLOv3仅检测出主车道上的车辆,改进YOLOv3对上方的小目标车辆及左侧出现的车辆局部均能正确检测. 在场景3中,YOLOv3将视频下方的卡车错检为小型汽车,且后方的小目标均未检测,改进YOLOv3正确检测出了卡车及远处的小目标. 在场景4中,YOLOv3仅检测出近距离的几个目标,改进YOLOv3对远处小目标及两侧有遮挡存在的目标均进行了正确检测. 在场景5中,YOLOv3对最左侧车辆检测出car和truck两个结果,改进YOLOv3可准确检测出每一个目标.
图7所示为恶劣天气情况下两种模型的目标检测对比图. 可以看出,YOLOv3的检测精度依然较低. 在场景1中,YOLOv3对左侧车辆检测出car与truck两个标签,改进YOLOv3检测正确. 在场景2中,YOLOv3仅检测到前方3个目标,改进YOLOv3检测到了后方的车辆. 在场景3中,YOLOv3仅能检测到距离较近的目标,改进YOLOv3可以准确检测远处小目标. 在场景4中,YOLOv3对画面中的卡车进行误检. 在场景5中,由于阴雨导致画面较为模糊,YOLOv3仅能检测到少数目标,且将公共汽车误检为小型汽车,改进YOLOv3依然可以检测到画面中的大部分车辆.
由此可见,改进YOLOv3对小目标的检测及存在遮挡情况和受恶劣天气影响的环境下,都比原始算法有更高的检测精度.
3 结论
针对当前交通视频中检测目标多、尺度不断变化等问题,提出了基于改进YOLOv3模型的交通视频目标检测算法. 通过对YOLOv3增加检测尺度提高对多尺度目标的检测精度,同时采用k-means++聚类算法选择更适合数据集的候选框,最后为了避免网络层数较多导致的梯度衰落,将输出检测层的6个卷积层转化为2个残差单元. 通过在UA-DETRAC数据集上与原始YOLOv3进行比较实验,改进后算法的准确率和召回率相比原始YOLOv3分别提高了7.91%和4.57%,同时检测时间仅增加了0.09 ms,可以达到针对交通视频的实时监控要求.