车道线检测综述(难点/数据集/主要方案/后处理)

作者 | 小酒馆燃着灯  编辑 | 汽车人

原文链接:https://zhuanlan.zhihu.com/p/657233570

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【车道线检测】技术交流群

本文只做学术分享,如有侵权,联系删文

b398f3ffd40a84c6b9b84748ccf8a7f6.png

自动驾驶-车道线

一 前言

近期参与到了车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。

二 摘要

车道线检测是一种环境感知应用,其目的是通过车载相机或雷达来检测车道线。首先,介绍车道线检测的任务简介,其次介绍车道线检测数据集,然后介绍传统的车道检测方法和深度学习方法,随后对深度学习方法进行展开介绍。基于深度学习的车道线检测方法分为四类:基于分割的方法、基于检测的方法、基于关键点的方法,基于实例分割的方法,端到端的方法。

三 任务简介

3.1 任务背景

为了保证汽车在行驶过程中的安全性,这要求对车道线有准确的感知。车道检测的目的是获取道路上每条车道线的准确形状;也就是说不仅要求获取车道线的走向和形状,还需要对每条车道线实例进行区别,车道线检测任务可以类比为一种实例分割任务。

3.2 任务难点

车道线检测面临多种挑战,如复杂的道路状况、遮挡、光照变化和语义模糊性。当应用于车载系统时,算法需要满足高实时性要求,且在有限硬件资源上高效运行,这增加了任务的难度。具体如下:

  1. 光照变化:日照强度的变化、阴影、反光等都可能导致车道线难以检测。例如,在太阳直射或低日照条件下,车道线的可见性会大大降低。

  2. 道路材料和颜色的多样性:不同的道路可能使用不同的材料或颜色来标记车道线,这增加了检测的复杂性。

  3. 遮挡问题:其他车辆、行人或其他物体可能会遮挡车道线,特别是在交通繁忙的路段。

  4. 道路磨损和老化:随着时间的推移,**车道线可能会因磨损、污渍或其他因素而变得模糊或不清晰。 **

  5. 复杂的道路几何形状:例如,弯道、交叉口和分叉路口可能导致车道线形状的快速变化。

  6. 道路条件变化:雨、雪或冰可能会改变车道线的外观或完全遮盖车道线。

  7. 近似并行的非车道线:如路边的缝隙、道路维修标记或其他临时标记可能被误识别为车道线。

  8. 视角和相机校准:摄像机的位置、角度或校准可能会影响到车道线的检测。

  9. 实时性要求:在自动驾驶或驾驶辅助系统中,车道线检测需要实时进行,这对算法的效率提出了挑战。

  10. 多车道和交叉车道的处理:在多车道道路或交叉口,车道线的数量、方向和模式变得更加复杂。

  11. 与其他道路标记的区分:需要将车道线与其他道路标记(如行人横道、停车区域等)区分开。

四 数据集

车道线检测数据集的构建需要各场景类别的数据平衡,比如高速公路,辅路,盘山路,夜晚,雨天等数据,以模拟真实行车环境。

  • TuSimple:一共72k张图片,位于高速路,天气晴朗,车道线清晰,特点是车道线以点来标注;图片大小:1280x720;

  • CULane:一共98k张图片,包含拥挤,黑夜,无线,暗影等八种难以检测的情况,最多标记4条车道线;图片大小:1640x590;

  • Caltech:一共约1.2k张图片,场景比较简单,且视角较好;图片大小:640x480;

  • VPGNet:一共20k张图片,包含白天(非雨天、雨天、大雨天)、夜晚的数据,同时包含了各种车道线类型,以及其他不同类型的车道标识(左转箭头、直行箭头、斑马线等等);

  • BDD100k:120M张图片, 包含美国4个区的白天、黑夜各种天气状况,二维8类别车道线;图片大小:1280x720;

  • ApolloScape:140k张图片,特点是车道线以掩码的形式标注,包含2维或3维28个类别;图片大小:3384x2710;

  • CurveLanes:华为弯道检测数据集 135k张图片,采用三次样条曲线手动标注所有车道线,包括很多较为复杂的场景,如S路、Y车道,还有夜间和多车道的场景。分为训练集10万张,验证集2万张,测试集3万张;图片大小:2650x144;

  • OpenLane:OpenLane包含20万帧、超过88万条实例级车道、14个车道类别(单白色虚线、双黄色实体、左/右路边等),以及场景标签和路线邻近目标(CIPO)注释,以鼓励开发车道检测和更多与工业相关的自动驾驶方法。

