基于改进SSD算法的骑车人识别研究
2021-11-12马佳峰陈凌珊
马佳峰,陈凌珊
(上海工程技术大学 机械与汽车工程学院,上海 201620)
0 引 言
在智能网联汽车和无人驾驶快速发展的环境下,基于深度学习的目标识别作为其中的关键技术显得愈加重要,而公路环境中的骑车人作为目标识别当中一个种类,自然也被考虑并加以研究。骑车人作为公路环境中易受伤的人,在公路上的行车可能不规范,或者汽车驾驶员的驾驶不规范,加上日渐复杂的公路交通场景,多种因素叠加,骑车人群体的自身安全受到了严重的威胁,由此引发的问题不容小觑,该群体的安全应当受到重视。现今智能网联汽车的目标识别检测技术在大力发展但并没有完善,有关公路环境下骑车人识别的研究相对于其它目标研究来说较少,提高骑车人的安全十分有必要,因此对公路环境下骑车人识别技术的研究具有重要意义[1]。
当下目标识别的技术主要是基于机器视觉技术,分为传统机器学习和深度学习两种方式。传统的机器学习对于目前的实际应用场景来说,其检测速度并不符合实际需求,目前无人驾驶中的主要目标识别技术为深度学习[2]。智能网联汽车和无人驾驶成为大趋势,安全行作为其中一个重要考量指标,如何降低公路安全事故发生的概率成为越来越热的话题,对公路骑车人的识别研究也被广泛讨论[3]。深度学习算法分One-stage类和Two-stage类算法,目前主流采用的是One-Stage类,该类算法检测速度较快,具有重要代表性的直接基于回归算法为SSD算法,该算法在精度上和速度上都有较好的检测效果,其汲取Two-stage算法中的特点,借鉴了RPN多窗口技术,在此基础之上在几个不一样的尺度上的特征图上都采用了框的坐标回归和多种尺度的检测,使SSD 算法既达到了对小目标检测效果,同时还能保证检测的速度。本文采用深度学习算法对其进行研究,采用的算法是SSD算法,并对其进行尝试性的改进。
1 SSD算法的网络结构
从网络结构上:其主干网络是VGG-16,并对其进行了相应的改善。VGG-16网络的结构如图1所示。
图1 VGG-16网络结构
引用和参考Alexnet,对网络的深度进行了提高,能够更好的描述目标特征,表达能力更强,在复杂场景的应用上效果更好,总的来说VGG-16用于特征提取效果不错,适用于目标检测和识别领域。
SSD算法的网络模型,在使用VGG-16网络模型的基础上结合了YOLO算法的跨层连接思想和FasterRCNN算法思想[4],使整体的检测效果有了极大的加强,其网络结构如图2所示。
从图2可知,SSD算法在主干网络VGG-16的改进为:加入了一定数目的卷积层,VGG16包含5个卷积块,一般命名从conv1~conv5,改进后的VGG-16网络,不含conv5卷积块,用的是前4卷积块。SSD算法输入端为300×300×3的图片,靠VGG-16提取特征后,得出尺寸为38×38×512的特征层,每一个卷积特征层是靠每单次的下采样得出的,经过上述步骤再对得出的卷积特征层采取目标检测步骤,通过下采样5次,得出尺寸为1×1×256的卷积特征层,得出5个尺寸不一的卷积特征层,和VGG网络的特征层加在一起,最终有6个卷积层。一般采用一组的卷积滤波器对每单个卷积特征层实行检测。在大小为M×N且包含P通道的特征层,以3×3×p的卷积核为检测的基本单元,生成单个类别的边框坐标还有置信度。
图2 SSD算法的网络结构图
2 基于SSD算法的改进优化
SSD问世以来就广受研究人员的喜爱,用Python语言编写的开源算法,使用方便,故而对于SSD算法的改进和优化络绎不绝[5]。SSD 算法检测小目标效果较差,平静检测精度也有些偏低,针对这些问题,本文对该算法进行了研究,并对其进行优化,用以解决上述问题,提升该算法的检测效果。针对SSD算法存在的缺陷,分析其原理上可能造成此结果的原因,该算法将多个不同特征层没有跨层连接起来,只是检测多种不一样尺度的特征图,高层网络的语义信息并没有被底层网络更多的学习到。
YOLO系列算法中引用了FPN思想,参考这些理念,对SSD算法进行改进,在其网络结构上加入FPN网络[6],从而得出一种网络掺入了跨层连接理念(cross layer connection),命名为SSD-CLC网络。
2.1 SSD-CLC网络概述
常态下,网络结构中,位于底层的特征图其分辨率高于其目标的位置精确,不过蕴有较少的特征语义信息,另一方面在高层方面,其包含的语义信息多,目标的位置却不怎么精确。特征金字塔的核心理念就在于跨层连接多种尺寸大小的卷积层,这样连接的卷积层兼并了低层网络的特征还有高层网络的特征,让网络对更多的特征进行学习,嵌入FPN网络,能让SSD算法的检测效果更进一步。
2.2 SSD-CLC 的网络结构模型
引入跨层连接思想能够让被改进的网络多个特征层的语义信息被更多的学习到,SSD算法里采取相似的跨层连接于多种不同尺度的卷积层,也能实现相近的结果。把FPN嵌入到SSD算法的结构中,其网络模型SSD-CLC如图3所示。
从图3可知,SSD-CLC 网络结构中19×19规格的特征图是由10×10规格的特征图经过上采样后得出的;将上采样得出的结果和原来的19×19规格的相叠加,得到合成后的19×19特征图;最终将新得到的2个特征图加上原有的4个特征图实行目标检测流程。采样方法一般有双线性插值、均值插值、中值插值、最邻近插值等,这里选取的是最邻近插值,这种方法对运算量要求不高,把图片中所有点的像素值赋成原图片里和其最挨着的点的像素值。
图3 SSD-CLC网络模型
3 实验及其结果分析
本文实验环境为:惠普暗影精灵5Plus笔记本 win10 操作系统,模型使用Pytorch搭建,采用GPU加速训练,显卡型号为NVIDIA 2080Ti,最终对实验结果用3个参数做为评价指标:AP(平均检测精度)、Recall(召回率)和检测速度DR(Detection Rate)。
3.1 神经网络训练
数据集在网络模型训练中起着重要的作用,数据集的质量对模型训练的结果起着至关重要的作用,本文识别的对象为骑车人,目前针对于骑车人识别研究的数据集较少,经过筛选,本文选用的数据集为TDCB数据集,该数据集由清华大学Li的团队和戴姆勒司合作制作而成[7],经过图像的采集和标注后制作而成。
该数据集主要包含训练集和测试集,比例约3∶1,训练集包含9 741张图片且只标注骑车人,测试集共有2 914张图片,内含6种标注目标,分别为:骑车人、行人、骑摩托人、轮椅骑手、骑电瓶车人和骑三轮车人。目前主流数据集标注文件格式为VOC数据集标注文件格式和COCO数据集标注文件格式,VOC数据集标注文件格式为xml格式,由于数据集标注文件为json格式,故TDCB数据集并不能被直接使用,编写相应的标注文件格式更改程序,将其转化为xml格式,使其能够被直接使用。
SSD-CLC算法在上述的TDCB数据集进行训练后,损失函数曲线如图4所示。
图4 训练完成后的损失函数曲线
3.2 实验结果
通过仿真实验可以看出,在SSD算法引入了跨层连接,识别效果有一定程度的提高,如图5所示。图5(a)和图5(c)是SSD引入跨层连接前的识别效果,其误把夹在人群间的行人识别成了骑车人,引入之后,误检消除,如5(b)所示。图5(c)为SSD的识别效果,其把远处的一个行人误识别成了骑车人,引入跨层连接后同样消除了误识别,结果为图5(d)。从图5(b)和图5(d)结果还可以看出,在消除了误检的同时,还一定程度的提高了检测精度。
图5 SSD-CLC识别效果
3.3 SSD-CLC仿真结果评估分析
SSD和SSD-CLC在TDCB数据集上对所有测试样本进行试验后,得出PR曲线如图6所示。
图6 SSD和SSD-CLC实验的PR曲线
由图6可以看出,相对于SSD算法,改进的SSD-CLC算法在平均精度上有所提高,其识别精度在召回率低的时候也有所提高,通过此结果可以看出,网络结构引入跨层链接后,能学习到更多的特征,识别的结果统计见表1。
表1 SSD与SSD-CLC识别结果对比
实验结果表明,对SSD算法改进后,在检测小目标上效果更进一步,减少了误检的情况,其平均检测精度提高了2.2%左右,平均检测时间增加了大约0.02 s,从总的时间占比角度来看,影响较低,在总体上没有改变检测速度的情况下,提高了检测精度,尝试性优化后得出的SSD-CLC在检测效果有所提升,对提高公路骑车人安全方面有着重要意义。
4 结束语
本文采用SSD算法对公路场景下骑车人识别技术进行研究,之后针对SSD算法检测小目标时效果不太理想和平均检测精度偏低的问题,对SSD算法进行尝试性的改进,借鉴YOLOv3的跨层连接思想,对网络结构进行改进,将特征金字塔嵌入到网络中,以提高小目标检测效果和检测精度;通过在数据集TDCB上进行仿真实验证明,经过优化得出的SSD-CLC算法的平均检测精度提高了2.2%,同时也提高了对小目标的检测效果,虽在一定程度上减缓检测速度,但检测速度仍旧符合实时检测要求,实验结果证明,尝试性的改进提高了SSD算法对骑车人识别的检测效果,这对提高公路环境下骑车人的安全性有着重要意义,有利于减少交通事故的发生。