![车道线检测在AR导航中的应用与挑战](https://static001.infoq.cn/resource/image/7a/ce/7a8bd5450f203d978070e291aa3c27ce.png)
1. 导读
现代社会中,随着车辆的普及,人的活动范围在逐步扩大,单单依靠人类记忆引导行驶到达目的地已经越来越不切实际,因此车载导航就扮演了越来越重要的角色。
传统车载导航根据 GPS 将用户车辆位置定位于地图上,导航软件根据设定的目的地规划行驶路径,通过屏幕显示和语音播报的形式指引用户行驶至目的地。这样的展示方式使得用户在使用导航的过程中,需要将地图指引信息和语音播报信息与当前自车所处的真实世界连接起来,才能理解引导信息的具体含义,之后做出相应驾驶动作。
总结导航信息处理的整个过程,可以分为三个部分:接收(看/听)、理解、行动。
然而,试想这样一个场景,行驶前方有个岔路,由于没有听清楚需要走左前方还是右前方,这个时候就很容易错过变道时机。
因此,AR 导航利用视觉技术,综合导航信息和真实场景信息,优化了引导信息展现形式,降低了用户的接收和理解成本,所见即所得,用户只用根据导航信息行动即可。
2. AR 导航的定义
车载 AR 导航是指通过摄像头将车辆前方道路的真实世界实时地捕捉下来,利用移动端视觉识别技术及算法,实时地识别车辆行驶场景中的各种重要导航要素,例如车道线、前方车辆、车道相对位置等,再结合自车 GPS 定位、地图导航信息,通过多元信息的融合以及计算,生成虚拟的导航指引模型,并渲染叠加到真实场景上,从而创建出更贴近驾驶者真实视野的导航画面(图 1)。
![](https://static001.infoq.cn/resource/image/89/c9/899b94f326206384c5dd17cb502e7dc9.png)
图 1 AR 导航
在驾驶车辆过程中,车道线的重要性不言而喻,它通过不同的属性,例如虚、实、黄、白等,来指引车辆的行驶方向,规范驾驶员的驾驶行为,避免车辆之间的碰撞,最终实现更加高效和流畅的交通。
在 AR 导航中车道线同样重要,实时车道线检测能够为 AR 导航引擎提供当前车道宽度、车道线属性等信息,从而提前对用户做出正确的引导,指引驶入正确的车道。
如上图所示,通过车道级定位将自车定位在当前路左数第二车道,这时根据导航信息前方将要左转,与此同时通过车道线检测获知左侧车道线为白色虚线,允许变道行驶,再通过车道宽度和自车在车道内距左右车道线的距离,渲染出正确的引导线,指引用户提前变道驶入左数第一车道,避免错过路口,导致偏航行驶,浪费时间精力。
此外,车道线检测还能提供 ADAS 功能,如车道保持、车道偏离预警(LDW)等。
3. 车道线检测背景介绍与方法回顾
有关车道线检测的研究已经持续了比较长的时间,虽说已经取得了一定的成果,但是想要实际应用仍然具有非常大的挑战,导致这种现状主要有以下几个方面的原因:
图像质量问题:摄像头采集得到的图像由于车辆遮挡、树木和建筑的阴影、车辆移动带来的光照剧烈变化等原因而变化巨大;
光照场景受天气因素影响较大:雨天、雪天、雾天、黄昏、夜晚等;
车道线磨损程度不一:高速和城市快速路车道线较清晰,低等级道路磨损较严重,与轮胎划痕难以区分;
车道线宽度不一:通常来说车道线宽度在 2.3m-3.75m 之间,但在现实世界中,特别是低等级道路,车道线宽度变化较大。
多样丰富的场景给基于视觉的算法带来了巨大的挑战,本文将对车道线检测方案进行讲述,并以是否使用深度学习为界,分为以下两个大的体系来介绍:基于特征工程的传统视觉方案和基于图像分割的深度学习方案。
3.1 基于特征工程的传统视觉方案
传统视觉方案里,车道线检测过程较少使用机器学习方法,主要是利用车道线的视觉特征和空间位置关系实现车道线检测提取,通常来说分为以下几个步骤:
预处理:对图像进行预处理,通常包括车辆等障碍物去除、阴影处理、划定感兴趣区域(ROI)、前视图转为俯视图等;
车道线候选点提取:基于颜色和纹理,针对车道线特点设计特有的图像特征提取方式,常用的方法有灰度阈值处理、颜色阈值处理、边缘提取、特定滤波器滤波等;
车道线拟合:在获取到候选点之后,通过一些先验知识(如车道线在俯视图上是平行关系)设置规则,去除一部分 outlier 车道线候选点,之后可采用参数方程的方式,进行车道线的拟合。常见参数方程有直线、二次曲线、样条曲线等,不同的拟合算法对性能也有很大的影响,其中 RANSAC 算法能够较好区分 outlier 和 inlier,所以在车道线拟合过程中得到了广泛的关注;
后处理策略:通过坐标映射,利用车辆行驶过程中时间和空间的连续性,实现车道线跟踪和滤波,从而提高车道线检测的稳定性和准确性。
传统视觉方案检测车道线过程依赖较多的先验假设,特征设计依赖经验阈值的调整,在实际应用中无法应对复杂的道路情况,因此鲁棒性较差,尤其是在光照条件变化、车道线磨损程度不同的影响下,经验阈值非常容易失效,导致较差的检测结果。
但是由于其计算量较小,在算力受限且路况单一(高速/城市快速路)的场景下,仍然可以发挥它的价值。
3.2 基于图像分割的深度学习方案
深度学习图像分割自 2014 年 FCN 提出以来发展迅速,在众多的图像任务中取得了不凡的结果。并且由于车道线在 ADAS 和自动驾驶任务中的特殊地位,可以将车道线检测逐步从通用的分割任务中独立出来,并且取得了较大的进展。
基于图像分割的车道线检测方案处理流程与传统视觉方案类似,主要区别在于车道线候选点的提取方式上,车道线图像分割不需要关于车道线的纹理/颜色/宽度/形状等先验假设,而是通过机器学习从训练样本中获取车道线的相关信息,自动地学习车道线的特征,具体应用时便可以通过学习得到的信息,来预测单个像素位置是否为车道线。
深度学习车道线检测方案基于通用深度学习分割方案,但是针对车道线场景进行特别的改进。
接下来,先介绍近期深度学习车道线检测的相关工作,而后描述 AR 场景下的车道线检测方案。
由于在较多的应用场景中只关注当前车道车道线,大多数方案是先识别全部的车道线,然后通过空间位置关系进行后处理,提取出当前车道车道线,但这个过程中容易出错,稳定性较差,Jiman Kim 在 2017 年提出在图像分割时赋予当前车道左右车道线不同的类别,把单条车道线当做分割的一个实例,通过 End-to-End 方式,直接从图像中提取出当前车道的左右车道线,从而避免了后处理过程中区分左右车道线,降低出错概率。
商汤科技 Xingang Pan 针对车道线细长的结构特点,提出 Spatial CNN 替换 MRF/CRF 结构,在高度和宽度方向(从上至下,从下至上,从右至左,从左至右)逐层进行卷积,以增强信息在空间上的流转,实例分割以当前车道为中心的 4 条车道线,与此同时输出单条车道线的置信度,可以为实际使用的多元信息融合提供依据。该方案在图森未来举办的 Lane Detection Challenge 上取得了第一名。
从前视视角看,车道线最终都交汇于消失点,为了让网络学习图像中的结构信息,Seokju Lee 提出了一个多任务网络,在检测车道线的同时检测地面标志和消失点。针对消失点的特点,作者设计了一个精巧的结构用于检测消失点,并通过实验证明了消失点任务的加入提高了车道线的检测效果。
相比于检测指定数量的车道线,Davy Neven 在 2018 年提出将所有车道线当做一类进行语义分割得到 Binary lane segmentation,与此同时网络输出 Pixel embeddings 结果,提取 Binary lane segmentation 前景区域像素点在 Pixel embeddings 输出上的特征值,使用聚类算法,确定每个像素点的车道线类别,从而实现不定数量的车道线实例分割,以适应不同的车道线场景。
综上,相比于通用图像分割,车道线分割方案主要在利用车道线之间的位置结构关系,针对车道线细长的特点,优化深度网络的空间信息提取能力,并将更多的后处理工作融入至网络中,减少后处理难度和出错概率。
4. AR 导航中的车道线检测方法探索和实践
车载 AR 导航要求将引导要素实时迭加到真实场景中,这对于 AR 导航中的车道线检测实时性和稳定性提出了极高的要求,与此同时,由于车载设备(车机/车镜)的硬件算力较差,一般落后于手机芯片 3-5 年,所以 AR 导航中的车道线检测必须做到又快又好。
为了在车载设备上实现快速高效的车道线检测算法,我们在多个方面进行了尝试:
4.1 高效的多任务模型
由于交通图像中车辆和车道线有一定的相关性 (车辆一般情况在两条车道线中间),为了充分的利用深度学习网络能力,共用网络主干部分提取到的图像特征,我们设计了一个高效的多任务网络(图 2 所示),单个模型完成车辆检测、车道线检测任务和其他任务,并在此基础上,实现了一套多任务权重自学习的机制,保证各个任务高效充分的学习,最终使得多任务学习模型达到独立单任务模型持平的识别效果,部分任务甚至略有超出。
![](https://static001.infoq.cn/resource/image/a7/8a/a71ef2c46f86b8f61885f0af2abc418a.png)
图 2 多任务网络
在多任务模型迭代的过程中,多任务样本的标注成本较高,如果需要补充某个任务的数据集,则必须在该数据集上对所有的任务进行标注,耗费较多的标注资源。从迭代模型和利用已有的独立任务标注数据角度出发,我们研发了一套以任务为粒度的训练框架,允许单张图片有任意个任务进行了标注(比如只标注了车道线,或者同时标注了车辆和车道线等)。
由于和车辆共享主干网络,车道线的 ROI 设置从图像输入转移至车道线分割分支的特征层,进一步降低了车道线检测分支的计算复杂度,最终车道线检测分支仅占用原有车道线检测网络 15%的计算量。
4.2 消失点优化车道线检测
一般来说在车道线分割方案中有两种真值标注方式:
第一种是常规的道路场景分割标注:在这种情况下,标注规则按照车道线的物理含义,随着车道线由近及远、由粗变细,如 KITTI、CamVid 等数据集。在这种标注规则下能够较精确的获取车道线内侧距离车辆的距离,提高横向车道定位精度,但由于远处车道线较细,特征不明显,车道线分割精度随着距离的增加逐步降低。
第二种标注方式常见于单纯的车道线检测任务:如 CULane 等,这种标注方式将车道线定义为白色区域的中心线,以固定的图像像素宽度生成分割真值标注。相比第一种方式,该方法能够在一定程度上提高远处车道线的识别效果,得到较完整的车道线。但在进行车道线扩宽时,远处不同车道线的真值容易互相压盖,造成堆叠部分车道线识别效果较差,增加了车道线后处理难度。
在 AR 导航中,我们采用第二种车道线标注方式,并在车道线检测模型中增加消失点识别分支,在车道线后处理中以消失点为锚点,优化车道线识别精度。
4.3 深度学习神经网络量化
深度学习神经网络在训练过程中,为了接收反向传播的梯度,实现对模型权重的细微调整,一般采用高精度的数据格式进行计算和权重的更新,最终完成模型训练,保存模型结构和权重。
神经网络量化就是将高精度的模型权重量化为低比特的数据,以使用更少的数据位宽来实现神经网络的存储和计算,这样既能减少运算过程中的带宽,又能降低计算量。由于移动端 CPU 带宽资源有限,通过神经网络量化,可以较大地提高模型运算的速度、降低模型空间占用,以 TensorFlow 为例,量化后的 uint8 模型与量化前的 float 模型相比,速度提高 1.2 到 1.4 倍,模型空间占用降低 3/4。
为了进一步优化神经网络量化后的速度,我们在 tflite-uint8(基于 TensorFlow r1.9)量化基础上进行二次开发,实现了一套 tflite-int8 量化框架,其中包含了量化模型训练、模型转化和自研的 int8 矩阵运算库,相比官方 tflite-uint8,tflite-int8 在移动端 A53 架构上有 30%的提速,在 A57 架构上有 10%的提速,与此同时,量化前后多任务模型的精度几乎保持不变。
![](https://static001.infoq.cn/resource/image/8c/48/8ce164167d4b16bbd9f79d1a1094eb48.png)
图 3 小米 5s 上单线程模型运行时间对比
最终通过上述方法,在较低算力的车镜/车机芯片上实现了实时稳定的车道线检测,骨干提取后效果图如下图:
![](https://static001.infoq.cn/resource/image/02/97/02e76a8437220d77f90b508d5f6ef297.png)
图 4 车道线骨干提取效果
5. 挑战与展望
在 AR 导航中,车道线有着举足轻重的地位,作为 AR 导航的基础,搭建在其上的一系列导航功能的好坏都与它的检测精度息息相关。然而实际道路场景千变万化、天气光照也四季不同,这些都给车道线的检测识别带来了较大的难度。
因此,在后续的研发过程中,我们将不断扩大覆盖范围,充分利用高德自采的大量道路数据的优势,结合相关传感器和导航数据不断完善和优化,来进一步地提高车道线的检测精度,以更好地服务 AR 导航项目,最终向用户提供更直观高效的导航服务。
评论