基于机器视觉和深度学习的车辆碰撞预警算法研究
2023-06-05申海洋霍魁王德喜
申海洋,霍魁,王德喜
(1.巢湖学院 电子工程学院,安徽 合肥 238024;2.山西大学 物理电子工程学院,山西 太原 030006;3.科大智能科技股份有限公司,安徽 合肥 230088)
0 引言
在引发车辆交通事故的众多因素中,因跟车距离过近、刹车反应不及导致的追尾事故以及旁边车道车辆并入本车行驶车道,引起的侧面碰撞事故占了较大的比例[1]。因此,对上述两个因素引起的碰撞进行预警研究,对预防和减少事故发生具有重要的意义。
国内外学者在车辆防碰撞预警领域展开了很多研究,究其方法可分为基于激光、毫米波雷达的防碰撞技术研究[2]和基于机器视觉的防碰撞算法研究[3]。基于激光、毫米波雷达的防碰撞技术对静态物体识别存在较大的困难,且该类技术需要相应的物理设备支持,设备投入成本较高,设备后期的维护更新需要耗费较多的人力物力。相比而言,基于机器视觉的车辆防碰撞算法的优点是能检测、识别静态障碍物,算法适应性强且设备成本低、便于维护。因此,该类算法成为当前研究的热点。
袁守利和郭铮[4]研究提出根据驾龄、疲劳强度和应变能力来计算驾驶员反应时间构建的车辆碰撞预警模型,其缺陷是:在其数学模型中,驾驶员反应时间这一参数,因人而异,具有一定的变化性,导致该算法适应性不足。蔡创新等[5]提出车路视觉协同的高速公路防碰撞预警算法,将检测出的车道线和所驾驶车辆车速作为输入参数来构建安全距离模型,以设定预警安全区域,通过前车位置和安全距离模型对碰撞预测。该算法对自身车速的测算是以标准化车道线为前提,这与现实路况存在一定差异,所得速度不够准确,另外算法中车道线的检测受环境因素影响较大。Hiraoka 和Takada[6]提出利用“避撞减”参数来预测与前车的碰撞概率,该算法以前车匀速行驶作为前提,这与实际驾驶情形不符,使碰撞预测准确度受限。
综上所述,目前研究存在的问题主要集中在无法有效识别静态物体,不同交通场景下算法适应性不强等方面。针对上述问题,为实现对静态目标的识别,同时提高碰撞预测的准确性和算法的适应性,本文提出一种基于机器视觉和深度学习的车辆碰撞预警算法。算法的主要思想是通过前置高清摄像头采集车辆前方路面图像后,根据不同车速,在图像中设置不同范围的安全区域,再利用深度学习卷积神经网络CNN[7-8]对图像中车辆目标进行追踪和检测。最后,结合安全区域和车辆检测结果对追尾碰撞预警。算法的总体流程如图1 所示。
图1 碰撞预警算法总体流程图Fig.1 Overall flow chart of collision warning algorithm
文章提出的车辆防碰撞算法创新点在于:
1)联合使用基于模板的直线检测方法和霍夫变换较好地实现了对车道线的检测;
2 ) 提出基于车速的多尺度安全区域构建,更加符合实际驾驶中不同车速对安全距离要求,适应性强;
3) 使用深度学习卷积神经网络对车辆目标进行检测,在满足检测精度的同时也提高了检测速度,满足预警算法实时性要求;
4) 通过检测出的车辆目标和安全区域的位置关系来对碰撞进行预警,同时实现了追尾碰撞和侧面碰撞两种不同类型的威胁预警。
1 安全区域构建
车辆发生碰撞事故的主要原因有如下两点:其一是和前车没有保持有效的安全距离,在驾驶员进行制动后车辆由于惯性会继续行驶,如果距离前车过近则会发生碰撞;其二是车辆行驶中,相邻车道车辆突然侵入本车行驶车道从而引起侧面碰撞事故。在分析上述原因后,提出构建安全区域的方法,通过检测是否有车辆侵入安全区域来对碰撞进行预警。安全区域构建算法的实现步骤如下:
第一步:使用基于模板的方式检测直线段,利用形态学方法对车道线进行校准、接续,最后,再使用霍夫变换检测出车道线;
第二步:在图像上标定车辆前方距离,设定多个不同距离的入侵线;
第三步:通过传感器获取实时车速后,根据车速选择安全区域前端入侵线;
第四步:使用检测到的车道线和入侵线构建梯形安全区域。
1.1 车道线检测
车道线的检测是构建安全区域的重要前提,对车道线检测相关技术的研究,也一直是当前研究的热点。目前,车道线检测算法以基于灰度特征的线段检测居多[9]。基于灰度特征的车道线检测算法的实现,主要依据的是公路图像中的车道线灰度值和路面灰度值的差异性。因此,车道线的提取,常采用对图像进行滤波去噪、灰度化的预处理后,再通过设定灰度阈值的方法来提取车道线。该算法在路况良好且车道线和路面灰度反差较大时,可以一定程度上提取出车道线。但是,一旦图像中出现和车道线灰度接近的物体时,检测效果就会受到严重干扰。基于线段检测的车道线检测算法常使用霍夫变换[10]及其改进型算法来实现,即对图像进行霍夫变换以检测图像中的线段。该类算法存在一个普遍的问题:检测到的线段存在较多的短线干扰,难以对车道线进行准确定位。针对上述问题,本文研究提出了一种新的车道线检测算法,算法具体实现流程如下:
第一步:对原始图像设定ROI 区域,对图像进行剪裁以减小算法运算量;
第二步:对图像进行直方图均衡化处理,提高明暗对比度;
第三步:实施基于模板的线段提取算法;
第四步:使用霍夫变换检测图像中的长直线作为车道线。
其算法流程如图2 所示。
图2 车道线检测算法流程图Fig.2 Flow chart of lane detection algorithm
车道线检测算法具体实施如下:
(1) 图像剪裁
文章中使用安装在驾驶舱前侧的高清摄像头采集车前方图像,所采集到的图像中除路面信息外还包含了天空、信号灯架、绿化带等信息,这些信息对碰撞预警而言是冗余的,因此,首先对视频帧进行剪裁处理以获得感兴趣区域ROI,如图3 所示。
图3 视频帧ROI设定 (a)原始视频帧 (b)感兴趣区域图像Fig.3 Setting the region of interest in the video frame.(a) Original video frame; (b) Region of interest image
图像保留了必要的路面信息,删除了部分无关的冗余信息。通过这样的处理,能够有效地减少算法的计算量,提高算法运行速度。
(2) 直方图均衡化
在摄像头采集到的原始视频帧中,因电子热运动,会不可避免地产生一定椒盐噪声,对后期图像分析产生不利影响。因此,需要对图像进行去噪处理。在获得视频帧的ROI 后,对彩色图像灰度化处理,再使用自适应滤波器对图像进行滤波处理,减轻噪声的影响。在对大量路面图像进行分析后发现:我国公路以柏油马路和水泥道路居多,彩色图像灰度化后,车道线和路面的灰度值较为接近。尤其是当光照较强时,会因路面反光导致路面灰度上升,接近车道线的灰度,导致图像整体的对比度不高。因此,在进行车道线检测之前,需要对图像进行直方图均衡化[11]处理,以提高图像整体对比度。
直方图均衡化以灰度变换为手段增强图像对比度。首先,将灰度值归一化到[0-1]的连续范围内,用pr(r)表示图像中的灰度级概率密度函数,在离散的数字图像中,则用pr(rj)来表示,其含义是图像中灰度值为j的像素个数占整幅图像全部像素总数的比例,采用累积分布函数输出的图像灰度级分布s进行变换,如公式1 所示:
鉴于图像的离散型,在本文算法中,将调整后的视频帧的灰度级分布记为SK,其结果如公式2 所示:
其中pr(rj),j=0,1,2,…,L-1,L是视频帧灰度级直方图。
对视频帧进行直方图均衡化处理结果如图4 所示。
图4 视频帧直方图均衡化(a)原始图像; (b)原始图像直方图; (c)直方图均衡化处理结果; (d)直方图均衡化Fig.4 Histogram equalization of video frames(a) Original image; (b) Histogram of the original image; (c) Effect of histogram equalization; (d) Histogram equalization
原始图像整体灰度暗淡,车道线和路面环境灰度比较接近。由原始图像的直方图可见,灰度主要集中在100~200 的区间范围内,图像整体对比度较差。经过直方图均衡化处理后,视频帧的对比度得到增强,车道线灰度得到提升,路面整体灰度被降低,在图像中车道线变得更加醒目。
(3) 基于模板的线段检测
在完成视频帧ROI 区域设定、直方图均衡化后,就要对车道线进行检测,在图像中车道线呈直线状,因此本文先使用一种基于模板的线段检测算法,对图像中的不同方向不同长度的线段进行检测,以初步定位车道线位置。其算法如下。
首先,将视频帧像素点3×3 邻域中的全部9 个像素点同模板里相应位置的参数进行相乘,再对相乘的结果进行累加,累加的结果用于更新当前像素点的灰度值,遍历整个视频。
由于图像水平方向不会存在车道线,因此算法对于水平方向的直线不予检测,只从图像中垂直方向、左上方、右上方对直线进行检测。对于上述三个方向的直线检测,算法使用了以下3 个模板:
检测效果如图5 所示。在图像中检测出了多条直线,尤其是当前车辆所在车道的车道线被较好地检测出来,另外两侧车道的车道线也能被检测出来。
图5 基于模板的线段检测Fig.5 Line segment detection based on template
由结果可见,图像中水平方向的直线段并没有被检测和显示,这减小了算法的运算量外,也降低了水平方向线段对车道线判断的干扰。存在的问题是,部分较短的线段和右侧绿化带边缘被检测出来。最终,影响对车道线的判断。
(4) 霍夫变换车道线检测
通过上一步已经完成了对图像中直线段的检测,并对检测到的间断分布、处于同一直线上的车道线进行拟合延伸。但是由于检测出多个直线段,因此仍无法准确判定车道线。通过观察可见,在检测出的直线段中当前车道的车道线,其长度较长且呈现出左右对称的分布特征。因此,只要能对图像中最长的两条直线进行定位即可初步确定车道线位置。本文采用霍夫变换来对长直线进行检测定位。
霍夫变换,由Paul Hough 于1962 年提出,该算法是数字图像处理领域用于检测几何形状的经典算法。它利用图像中点线之间的对偶性,通过Hough 变换公式,如公式3 所示,将图像中的曲线或直线转换为参数空间的一个点,通过检测参数空间点的位置来确定其对应曲线在原始图像中的位置。
首先,对步骤(3)的输出结果进行霍夫变换,在变换后的矩阵中检测出较大的5 个极值点,用以对直线段进行定位。其次,绘制出直线,利用MATLAB 图像工具箱的houghlines()函数获取线段端点,标注最长的两条直线,实现了车道线的检测,如图6 所示。
图6 基于霍夫变化的车道线检测(a)霍夫变换; (b)检测到的车道线Fig.6 Lane detection based on Hough change(a) Hough transform; (b) Detected lane line
实验结果可见,车辆当前所在车道的车道线被较为准确地识别出来。
1.2 基于不同车速的安全区域构建
在完成车道线的检测工作后,开始安全区域的构建。本文车辆碰撞预警算法构建的安全区域由车道线和车辆前方入侵线构成的图形区域组成,其中前方入侵线的设定由安全车距决定。首先,根据实际测量的距离,对不同车距的入侵线在视频帧ROI 中进行标定和校准,如图7 所示。
图7 入侵线标定模型Fig.7 Model of calibrating intrusion line
通过实际测量的距离,分别标定10、30、50和100 m 的位置,并在相应位置设置好入侵线,如图中虚线所示。当物体位于10 m 入侵线处,即线1 处,其离车头的距离近似为10 m,同理,线2、3、4 分别对应距离车头30 m、50 m 和100 m。以上距离是依据我国《道路交通安全法实施条例》[12]和实际驾驶中采用的两秒定律(two-second rule)而设定的,协助驾驶者在理想的驾驶环境中判断避免追尾碰撞的最小安全距离。
我国《道路交通安全法实施条例》第八十条规定,机动车在高速公路上行驶,车速超过每小时100 km 时,应当与同车道前车保持100 m以上的距离,车速低于每小时100 km 时,与同车道前车距离可以适当缩短,但最小距离不得少于50 m。据此,设定了100 m 和50 m 的入侵线。在城市道路行驶时,交通法规并没有明确要求,一般来说车速达到30 km/h 时车距不低于30 m,车速在30 km/h 以下时跟车距离要保持在10 m 以上。
完成入侵线标定和校准后,结合实时检测到的车道线以及当前的车速来构建安全区域。
不同的车速有不同的安全距离要求,相应的安全区域也不同,因此车速的获取对碰撞预警效果的好坏影响较大。在车速检测领域部分研究者运用机器视觉方法结合通过检测线的帧数,采样时间,检测线的长度等参数来对车速进行测算[13],该算法在摄像头静态状态下,在地面预设检测线的前提下,检测其他车辆车速有一定的作用。但是在本车运动状态下对本车速度的计算是待以解决的难题,目前尚未有理想的解决方案。因此,为获取到准确的车速,本文通过使用FPGA 开发板从车辆OBD[14]接口连接车辆主机,获取车辆的实时车速。
获得本车当前车速后,紧接着根据不同车速区间来设定不同的安全区域。如图8(a)所示,当前车速25 km/h,跟车距离应不小于10 m,结合检测到的车道线构建了一个安全区域。
图8 不同车速下的安全区域设定(a)车速25 km/h的安全区域; (b)车速30 km/h的安全区域Fig.8 Safety zone setting based on different vehicle speeds(a) Safe area with speed of 25 km/h; (b) Safe area with speed of 30 km/h
在图8(a)中,梯形区域就是当前速度下的安全区域,左右是检测到的车道线,前方是10 m入侵线。当车辆侵入安全区域时,则发出碰撞预警。
当车速提高到30 km/h 以上时相应的安全区域就会更新,如图8(b)所示,安全区域就会扩大,前方入侵线更新为30 m。
同样的方法,算法自适应地在不同车辆行驶速度下构建对应的安全区域以满足不同车速下的碰撞预警的需要。
2 基于深度学习的车辆目标进行检测
在完成车辆行驶安全区域的构建后,为了进行碰撞预警就要对道路上的车辆目标进行检测,对车辆的位置进行定位,判断车辆和安全区域的位置关系以决策是否具有碰撞风险。
如何准确、快速地在复杂的交通流检测出车辆目标是解决问题的关键。目前对车辆目标的检测主要有如下两个方面:其一是通过传统手动提取目标特征对目标进行检测的方法。例如提取边缘方向直方图等特征,再遍历整幅图像对特征进行匹配来检测目标,这样的方法计算量大,实时性不够,对于目标多样性变化的检测效果不好,鲁棒性较差。其二是当前日益成熟的基于深度学习的目标检测算法中,深度学习卷积神经网络及其改进算法在车辆目标检测领域取得了较好的效果,成为当前研究的热点。
碰撞预警关乎驾驶者的生命安全,对车辆检测准确性和实时性要求极高,因此文本采取卷积神经网络CNN(Convolutional Neutral Network)网络模型对车辆目标进行检测以满足检测精度和速度的要求。
2.1 卷积神经网络简介
CNN 是机器学习算法中的经典算法之一,其在视觉识别、语音识别领域有着广泛的应用。随着深度结构在特征提取上的研究深入化,同时,伴随着计算机性能的不断提升和大数据云计算技术的发展和应用,CNN 在图像识别、目标追踪领域取得了重大突破。
卷积神经网络的基本架构是由对目标进行提取的特征提取器和对目标进行分类的分类器这两个部分构成。在特征提取器的设计中,采用了多个卷积层和池化层,对输入目标的特征进行提取、处理,处理过程中不断缩小特征图。特征提取器后面连接由多层感知结构的分类器,最终由特征图构建特征向量输入到后层分类器。
2.2 车辆目标的检测
为快速、准确地检测车辆目标,文章采用Faster R-CNN( Faster Regions with Convolutional Neural Network)对车辆目标进行检测[15]。算法的核心是对CNN 卷积神经网络构建和训练,完成该项工作后即可用于对车辆目标进行检测。
其算法总体结构分为卷积神经网络的构建和训练以及调用CNN 检测车辆目标两个部分,如图9 所示。
图9 车辆目标检测算法流程图Fig.9 Flow chart of algorithm for vehicle target detection
2.2.1 卷积神经网络的构建和训练
第一步:构建图像数据集。事先采集一定数量的图像并对图像中的车辆目标进行标注,构建图像数据集。为了提高CNN 的鲁棒性,必须获取一定规模的训练数据,本文在不同场景下采集了1000 帧含有车辆的图像,除自主采集到图像数据集外,本文还在VISDRONE 数据集[16]中选择了1000 张含有车辆的图像和UADETRAC[17]数据集中的1000 张图像,一并构成本文使用的数据集,部分数据集图像标记如图10 所示。
图10 车辆图像标记Fig.10 Vehicle image marking
第二步:加载预先构建好的图像数据集,用于训练。
第三步:构建卷积神经网络。CNN 是车辆目标识别的核心,其由输入层、中间层和网络层构成。本文使用的CNN 由MATLAB 神经网络工具箱来实现。首先,定义网络输入层,设定CNN 的类型和维度,再对网络中间层进行定义,接着定义输出层,最终构建出卷积神经网络。
第四步:利用CNN 网络进行训练。完成CNN 网络的构建后,再对CNN 网络进行训练,将数据按标号,将70%划分用于训练,后30%用于测试,文章采用trainFasterRCNNObjectDetector 函数来训练R-CNN,对运行性能进行了优化,最终得到了训练好的卷积神经网络。
2.2.2 车辆目标的检测
完成卷积神经网络的训练后可用于对车辆目标的检测,其具体检测过程如下:
第一步:通过摄像头采集到车辆前方视频帧。
第二步:设定ROI 区域,采用检测车道线时已分割出的图像区域作为检测对象,减少道路两侧停车位上的车辆或其他不在道路上的车辆对检测结果的影响。
第三步:调用训练好的卷积神经网络对车辆目标进行检测。文章对算法进行了实测,结果如图11 所示。在图11(a)中,可见在本车行驶车道前方有一辆小型汽车,右方车道有一辆小型汽车,两辆汽车都被准确地检测到,并进行标注。再将算法应用到更复杂的场景中,如图11(b),也得到了较为理想的检测结果,除本车同向行驶的两辆SUV 被检测出外,左侧对向车道中的四辆汽车含一辆公交车被检测出来并分别进行了标注,其中最左侧车辆和较远处车辆得分相对较低,但也能被识别并标注出来。检测结果和实际情况相符,实践证明本文基于深度学习卷积神经网络的车辆目标检测算法在对车辆目标的检测上具有较高的准确率。得益于数据集的获取和CNN 模型的优化设计,算法较好地实现了对车辆目标的检测且检测速率达到了每秒35 帧,可满足本文碰撞预警算法的需求。
图11 车辆目标检测测试(a)简单交通场景测试; (b)复杂交通场景测试Fig.11 Vehicle target detection test(a) Testing in simple traffic scenarios; (b) Testing in complex traffic scenarios
3 碰撞预警模型说明
在完成对视频帧中车辆目标的检测后,记录下车辆的位置信息,结合当前车速下的安全区域即可实现对预碰撞的预警。碰撞预警检测采用的模型如图12 所示。
图12 碰撞预警检测模型Fig.12 Detection model of collision warning
在碰撞模型中,安全区域由车道线当前入侵线构成。
以当前车速为30 km/h 时碰撞预警为例,说明碰撞预警的检测原理:当车速30 km/h 时,入侵线距离本车30 m,由此构建了安全区域如图12 中梯形区域所示,通过基于深度学习卷积神经网络在视频帧中先后检测到三个汽车目标,分别记作车辆1、车辆2 和车辆3。图中车辆1位于安全区域外,则表示本车和车辆1 暂无碰撞风险;车辆2 侵入安全区域,这时车辆2 已经离本车过近,在当前车速下有追尾碰撞风险;右侧车道的车辆3 从车道线侵入安全区域,表示车辆3 和本车有侧面碰撞的风险。
通过上述方法在车辆行驶的过程中,不断地对车道线进行检测,根据车速及时更新安全区域,实时追踪视频中的车辆目标,结合碰撞预警模型对碰撞进行预警。
4 实验与结果分析
文章采用的硬件环境:Core i7-10750H @2.60 GHz 六核处理器;16 GB 内存;Nvidia Ge-Force GTX 1650 Ti 显卡;视频采集设备:DJFC21030。
为了对本文车辆碰撞预警算法的有效性进行验证,在实际交通流中进行多场景的测试。测试在不同车速下,不同路况下算法的有效性,验证算法的鲁棒性。
以图13 为例,对两个不同车速下碰撞预警算法进行了验证,在图13(a)中本车车速35 km/h,距前车距离小于30 m 的安全距离,算法检测到当前车道前方有一辆汽车已经侵入安全区域内,当前有碰撞风险,发出预警。
图13 碰撞预警测试(a)车速35 km/h 测试结果; (b)车速15 km/h 测试结果Fig.13 Test of vehicle collision warning(a) Test results at 35 km/h; (b) Test results at 15 km/h
图13(b)中,车辆需要左转,因需要等待左转信号减速到15 km/h,此时入侵线设定为10 m,检测到前方车辆位于当前的安全区域外,也无其他车辆在安全区域内,此时认为当前车辆暂无碰撞风险。
将本文算法模型定点化后部署在Xilinx PYNQ Z2 FPGA 上运行,在多种不同路段对车辆碰撞预警算法进行测试,测试结果统计如表1 所示。
表1 碰撞预警实测结果统计Table 1 Statistics of measured collision warning results
当车辆行驶在城市快速路、市内道路和高速公路时,本文对碰撞预警的查准率分别达到了94.7%、90.6% 和95.7%,查全率分别为90.5%、87.6% 和92.2%。由于市内道路车辆较多、路况复杂且众多驾驶员的驾驶水平和习惯良莠不齐,导致算法在市内道路的结果数据准确率不及快速路和高速公路。综上所述,实际实验结果表明,本文研究提出的基于机器视觉和深度学习的车辆碰撞预警算法检测速度快、预警准确率高;且可以实现对车道上静态车辆的检测,一定程度上解决了当前汽车“高级驾驶辅助系统”(Advanced Driving Assistance Systems,ADAS)[18-19]中使用毫米波雷达面临的对静态障碍物检测能力不足的问题,能满足实际驾驶中碰撞预警的需要。
5 结论
本文提出利用机器视觉和深度学习的方法实现车辆碰撞预警,一定程度上解决现有研究对静态目标识别困难、算法适应性不强等问题。以构建安全区域模型、检测车辆目标为核心手段,最终通过车辆和安全区域位置关系作为碰撞预警的依据。算法利用图像处理方法结合优化的卷积神经网络对车辆目标进行检测,最终实现了车辆碰撞预警功能。实验结果表明,在不同交通环境中都达到了较高的识别率,充分验证了本文算法的有效性和鲁棒性,将其应用在车辆驾驶中能有效地实现碰撞预警的目的。
同时,在研究中也暴露出一些问题:在复杂场景下,如有行人或者自行车、电动车、三轮车等非机动车目标出现在车道上时,检测效果受到影响;在对车辆车距进行标定时,会因车道不标准或天气原因带来一定的误差,影响车距标定的准确性。导致入侵线设置不够精细化。因此在后期的研究中需增加对车辆目标以外的其他目标,如行人,非机动车,雪糕筒等的检测功能,另外拟采用姿态传感器和激光测距仪对入侵线进行实时的标定以提高安全区域设定的准确性。