当前位置:首页 期刊杂志

基于卷积神经网络的多模型交通场景识别研究

时间:2024-05-04

姚芷馨,张太红,赵昀杰

(新疆农业大学,新疆 乌鲁木齐 830052)

0 引 言

随着现代科技的不断发展,深度卷积神经网络已经广泛应用于视频场景的复杂对象检测中,无人驾驶智能交通场景在生活中的应用也越来越广。交通拥堵、道路交通事故是长期以来备受关注的问题,为减少这种情况发生的概率,提出一种新的自动驾驶汽车技术。无人车驾驶系统需要有效的技术来快速、高效、精准地识别交通场景中出现的所有物体,包括移动目标和静态目标[1]。

在人工智能中的计算机视觉方向,已有许多方法可以处理不同清晰度和一些已经失真的图像及视频。例如智能视频监控系统需要有效的技术来准确、快速地检测目标,其利用卷积神经网络处理不同大小、高清晰度的图像,基于目标检测技术,将预训练网络迁移学习到数据集中,替换Softmax层和运行Backpropagation来实现对模型的微调[2],比较具有代表性的模型有Faster R-CNN[3]、R-FCN[4]等。2016年Joseph Redmon等[5]提出单阶段目标检测模型YOLOv1,为之后的YOLO系列奠定基础。基于卷积神经网络的目标检测模型中YOLO模型兼顾了准确率和推演速度,但其主干网络的效率仍然比较低,模型中缺少具有注意力机制[6]的模块。因此,就无人驾驶智能交通场景识别而言,提出了一种高效的基于目标检测模型的实时识别算法,使用EfficientNet-B1网络[7]提取图像特征,通过空间金字塔池化层和路径聚合网络进行特征的融合,利用K-Means算法[8]聚类出的先验框进行目标框的预测和分类。

基于语义分割技术,比较具有代表性的有U-Net[9]、PSPNet[10]等。2015年Olaf Ronneberger等提出U-Net网络用于医学细胞分割,采用Encoder-Decoder结构,通过四次下采样和四次上采样(转置卷积)形成U形结构,核心思想就是特征图拼接,对小样本的数据集可以进行较快的分割,能够泛化到很多场景中去。但已有的方法对于不同色彩饱和度、不同尺寸和不同清晰度的图像和视频处理起来运行效率会比较慢,准确率也较低。例如交通场景中距离行车记录仪等摄像头较远位置的物体清晰度过低,容易识别出错。并且用现有的方法处理每一帧的图像可能会降低效率,对于交通标志和交通灯这种尺寸类似的类别检测结果也会相对不太准确。因此需要将适合该场景的数据集加载到预训练网络EfficientNet-B4中进行学习,取出模型第一个卷积层和模块2和模块3的输出作为输出特征。参照U-Net++的网络结构,使用卷积层作为特征提取模块,反卷积层作为上采样模块,通过联结不同大小的特征图,从而得到最终的输出结果。最终捕获视频每一帧序列中的鲁棒运动和探索上下文信息。实现将深度学习应用于智能交通场景识别中,使其在高度困难的情况下效率最大化。

1 算法结构与原理分析

智能识别场景中,对目标的识别模型主要分为三部分:对移动目标的实时检测、多目标的实时追踪和对静态背景的实时语义分割。数据集采用BDD100K[11]与Mapillary Vistas[12],分别在MobileNet[13]和EfficientNet中进行训练,对比两个数据集和两个网络的四种组合,选取出表现较好的模型。

1.1 目标检测

改进使用单阶段目标检测模型YOLOv4[14]对交通场景中的Bike、Bus、Car、Motor、Person、Rider、Traffic Light、Traffic Sign、Truck等类别进行识别,使用图像处理和机器学习技术根据所分析的交通量来给无人驾驶提供可靠依据。目标检测模型主要包含以下结构:Backbone(主干网络)、Neck(颈部)、Head(输出最终检测结果的模块)。相比于CSPDarkNet-53而言,使用EfficientNet网络作为主干网络。这种类型的网络利用卷积层、汇集层、ReLU层、全连接层和损耗层。在典型的CNN体系结构中,每个卷积层之后是一个直线单元(ReLU)层,然后是一个池层,然后是一个或多个卷积层,最后是一个或多个完全连接层。

Backbone(主干网络)使用EfficientNet卷积神经网络,该网络使用了Swish激活函数,随机深度Drop Connect Ratio为0.2。根据模型整体效率替换了原有的CSPDarkNet-53。和YOLOv4进行对比,其中EfficientNet-B1采用0.2的Dropout比率。