9b7f197bad907e7a6e2cd2aacfc8c587.png

五 车道线检测方法

车道线检测方法可以分为传统图像处理方法和现代深度学习方法。传统方法主要基于图像处理技术来识别车道线,而深度学习方法利用神经网络来实现。

5.1 传统图像方法

5.1.1 基础方法

利用边缘检测、滤波等技术分割车道线区域。需要手动调节参数和滤波器,工作量大。

5.1.2 主要策略

基于霍夫变换: 准确性高,但不能检测弯道。基于LSD直线: 专门检测直线,可能在复杂环境下受限。基于俯视图变换: 有利于多车道检测,但在遮挡情况下易受干扰。基于拟合的方法: 能够检测弯道,但可能不稳定。基于平行透视灭点: 需要特定的相机设置,对摄像机的位置和角度敏感。

5. 1.3 缺点

应用场景受限,特定方法可能只适用于特定场景。对环境和设备要求较高。大多数传统方法无法满足实时性要求。

5.2 深度学习方法

深度学习方法由于其自动特征提取,适应性,鲁棒性和实时性迅速获得了关注,大致分为四类:基于分割的方法、基于检测的方法、基于关键点的方法,基于实例分割的方法,端到端的方法。下面对四类方法进行简介。

5.2.1 基于分割的方法

车道线检测基于分割的方法主要是利用语义分割或实例分割技术来区分图像中的车道线与其他物体或背景。这种方法将车道线检测问题转化为一个像素级分类问题。以下是一些基于分割的车道线检测的核心观点和方法:

1. 语义分割方法:

这种方法将图像中的每一个像素分配给一个特定的类别。对于车道线检测,像素可能被分为“车道线”或“非车道线”。

  • 全卷积网络(FCN):FCN是一个早期的用于语义分割的深度学习模型。它利用卷积层代替了传统的全连接层,使得网络能够接收任意尺寸的输入图像并输出相同尺寸的分割图像。

2. 实例分割方法:

与语义分割不同,实例分割不仅区分每个像素的类别,还区分每个物体实例。这对于车道线检测特别有用,因为车道线通常需要被单独识别,尤其是在多车道的情境下。

  • Mask R-CNN:它是基于Faster R-CNN的一个扩展,除了输出物体的边界框外,还输出一个对象掩码来区分各个实例。

3. ENet与SCNN:

这两种网络特别为道路场景和车道线检测设计。它们是轻量级且高效的网络,特别适合嵌入式系统和实时应用。

  • ENet:这是一个实时语义分割网络,旨在实现高效的前向传播。

  • SCNN:空间卷积神经网络利用了车道线在水平和垂直方向上的空间关系,它在传统的卷积基础上增加了空间信息,从而增强了车道线检测的准确性。

4. Post-processing:

在分割完成后,可能还需要后处理步骤,例如利用滤波器、形态学操作、或拟合技术(如多项式拟合)来提炼和完善车道线的结果。

总体而言,基于分割的车道线检测方法通常能够提供更高的准确性和更好的鲁棒性。但它们通常需要更多的计算资源,尤其是当使用深度学习模型时。分割模型大,处理速度慢。在严重遮挡情况下表现差,没有充分利用车道线的先验知识.

5.2.2 基于检测的方法

基于检测的方法主要是将车道线当作目标对象进行检测,而不是作为像素级分类的任务。这种方法通常利用物体检测的深度学习模型来寻找图像中的车道线特征。以下是基于检测的车道线检测的主要方法:

1. 使用经典的物体检测算法: 这些算法被修改和调整以适应车道线的特点。

Faster R-CNN: 该网络能够同时进行目标分类和位置回归。虽然它通常用于检测物体,但可以通过训练特定的数据集来定位车道线。
YOLO (You Only Look Once): YOLO 是一个实时物体检测系统。对于车道线检测,可以通过调整YOLO来检测和分类车道线,尤其是当车道线在特定的场景或形状中时。
SSD (Single Shot MultiBox Detector): 类似于YOLO,SSD也可以被调整用于车道线检测任务。

  1. 锚点 (Anchors) 的调整: 对于车道线检测,传统的方形或矩形锚点可能不是最佳选择,因为车道线是细长的。为此,需要调整或自定义锚点的形状以更好地匹配车道线的形态。

  2. 后处理: 由于车道线的连续性,经常需要后处理步骤来进一步完善检测结果,如使用形态学操作、平滑滤波器或线性拟合来优化检测到的车道线。

  3. 融合其他传感器数据: 在某些复杂的驾驶环境下,基于检测的方法可能会受益于与其他传感器(如激光雷达)的数据融合,以提高检测的准确性。

