使用计算机视觉和人工智能算法的车辆辅助驾驶以及全自动无人驾驶技术,为未来大流量、高流速、高安全交通运输,提供了可及可见的广阔前景。车道线检测是其中最重要的组成部分之一,稳定准确的车道检测是防碰撞、偏离预警、避让行人、路径规划等任务的基础。现有的车道线检测技术大致可分为三类:传统图像处理方法、经典机器学习方法,与深度学习利用神经网络的方法。
在传统方法中,选取的车道线先验特征一般涉及颜色、灰度、边缘宽度、边缘梯度等。文献[2]使用车道线的颜色特征来检测车道,但是颜色特征易受阴影影响,不易与同样受到阴影遮蔽的路面区分开,另外不同的光照条件也使得颜色特征区分能力下降。文献[3]先对图像进行Canny边缘增强,在所得的二值图上依次连接同向相邻点得到连通区域,并用霍夫变换提取候选直线,计算最大交点数为车道消失点。该方法利用连通区域的限定排除了一些噪声直线,但计算消失点前噪声仍较多,影响了消失点计算的准确性,也使得耗时更长。而最大的交点数的过滤条件也缺乏对噪声的考虑。文献[4]先对图像进行逆透视变换,然后应用二维高斯滤波器结合RANSAC(RANdom Sample Censensus)方法进行过滤得到逆透视变换图上的车道线区域,最后映射回原图。这种方式使得车道在逆变换空间恢复平行特性,但对摄像头角度、焦距、俯仰角度等参数要求较苛刻,计算量大。
在利用经典机器学习的方法中,文献[5]对图像进行haar-like特征和边缘特征的窗口滑动计算,用两个级联分类器各进行粗分类,最后融合两个分类器结果得到候选区域。文献[6]对每个像素建立颜色、边缘、纹理特征,并送入分类器进行分类,对图像进行像素级分割。机器学习的引入增加了算法的鲁棒性,但是,人工构造的特征有着局限性和经验性,不具备普适区分能力。
最近,深度学习,特别是使用卷积神经网络深度学习方法在计算机视觉领域表现了其强大的能力[7]。深度卷积神经网络可以自动提取强大的特征用于分类等任务。文献[8]提出了基于像素级的分类网络—SegNet,可以对场景分割并检测车道线、树木、建筑、行人等类别,但其结构复杂,实时性较差。
面对车道线的多样性和环境的复杂性,孤立使用传统的特征和人工构建的特征都有其局限性。本文提出了一种结合先验特征和卷积神经网络特征提取的算法。本算法基于传统方法[9]处理复杂程度较低的粗筛选流程,降低预处理运算量并减轻精细检测的负担,以改善实时性。同时本方法使用深度网络提取精细分类特征,以提升对复杂噪声与场景的处理能力。本文提出的车道检测算法大致可以分为三个步骤:1)边缘增强和线段提取。使用基于车道线先验特征的操作算子进行边缘增强,然后用线段检测器进行线段提取。2)线段筛选。在提取的线段集合上应用基于卷积神经网络的线段分类器对线段进行筛选。3)后处理。对筛选后的线段集合进行聚类生成主车道线。
常用的边缘增强方法有Laplacian算子,Canny算法,Sobel算子等。Laplacian和Sobel算子对噪声较为敏感,同时Laplacian算子二次求导也弱化了车道线的边缘信息,易造成车道线信息丢失。Canny算法需要设定双阈值,不同的阈值设定对车道线边缘检测影响较大[10]。我们发现,车道线与车道线周围区域相比较,在灰度图中的亮度高,在车道线边缘会有亮度的突变,然后经历一段高亮度后到达另一侧边缘,再经历一次亮度突变。这种特性在观测中较为稳定,且可通过梯度模板捕获。本文提出的基于车道线先验特征的边缘增强算子如式(1)所示。
(1)
这种算子只计算了图像的水平梯度,忽略了图像中其他方向的梯度。只考虑图像的水平方向梯度,可以在较好地保留车道线边缘的同时,又减少了图像中其他物体产生的非水平方向梯度信息的干扰。具体的计算步骤如式(2)所示。
Iconv=kernel⊗Igray,Iresult=Scale(|Iconv|)
(2)
即先对灰度化后的图像Igray使用如式(1)所示卷积核进行卷积,得到卷积结果图Iconv。Iconv中包含正值和负值:对于车道线左边缘,计算结果为负值;对于车道线的右边缘,计算结果为正值。为了保留车道线的两边边缘,对Iconv进行绝对值操作,同时将Iconv缩放到0-255的范围,得到结果图 Iresult。图1展示了不同的边缘增强算法的效果。其中图(a)为灰度图,路旁的树杈投影在了车道线之上。图(b)为Canny算法边缘增强效果,可以看出阴影对右侧车道线区域造成了干扰;同时左侧车道线由于受到了栅栏的影响,边缘出现了变形。图(c)为Laplacian边缘增强的效果,由于Laplacian相当于对图像进行了二次求导,结果图像的整体亮度偏暗,车道线有所丢失。图(d)为Sobel算法边缘增强效果,可以看出阴影影响有所减弱,因为Sobel只考虑了图像的水平和垂直梯度,但是阴影的影响仍然存在。图(e)为本文提出的基于车道线先验特征的边缘增强算法,可以看出车道线边缘被很好地从阴影中提取出来,并较明显地突出了车道线边缘。同时对比图(d)可以发现,图(e)中的车辆的水平边缘被滤除。图( f )为对图(e)进行形态学开操作后的效果,用于对图(e)进行平滑,利于后续车道线提取。
图1 不同边缘增强算法效果
Fig.1 The results of different edge enhance algorithms
本文使用文献[9,11]的线段检测器进行线段提取。通过像素的梯度大小和方向信息,配合NFA(the Number of False Alarm)的约束,线段检测器可以给出较为精确的结果,并同时控制误检率[12]。记边缘增强后图像为Ienhance,经过线段检测器提取线段后得到候选集C,C由式(3)计算得到。
C=LSD(Ienhance)
(3)
LSD的详细计算方法参见文献[9,11]。线段集合C由ci组成,线段ci定义为式(4)。
...,l)
(4)
其中为线段ci的起点,为线段ci的终点,θi为线段ci的倾角,θi∈(-90°,90°),θi计算公式为式(5):
(5)
在利用线段检测器提取的线段集合中包含了许多的噪声线段。传统人工构造特征在区分车道线线段和噪声线段时由于受光照等环境因素影响,精度较差。而深度神经网络可以自动构造特征,同时其特征表达能力强,健壮性高。本文设计了一个基于卷积神经网络的线段分类器对线段集合进行筛选。
利用线段的信息可以获取线段的感受域。感受域中的信息为线段所在位置的空间信息,车道线线段和非车道线段所处的感受域不同。基于这种假设,本文对线段的分类转换为对线段感受域的分类结果。感受域计算方法如下:
(1)对每个线段元素,依据式(6)计算其中点值。
(6)
(2)以中点值作为感受域的锚点(窗口中心点),计算宽w,高h的矩形recti,如式(7)所示。
(7)
(3)依据recti从图像中截取感受域图像。
对于参数w,h的选择,应当使得构成的矩形区域完全包含车道线区域;同时w,h也不宜过大,使得车道线感受域过多的其他信息,增加了分类难度。因此,参数w,h的选择应当参考车道线的宽度。依据经验,车道线具有确切且相近的宽度,因此对于一个确定的摄像头,以及指定的图像分辨率,车道线的宽度会在一个确切的范围内。例如文献[13]将车道线宽度设置为图片宽度的0.01倍至0.1倍。本文中参数w至少为2倍的最大车道线宽度,可设为64;参数h可以简单的设置其等同参数w。
本文设计的卷积神经分类网络结构如图2所示。网络输入层为64*64的RGB图像。网络中c1,c2为卷积层,p1,p2为最大池化层(Max-pooling)。第一个卷积层c1的卷积核大小为9*9,通道
图2 卷积神经分类网络结构
Fig.2 Construction of convolutional neural networks
数为64,滑动窗口步长为5*5。第二个卷积层c2的卷积核大小为6*6,通道数为128,步长为1*1。最大池化层p1、p2核大小为2*2,步长为1*1。p2产生的5*5*128的特征向量将传入全连接层。
全连接层共三层,第一个全连接f3有512个节点;第二个全连接f4同样为512个节点;第三个全连接f5为2个节点,输出二维向量到输出层。在f3以及f4使用了dropout[14]技术防止网络的过拟合。输出层对f5的结果向量进行softmax归一化,使得二维向量被映射至概率空间。判断结果类别为概率值最大的类别。
为了获得较高的线段分类性能,需要借助数据来训练网络。本文通过手机摄像头在真实的行车环境下采集了分辨率大小为480*640的视频,其中包含各种车道线与道路环境。同时,为了提高数据的多样性,本文亦通过网络获取了一段由车载记录仪拍摄的分辨率为480*848的视频作为补充。本文从视频中共截取了1200张图片用于数据集的制作。截取图片时尽量保证图像的非相关性,并包含各种车道环境。数据集组成如表1所示,正负样本比为1∶3。
表1 用于神经网络训练测试的数据集
Tab.1 Dataset for training and testing neural network
统计类型样本总数训练集样本总数测试集样本总数总数40200340006200正样本数量1005085001550负样本数量30150255004650
图3展示了用于神经网络训练的数据集的部分样本。图3(a)为正样本,图3(b)为负样本,可以看出本文的数据集中正样本涵盖了各式车道线与多种复杂环境。同时,负例也涵盖了道路标志,水渍,车辆尾部等较难区分样本。
图3 用于神经网络训练的部分样本
Fig.3 Training dataset for convolutional neural network
卷积神经网络使用随机梯度下降算法进行训练。Batch-size为200,学习率0.01,按截断高斯分布进行初始化。训练时图像以50%概率进行左右镜像翻转。在训练集上共迭代约100000次,并能在测试集上达到约98%的分类准确率。
图4展示了通过深度卷积神经网络分类器对线段进行分类后的筛选结果。图4(a)为线段检测器提取结果;图4(b)为分类器对线段的分类结果,其中绿色为正类,代表车道线线段,红色为负类为非车道线线段。通过观察左列可以发现,绝大部分噪声被分类器排除,在候选线段集合中,代表车道线边缘的线段占大多数。剩余的小部分噪声将通过下面的消失点方法筛选除去。
图4 用卷积神经网络进行线段筛选前后的结果
Fig.4 Results of line detection with and without CNN
图5 车道线集合生成效果
Fig.5 Result of lane marking generation
前面检测到的车道线段都是车道线上的分离短线,为得到完整的车道线,需要对线段集合进行处理。当线段属于同一段车道线时,斜率相近,可利用斜率对车道线线段集合划分。本方法依据斜率对车道线集合进行聚类,每类对应了一条车道线的线段集合。由每类线段集合斜率的均值作为车道线的斜率。同时通过计算所有线段所在直线的交点,将最大相交个数的交点的设置为消失点;但是由于计算误差以及噪声的影响,车道线边缘线段之间产生交点不一定交于一点,但是一定会出现在消失点附近,并且呈现高密度分布。本文采用DBSCAN(Density-Based Spatial Clustering of Applications with Noise)[15]来对交点进行聚类,从而产生消失点。DBSCAN是一种基于密度的聚类算法,其通过将核心点以及密度可达点进行聚类,从而将具有足够高密度的区域划分为一类;同时DBSCAN能够识别出稀疏的噪声数据。由消失点与车道线的斜率确定出车道线。图5为车道线生成效果图。
得到车道线集合后,需经车道线决策来产生主车道线。因为车辆行驶在主车道中,左侧车道线为正,且小于所有左侧车道线;右车道线斜率为负,且大于所有右侧车道线,因此可通过斜率来选择主车道线。我们对车道线按照斜率从小到大排列,选择最大的负斜率车道线和最小的正斜率车道线即可。
本文的算法使用python实现,使用OpenCV库;LSD为c语言实现,本文将其编译成动态链接库接入python;卷积神经网络的建立、训练以及测试都基于tensorflow框架。本文算法实验环境为:64位ubuntu14.04,4核Intel(R)i7-5500@2.40 GHz CPU,8GB RAM。
表2是算法在480*640(未裁剪)图片上的典型运行时间。其中预处理与消失点和后处理步骤运行时间比较稳定。线段提取步骤运算取决于需要提取的线段数目,大致在30~40 ms浮动。神经网络使用CPU 4核运算,其运行时间取决于线段提取步骤提取的线段数目,较高峰值为100 ms。表3展示了本方法使用的神经网络参数数量。
表2 算法典型运行时间
Tab.2 Typical run time of algorithm
预处理线段提取神经网络消失点+后处理总计2 ms35 ms80 ms3 ms120 ms
表3 模型参数数量
Tab.3 Statistics of model parameters
模型部分参数形状参数数量C19∗9∗64∗315552C26∗6∗128∗64294912F15∗5∗128∗5121638400F2512∗512262144F3512∗21024总计-2212032
图6为本文算法的部分测试结果图。图6(a)展示了算法对线条状噪声干扰的健壮性,线条状干扰会在线段集合中出现,但在线段分类器中被排除。图6(b)展示了算法对于阴影干扰的健壮性,部分阴影会在预处理边缘增强中排除,剩余阴影线段会在线段类器与消失点筛选中排除。图6(c)展示了算法在不同光照条件下的健壮性。这主要是因为本文算法在提取线段时只利用了车道线边缘信息,没有用到颜色等易受光照影响的信息。图6(d)展示了算法在车辆行驶时不同偏转朝向时的健壮性,这主要是因为本文算法几乎不需要强先验经验。图6(e)(f)展示了算法对道路标志干扰的健壮性,主要因为预处理阶段利用算子进行边缘增强,只保留了近似车道线的信息;线段分类器与消失点筛选的结合排除了噪声。以上结果表明了本文实现的算法具有较强的健壮性,具有应对各种复杂车道环境的能力。
图6 不同路况实验结果
Fig.6 Experiment results on different roads
表4 各方法量化性能比较
Tab.4 Performance comparison of different methods
数据\方法本文准确率本文误检率[10]准确率[10]误检率[9]准确率[9]误检率视频190.5%4.25%86.5%6.5%84.13%9.25%视频292.67%3.67%89.33%5.0%87.67%7.67%平均91.59%3.96 %87.92%5.75%85.9%8.46%
为了进一步验证本文算法的有效性,本文依据文献[10],文献[9]实现的方法作为对比算法。文献[10]先对图像进行Canny边缘增强,在所得的二值图上依次连接相邻点,得到连通区域。在每个连通域上利用霍夫变换提取出候选直线,计算直线的交点,取最大交点数为消失点,并由消失点再次进行过滤,最后应用Kalman滤波器进行跟踪。文献[9]通过行方向的Sobel算子增强图像,利用线段检测器提取线段,并利用倾角、车道线宽度等几何特征结合帧间约束对线段进行筛选。本文在视频1与视频2上测试了本方法与文献[9-10]算法,并通过随机抽样的方法对视频1取800 不同帧,视频2取300不同帧进行统计。量化指标的计算方法为:若超过70%的检测结果处于实际车道线上,则为正确;若检测结果处于其他位置上,则为错检;若无检测结果,则为漏检。准确率为检测正确样本数目与总数的比值。结果如表4所示。本文在准确率上超过了文献[9-10]的方法,这主要是因为卷积神经网络的线段分类器对边缘线段进行筛选具有较好的优良性,同时分类筛选之后更容易计算准确的消失点和对线段进行斜率聚类。
本文从传统的车道线检测流程入手,提出了一个结合了传统特征与深度学习的方法。卷积神经网络通过大量的车道正样本和非车道负样本的训练,可以生成能够有效区分车道区域和非车道区域的特征表示,极大提高了车道检测的正确率。实验表明,本文实现的算法运算速度较快,同时具备较强的健壮性和较高的检测准确度。
[1] Chiu Kuoyu, Lin Shengfu. Lane detection using color-based segmentation[C]∥IEEE Proceedings. Intelligent Vehicles Symposium, 2005. IEEE, 2005: 706-711.
[2] Sun Tsungying, Tsai Shangjeng, Chan V. HSI color model based lane-marking detection[C]∥2006 IEEE Intelligent Transportation Systems Conference. IEEE, 2006: 1168-1172.
[3] Hou Changzheng, Hou Jin, Yu Chaochao. An efficient lane markings detection and tracking method based on vanishing point constraints[C]∥Control Conference. IEEE, 2016: 6999-7004.
[4] Aly M. Real time detection of lane markers in urban streets[C]∥Intelligent Vehicles Symposium. IEEE, 2008: 7-12.
[5] Gopalan R, Tsai Hong, Shneier M, et al. Video-based lane detection using boosting principles[J]. Snowbird Learning, 2009.
[6] Gopalan R, Tsai Hong, Shneier M, et al. A Learning Approach Towards Detection and Tracking of Lane Markings[J]. IEEE Transactions on Intelligent Transportation Systems, 2012, 13(3): 1088-1098.
[7] Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]∥International Conference on Neural Information Processing Systems. Curran Associates Inc, 2012: 1097-1105.
[8] Badrinarayanan V, Kendall A, Cipolla R. SegNet: A Deep Convolutional Encoder-Decoder Architecture for Scene Segmentation[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, PP(99): 1-1.
[9] 胡忠闯, 陈杰, 顾兆伦, 等. 单目视觉下结构化车道实时检测[J]. 信号处理, 2017, 33(4): 635- 640.
Hu Zhongchuang, Chen Jie, Gu Zhaolun, et al. Real-time Structural Lane Detection by Monocular vision[J]. Journal of Signal Processing, 2017, 33(4): 635- 640.(in Chinese)
[10] Son Jongin, Yoo H, Kim S, et al. Real-time illumination invariant lane detection for lane departure warning system[J]. Expert Systems with Applications, 2015, 42(4): 1816-1824.
[11] Gioi R G V, Jakubowicz J, Morel J M, et al. LSD: A line segment detector[J]. Image Processing on Line, 2012, 2(4): 35-55.
[12] Grompone G R, Jakubowicz J, Morel J M, et al. LSD: a fast line segment detector with a false detection control[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2010, 32(4): 722-732.
[13] Liu Guorong, Li Shutao, Liu Weirong. Lane detection algorithm based on local feature extraction[M]. Chinese Automation Congress(CAC), 2013: 59- 64.
[14] Hinton G E, Srivastava N, Krizhevsky A, et al. Improving neural networks by preventing co-adaptation of feature detectors[J]. Computer Science, 2012, 3(4): 212-223.
[15] Ester M, Kriegel H P, Xu Xiaowei. A density-based algorithm for discovering clusters a density-based algorithm for discovering clusters in large spatial databases with noise[C]∥International Conference on Knowledge Discovery and Data Mining. AAAI Press, 1996: 226-231.
钱沄涛 男, 1968年生, 浙江杭州人。博士, 浙江大学计算机学院教授, 博士生导师, 中国电子学会高级会员, 信号处理分会委员;中国航空学会信息融合分会委员;中国人工智能学会智能CAD与数字艺术专委会委员。主要研究方向为模式识别、信号处理、机器学习。E-mail: ytqian@zju.edu.cn
胡忠闯 男, 1992年生, 浙江温州人。浙江大学计算机学院硕士研究生, 研究方向为图像处理。E-mail: huzhongchuang@163.com
陈思宇 男, 1993年生, 辽宁沈阳人。浙江大学计算机学院硕士研究生, 研究方向为机器学习、计算机视觉。E-mail: sychen@zju.edu.cn