Neck(Head和backbone之间的颈部)层使用ASPP[15]与改进后的FPN[16]作为脖颈网络,分别以主干网络中,模块5、7的第一个逐点卷积和SPP的输出特征图作为Head层不同尺寸特征图的输入,融合其特征信息。删去最终的分类层,采用SPP替换模型最终的池化层。改进后的Backbone和Neck基本结构如图1所示。

图1 改进后的Backbone和Neck基本结构

Head(输出最终检测结果的模块)层使用YOLO Head来输出最终的目标框与类别。预测值与真实值计算Loss,对数据的格式进行Reshape。最后提取特征输出Feature Map。

1.2 语义分割

与广泛使用的ResNet-50网络[17]相比,EfficientNet-B4网络将top-1的准确率从76.3%提高到83.0%(+6.7%)。除了ImageNet,EfficientNets还可以很好地传输数据,并在8个广泛使用的数据集中达到最先进的精度,同时比现有的ConvNets减少了多达21倍的参数。其中运用到模型尺度化方法,在原始模型基础上将通道数扩大,加深模型深度,之后扩大输入图像分辨率,在放大基于通道数、深度、输入图像的组合尺度。使用Encoder-Decoder(编码-解码)结构,结合EfficientNet-B4网络和U-Net++网络[18]构建语义分割模型。将图片输入EfficientNet-B4中,取出模型中的第一个卷积层和模块2、模块3的输出作为输出特征。参照U-Net++网络搭建的思路,使用卷积层作为特征提取模块,反卷积层作为上采样模块,通过联结不同大小的特征图,从而得到最终的输出结果。语义分割的类别使用Mapillary Vistas数据集进行训练(包含建筑、植被、路面、斑马线、车道线、栅栏等交通场景类别)。EfficientNet模型尺度化方法如图2所示。

图2 EfficientNet网络结构

1.3 目标追踪

目标追踪使用DeepSort多目标追踪算法[19],通过向量化表示、卡尔曼滤波器预测和匈牙利算法匹配三个阶段来对目标检测的结果进行跟踪,检测目标为移动的物体。

首先通过目标检测的结果将每一帧中的目标图像裁剪出来,将裁减后的目标图像送入神经网络得到其表示向量。在预测阶段,使用卡尔曼滤波器对过去几帧图像中目标检测的结果进行重预测,得到其在当前帧的状态[20]。通过利用线性系统状态方程的卡尔曼滤波算法,可以实现依据输入输出的数据来进行滤波过程。该方法通过合理的权重,根据状态过程中的噪声ω和观测噪声υ,估计状态x的值。假设图像的变量位置、速度是随机的,并且服从高斯分布,每个变量都有一个表示随机分布中心的均值μ,随机分布的不确定性用方差来表示。状态变量用高斯分布矩阵表示,通过对上一状态的估计和在k时刻与k-1时刻的预测误差能够预测当前状态,并用卡尔曼滤波器修正预测值。计算预测状态值如公式(1)所示:

(1)

通过状态转移矩阵与k-1时刻优化后的误差矩阵乘积加上预测的噪声,可以计算出预测值和真实值之间的预测误差协方差矩阵,如公式(2)所示:

(2)

(3)

由于观测矩阵与观测噪声协方差矩阵都为常数,因此公式(3)计算出的观测权重与预测误差协方差矩阵为计算k时刻优化后的误差矩阵的主要影响因素,如公式(4)所示:

(4)

观测权重和观测矩阵会影响k时刻的误差矩阵,因此计算估计值和真实值之间的误差协方差矩阵,如公式(5)所示:

(5)

根据上述公式可以看到计算后的卡尔曼滤波,尽管测量值波动较大,但最终的预测值与实际状态值相差不是很大,如图3所示。

图3 卡尔曼滤波预测

在匹配阶段,计算过去几帧检测结果的向量表示与当前帧检测结果的向量表示之间的余弦距离,并根据余弦距离使用匈牙利算法将相似的目标匹配在一起[21]。对未匹配的当前帧目标框与其前一帧未匹配的目标框使用交并比IoU进行二次匹配,最终得到所有匹配结果,该匹配结果包含了目标框的所有信息。所有未能匹配的目标将在内存中保存指定帧数,若超出指定帧数还未能匹配则将其删除。

2 训练样本及结果分析