用于场景中的其他目标检测任务,可以同时检测车辆、行人和车道线。车道线的细长特点可能使得基于检测的方法不如基于分割的方法准确。另外,为了捕获复杂的车道线模式,需要更大量的、具有各种场景的数据。

5.2.3 关键点的方法

基于关键点的车道线检测方法的核心思想是检测车道线上的特定关键点,并使用这些关键点来估计和绘制整条车道线。以下是基于关键点的车道线检测的主要方法和概念:

  1. 关键点检测:这一阶段的目的是在车道线上定位特定的关键点。可以使用传统的图像处理技术或现代的深度学习方法(如OpenPose、HRNet等)来检测这些关键点。

  2. 曲线拟合:一旦检测到关键点,可以使用多项式拟合、样条拟合或其他曲线拟合方法来估计整条车道线的形状。这是因为,理论上,只需要车道线上的三个点就可以估计其形状,但在实际应用中,使用更多的点可以提高准确性。

  3. 迭代优化:为了进一步提高车道线检测的准确性,可以采用迭代方法,如RANSAC,以剔除异常的关键点并优化曲线拟合的结果。

  4. 时间连续性:在视频流中进行车道线检测时,可以利用前一帧的结果来预测当前帧的关键点位置,从而提高检测的速度和准确性。

总的来说,基于关键点的车道线检测方法提供了一个在复杂场景中快速准确检测车道线的有效方法。然而,它也需要与其他方法结合,以处理车道线的遮挡、断裂和高密度问题。

5.2.4 基于实例分割的方法

基于实例分割的车道线检测方法不仅可以识别出图像中的车道线,还能将每条车道线区分为一个独立的实例。这在多车道场景中尤为重要,因为可能会有多条车道线并列在一起。以下是基于实例分割的车道线检测方法的概述:

  1. 核心思想:

  2. 实例分割方法的目的是为图像中的每个物体实例分配一个唯一的标签,这与语义分割不同,后者只为每个像素分配一个类别标签。

  3. 在车道线检测的情境中,这意味着每条车道线会被标记为一个独特的实例,与其他车道线区分开来。

  4. 主要模型:Mask R-CNN:

  5. Mask R-CNN 是一个流行的实例分割模型,它基于 Faster R-CNN 的架构,并增加了一个分支来预测对象的分割掩码。

  6. 在车道线检测的场景中,Mask R-CNN 可以被训练来识别并分割每条车道线。

  7. 训练与预测:

  8. 需要一个带有分割掩码的数据集,其中每条车道线都被标记为一个独立的实例。

  9. 在预测阶段,模型会为每条检测到的车道线提供一个掩码,这可以用于进一步的道路分析或车辆导航。

  10. 优点:

  11. 更好的精度: 通过将每条车道线视为一个独立的实例,可以更精确地检测和定位车道线,尤其是在多车道或交叉车道的情况下。

  12. 更丰富的信息: 可以获取每条车道线的形状、位置和方向,这在交通分析和路径规划中很有价值。

总的来说,基于实例分割的车道线检测为道路分析和车辆导航提供了一个强大的工具,但也需要更多的数据和计算资源。

5.2.5 端到端的方法

基于端到端(End-to-End, E2E)的车道线检测方法意味着从输入的原始图像数据直接预测车道线位置或其相关信息,无需中间的特定任务分割,例如特征提取、分割或预定义的规则。这种方法的主要优势在于其能够自动从数据中学习有用的特征和代表性,而无需手动工程或领域专家的干预。

