点击下方卡片,关注“自动驾驶之心”公众号
ADAS巨卷干货,即可获取
点击进入→自动驾驶之心【车道线检测】技术交流群
后台回复【车道线综述】获取基于检测、分割、分类、曲线拟合等近几十篇学习论文!
摘要
车道线检测是一项长期任务,也是自动驾驶的基本模式。任务是检测当前行驶道路的车道线,并提供相关信息,如ID、方向、曲率、宽度、长度以及可视化。作者的工作基于CNN主干DLA-34和亲和场,旨在实现各种车道线的鲁棒检测,而不需要假设车道线数。此外,作者研究了新的解码方法,以实现更有效的车道线检测算法。
介绍
驾驶安全是道路交通中不断出现的话题,随着道路上汽车数量的迅速增加,自动驾驶或辅助驾驶系统引起了业界和学术界的广泛关注。车道线检测是自动驾驶的前提和基础步骤,它能正确定位车辆并让其遵守车道线上的驾驶规则。在真实的道路上,有各种各样的车道线(例如,白实线、双纯白实线、白虚线等) ,不同国家的意义可能有所不同。车道线检测作为辅助系统,使车辆能够了解车道线与车道线的相互关系,预测行驶路线,提醒驾驶员。在应用中,车道线检测被认为是一个计算机视觉任务,算法需要从输入的图像中分离出不同的车道线实例。
车道线检测的难点在于在车道线合并、终止、分割等复杂情况下提取语义信息。准确性受多种因素影响:
车道线的复杂性,包括车道线的污渍和磨损程度,其它车的遮挡部分;
沿路建筑物、树木、高架桥的遮荫影响;
夜间、雾、霾的光照条件不断变化。
这些因素在很大程度上阻碍了车道线检测算法的召回率。
在前人研究的基础上,将车道线分割问题转化为实例分割问题,此检测算法应该能够识别车道的像素,并将其聚类为不同的车道实例。该方法将分割任务分为两个阶段: 简单的二值分割和聚类过程。为了识别不同的车道线实例,专门针对车道线检测设计了一种基于亲和力场的聚类算法。亲和力场是一组位于不同位置的向量,表示像素之间的接近程度。作者将亲和力场划分为由行组织的水平场和由连续行组织的垂直场。通过解码亲和力场,作者可以将前景像素聚类到不同的车道线中,而无需假定固定数量的车道线。
本文的主要工作如下:
将车道线检测分为两个阶段,包括语义分割和聚类后处理。作者证明了 CNN 骨干 DLA-34[18]可以完美地完成分割,以及预测亲和力场的分离车道线实例。
设计了基于亲和力场的聚类过程,并对训练和推理过程进行了详细说明。亲和力场预测分支被添加到骨干网络中,骨干网络为每个像素生成水平向量场(HAF)和垂直向量场(VAF)[2]。
给出了预测亲和力场的解码算法,并对算法进行了修正,提高了解码效率。
相关方法
传统的车道线检测算法
传统的车道线检测方法是基于相机标定和传统的边缘检测算法。首先将输入图像转换为灰度图像,降低计算复杂度。然后使用高斯滤波器、双边滤波、 Gabor 滤波、三边滤波等滤波器去除噪声。S.Srivastava 等人比较了使用中值、维纳和混合中值滤波器进行有效的车道线检测算法的效果,这种算法可以为含噪图像的输入提供高质量的结果[15]。然后用边缘检测器提取车道线,再用线拟合算法进行回归。Y.Wang 等人(2004)使用 Canny/Hough 消失点估计(CHEVP)来计算 B-Snake 样条几何道路模型的参数[17]。Meuter 等人(2009)通过将两个扩展卡尔曼滤波器与交互多模型(IMM)算法相结合,提出了一种鲁棒的车道线识别方法[9]。Mariut 等人(2012)提出了一种基于 Hough 变换的算法,他们提取车道线的内部边界以确保车道线检测的准确性[8]。
然而,以前的算法都是受限于手工制作的特征,他们在直道上可能可以有效工作,但在其它各种条件下失效,如弯道或有阴影的图像[8]。此外,他们省略了语义信息,并基于数学变换。
基于分割的车道线检测
随着深度学习的研究,数据驱动方法被引入到车道线检测中,并将其建模为一个多类实例分割问题[12,14,19,4,11]。分割可以实时执行,Adam Paszke 等人提出了一种新的深层神经网络架构,用于需要低延迟操作的任务[12]。Satzoda 等人提出了一种“驱动分析”,用于从原始传感器数据中提取中级语义信息。Qin Zou等人研究了连续驾驶场景多帧图像的使用,提出了一种结合 CNN 和 RNN 的混合深层结构。通过具有时间序列特性的 CNN 块提取多个连续帧的信息,并将其输入到 RNN 块中用于特征学习和车道线预测[19]。
与作者的方法类似,一些方法首先执行二值分割,然后将它们分割成车道线实例[10,13,7]。Pizzati 等人提出了一个基于两个级联神经网络的端到端实时车道线检测系统[13]。但该模型不能自适应车道线数,必须检测出固定的车道线数。Y.Ko 等人基于关键点估计对模型进行了改进,并用几个hourglass模型进行了实例分割[7]。基于ahchor的目标检测也被用于车道线检测,有些会暂时跟踪车道线,有些会预测3D 输出。在作者的方法中,利用最初用于多人2D姿态估计的亲和力场[2] ,在不预先定义车道线数的情况下将分割mask分离到不同的车道线实例中,即使车道线被遮挡,也能获得更稳健的结果[1]。
方法
LaneAF pipeline包括两个阶段: CNN 骨干网的前向过程和使用亲和力场对pipeline实例进行解码,如下图1所示。
训练 CNN 网络进行二值分割,并对两个亲和力场进行预测。通过对预测的亲和力场进行解码,检测出不同的车道线情况。
主干网络
作者选择 DLA-34作为主干网络,将像素分类到车道线或背景中。此外,还增加了两个平行分支来预测前景像素的水平向量场(HAF)和垂直向量场(VAF)。Deep Layer Aggregation(DLA)网络提取了 VGG、 ResNet、 DenseNet 的抽象结构,提出了迭代深层聚集(IDA)和层次深层聚集(HDA)两种聚集方式。IDA 加入相邻阶段,融合不同尺度的特征进行空间融合。HDA 代表树状结构的层次连接,用于合并不同通道的特征进行语义融合。如下图2所示。
监督亲和力场训练
作者的骨干网络不仅将执行二值分割,而且还训练预测水平和垂直的亲和力场(HAF 和 VAF)。正如作者之前讨论的,HAF 和 VAF 是在不同位置(x,y)表示像素之间接近度的向量集合:分别表示为, ,,。亲和力场的编码过程是一个简单的从下到上的逐行计算过程,而亲和力场的解码过程是一个反向的最优化问题,按照类似的逐行模式进行。
计算亲和力场真值
在训练作者的模型之前,作者需要生成 HAF 和 VAF 的标注。对于输入图像中的每一行 y,真值 HAF 向量,仅针对车道线l处的车道线像素,计算:
其中 代表的是属于车道线l中的第y行的所有点的平均 x 坐标,就像下图3所示的像素, ,不同颜色的像素来自不同的车道线。
类似地,真值 VAF 矢量,的计算仅适用于车道线l的车道线像素, ,但考虑了行之间的关系:
其中 代表属于车道线l的前第y-1行的所有点的平均 x 坐标,,如上图3所示的像素,。计算过程如下面算法1所示。
损失函数
对于模型中的每个分支,作者采用不同的损失,对于二值分割分支,使用加权的 BCE 损失来平衡前景和背景的损失:
其中是像素 i 的标签,是包含sigmoid函数的网络的输出。W 是平衡系数。此外,为了进一步规范不平衡数据集,采用了一种额外的 IOU 损失:
对于亲和力场分支,作者仅对 HAF 和 VAF 的车道线像素应用一个简单的 L1回归损失:
总损失是上述损失的总和:
亲和力场解码
正如在前面部分所讨论的,模型将输出前景和背景的分割mask,以及预测 HAF 和 VAF。使用预测的亲和力场,作者的解码过程遵循一个简单的从下到上的逐行模式:
逐行聚类 : ,作为预测的 HAF,作者利用它将每行中的车道线像素聚类到不同的实体中。由于 HAF真值是指向中间像素,因此作者可以根据 HAF 矢量的方向将 y-1行的前景像素分配到不同的车道线:
其中 ,表示前景像素,的最佳车道线分配;,表示两个不同的车道线,如下图4所示,一行中的红色 HAF 向量都指向中间像素。
从底到顶的连接 :在将前景像素分配到,中之后,如果 VAF 矢量指向前一行的中间像素,那么它们将根据从底部到顶部连接到前一行的一个车道线像素簇,这表明它们更可能在一个车道线上。这个过程可以表示为:
在这里,表示将簇 关联到一个已存在的车道线 l 的误差:
其中 表示 y 行中车道线l的像素数,如上图4所示,如果绿色的 VAF 矢量指向前一行中间的像素,它们将连接为一个车道线。解码算法如下算法2所示。
更快的解码方法
过去的解码过程遵循一个简单的对整个分割mask,HAF 和 VAF都进行逐行处理的模式,这可能是计算耗时的。作者在算法2的基础上提出了一种更快的解码方法,如下面算法3所示。
首先作者选择一个缩放比 α ∈ N。由于这不是一个无损解码过程,从作者的实践来看,当 α ∈{2,3,4,5}时,可以保持良好的车道线解码质量。α 越大,解码时间越短。然后分别对分割mask、 HAF、 VAF 进行下采样,并将其输入解码过程,如算法2所示。这是一个更快的解码过程,因为向下采样意味着长度和宽度都将缩小 α,解码的图像大小将是α。对缩小后的图像进行解码,可以得到带有类标签的车道线像素序列。为了简单起见,作者将每个车道线近似为一条直线,然后使用像素序列,将 Huber 线性回归作为一个鲁棒的线估计器,对每个车道线进行回归,得到它们的斜率 k 和截距 b,这将在以后使用。为了恢复整个解码车道线,作者需要将样本增大到它们的原始大小,但是这里只将像素序列反向放大 α,并对每个像素序列之间的间隙进行线性插值。因此,到目前为止,已经得到了每个车道线的中线,为了完成分割任务,作者需要为所有被识别为车道线区域的像素确定特定的类别。现在作者已经确定了每条车道线的中线,接下来作者只需要水平扩展中线,直到一条车道线被分割完。
作者扩展一个车道线基于以下停止条件:
扩展范围在图像大小范围内。
接触车道线区域边界时应停止扩展。
当接触到已被划分为另一车道线的像素时,应停止扩展。
膨胀同时发生在左右两个方向,假设左右两边的宽度相同,如果一边停止膨胀,另一边应该同时停止膨胀。
扩展阶段结束后,很可能仍有一些像素在车道线区域没有被分类。为了对这些剩余的像素进行分类,作者选择根据它们到每个车道线的点线距离对它们进行分类。作者使用已经退化的车道线作为直线。最后通过提取点线距离最小的车道线对每个未分类的像素进行分配,完成解码相位的选取。
实验结果
作者使用Adam优化器,学习率为0.0001,权重衰减为0.001,训练总共20个epoch。loss的权重 w 设置为9.6,因为在大多数公共数据集中,背景像素的数量大约是前景(车道线)像素的9.6倍。为了避免过拟合,通过保留在验证集上执行得最好的模型参数来实现早停。
使用一个NVIDIA V100 GPU,在 TuSimple 数据集上训练模型,直到收敛,需要10个小时。
数据集和评价
作者在流行的用于车道线检测的 TuSimple 数据集上训练和测试模型。TuSimple 用于车道线分割的数据集包含多种情况:
良好的天气条件;
各种白天照明条件;
2/3/4条或更多车道线;
不同的交通条件。
该训练集结合了3626个视频段,每个视频每秒被剪切成一个图像,每个视频总共20个图像。每个视频段都有相应的标注。测试装置由2944个视频段组成,每个视频段的图像尺寸为1280 × 720。作者使用的度量标准是简单的准确度、 F1分数、FN、FP来衡量模型的性能。准确性测量像素分类的可预测性,F1评分测量正确车道线区域分类的可预测性和错误车道线区域分类的可预测性。FP度量分类错误率,FN度量漏报率。
消融研究
为了检验作者的快速解码算法是否有效,作者进行了消融研究,将原始大小的分割mask,HAF 和 VAF 进行解码AF作为可获得的最佳效果。然后,作者比较了解码速度与解码自适应缩小的分段mask,HAF 和 VAF 的解码质量和运行时间。定量结果如下表1所示。
正如作者从这个表中可以看到的,与原始输入大小下的解码 AF 相比,更快的解码速度确实有更短的解码时间,而且解码质量的恶化速度比相同输入大小下的解码 AF 要慢得多。特别是当收缩比 α ∈{2,3}时,解码质量几乎是无损的。当 α = 4时,解码质量优于运行时间较短的 α = 3时的 AF 解码质量。当 α = 5时,解码质量仍然可用,而当 α ≥4时,解码 AF 仍然不可用。定性比较如下图6所示,很明显,作者的方法优于对直接缩小图像的 AF 解码。
结论
本文将车道线检测分为两个阶段,包括语义分割和聚类后处理。作者举例说明了预测亲和力场的解码算法,并对算法进行了修正以提高效率。在原始论文中,作者只是简单地处理解码过程中的一个下采样输入。在作者的方法中,作者解码 AF 跳过的行,并且所有的车道线都被分割得很好,即使是大的 alpha。但是对于远距离像素存在一些问题,有些像素分割不准确。
参考
[1] LaneAF: Robust Multi-Lane Detection with Affinity Fields
国内首个自动驾驶学习社区
近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!
【自动驾驶之心】全栈技术交流群
自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;
添加汽车人助理微信邀请入群
备注:学校/公司+方向+昵称