深度学习框架基于Tensorflow-2.1版本,运算平台为CUDA-10.1.243版本,在NVIDIA Tesla V100的GPU上进行训练。模型基本结构如图1所示。训练所需数据集选取的是两个适用于自动驾驶研究的大型数据集:BDD100K(伯克利大学)和Mapillary Vistas(瑞典马尔默Mapillary AB),共计25 000张照片,转化为coco数据格式。

训练过程中将整个数据集分为训练集、测试集和验证集三个部分,每隔10个Epoch输出一次模型在测试集上的表现,将训练结束前的最后一次验证作为测试。首先确定一组模型的超参数,将模型在训练集上进行训练,选择使损失函数最小的模型。对选择的最优函数在验证集上进行评估,直到搜索完指定的超参数组合,选择在验证机上误差最小的模型,合并训练集和验证集作为整体训练模型,找到最优函数。该文以总Loss是否降低为标准,重复寻找每轮训练结束后,Loss有所降低的模型保存,否则不进行保存,最后评估在测试集上最优函数的泛化性。

2.1 目标检测

在整个实验中设置两组对照实验,将EfficientNet-B1+ASPP+FPN模型与YOLOv4模型分别在Mapillary Vistas与BDD100K两个数据集中进行训练。

(1)第一组通过复现YOLOv4模型结构,得出在两个不同的数据集上的训练结果,命名为YOLOv4。

(2)第二组使用EfficientNet-B1中模块4、6的第一个逐点卷积和SPP的输出特征图作为Head层不同尺寸特征图的输入,删去最终的分类层,采用SPP替换模型最终的池化层,与改进后的FPN进行特征融合,将其训练结果命名为EffB1-Layer46。

(3)第三组使用EfficientNet-B1中模块5、7的第一个逐点卷积和SPP的输出特征图作为Head层不同尺寸特征图的输入,删去最终的分类层,采用SPP替换模型最终的池化层,与改进后的FPN进行特征融合,训练结果命名为EffB1-Layer57。

整个网络采用512×512的输入图像,使用K-Means聚类算法对目标物体的宽高进行聚类,按1∶2,1∶1,2∶1的比例进行变换生成9种anchors,用于后续训练。使用Bounding Box Regression(边框回归)将预测物体窗口向Ground Truth(正确标注的数据)窗口贴近。在检测Head的目标框坐标回归中,将坐标中心点的Sigmoid输出放大1.05倍,以让其更好的定位中心点位置接近于网格边缘的目标。下采样倍数分别为8、16、32倍。整个训练过程分为两个阶段,第一阶段是冻结Backbone,首先使用计算效率高、内存需求小的Adam优化器,设置学习率为0.001,训练20个Epoch。由于Adam优化器可能不收敛,因此第二阶段解冻整个网络进行训练,采用学习率为0.000 1,动量为0.9的SGD优化器,每次更新时对每个样本进行梯度更新,避免计算冗余,也不会错过全局最优解。计算过程如公式(6)和公式(7)所示。

ηt=α·gt

(6)

其中,ηt为当前时刻的下降梯度,α为初始学习率,gt为计算目标函数关于当前参数的梯度,即gt=mt=φ(g1,g2,…,gt)。

ωt+1=ωt-ηt

(7)

其中,ωt+1为更新后的计算下降梯度,ωt为第t个Epoch的待优化参数,ηt为当前时刻的下降梯度。

因为SGD优化器没有用到二阶动量,学习率是恒定的,因此需要对学习率采取余弦退火策略,训练130个Epoch,让学习率呈单调递减状态,最终下降到0,使模型收敛。使用交叉熵损失函数作为目标类别和目标框置信度的损失函数,CIoU Loss作为目标框坐标回归的损失函数。训练时根据GPU的显存,将EfficientNet-B1的Batch-Size设为16。正则化方法采用值为0.05的Label Smoothing,降低类别不平衡所造成的问题。

模型在两个数据集上的训练结果如表1和表2所示。

表1 目标检测网络在BDD100K数据集上的训练结果

表2 目标检测网络在Mapillary Vistas数据集上的训练结果

实验结果表明,相比于现有的YOLOv4模型,Efficient-B1网络在两个数据集上拥有更高的mAP,同时拥有更少的参数量,大大降低了计算量,提升了模型运算速度。此外,随着特征层选取的不同,主干网络输出的特征层质量也有所不同。在两个数据集上,EffB1-Layer46比YOLOv4模型消耗了更少的计算量,减少了约2.3倍参数量,准确率也相对提升了。由此可见,在使用了改进的FPN后,不仅可以减少计算量,还拥有较好的特征融合能力。而EffB1-Layer57与EffB1-Layer46的区别在于主干网络中特征层的选取有所不同,虽然EffB1-Layer57参数量与计算量相对提升了,但准确率也有所提升,说明该特征层的选择方法对于主干网络输出的特征层质量是有效的。

