近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。
车道线检测是一种环境感知应用,其目的是通过车载相机或雷达来检测车道线。首先,介绍车道线检测的任务简介,其次介绍车道线检测数据集,然后介绍传统的车道检测方法和深度学习方法,随后对深度学习方法进行展开介绍。基于深度学习的车道线检测方法分为四类:基于分割的方法、基于检测的方法、基于关键点的方法,基于实例分割的方法,端到端的方法。
为了保证汽车在行驶过程中的安全性,这要求对车道线有准确的感知。车道检测的目的是获取道路上每条车道线的准确形状;也就是说不仅要求获取车道线的走向和形状,还需要对每条车道线实例进行区别,车道线检测任务可以类比为一种实例分割任务。
车道线检测面临多种挑战,如复杂的道路状况、遮挡、光照变化和语义模糊性。当应用于车载系统时,算法需要满足高实时性要求,且在有限硬件资源上高效运行,这增加了任务的难度。具体如下:
光照变化:日照强度的变化、阴影、反光等都可能导致车道线难以检测。例如,在太阳直射或低日照条件下,车道线的可见性会大大降低。
道路材料和颜色的多样性:不同的道路可能使用不同的材料或颜色来标记车道线,这增加了检测的复杂性。
遮挡问题:其他车辆、行人或其他物体可能会遮挡车道线,特别是在交通繁忙的路段。
道路磨损和老化:随着时间的推移,车道线可能会因磨损、污渍或其他因素而变得模糊或不清晰。
复杂的道路几何形状:例如,弯道、交叉口和分叉路口可能导致车道线形状的快速变化。
道路条件变化:雨、雪或冰可能会改变车道线的外观或完全遮盖车道线。
近似并行的非车道线:如路边的缝隙、道路维修标记或其他临时标记可能被误识别为车道线。
视角和相机校准:摄像机的位置、角度或校准可能会影响到车道线的检测。
实时性要求:在自动驾驶或驾驶辅助系统中,车道线检测需要实时进行,这对算法的效率提出了挑战。
多车道和交叉车道的处理:在多车道道路或交叉口,车道线的数量、方向和模式变得更加复杂。
与其他道路标记的区分:需要将车道线与其他道路标记(如行人横道、停车区域等)区分开。
对于汽车来说,为了使其具备安全、可靠、高效的感知能力,需要具备不同天气下(晴天、雨天、雾天、雪天、阴天)、不同光照条件下(白天、黄昏、黑夜、阳光直射、背光)、不同距离下(盲区0-2m、近距离2-40m、中距离40-80m、远距离80-200m、超远距离200+m)的感知能力,且对于感知的维度(目标在三维空间中的位置(x,y,z)和姿态角(phi, theta, gamma))、运动参数(目标的速度/加速度/角速度等)以及相应的感知精度都提出了一定的要求:
目前常见的几种感知传感器分为“运动感知类传感器”和“环境感知类传感器”两类,其中运动感知类传感器包括全球卫星定位系统、惯性传感器、轮速计、激光雷达及相机,用来解决“我们在哪”,也就是解决“建图定位问题”;环境感知类传感器包括激光雷达、相机、毫米波雷达及超声波雷达,用来解决“路上有什么”,也就是解决“感知问题”。
在自动驾驶领域,各种传感器采集的数据格式和它们之间的相互关系非常关键。对于您提到的传感器,以下是他们的数据格式及其在自动驾驶应用中的相互关系:
毫米波雷达 (Millimeter Wave Radar):
超声波雷达 (Ultrasonic Radar/Sensors):
激光雷达 (LIDAR):
相机 (Camera):
惯性传感器 (Inertial Measurement Unit, IMU):
在自动驾驶系统中,为确保这些传感器数据的准确融合,进行传感器标定是关键。标定确保了数据在同一坐标系中,并修正了任何由于设备误差或安装问题导致的畸变。数据融合算法也被使用,确保从各种传感器收集的数据提供了车辆周围环境的连续、准确和完整的表示。
车道线检测数据集的构建需要各场景类别的数据平衡,比如高速公路,辅路,盘山路,夜晚,雨天等数据,以模拟真实行车环境。
- 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)注释,以鼓励开发车道检测和更多与工业相关的自动驾驶方法。
车道线检测方法可以分为传统图像处理方法和现代深度学习方法。传统方法主要基于图像处理技术来识别车道线,而深度学习方法利用神经网络来实现。
利用边缘检测、滤波等技术分割车道线区域。
需要手动调节参数和滤波器,工作量大。
基于霍夫变换: 准确性高,但不能检测弯道。
基于LSD直线: 专门检测直线,可能在复杂环境下受限。
基于俯视图变换: 有利于多车道检测,但在遮挡情况下易受干扰。
基于拟合的方法: 能够检测弯道,但可能不稳定。
基于平行透视灭点: 需要特定的相机设置,对摄像机的位置和角度敏感。
应用场景受限,特定方法可能只适用于特定场景。对环境和设备要求较高。大多数传统方法无法满足实时性要求。
深度学习方法由于其自动特征提取,适应性,鲁棒性和实时性迅速获得了关注,大致分为四类:基于分割的方法、基于检测的方法、基于关键点的方法,基于实例分割的方法,端到端的方法。下面对四类方法进行简介。
车道线检测基于分割的方法主要是利用语义分割或实例分割技术来区分图像中的车道线与其他物体或背景。这种方法将车道线检测问题转化为一个像素级分类问题。以下是一些基于分割的车道线检测的核心观点和方法:
1. 语义分割方法:
这种方法将图像中的每一个像素分配给一个特定的类别。对于车道线检测,像素可能被分为“车道线”或“非车道线”。
2. 实例分割方法:
与语义分割不同,实例分割不仅区分每个像素的类别,还区分每个物体实例。这对于车道线检测特别有用,因为车道线通常需要被单独识别,尤其是在多车道的情境下。
3. ENet与SCNN:
这两种网络特别为道路场景和车道线检测设计。它们是轻量级且高效的网络,特别适合嵌入式系统和实时应用。
4. Post-processing:
在分割完成后,可能还需要后处理步骤,例如利用滤波器、形态学操作、或拟合技术(如多项式拟合)来提炼和完善车道线的结果。
总体而言,基于分割的车道线检测方法通常能够提供更高的准确性和更好的鲁棒性。但它们通常需要更多的计算资源,尤其是当使用深度学习模型时。分割模型大,处理速度慢。在严重遮挡情况下表现差,没有充分利用车道线的先验知识.
基于检测的方法主要是将车道线当作目标对象进行检测,而不是作为像素级分类的任务。这种方法通常利用物体检测的深度学习模型来寻找图像中的车道线特征。以下是基于检测的车道线检测的主要方法:
1. 使用经典的物体检测算法:
这些算法被修改和调整以适应车道线的特点。
Faster R-CNN: 该网络能够同时进行目标分类和位置回归。虽然它通常用于检测物体,但可以通过训练特定的数据集来定位车道线。
YOLO (You Only Look Once): YOLO 是一个实时物体检测系统。对于车道线检测,可以通过调整YOLO来检测和分类车道线,尤其是当车道线在特定的场景或形状中时。
SSD (Single Shot MultiBox Detector): 类似于YOLO,SSD也可以被调整用于车道线检测任务。
2. 锚点 (Anchors) 的调整:
对于车道线检测,传统的方形或矩形锚点可能不是最佳选择,因为车道线是细长的。为此,需要调整或自定义锚点的形状以更好地匹配车道线的形态。
3. 后处理:
由于车道线的连续性,经常需要后处理步骤来进一步完善检测结果,如使用形态学操作、平滑滤波器或线性拟合来优化检测到的车道线。
4. 融合其他传感器数据:
在某些复杂的驾驶环境下,基于检测的方法可能会受益于与其他传感器(如激光雷达)的数据融合,以提高检测的准确性。
适用于场景中的其他目标检测任务,可以同时检测车辆、行人和车道线。车道线的细长特点可能使得基于检测的方法不如基于分割的方法准确。另外,为了捕获复杂的车道线模式,需要更大量的、具有各种场景的数据。
基于关键点的车道线检测方法的核心思想是检测车道线上的特定关键点,并使用这些关键点来估计和绘制整条车道线。以下是基于关键点的车道线检测的主要方法和概念:
1. 关键点检测:
这一阶段的目的是在车道线上定位特定的关键点。可以使用传统的图像处理技术或现代的深度学习方法(如OpenPose、HRNet等)来检测这些关键点。
2. 曲线拟合:
一旦检测到关键点,可以使用多项式拟合、样条拟合或其他曲线拟合方法来估计整条车道线的形状。这是因为,理论上,只需要车道线上的三个点就可以估计其形状,但在实际应用中,使用更多的点可以提高准确性。
3. 迭代优化:
为了进一步提高车道线检测的准确性,可以采用迭代方法,如RANSAC,以剔除异常的关键点并优化曲线拟合的结果。
4. 时间连续性:
在视频流中进行车道线检测时,可以利用前一帧的结果来预测当前帧的关键点位置,从而提高检测的速度和准确性。
总的来说,基于关键点的车道线检测方法提供了一个在复杂场景中快速准确检测车道线的有效方法。然而,它也需要与其他方法结合,以处理车道线的遮挡、断裂和高密度问题。
基于实例分割的车道线检测方法不仅可以识别出图像中的车道线,还能将每条车道线区分为一个独立的实例。这在多车道场景中尤为重要,因为可能会有多条车道线并列在一起。以下是基于实例分割的车道线检测方法的概述:
核心思想:
主要模型:Mask R-CNN:
训练与预测:
优点:
总的来说,基于实例分割的车道线检测为道路分析和车辆导航提供了一个强大的工具,但也需要更多的数据和计算资源。
基于端到端(End-to-End, E2E)的车道线检测方法意味着从输入的原始图像数据直接预测车道线位置或其相关信息,无需中间的特定任务分割,例如特征提取、分割或预定义的规则。这种方法的主要优势在于其能够自动从数据中学习有用的特征和代表性,而无需手动工程或领域专家的干预。
以下是基于端到端的车道线检测方法的概述:
核心思想:
网络结构:
训练与预测:
优点:
挑战与限制:
总结:基于端到端的方法为车道线检测提供了一个强大且自适应的工具,但它的成功在很大程度上取决于可用的训练数据量和质量,以及计算资源。
最近3D车道检测方法出现,解决许多自动驾驶场景(上坡/下坡、颠簸等)中车道布局不准确估计的问题。之前的工作在复杂环境下很困难,因为前视图和鸟瞰视图(BEV)之间的空间转换设计过于简单,并且缺乏真实的数据集。
名称 | 选择 |
---|---|
算法 | PersFormer |
数据集 | OpenLane |
框架 | MMDetction3D |
针对以上问题,作者提出PersFormer(Perspective Transformer):一种端到端的单目3D车道检测器,其中有一个基于Transformer的空间特征转换模块。模型以摄像机参数为参考,通过关注相关的前视图局部区域来生成BEV特征。PersFormer采用统一的2D/3D锚点设计和加入一个辅助任务来同时检测2D/3D车道,增强了特征一致性,分享了多任务学习的好处。
如图所示是直观介绍从(a)中2D到(b)中BEV执行车道检测的动机:在平面假设下,车道将在投影BEV中分叉/汇聚,考虑到高度的3D解决方案可以准确预测这种情况下的平行拓扑结构。
首先,将空间特征转换建模为一个学习过程,该过程具有一种注意机制,捕获前视图特征中局部区域之间以及两个视图(前视图到BEV图)之间的交互,从而能够生成细粒度的BEV特征表示。该文构建了一个基于Transformer模块来实现这一点,同时采用了可变形的注意机制来显著降低计算内存需求,并通过交叉注意模块动态调整keys,捕捉局部区域的显著特征。与通过逆透视映射(IPM)进行的直接1-1变换相比,生成的特征更具代表性和鲁棒性,因为它关注周围的局部环境并聚合相关信息。
如图是整个PersFormer流水线:其核心是学习从前视图到BEV空间的空间特征转换,关注参考点周围的局部环境,在目标点(target point)生成的BEV特征将更具代表性;PersFormer由自注意模块组成,用于与本身BEV查询进行交互;交叉注意模块从基于IPM的前视图特征中获取key-value对,生成细粒度BEV特征。
这里主干网将resized图像作为输入,并生成多尺度前视图特征。主干网采用了流行的ResNet变型,这些特征可能会受到尺度变化、遮挡等缺陷的影响,这些缺陷来自前视图空间中固有的特征提取。最后,车道检测头负责预测2D和3D坐标以及车道类型。2D/3D检测头被称为LaneATT和3D LaneNet,其中对结构和锚点设计进行了一些修改。
进一步的目标是统一2-D车道检测和3-D车道检测任务,采用协同学习(co-learning)进行优化。一方面,透视图中,2D车道检测仍然作为大家的兴趣;另一方面,统一2D和3D任务自然是可行的,因为预测3D输出的BEV特征来自2D分支中的对应项。
如图是在2D和3D中统一锚点设计:首先在BEV空间(左)放置策划的锚点(红色),然后将其投影到前视图(右)。偏移量xik和uik(虚线)预测真值(黄色和绿色)到锚点的匹配。这样就建立了对应关系,并一起优化了特征。
更加详尽内容,请参考PersFormer
PersFormer文章发布了最早大规模真实世界3D车道数据集的一个,称为OpenLane,具有高质量的注释和场景多样性。OpenLane包含20万帧、超过88万条实例级车道、14个车道类别(单白色虚线、双黄色实体、左/右路边等),以及场景标签和路线邻近目标(CIPO)注释,以鼓励开发车道检测和更多与工业相关的自动驾驶方法。OpenLAN数据集以及百度Apollo有的3D车道合成数据集,在3D车道检测任务中,PersFormer显著优于竞争的基准算法,并且在OpenLAN的2D任务中也与最先进的算法相一致。
OpenLane数据集可以查看对比不同方法在该数据集上的性能指标。
数据集 https://github.com/OpenDriveLab/OpenLane
MMDetection3D
是一个开源的3D目标检测库,它是基于MMDetection
框架而发展的。它专门为3D点云数据提供了丰富的工具和模型。以下是该框架的一些优势:
丰富的模型库:MMDetection3D 包括了许多现代和经典的3D检测模型,如 PointPillars、SECOND、Part-A^2 等,允许用户在同一框架下尝试和对比不同的方法。
高效性:通过针对性地优化代码和整合PyTorch的高级功能,MMDetection3D确保了高效的训练和推理速度。
模块化设计:框架的模块化设计使得添加新的组件和模型变得非常容易。这有助于研究人员快速实验和迭代自己的想法。
灵活性:与其前身MMDetection类似,MMDetection3D允许用户通过配置文件轻松地更改模型的各个部分、优化器、学习率策略等,使得调参和模型组合更加灵活。
高质量的代码:代码遵循严格的质量标准,提供了详细的注释,这有助于研究人员理解并修改框架的各个部分。
社区支持:由于其开源性质和受欢迎程度,该项目有着活跃的社区支持,为用户和研究人员提供了持续的更新和问题解答。
跨任务和跨模态性:MMDetection3D不仅支持3D目标检测,还支持其他任务,如点云分割,多模态/多传感器融合等,这为多任务学习和更复杂的应用提供了便利。
集成了先进的训练策略:例如学习率调整、多尺度训练、混合精度训练等,这有助于更快地得到更好的性能。
可扩展性:可以轻松地与其他工具和框架集成,例如与其前身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框架。