以下是基于端到端的车道线检测方法的概述:

  1. 核心思想:

  2. 利用深度神经网络直接从原始图像到车道线检测结果的映射,学习从数据中捕获的复杂模式和上下文信息。

  3. 网络结构:

  4. 通常使用卷积神经网络(CNN)结构,例如VGG、ResNet或更复杂的架构。

  5. 可以使用全卷积网络(FCN)直接预测每个像素是否属于车道线。

  6. 也可以使用回归模型预测车道线的关键点或参数化形式。

  7. 训练与预测:

  8. 使用大量标记的车道线图像进行训练。

  9. 在预测时,可以实时处理输入的视频流,生成车道线位置或相关属性。

  10. 优点:

  11. 自适应性: 能够自动从数据中学习有用的特征。

  12. 减少手动干预: 无需手动特征工程或规则定义。

  13. 可能的更好性能: 如果训练数据足够丰富和多样,端到端方法可能会达到更好的性能。

  14. 挑战与限制:

  15. 需要大量数据: 为了充分训练深度神经网络,需要大量标注的训练数据。

  16. 计算要求: 端到端的方法可能需要更多的计算资源,特别是在实时应用中。

  17. 解释性: 与传统方法相比,端到端的深度学习方法可能缺乏解释性。

总结:基于端到端的方法为车道线检测提供了一个强大且自适应的工具,但它的成功在很大程度上取决于可用的训练数据量和质量,以及计算资源。

六 算法,数据集与框架的选择

最近3D车道检测方法出现,解决许多自动驾驶场景(上坡/下坡、颠簸等)中车道布局不准确估计的问题。之前的工作在复杂环境下很困难,因为前视图和鸟瞰视图(BEV)之间的空间转换设计过于简单,并且缺乏真实的数据集。

1aa3f2860f13d957a53b7bde2c39015a.png

6.1 算法

针对以上问题,作者提出PersFormer(Perspective Transformer):一种端到端的单目3D车道检测器,其中有一个基于Transformer的空间特征转换模块。模型以摄像机参数为参考,通过关注相关的前视图局部区域来生成BEV特征。PersFormer采用统一的2D/3D锚点设计和加入一个辅助任务来同时检测2D/3D车道,增强了特征一致性,分享了多任务学习的好处。

37585ec7a488a003f4425c4170266953.png

如图所示是直观介绍从(a)中2D到(b)中BEV执行车道检测的动机:在平面假设下,车道将在投影BEV中分叉/汇聚,考虑到高度的3D解决方案可以准确预测这种情况下的平行拓扑结构。首先,将空间特征转换建模为一个学习过程,该过程具有一种注意机制,捕获前视图特征中局部区域之间以及两个视图(前视图到BEV图)之间的交互,从而能够生成细粒度的BEV特征表示。该文构建了一个基于Transformer模块来实现这一点,同时采用了可变形的注意机制来显著降低计算内存需求,并通过交叉注意模块动态调整keys,捕捉局部区域的显著特征。与通过逆透视映射(IPM)进行的直接1-1变换相比,生成的特征更具代表性和鲁棒性,因为它关注周围的局部环境并聚合相关信息。

af63a5c97452f0dbfed207dd244a5582.png

如图是整个PersFormer流水线:其核心是学习从前视图到BEV空间的空间特征转换,关注参考点周围的局部环境,在目标点(target point)生成的BEV特征将更具代表性;PersFormer由自注意模块组成,用于与本身BEV查询进行交互;交叉注意模块从基于IPM的前视图特征中获取key-value对,生成细粒度BEV特征。这里主干网将resized图像作为输入,并生成多尺度前视图特征。主干网采用了流行的ResNet变型,这些特征可能会受到尺度变化、遮挡等缺陷的影响,这些缺陷来自前视图空间中固有的特征提取。最后,车道检测头负责预测2D和3D坐标以及车道类型。2D/3D检测头被称为LaneATT和3D LaneNet,其中对结构和锚点设计进行了一些修改。

c0d25b3e7cea4d6dcfa1ccc6460fa26e.png

进一步的目标是统一2-D车道检测和3-D车道检测任务,采用协同学习(co-learning)进行优化。一方面,透视图中,2D车道检测仍然作为大家的兴趣;另一方面,统一2D和3D任务自然是可行的,因为预测3D输出的BEV特征来自2D分支中的对应项。

f4f233f0bd720a6dd6740974bd97b618.png

如图是在2D和3D中统一锚点设计:首先在BEV空间(左)放置策划的锚点(红色),然后将其投影到前视图(右)。偏移量xik和uik(虚线)预测真值(黄色和绿色)到锚点的匹配。这样就建立了对应关系,并一起优化了特征。更加详尽内容,请参考PersFormer

6.2 数据集

