一.简介
随着生活质量的不断提高,汽车在日常生活中越来越普及,但道路交通事故也呈现日渐增长的态势。研究发现,驾驶员注意力不集中、疲劳驾驶和驾驶行为不成熟是造成交通事故的主要因素,在此背景下,车辆检测及碰撞预警技术得到了快速的发展。车辆检测及碰撞预警技术作为智能汽车的关键技术之一,能方便人们的出行,降低交通事故概率,具有极高的研究与应用价值。
近年来,深度学习方法不断发展完善,图形处理器(Graphics Processing Unit,GPU)计算性能不断提升,深度学习方法在目标检测领域得到了飞速的发展,这也预示着目标检测方法的研究进入了一个新的阶段。如今已经出现了许多优秀的卷积神经网络(Convolutional Neural Networks,CNN)结构,继而出现了R-CNN、Fast R-CNN、Faster R-CNN、YOLO等目标检测算法,并且这类深度学习算法也逐步应用于车辆检测领域。卷积神经网络在目标检测领域有两条发展主线,第一条是基于目标候选框的检测主线,这条主线是按照R-CNN、Fast R-CNN、Faster R-CNN的线路不断发展的;第二条是基于一体化卷积网络的检测主线,这条主线是按照YOLO、SSD、YOLOv2、YOLOv3的线路不断发展的。第一条主线采用的方法是先粗检测找到目标候选框,再精检测确定检测目标,第二条主线直接采用回归的方法得到最终检测结果,故两条主线相比而言,第一条主线中的算法检测精度较高,第二条主线中的算法检测速度较快。
二.算法准备
1.车辆视角定义
根据被检测车辆相对于自身车辆的视角情况,将被检测到的车辆进一步细分为车辆前部、车辆后部和车辆侧部,依照同车道车辆和异车道车辆两种情况对被检测车辆的视角进行定义。
(1)同车道被检测车辆
当被检测车辆与自身车辆同向行驶时,若自车行驶方向与被检测车辆行驶方向的夹角小于30度,则将被检测车辆的视角定义为车辆后部,如图1(a)所示;当被检测车辆与自身车辆相向行驶时,若自车行驶反方向与被检测车辆行驶方向的夹角小于30度,则将被检测车辆的视角定义为车辆前部,如图1(b)所示;其他视角的被检测车辆定义为车辆侧部,如图1(c)所示。
(2)异车道被检测车辆
当被检测车辆与自身车辆同向行驶时,在车载摄像头获取的实时图像中,以能否观察到被检测车辆的后轮作为判断依据,若能观察到被检测车辆的后轮,则将被检测车辆的视角定义为车辆后部,否则将被检测车辆的视角定义为车辆侧部,如图2(a)所示;当被检测车辆与自身车辆相向行驶时,在车载摄像头获取的实时图像中,以能否观察到被检测车辆的前轮作为判断依据,若能观察到被检测车辆的前轮,则将被检测车辆的视角定义为车辆前部,否则将被检测车辆的视角定义为车辆侧部,如图2(b)所示。
2.算法网络结构构建
对车辆进行视角检测时,相当于对车辆目标进行进一步的细分。相较于其他目标,例如人,车辆目标与其他目标之间的特征差异性较大,深度学习网络容易对特征进行学习,检测难度相对较低。但在车辆目标内部进一步识别其视角时,特征差异性较小,深度学习网络难以对特征进行学习,检测难度显著提升。因此在设计算法的网络结构时,既需要保证该网络结构能正确检测车辆目标,还需要保证该网络结构能正确识别车辆的视角。
正确识别车辆视角需要控制好车辆视角之间的特征差异。车辆视角之间的特征差异过小容易造成欠拟合,最终检测效果表现为虽然能检测出车辆,但车辆视角容易误识别;车辆视角之间的特征差异过大容易造成过拟合,最终检测效果表现为虽然车辆视角识别准确率高,但许多车辆被漏检。
基于上述要求,车辆检测算法的网络结构由YOLOv2算法网络结构改进得到。在YOLOv2算法网络的最后一个卷积层前,新增一个车辆视角特征提取器,目的是在确定车辆目标之后增大车辆视角之间的特征差异。该车辆视角特征提取器由四个卷积核尺寸为1*1像素和3*3像素的卷积层组成,1*1像素和3*3像素的卷积层交替进行卷积,车辆检测算法具体网络结构信息如图3所示。
网络结构读取尺寸调整为416像素、416像素、3通道的图片后,在每次池化操作前均进行相应的卷积操作。架构中采用了常用的3*3像素的卷积核,在每一次池化操作后把通道数翻倍,把1*1像素的卷积核放在3*3像素的卷积核之间用以压缩特征,激活函数采用Leaky ReLU激活函数,值取0.1。各层整体上布置成链式结构,另外添加一个分链用以提高小目标的检测能力,先将26像素、26像素、512通道的数据体分别按行和列隔点采样,再将得到的4张13像素、13像素、512通道的数据体按照通道串联起来得到13像素、13像素、2048通道的数据体,最后将该数据体与主链上13像素、13像素、1024通道的数据体进行拼接,得到13像素、13像素、3072通道的数据体。
将13像素、13像素、3072通道的数据体先进行一次卷积操作,得到13像素、13像素、1024通道的数据体,再使用车辆视角特征提取器对视角特征进行压缩与整合,最后加入一个卷积核尺寸为1*1像素的卷积层,将数据体的通道数与检测信息的维度进行统一。
采用车辆检测算法的网络结构最终会生成13*13*40的数据体。13*13*40代表数据体的宽为13像素、高为13像素、通道深度为40,数据体中宽和高的尺寸均为13个像素,因此在宽和高的二维平面内形成了169个网格,每个网格都将预测5个边框,每个预测边框中包含8维预测信息。具体表现为回归边框的中心点位置坐标(x,y),回归边框的宽w和高h,边框置信度C,车辆的“front”、“back”、“side”视角信息。每个网格最终会形成一个40维的向量,这40维向量最终由数据体中的深度通道显现出来。
三.实验验证
1. 实验方法与步骤
①软件环境搭建。用JetPack 3.1软件组件包对Jetson TX2开发板进行刷机操作,使开发板具备运行代码的软件环境。
②代码移植。代码移植是指将不同操作平台和不同编译环境下的程序代码采用相关方法迁移到自己的系统中运行。文章中代码前期在Windows系统下运行,在实车实验时需要在Linux系统下运行,考虑到在Jetson TX2开发板上编译效率极低,因此将代码移植到Jetson TX2开发板上时,采用如图4所示流程。先将代码复制到PC端的Linux系统,根据不同操作平台下编程语言的差异,修改相关代码的表达方式,更改相关的环境配置,并根据编译出现的问题不断进行调试,直至该代码能够在PC端的Linux系统下编译通过并成功运行。然后将PC端Linux系统下的所有文件打包到Jetson TX2开发板上,采用Linux系统下的指令执行命令,完成该代码需要执行的功能。
③硬件环境搭建。将硬件环境与实验车辆连接,连接情况如图5所示。先采用车载逆变器将车上12V电源经过汽车点烟器引到逆变器输出口,再通过电源适配器将逆变器输出口220V的电源转换为19V的电源供Jetson TX2开发板使用。开发板用HDMI接口连接显示屏,用USB接口连接摄像头、键鼠设备。
④危险行驶区域标定。按照4.1.3节的方式确定危险行驶区域在图像中的像素点位置,并将像素位置值输入危险行驶区域子模型,完成对图像中危险行驶区域的标定。
⑤实车实验测试。启动实验车辆及文章中构建的车辆碰撞预警模型,对车辆行驶过程中采集到的视频进行车辆检测及碰撞预警判断。
2. 实验结果图
在不同环境下车辆检测及碰撞预警结果如下:
实车试验的结果图如下:
四.后续改进
非结构化道路场景下的车辆检测及碰撞预警方法研究还处于初步研究阶段,由于自身能力和研究时间的限制,部分研究内容还需要不断完善,具体包括以下两个方面:
(1)文章中基于视角提出的车辆检测算法虽然能够在单目摄像头采集的图像下获得良好的车辆检测及视角识别效果,但由于传感器单一,获取信息依然有限。若要得到更加优异的车辆检测及碰撞预警模型,需充分发挥摄像头、毫米波雷达、激光雷达等传感器各自的优势,融合多传感器的数据,获取更多有用信息,提高车辆检测及碰撞预警系统的精度、实时性及鲁棒性。
(2)文章中仅仅对非结构化道路上的车辆进行了细致的检测,但车辆实际行驶在非结构化道路上时,道路上的障碍物种类更为复杂,仅仅对非结构化道路上的障碍车辆进行检测难以进行实际应用。因此需要对算法进行优化,使其能够检测到所有对自身车辆存在威胁的障碍物。