2.2 语义分割

设置两组对照实验,将MobileNetV2网络和DeepLabV3+结构[22]的结合与EfficientNet-B4网络和U-Net++结构的结合进行对比,选取效果较好的一组网络进行模型的构建。

(1)将智能交通场景识别的图像素材输入MobileNetV2网络,取出模型2倍和3倍下采样的结果作为输出特征。使用DeepLabV3+结构,通过联结不同大小的特征图,从而得到最终的输出结果,将其命名为MobV2-Deep。

(2)将图片输入到EfficientNet-B4网络,取出模型第一个卷积层和模块2、模块3的输出作为输出特征。参照U-Net++,使用卷积层作为特征提取模块,反卷积层作为上采样模块,通过联结不同大小的特征图,从而得到最终的输出结果,将其命名为EffB4-UNet。

训练时,将Mapillary Vistas和BDD100K数据集中的全景分割标记转换为语义分割标记,采用512×512的输入图像。第一阶段是冻结Encoder部分,使用SGD优化器,设置学习率为0.001,训练20轮。第二阶段解冻整个网络进行训练,采用学习率为0.000 1,动量为0.9的SGD优化器以及0.4的Dropout比率,并对学习率采取余弦退火策略,训练200轮。损失函数使用多分类的交叉熵损失函数,Batch-Size设置为8。正则化方法采用值为0.05的Weight Decay,解决类别不平衡所造成的问题。模型训练中使用到的Data Augmentation(数据增强手段)有:随机翻转、随机裁剪、随机缩放、随机色彩扭曲、随机模糊噪声和Mosaic(马赛克图像合成)等。训练结果如表3和表4所示。

表3 语义分割网络在BDD100K上的对比训练结果

表4 语义分割网络在Mapillary Vistas上的对比训练结果

根据表中实验结果,可以观察出在两个不同的数据集上,不同的网络结构会带来不同的影响。相比于MobV2-Deep模型结构,EffB4-UNet拥有更高的平均交并比,并且减少了约1.35倍的参数量,消耗了更少的计算量。因此选取由EfficientNet-B4网络与U-Net++结构结合构建的模型。

为达到更高的视觉效果,将多个算法得到的结果进行融合,其中使用语义分割掩膜辅助实例分割掩膜的生成,将存在实例分割标签的像素点中的语义分割信息覆盖,最终得到全景分割的结果。经过测试,将整个模型在NVIDIA Tesla V100的GPU上推演需要23分钟左右完成,在影响准确率较小的情况下运算速率是非常高效的。结合目标检测与语义分割,将动态目标和静态目标分别进行识别,得到实时推演出的结果,如图4所示。

图4 交通场景实时推演效果

3 结束语

结合多模型融合的特点在智能交通场景中深度学习的应用能够将识别效率最大化。使用EfficientNet作为主干网络,结合SPP与改进后的FPN构建单阶段目标检测模型,与U-Net++结合构建语义分割模型,通过DeepSort多目标追踪算法对移动目标进行追踪计数。结合多种训练技巧对模型进行训练,实验结果表明,目标检测、目标追踪和语义分割等多个算法融合后构建的模型运行效率较快、准确率较高,目标检测中提出的EffB1-Layer57网络模型在BDD100K和Mapillary Vistas数据集上的准确率分别达到了38.23%和39.27%。语义分割中提出的EffB4-UNet网络模型在BDD100K和Mapillary Vistas数据集上的mIOU分别达到了58.82%和75.24%。在2分钟智能交通场景测试视频中,按26帧/秒的方式将视频转换为图像,能够在23分钟内完成对图像中动态目标和静态目标的实时推演以及动态目标的追踪计数,并将计数结果显示在视频左上角,将图像识别各目标的统计数目输出到指定文件路径下。模型推演结果可以自行实现多类别掩膜将结果进行可视化显示,通过对比实验证明了网络模型训练的有效性。未来可尝试选取不同的主干网络替换现有的EfficientNet,提取不同的特征层,结合其他大型公开数据集进行研究,训练中可以尝试不同的优化器对模型是否有较大影响。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!