PersFormer文章发布了最早大规模真实世界3D车道数据集的一个,称为OpenLane,具有高质量的注释和场景多样性。OpenLane包含20万帧、超过88万条实例级车道、14个车道类别(单白色虚线、双黄色实体、左/右路边等),以及场景标签和路线邻近目标(CIPO)注释,以鼓励开发车道检测和更多与工业相关的自动驾驶方法。OpenLAN数据集以及百度Apollo有的3D车道合成数据集,在3D车道检测任务中,PersFormer显著优于竞争的基准算法,并且在OpenLAN的2D任务中也与最先进的算法相一致。OpenLane数据集可以查看对比不同方法在该数据集上的性能指标。

数据集 https://github.com/OpenDriveLab/OpenLane

6.3 框架

`

MMDetection3D 是一个开源的3D目标检测库,它是基于 MMDetection` 框架而发展的。它专门为3D点云数据提供了丰富的工具和模型。以下是该框架的一些优势:

  1. 丰富的模型库:MMDetection3D 包括了许多现代和经典的3D检测模型,如 PointPillars、SECOND、Part-A^2 等,允许用户在同一框架下尝试和对比不同的方法。

  2. 高效性:通过针对性地优化代码和整合PyTorch的高级功能,MMDetection3D确保了高效的训练和推理速度。

  3. 模块化设计:框架的模块化设计使得添加新的组件和模型变得非常容易。这有助于研究人员快速实验和迭代自己的想法。

  4. 灵活性:与其前身MMDetection类似,MMDetection3D允许用户通过配置文件轻松地更改模型的各个部分、优化器、学习率策略等,使得调参和模型组合更加灵活。

  5. 高质量的代码:代码遵循严格的质量标准,提供了详细的注释,这有助于研究人员理解并修改框架的各个部分。

  6. 社区支持:由于其开源性质和受欢迎程度,该项目有着活跃的社区支持,为用户和研究人员提供了持续的更新和问题解答。

  7. 跨任务和跨模态性:MMDetection3D不仅支持3D目标检测,还支持其他任务,如点云分割,多模态/多传感器融合等,这为多任务学习和更复杂的应用提供了便利。

  8. 集成了先进的训练策略:例如学习率调整、多尺度训练、混合精度训练等,这有助于更快地得到更好的性能。

  9. 可扩展性:可以轻松地与其他工具和框架集成,例如与其前身MMDetection的2D目标检测模型集成,以支持2D-3D多任务学习。

MMDection3D框架: 源码地址 https://github.com/open-mmlab/mmdetection3d 官方文档 https://mmdetection3d.readthedocs.io/en/latest/ 新一代3D目标检测通用框架 https://zhuanlan.zhihu.com/p/165647329

七 总结

本文主要起到引入介绍的作用。开始讲述了任务背景与重难点,紧接着进行数据集的整理对比,再仔细对比分析了多种检测方法,最后介绍了我们将要使用的工具。后续会详细介绍我们使用的OpenLane数据集和MMDetection3D框架。

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署协同感知语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

6716e0efb603bb357c207e411b7c4483.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

22aca4375c99660507c37af3105b309d.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

1174c76588c778381fbfea20e8fd469e.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

2a5b4d26090bf2db6cb694291a8df443.jpeg

  • 6
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\],TuSimple数据集是一个用于车道线检测数据集,但是由于下载速度慢,很多人无法看到原始数据集和处理后的样子,因此可能会对自己的数据集产生怀疑。为了解决这个问题,你可以尝试以下几个步骤。 首先,根据引用\[2\],你可以尝试减少CPU线程数或者epoch的数量,以减少线程互锁导致的问题。你可以将batch_size和CPU线程数都修改为1,然后重新运行代码,看看是否能够解决问题。 其次,根据引用\[3\],你还可以检查代码中是否存在路径错误或者文件类型错误。在这个引用中,出现了一个TypeError,提示路径应该是字符串、字节、os.PathLike或整数类型,而不是Config类型。你可以检查代码中的路径是否正确,并确保路径的类型符合要求。 如果以上方法都没有解决问题,你可以尝试重新制作数据集,确保数据集的质量和格式正确。你可以仔细检查数据集的制作过程,确保没有遗漏或错误的步骤。 总之,车道线检测数据集问题可能是由于线程互锁、路径错误或数据集质量问题导致的。你可以根据以上方法逐步排查和解决问题,以获得准确可靠的数据集。 #### 引用[.reference_title] - *1* *2* *3* [详细教程——LaneNet-Lane-Detection车道检测,训练自己的数据集](https://blog.csdn.net/Hellow_RMB/article/details/107201309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值