写在前面
大家好,很荣幸能受到自动驾驶之心的邀请来为大家分享我们的一篇关于单目车道线检测的综述。与papaer里展现的顺序和内容可能有所不同,在这里笔者想更多地讲一讲本文的成文过程以及各类方法的发展史,因此对于各方法的详细介绍读者可以参考本文原文,这里不会花费过多笔墨来重述。关于本文原文中提到的方法,以及更多未提到的方法的论文和代码均可在笔者构建的GitHub仓库里找到,笔者后续也会不断更新,欢迎大家关注,也欢迎业内同仁指正,共同探讨。
论文链接:https://arxiv.org/abs/2411.16316 开源链接:https://github.com/Core9724/Awesome-Lane-Detection
最开始入门车道线检测的时候要从去年春季,看了几篇22年顶会顶刊的2D车道线检测论文(那一年的相关论文很高产,仅CVPR就有5篇)说起。起初对于车道线检测的了解也仅限于它们在文中related work部分里提到的有基于分割的、基于anchor的、基于曲线的方法等等。但是还有一些地方不明白,相信不少刚接触这个领域的朋友也有同样的疑问:
1、为什么要区分不同的实例?而且一些论文里专门针对解决这个问题花费大量篇幅讲解,可是另一些论文里似乎又没怎么提及;
2、为什么用语义分割得到的车道线mask还要进一步拟合成点集或曲线?很多论文里只说了用分割做的话需要进一步后处理拟合,但没说这样做的原因;
带着这些疑问,笔者又翻阅了近年来的一些相关综述,期望能得到答案。遗憾的是,当时最新的质量较高的综述只到21年为止,里面包含的方法基本都是2D车道线检测且用语义分割来做的方法,也没有强调实例区分和曲线拟合这两个问题。
所幸之后接触到了一些自动驾驶工程师,和他们交流一番后才明白:下游规划控制任务实际上只关心车道线中心线。如果不区分车道线实例以及缺乏矢量化格式(点集或曲线方程)的话,就没法计算了。
考虑到以往的综述年代有点老,近年来很多新的方法都不包含,于是萌生了写一篇车道线检测的综述的想法。但是当时笔者只对2D车道线检测理解比较深入,而近年来也有3D车道线检测的工作出现,所以在综述范围上就又有疑问了:只写2D还是2D和3D都写?
后来在看了3D车道线检测的相关论文后才明白:下游需要的都是基于自车的3D信息,2D车道线检测结果还需要IPM投影得到3D车道线才能用。然而IPM假设地面平坦,在上下坡时会不准确,所以3D车道线检测任务诞生。
因此笔者认为有必要把2D车道线检测和3D车道线检测都写进去,它们之间的关系是很密切的。考虑到传统方法现在基本很少用了,目前基本都是深度学习主导。另外LiDAR-based的方案太少,目前在这个领域里主流传感器还是单目相机。于是确定了最终选题:基于深度学习的单目车道线检测综述。
1、本文组织结构
以往的综述过分关注每个具体的方法的网络结构和损失函数,虽然它们对于深度学习来说也很重要,但是并不完全构成解决车道线检测任务本身挑战的关键。所以本文从车道线检测任务的完整流程和挑战出发,先总结了车道线检测算法的四个核心设计,然后从这四个方面展开方法回顾。
先说车道线检测任务的完整流程和挑战:
完整流程:从前视图(Front View,以下简称FV)得到基于自车坐标系下的3D车道线,即鸟瞰图(Bird‘s Eye View,以下简称BEV)结果,实现方式如图1所示,包括:
1、2D车道线检测+IPM;
2、3D车道线检测。
挑战:
1、精确的定位和实时处理能力;
2、能够应对车道线被遮挡、光照等干扰因素影响的情况;
3、区分不同实例;
4、以矢量化格式呈现车道线检测结果(点集或曲线方程)。
基于完整流程和挑战,笔者总结了车道线检测算法的四个核心设计:
1、任务范式,即如何区分车道线实例;
2、车道线建模,即将车道线表示为一组网络可学习的参数;
3、全局上下文补充,即应对那些不明显的车道线;
4、(相机)透视效应消除,即为下游提供准确的3D车道线。
因此本文对现有方法的回顾主要从以上四个核心设计为角度开展。本文的贡献如下:
1、对基于深度学习的单目车道线检测并且首次同时包含2D和3D车道线检测方法的全面综述;
2、本文先介绍了车道线检测算法的四个核心设计,然后从上述角度系统地总结现有方法。以往的相关综述通常对某个方法的具体网络结构和损失函数做详细介绍,然后附上相应方法的网络结构图。笔者更倾向于把每一类方法都总结为一个pipeline,然后针对每个pipeline介绍其框架下的每个方法,这样可以帮助读者更好地理解;
3、考虑到不同方法做实验时使用的设备可能有所不同,直接用其原论文中报告的速度来进行比较肯定是不公平的。所以除了比较不同方法在不同benchmark下的性能以外,还在统一环境下重新测试了代表性方法的速度;
4、近年来还有一些工作(多任务感知、视频车道线检测、在线高精地图构建、车道线拓扑推理)也很受关注,在任务流程上可以视为单目车道线检测的升级,所以笔者在文中也对它们进行了介绍。基于这些介绍,读者可以获得一份关于车道线检测研究热点发展的路线图。
本文的组织结构如图2所示。
2、数据集和评估指标
2.1 数据集
对于2D车道线检测,最常用的四个数据集:Tusimple、CULane、LLAMAS和CurveLanes。现有2D方法基本上选择三个做实验,CULane和Tusimple,外加LLAMAS和CurveLanes二选一。
对于3D车道线检测,虽然LLAMAS也有3D车道线标注,但最常用的还是Apollo 3DLane、ONCE-3DLanes和OpenLane这三个。
这里多说一些有关OpenLane、OpenLane-V和OpenLane-V2三个数据集的区别,以防读者混淆。OpenLane是上海AI Lab在ECCV 2022提出的3D车道线检测数据集,是对Waymo Open数据集中部分FV图像的车道线进行标注得到的;OpenLane-V是ICCV 2023的RVLD这篇文章的作者团队基于OpenLane的部分2D车道线标注修改得到的2D车道线检测数据集;OpenLane-V2也是上海AI Lab提出的数据集,但它和OpenLane关系其实不大,它是基于nuScenes和Argoverse2两个环视场景数据集构建而来的,并且标注主要集中在中心线、红绿灯和拓扑关系,曾用于CVPR 2023拓扑挑战赛,最终发表于NeurIPS 2023。
2.2 评估指标(TP的判定标准)
不同benchmark的评估指标都有所不同,不过F1-Score是几乎所有数据集的首要评估指标,而F1-Score的计算又离不开TP的判定。因此本文主要介绍不同主流benchmark的TP判定标准。
对于2D车道线检测,TP判定主要以Tusimple和CULane为代表。Tusimple主要衡量每个点。当纵坐标相同时,如果与GT点的水平距离小于20像素,则认为预测点正确。进而当预测的车道线包含不少于85%的正确点时,该预测线被视为TP。相比之下,CULane更注重衡量车道线整体,车道线被视为若干像素宽的mask,如果预测的车道线mask和GT的IoU大于75%则被视为TP。
对于3D车道线检测,TP判定主要以OpenLane和ONCE-3DLanes为代表。OpenLane:当一个预测车道线有75%的覆盖y位置与GT的逐点距离小于允许的最大距离(1.5米)时,被视为TP;ONCE-3DLanes:首先,在z-x平面(即俯视图)上使用CULane的计算IoU的方法来评估预测与地面实况之间的对齐情况。其次,如果IoU超过预定义阈值,则使用单侧倒角距离(详见ONCE-3DLanes原文或本文附录)计算相机坐标中的曲线匹配误差。如果该单侧倒角距离低于指定阈值,则预测线被归为TP。
3、2D车道线检测方法
3.1 分类框架
以往的相关综述主要关注具体网络结构和损失函数。而实例级判别和矢量化结果表达往往被忽视。相比之下,本文对二维车道线检测方法的分类主要依据上述两个方面。
如图3所示,首先,对于实例级判别,根据完成任务所需的阶段数分为两类范式:
(a)基于分割的方法(segmentation-based methods,两阶段),按照一定的顺序完成车道线识别和实例区分。图4总结了这类方法中实例区分的通用流程。
(b)基于目标检测的方法(object detection-based methods,单阶段),直接同时完成实例区分和定位。这一优势源自目标检测算法的一般流程(并行地对一组候选proposal执行分类和回归)。
其次,矢量化结果表示要求算法考虑如何将车道线建模为一组用于神经网络学习的值,即车道线建模。基于分割的方法可以进一步分为基于mask的建模、基于grids的建模和基于keypoints的建模。对于基于目标检测的方法,采用bounding box来建模细长的车道线往往并不合理。因为目标检测方法生成的边界框可能会相互遮挡,而且一个框内可能包含多个车道线实例。为了与一般的目标检测范式对齐,这些方法设计了独特的“bounding box”来建模车道线,包括基于line anchor的建模和基于curve的建模。每种车道线建模方式的细节如图5所示。
另外,大多数现有的2D车道线检测数据集甚至为被车辆严重遮挡或受极端天气条件影响的车道线提供了完整的标注。这促使许多算法在其网络里精心设计特殊结构补充全局上下文来解决这一挑战,无论它们属于哪个分类体系。因此,在回顾这些方法时,还阐述了它们为解决这一问题所采取的措施(篇幅限制,在这里未详细列出,具体可见本文原文)。根据上述分类标准,表2详细比较了具有代表性的二维车道线检测工作。
注:其实不少论文里的related work部分都有把现有的2D车道线检测方法分为segmentation-based、anchor-based、keypoints-based、curve-based等等。但是这个分类仅反映了不同方法的车道线建模方式。实例级判别很少被提及,原因一方面是那些基于anchor或者曲线的方法本身遵循目标检测的范式,不需要考虑实例判别问题;另一方面是在related work里也确实没必要分的这么细(再细分就超页数了)。但对于综述来说,有必要把这个上下级关系为读者解释清楚,所以本文针对实例级判别和车道线建模方式进行了二级分类。另外,不少论文的related work里将UFLD、CondLaneNet等方法也归为anchor-based,这一点可能源自于UFLD原论文中的“row-anchor”表述。但实际上它们是遵循着“实例区分、逐行/列分类”一个顺序的过程,需要额外考虑实例判别过程,并不符合目标检测并行“分类+回归”的特点,因此本文将其划分至基于分割和基于grids的建模的方法。
3.2 基于分割的方法
3.2.1 基于mask的建模
基于mask的建模方法,即将车道线检测视为语义分割任务,也是早期被广泛采用的方法。不过和一般的语义分割任务不同的是,一般的语义分割任务只分割可见的物体,但是车道线检测是要能分割出那些不明显的车道线的。所以这一类的大部分方法在解码器上采样之前引入了专门的结构来增强特征表示,比如VPGNet、SCNN、SAD、EL-GAN、RESA、PriorLane等方法。
而对于实例级判别来说,一个比较直接的方法是用自顶向下(先有实例后有语义类别)的实例分割框架,比如Mask R-CNN或YOLACT,以实现车道线实例级别的区分和分割。然而,目标检测方法生成的边界框可能包含多个车道线实例,后续的语义分割过程中区分它们会变得复杂。
SCNN采用了一种与上述不同的自顶向下方式,如图4(b)所示:每条车道线视为一个类别,然后多类别语义分割结果和一个并行的分类分支结合。后续的SAD、EL-GAN、RESA、PriorLane也都是这么做的。这种方式方便了实例区分,但也引入了一定的局限性:需要提前定义车道线的最大数量来确定可能的实例数量。此外,车道线与类别之间的对应关系是通过标注建立的。当车辆变道时,这种预定义的标注可能会导致歧义。
为了解决上述问题,一些方法采用了更为灵活的自底向上(先有语义后有实例)的实例分割方式,即对车道线/背景的二值分割结果进行聚类,如图4(a)所示。最典型的当属LaneNet和LaneAF这俩。不过尽管这些方法提高了实例区分能力,但由于自底向上聚类的高复杂度以及语义分割时对所有像素分类的机制,算法的整体效率仍然不佳。
通过网络分割获得的车道线mask通常包含大量不相关区域。为了将其用于自车运动预测和规划,还需要进一步对mask进行去噪处理,以获得矢量化结果。通常,对于每个车道线的mask,在等间距高度上依次采样最高响应值,然后进行曲线拟合。
3.2.2 基于grids的建模
为了避免语义分割分类所有像素的机制带来的低效率,UFLD设计了一种逐行网格分类的方式完成车道线检测。这个方法也是目前所有2D车道线检测方法里最快的,但是它的实例判别过程也是遵循SCNN那一套。所以为了解决实例级判别问题,受经典实例分割方法CondInst和SOLOv2的启发,ConeLaneNet以预测动态卷积核的方式完成实例级判别,如图4(c)所示。后来UFLDv2又把逐行分类升级成逐行/列分类来解决水平车道线的检测难以用逐行分类机制实现的问题。但仍然遵循SCNN的实例判别过程,这使得为每个车道线实例来选择逐行/列分类过于简单,所以后来CANet又针对这一点进行了改进,让网络能够动态选择行分类或列分类。
由于这类方法的网络输出每一行/列网格的分类概率,并非矢量化格式,因此还需要后处理。具体地说,每个点的坐标计算为位置的期望值(来自同一行/列的网格)即概率加权平均值。这个后处理过程与语义分割获得的车道线mask的后处理相比更容易实现。
3.2.3 基于keypoints的建模
一些方法直接预测车道线的关键点,和基于grids的建模类似,可以被视为基于mask的建模的稀疏版本,但它直接提供了下游所需的矢量化表达。像PINet、FOLOLane、GANet还有RCLane这些都是以自底向上的方式进行,也有遵循自顶向下的方式,最典型的比如CondLSTR。
3.3 基于目标检测的方法
3.3.1 基于line anchor的建模
这类建模方式是目前用的最多,在各个benchmark上刷点也很高的一类。其方法本质就是预测一条参考线上的等距点的水平偏移量来描述车道线,这与一般目标检测方法预测中心点和宽高的偏移量是类似的。
这类方法最早可以追溯到Line-CNN,后来被LaneATT发扬光大。不过由于预设大量的line anchor,以及早期一般的目标检测方法的正负样本匹配策略的局限性,导致那一时期出现的方法都需要NMS后处理。后来随着目标检测逐渐被DETR占据主导地位以及匹配策略的改进,相应产生的车道线检测方法也慢慢向其靠拢。比较典型的例如Laneformer、CLRNet、ADNet,相比于早期的基于line anchor的建模方法,它们从固定密集的line anchor转变为动态稀疏的line anchor。
3.3.2 基于curve的建模
另一批基于目标检测的方法直接用曲线方程建模车道线,网络学习曲线的参数。最初的方法比如PolyLaneNet用三次多项式建模车道线并学习多项式的系数,后来LSTR又把这种建模方式套进了DETR里。由于学习相对较少的参数,这类方法在速度上属于较快的一批。但是在性能上并不具备有竞争力的优势。后来BézierLaneNet用三次贝塞尔曲线建模车道线,网络学习贝塞尔曲线上的控制点,显著改善了这一问题。
3.4 2D车道线转3D车道线(IPM投影过程)
由于实际使用时最终需要3D车道线,所以2D车道线检测的结果还需要进一步利用IPM投影得到3D车道线。因此本文还对IPM的过程进行了回顾,以帮助读者理解其过程,以及IPM带来的缺陷和为什么3D车道线检测任务被提出。这里只展示一下IPM导致的错误结果可视化(图5,以上坡为例),具体的推导步骤读者可参考本文原文。
4、3D车道线检测方法
4.1 分类框架
作为2D车道线检测的升级,3D车道线检测更加关注:如何用网络从FV图像中重建缺失的3D信息。如图7所示,现有的3D车道线检测方法可以分为两大类:
(a)基于BEV的方法:利用相机参数,以某种方式将FV特征转换为含有高度信息的BEV特征。这个构建中间代理,即BEV转换的过程通常称为View Transformation。通过这种方式,3D车道线检测任务可以简化为在BEV上的2D车道线检测和高度估计。因此,这类方法的性能不仅取决于BEV中的2D车道线检测结果,还取决于View Transformation的实现方式。
(b)无BEV方法:不依赖BEV特征,可以进一步分为两类。一种是结合深度估计值将2D车道线检测结果投影至3D空间中;另一种是直接建模3D车道线,有了初始化的3D信息,就可以根据相机参数将其投影到FV上,让3D车道线与FV特征之间进行交互,并更新3D车道线。
对于每种方法,实例级判别和车道线建模仍然有讨论。表3中列出了代表性工作的比较。
4.2 基于BEV的方法
4.2.1 IPM用于View Transformation
3D-LaneNet既是3D车道线检测任务的提出者,也是3D车道线检测中基于BEV的方法的首个工作。随后Gen-LaneNet、3D-LaneNet+、CLGo等工作进一步进行改进,但是这些早期的3D车道线检测方法对于BEV的转换都是基于IPM实现的,相当于是把IPM从2D车道线检测结果阶段提前到了特征阶段。
4.2.2 可学习的View Transformation
因此,后续的工作为了避免IPM带来的固有误差,尝试以更灵活的方式完成BEV转换,即可学习的View Transformation。这一思想其实早在一些3D目标检测的工作中就有体现了,比如LSS、BEVDet、BEVFormer等。对于车道线检测来说,PersFormer算是首个以可学习的方式实现View Transformation的工作,之后也引出了不少优秀工作,比如BEV-LaneDet、SPG3DLane、LaneCPP等。
4.3 无BEV方法
4.3.1 结合深度估计
和早期的一些深度辅助的单目3D目标检测方法类似,SALAD将3D车道线检测分解为FV上的2D车道线检测和深度估计任务,有了准确的深度值即可将2D车道线精准投影至3D空间。
4.3.2 直接建模3D车道线
这一思想也是类似于一些3D目标检测中的Sparse BEV方法例如DETR3D和PETR(将3D参考点或3D位置embedding投影回FV进行交互)。典型的方法当属CurveFormer、Anchor3DLane、LATR等,都是Persformer之后的同时期工作。尽管在交互细节上可能有所不同(比如Anchor3DLane在投影回FV后用类似LaneATT的方式做pooling,CurveFormer和LATR则是用query和FV做cross attention),但是它们的核心思想都遵循:建模3D车道线并正向投影回FV进行交互对齐。
注:1、关于“3D Line Anchor”的表述:虽然在CurveFormer和LATR原文里没有像Anchor3DLane和PVALane中明确的“3D Anchor”的表述,但是这些方法的本质都是遵循目标检测的范式,并学习3D参考线上等距点的X方向和Z方向的偏移量。因此本文将它们的建模方式都归为“3D Line Anchor”;2、尽管PVALane构建了BEV特征,但仅用于辅助增强3D车道线检测效果,而不是像基于BEV的方法那样成为网络的必要组成部分。
5、方法性能对比
5.1 主流Benchmark下的结果比较
CULane和OpenLane是目前最常用的2D和3D车道线检测数据集。表4和表5分别报告了这两个benchmark下代表性方法的性能。所有结果均来自原文数据。更多数据集下的结果在附录。
5.2 主流Benchmark下的结果比较
考虑到现有方法中实验所用设备的差异性,直接用各方法原论文中报告的速度来进行比较是不公平的。因此,笔者在统一环境中重新测试了代表性方法。表6展示了这些方法的工作效率。根据代表性且开源的方法在CULane或OpenLane数据集上的设置,笔者对其进行了重新评估。为确保公平性,仅测试了模型的推理速度以报告FPS值(即不包含后处理部分,因为有的方法的后处理可能在CPU上执行)。同时,还描述了每种方法的骨干网络、输入大小、模型输出以及可能的后处理(即模型的输出是否反映了每个唯一车道线实例的矢量化表示)。所有测试均使用单张Nvidia GeForce RTX 3090 GPU。
5.3 讨论
先前的章节中从任务范式、车道线建模、全局上下文补充和透视效应消除四个方面概述了现有方法。结合性能和效率的比较,笔者继续讨论它们对车道线检测的重要性。
1、任务范式。基于分割的方法通过两阶段方法实现实例级判别和车道线定位,算法运行时间的大部分被独立的实例判别过程所占据,这使得它们总体上不如一阶段实现的目标检测方法高效。而对于基于目标检测的方法,有必要考虑网络训练过程中的正负样本匹配策略,这将决定后处理是否需要NMS。
2、车道线建模。在基于mask的建模方法中,每个像素都被分类,这可能导致不准确的分割mask,进而阻碍矢量化拟合。因此,实现最佳性能和效率仍然是个挑战。相比之下,基于keypoints的建模、基于line anchor的建模和基于curve的建模方法学习的点或参数更少,且直接产生下游所需的矢量化结果。
基于keypoints的建模方法表现出强大的性能,得益于其在专注于局部方向上的高精度姿态估计技术。然而,这些算法的整体效率受到其分割范式中固有实例判别步骤的限制。
基于line anchor的建模方法利用车道线在单目图像中的垂直和细长特性,在性能和效率之间取得了良好的平衡。然而,这些方法学习等距点的水平偏移量,因此不适用于U形或近乎水平的车道线。这一特殊情况将在后续章节进一步讨论。
基于curve的建模方法表现出良好的效率,但在2D车道线检测基准上的竞争性能方面有所欠缺。有趣的是,这种方法在3D车道线检测中取得了有竞争力的表现。根据Han等人的分析,这种差异应该是由于地面高度的影响,使得在FV中难以拟合不规则的车道线。相比之下,这些车道线在BEV中看起来更平滑,因此更容易拟合。
最后,像UFLD这样的基于grids的建模方法实现了最高的效率;然而,这是以降低计算量为代价的,导致性能次优,通常需要更高级的算子(CondLaneNet里的Transformer encoder和动态卷积)来弥补。
3、全局上下文补充。无论属于哪种类型,大多数方法都达成了一个共识,即补充全局信息可以显著提高车道线检测性能,特别是对于检测那些不明显的车道线。此外,确保这些专门设计的结构在高效处理和有效结果之间取得平衡至关重要。虽然这一方面在现有的3D车道线检测benchmark和方法中很少被关注(主要还是因为3D车道线检测更关注在网络中消除透视效应),但在实际应用中,2D车道线检测中的某些解决方案可以作为参考或者直接无缝集成到三维车道线检测框架中。
4、透视效应消除。最终目标仍然是实现精确的3D车道线检测,以支持下游应用。使用IPM将二维车道线检测结果投影到三维空间中是可行的。然而,由于假设地面平坦,即使在FV中预测准确,BEV中也往往会出现错误结果。虽然基于深度值将2D车道线检测结果投影到三维空间的方法很直接,但这种方法严重依赖于深度估计结果,无法进行端到端的优化。
早期的3D车道线检测方法仍然假设地面是平坦的,利用IPM来构建BEV特征。后来一些方法通过融入可学习的方式对此进行了改进,从而提高了性能。另一批方法则完全避免了BEV特征的构建,直接对3D车道线进行建模,并利用3D到2D的正向投影来规避IPM引入的固有误差。应该指出的是,Transformer在BEV转换(PersFormer)或实现3D车道线与前视图特征之间的交互(LATR)上具有强大的能力,这一点在相关的3D目标检测工作(BEVFormer,PETR)也有所体现。然而,deformable attention等高级算子的硬件部署仍然是一个需要优化的问题。
6、车道线检测的扩展工作
其实正常到第5章后关于对车道线检测方法的总结部分就结束了。但是笔者在接触到一些其他和车道线检测高度相关的领域后,觉得还是有必要提及一下。这些工作在任务流程上可以视作单目图像车道线检测的升级:
1、多任务感知:一个模型同时完成目标检测和车道线检测等任务;
2、视频车道线检测:多帧图像的时序关联;
3、在线高精地图构建:检测环视图下的地图元素,包括车道线、人行横道、车道边界线等各种静态目标;
4、车道线拓扑推理:同样是环视图场景,检测中心线,预测中心线之间的拓扑以及红绿灯和中心线之间的拓扑关系,从而实现场景理解。
并且在近年来也很火热,因此笔者在本章对它们进行了介绍,并给出一份关于车道线检测研究热点的发展路线图(图8)。可以观察到,从检测2D车道线到检测3D车道线,再到检测地图元素,再到检测中心线和拓扑关系预测,模型的输出越来越靠近下游应用。
6.1 多任务感知
早期的一些工作主要集中在BDD100K数据集上的三个任务:目标检测、可行使区域分割和车道线检测。其代表性方法例如YOLOP、YOLOPv2等,它们采用强力Encoder结构提特征然后衔接多个任务头,实现了强大的性能。不过需要指出的是BDD100K数据集里的车道线没有实例级标注,注释都是语义分割mask,所以这些方法的车道线检测头也都是用语义分割的方式来做的。最近的研究慢慢上升到3D多任务感知上,比如PETRv2设计三种query,用三个任务头完成3D目标检测、BEV分割和3D车道线检测,还有RFTR设计一种统一向量场表示从而将3D目标检测和3D车道线检测集成到一个单头模型里。
6.2 视频车道线检测
对于2D的视频车道线检测,早期的一些工作用经典RNN网络(LSTM、GRU)实现多帧特征融合。后来21年ICCV新出了VIL-100数据集,每个视频的帧率下采样至10s,因此更适合视频车道线检测。其相应的baseline方法设计两种attention模块来关联多帧的特征。后续也有RVLD、OMR等创新工作。在3D车道线检测方面,STLane3D算是第一篇利用时序信息的工作,利用attention关联多帧的BEV特征。相比之下,Anchor3DLane-T和CurveFormer++在3D Line Anchor的特征上做attention来补充时序信息。
6.3 在线高精地图构建
即现在业内大火的无图NOA。基本流程是通过环视图构建BEV特征,然后解码器预测地图元素。因此其关键和车道线检测类似,需要考虑如何统一地建模各种地图元素。需要指出的就是当传感器从单目相机增加到多相机时,在BEV平面上会出现很多U型或水平线,那这时候车道线检测里常用的学习等距点偏移量的line anchor modeling方法就不适用了。该任务最先由HDMapNet提出,其采用自底向上的分割方法预测所有地图元素的mask,并结合instance embedding聚类得到地图元素实例。但这种方法仍然需要矢量化后处理以供下游使用,因此后续的工作试图直接完成端到端矢量化建图。在后续的一众方法里,MapTR可谓是最具代表性的工作,其用均匀点来统一建模地图元素,所有地图元素都被表示为具有相同点数和不同排列顺序的集合。得益于其统一的置换等价建模方式和层级化query的设计,MapTR在nuScenes上仅靠相机输入就实现了当时的SOTA,为后续的研究提供了强有力的baseline。后续的大部分工作基本都是针对MapTR进行了改进,比如PivotNet、HIMap、StreamMapNet、MapTracker等,也有一些工作引入地图先验来加强局部建图能力。这一领域内的优秀工作还有很多,由于这一章是对车道线检测扩展工作的简单介绍,所以笔者没有列出所有的方法(仅ECCV 2024的在线建图论文貌似就高达7篇),更多方法的论文和代码可以在笔者构建的GitHub仓库里找到。
6.4 车道线拓扑推理
早期的工作主要集中在线和线之间的拓扑关系上,即检测车道中心线来构建一幅车道图(lane graph)。开创性工作当属STSU,之后也衍生了如CenterLineDet、LaneGAP等创新工作。后来OpenLane-V2数据集诞生,除了包含中心线检测以外,还引入了线和交通标志之间的拓扑关系,代表性方法例如TopoNet和TopoMLP。TopoNet也是当时的拓扑挑战赛的冠军。后来LaneSegNet又把车道线和中心线的关系连接起来,进一步加强了场景理解。
7、未来方向
对于未来方向,讨论的范围包括:领域内仍然有待改进的问题,尚未充分探索的子领域,以及在本领域之外具有重大研究价值的相关任务。
1、高效统一的建模方式。就目前而言,在不影响效率的条件下有效地建模任意形状的车道线仍然是一个挑战。特别是当场景从单目相机前视图扩展到多相机环视图时,会存在大量U形或近乎水平的车道线。在这种情况下,严重依赖先验知识的建模方法,如基于grids的逐行分类建模,或是学习等距点偏移量的基于line anchor的建模方式都不适用。这种情况下往往表现不佳的基于mask的建模方式实际上更有效。像MapTR的均匀点建模方式就不会出现这种歧义性,不过这些建图方案在实车应用的时候还需要对速度进行优化。再有就是CVPR 2024的Lane2Seq通过序列生成来统一2D车道线检测也是一个不错的思路,尽管其效率需要进一步改进(Lane2Seq以自回归的方式输出车道线的点集,当车道线数量增多时推理速度就会显著下降,这可能也是为什么其没有在CurveLanes这种多车道线场景的数据集做实验的原因)。
2、多模态车道线检测。其实近年来纯LiDAR的车道线检测Benchmark和方案也有,最典型的比如CVPR 2022的K-Lane。尽管LiDAR可以直接提供3D信息,但其较短的感知范围和较高的成本使得基于相机的方法更普遍。不过后续的技术路线肯定是多模态融合,这一点已经在很多通用3D感知工作中得到印证了,但对于车道线检测来说目前这类方法还很稀少,代表性的如-3DLaneNet、DV-3DLane,都是LATR团队的工作。
3、标签高效的车道线检测。即弱监督策略和无监督策略,同样目前相关工作较少。
4、对于端到端自动驾驶。在端到端框架中,车道线检测往往不再输出显式的车道线坐标,而是作为提供中间表示的模块。后续的研究或许可以将特定的车道线检测输出(如中心线、车道线宽度、曲率等)作为先验知识整合进端到端框架里来提高性能。
5、针对车道线检测的视觉推理。大语言模型(LLM)和视觉语言模型(VLM)目前也已经被广泛用于自动驾驶领域,相关工作有很多。值得注意的是今年CVPR的一个新数据集MapLM,是专门针对地图和交通场景里的车道线等静态目标开发的benchmark,利用大模型来更好地理解交通场景,未来在这方面的研究应该会更多。
6、路侧车道线检测。V2X也是目前比较火热的一个方向,其相应的路侧3D目标检测任务和相关方法也得到了广泛关注。但是目前还没有针对路侧场景车道线标注的相关数据集和方法。如果能诞生相应benchmark和baseline,路侧车道线检测可以有效地帮助监控车辆非法变道等行为,在安防领域具有巨大的潜力。
8、总结
本文全面回顾了基于深度学习的单目车道线检测的最新进展,涵盖了先进的2D和3D车道线检测方法。通过理论分析和实验评估,确定了车道线检测算法的四个核心设计:(1)所遵循的任务范式;(2)车道线的建模方式;(3)全局上下文补充;(4)相机透视效应的消除。从这些角度,本文对现有方法进行了全面概述。此外,本文还回顾了单目车道线检测的扩展工作,旨在为读者提供对车道线检测发展的更全面理解。最后指出了车道线检测的未来研究方向。
致谢
本文的成文离不开笔者的指导老师们的倾心帮助,首先在此对他们表达诚挚的感谢。
然后,笔者在刚入门车道线检测时走过不少弯路,后来通过阅读大量文献、搜索各种知乎经验贴、观看相关工作的讲解视频以及参加自动驾驶之心的车道线检测课程和高精地图论文带读课程,才对该领域有了全面的认知。这一路的成长离不开领域内众多同行前辈们的优秀工作,也许你们并不认识我,但我此前从诸位的知乎贴或论文讲解视频中属实受益匪浅,在此表示感谢。
以下致谢作者排名不分先后顺序。
RESA(2D车道线检测,AAAI 2021):Hao Fang BézierLaneNet(2D车道线检测,CVPR 2022):Zhengyang Feng\ PersFormer(3D车道线检测,ECCV 2022):Li Chen,Chonghao Sima Anchor3DLane(3D车道线检测,CVPR 2023):Shaofei Huang BEV-LaneDet(3D车道线检测,CVPR 2023):Ruihao Wang MapTR,MapTRv2(在线高精地图构建,ICLR 2023,IJCV 2024)& LaneGAP(道路拓扑,ECCV 2024):Bencheng Liao BeMapNet,PivotNet(在线高精地图构建,CVPR 2023,ICCV 2023):Wenjie Ding LaneSegNet(道路拓扑,ICLR 2024):Tianyu Li