当前位置: 首页 > news >正文

一文解决3D车道线检测:最新单目3D车道线检测综述

前言

场景理解是自动驾驶中极具挑战的任务,尤其是车道检测。车道是道路分割的关键,对车辆安全高效行驶至关重要。车道检测技术能自动识别道路标记,对自动驾驶车辆至关重要,缺乏这项技术可能导致交通问题和事故。车道检测面临多种挑战,包括车道标记的小尺寸、广泛分布、多种车道类型、光线条件、障碍物和纹理干扰等。

基于摄像头的车道检测方法

可以主要分为二维(2D)和三维(3D)车道检测。

图片

2D车道检测

2D车道检测方法旨在准确描绘图像中车道的形状和位置,主要采用四种不同的方法:基于分割、基于锚点、基于关键点和基于曲线的策略。(1) 基于分割的方法将2D车道检测框定为像素级分类挑战,生成车道掩码。这些方法通过探索有效的语义特征并进行后处理来培养车道分组,但它们的计算成本较高。(2) 基于锚点的方法在2D车道检测中因其简单性和高效性而受到称赞,通常使用线性锚点来回归相对于目标的位置偏移。为了规避线性锚点的限制,使用内在车道空间生成各种车道候选点。启发式设计的行锚点将行像素分类为车道,在中进一步演变为混合(行和列)锚点,以减轻侧车道的定位误差。此外,这种方法显著提高了推理速度。(3) 基于关键点的方法提供了更灵活和稀疏的车道位置建模,首先估计点位置,然后使用各种方案将属于同一车道的关键点关联起来。中的主要策略是通过预定义关键点和回归采样点与预定义点之间的偏移来预测2D车道。尽管这些方法取得了有希望的结果,但由于其固定点设计,缺乏适应复杂车道配置的灵活性。(4) 基于曲线的方法通过各种曲线方程和特定参数拟合车道线,将2D车道检测转化为曲线参数回归挑战,通过检测起点和终点以及曲线参数。尽管在2D车道检测方面取得了有希望的进展,但2D结果与实际应用需求之间仍存在显著差距,特别是精确的3D定位。

图片

3D车道检测

由于2D车道检测本质上缺乏深度信息,将这些检测投影到3D空间可能会导致不准确和鲁棒性降低。因此,许多研究人员将重点转向3D领域内的车道检测。基于深度学习的3D车道检测方法主要分为基于CNN的方法和基于Transformer的方法,首先构建稠密的鸟瞰图(BEV)特征图,然后从这些中间表示中提取3D车道信息。基于CNN的方法主要包括D-LaneNet,它提出了一种双路径架构,利用逆透视变换(IPM)转置特征,并通过垂直锚点回归检测车道。3D-LaneNet+将BEV特征分割为不重叠的单元,通过相对于单元中心的横向偏移、角度和高度偏移解决锚点方向的限制。GenLaneNet首次在虚拟俯视坐标系统中更好地对齐特征,并引入两阶段框架,将车道分割与几何编码分离。BEVLaneDet使用虚拟摄像头确保空间一致性,并通过基于关键点的3D车道表示适应更复杂的场景。GroupLane 在BEV中引入行基分类方法,可容纳任意方向的车道,并与实例组内的特征信息交互。

图片

基于Transformer的方法包括CLGo,提出了一种两阶段框架,能够从图像中估计摄像机姿态,并基于BEV特征进行车道解码。PersFormer使用离线摄像机姿态构建稠密的BEV查询,将2D和3D车道检测统一在一个基于Transformer的框架下。STLanes3D使用融合的BEV特征预测3D车道,并引入3DLane-IOU损失,将横向和高度误差耦合起来。Anchor3DLane,一种基于CNN的方法,基于3D锚点直接从图像特征回归3D车道,显著减少了计算开销。CurveFormer在Transformers中利用稀疏查询表示和交叉注意力机制,有效回归3D车道的多项式系数。LATR在CurveFormer的查询锚点建模基础上,构建了车道感知查询生成器和动态3D地面位置嵌入。CurveFormer++提出了一种不需要图像特征视图变换的单阶段Transformer检测方法,直接从透视图像特征推断3D车道检测结果。

图片

自动驾驶中的单目3D车道检测

3D-LaneNet 是单目3D车道检测领域的开创性工作。3D-LaneNet引入了一个网络,可以直接从单目图像中预测道路场景中的三维车道信息。这项工作是第一个使用车载单目视觉传感器解决三维车道检测任务的。3D-LaneNet引入了两个新概念:网络内特征图反向透视映射(IPM)和基于锚点的车道表示。网络内IPM投影促进了前视图和鸟瞰图中双重表示信息流的传递。基于锚点的车道输出表示支持端到端训练方法,这不同于将三维车道线检测问题等同于目标检测问题的常见启发式方法。3D-LaneNet的概述如图2所示。

图片

受到FCOS和 CenterNet等工作的启发,3D LaneNet+ 是一种无锚点的3D车道检测算法,可以检测任意拓扑结构的3D车道线。3D LaneNet+的作者沿用了3D LaneNet的双流网络,该网络分别处理图像视图和鸟瞰视图,并扩展了支持检测更多拓扑结构的3D车道线。与预测整个车道不同,3D LaneNet+检测位于单元内的小车道段及其属性(位置、方向、高度)。此外,该方法为每个单元学习一个全局嵌入,将小车道段聚类为完整的3D车道信息。在中,Jiang等人设计了一个两阶段3D车道检测网络,其中每个阶段分别进行训练。第一个子网络专注于车道图像分割,而第二个子网络专注于基于第一个子网络的分割输出预测3D车道结构。在每个阶段分别引入了高效通道注意力(ECA)注意力机制和卷积块注意力模块(CBAM)注意力机制,从而提高了分割性能和3D车道检测的准确性。Guo等人提出了Gen-LaneNet,一种通用且可扩展的3D车道检测方法,用于从单一图像中检测3D车道线,如图3所示。作者引入了一种新的几何引导车道锚点表示,并应用特定的几何变换直接从网络输出计算真实的3D车道点。这种锚点设计直观地扩展了3D-LaneNet中的锚点设计。这种方法将锚点坐标与基础鸟瞰视图特征对齐,增强了其在处理不熟悉场景时的鲁棒性。此外,该论文提出了一个可扩展的两阶段框架,使图像分割子网络和几何编码子网络能够独立学习,从而显著减少了训练所需的3D标签数量。此外,该论文还引入了一个高度逼真的合成图像数据集,具有丰富的视觉变化,用于开发和评估3D车道检测方法。

图片

Liu等人提出了CLGo ,一种两阶段框架,用于从单一图像中预测3D车道和相机姿态。其第一阶段专注于相机姿态估计,并引入了辅助3D车道任务和几何约束进行多任务学习。第二阶段则针对3D车道任务,利用先前估计的姿态生成顶视图图像以进行准确的3D车道预测。PersFormer引入了首个基于Transformer的3D车道检测方法,并提出了一种称为Perspective Transformer的新架构,如图4所示。这种基于Transformer的架构实现了空间特征转换,使得3D车道线的检测更加准确。此外,该框架具有同时处理2D和3D车道检测任务的独特能力,提供了一种统一的解决方案。此外,该论文还提出了OpenLane,一个基于Waymo Open数据集构建的大规模3D车道检测数据集。OpenLane是首个提供高质量注释和多样化真实场景的数据集,为推进该领域的研究提供了宝贵的资源。

图片

研究人员引入了最大的真实世界3D车道检测数据集ONCE-3DLanes数据集,并提供了更全面的评估指标,以重新激发对这一任务在真实场景中的兴趣。此外,该论文提出了一种名为SALAD的方法,能够直接从前视图图像生成3D车道布局,而无需将特征图转换为鸟瞰视图(BEV),SALAD的网络架构如图5所示。提出了一种新的损失函数,利用车道在3D空间中的几何结构先验,从局部到全局稳定重建,并提供明确的监督。它引入了一个2D车道特征提取模块,利用顶视图的直接监督,确保最大限度地保留车道结构信息,特别是在远处区域,整体流程如图7所示。此外,该论文提出了一种针对3D车道检测的任务特定数据增强方法,以解决地面坡度和相机姿态的数据分布不平衡问题,增强了在罕见案例中的泛化能力。Bai等人提出了CurveFormer,一种基于Transformer的3D车道检测算法。在这篇论文中,研究人员将解码器层中的查询形式化为动态锚点集,并利用曲线交叉注意模块计算查询与图像特征之间的相似性。此外,他们还引入了上下文采样单元,通过结合参考特征和查询来预测偏移,指导采样偏移的学习。Ai等人提出了WS-3D-Lane ,首次提出了一种仅使用2D车道标签的弱监督3D车道检测方法,并在评估中超越了之前的3D-LaneNet方法。此外,作者提出了一种相机俯仰自校准方法,可以实时在线计算相机俯仰角,从而减少由于道路不平造成的相机与地面平面之间俯仰角变化带来的误差。在BEV-LaneDet中,作者引入了虚拟相机的概念,一种用于数据预测处理的新模块,旨在标准化相机的外部参数,并确保数据分布的一致性。此外,他们提出使用关键点表示作为表示3D车道结构的简单而有效的方法。此外,他们提出了MLP基空间转换金字塔,这是一种轻量级架构,旨在将多角度视觉特征转换为鸟瞰特征。Huang等人提出了Anchor3DLane 框架,该框架直接在3D空间中定义锚点,并直接从前视图回归3D车道线,而无需引入顶视图,如图6所示。作者还提出了Anchor3DLane的多帧扩展,以利用对齐良好的时间信息并进一步提高性能。此外,开发了一种全局优化方法,通过利用车道等宽特性来微调车道线。

图片

Li等人提出了一种方法,从前视图图像中直接提取顶视图车道信息,减少了2D车道表示中的结构损失。该方法的整体流程如图7所示。在本文中,作者将3D车道检测视为从2D图像到3D空间的重建问题。他们提出,在训练过程中显式地施加3D车道的几何先验对于充分利用车道内和车道间关系的结构约束以及从2D车道表示中提取3D车道的高度信息至关重要。作者分析了3D车道与其2D表示之间的几何关系,并提出了一种基于几何结构先验的辅助损失函数。他们还证明,显式几何监督可以增强噪声消除、异常值拒绝和3D车道结构保留。

图片

数据集及不同算法表现

图片

图片

图片

图片

未解决的挑战

  1. 粗略的结构化信息:大多数文献中提到的3D车道检测数据集都是在先进城市的正常和结构良好的基础设施中记录的。

  2. 不确定性感知决策:车道检测和自动驾驶决策中一个被忽视的重要方面是模型对输入数据的预测信心。

  3. 弱监督学习策略:当前的深度学习模型主要依赖于全监督学习策略,这对标记数据的需求很高。

图片

未来方向

  1. 基于视频的自动驾驶3D车道检测:借鉴视频目标检测、语义分割和2D车道检测的进展,结合视频技术显著提高了3D车道检测系统的精度和可靠性。视频方法的核心优势在于它们能够利用时间数据,提供静态图像所缺乏的动态视角。

  2. 混合方法和多模态技术:通过结合各种传感器输入(如摄像头、LiDAR和雷达),多模态3D车道检测技术的进展显著加快。这一整合为克服现有摄像头系统面临的挑战开辟了前景。

  3. 主动学习和增量学习:主动学习是指模型在测试阶段和部署后遇到新数据时能够适应和学习的能力。

  4. 恶劣天气条件:开发基于摄像头的自动驾驶3D车道检测系统的进展显著受到恶劣天气条件的阻碍,这些条件会严重影响能见度。

  5. 大语言模型(LLM)在3D车道检测中的应用:大语言模型(如ChatGPT)的出现改变了人工通用智能(AGI)领域,展示了它们在通过自定义用户提示或语言指令处理各种自然语言处理任务方面的出色能力。

  6. 更准确和高效的自动驾驶3D车道检测方法:目前3D车道检测技术的定性性能如表IV所示。我们可以观察到,只有少数方法能够在模型准确性和推理延迟之间取得平衡。

  7. 基于事件相机的3D车道检测:RGB摄像头受其成像原理的限制,在高速或低光场景中图像质量较差。幸运的是,事件相机可以克服这一限制。事件相机是一种具有高时间分辨率、高动态范围、低延迟和低能耗的视觉传感器。

  8. 不确定性感知的3D车道检测:在过去的几年里,深度神经网络在众多计算机视觉任务中取得了显著成功,巩固了其作为高效自动感知工具的重要地位。

引用文章

Monocular 3D lane detection for Autonomous Driving: RecentAchievements, Challenges, and Outlooks


关注我的公众号auto_driver_ai(Ai fighting), 第一时间获取更新内容。

相关文章:

一文解决3D车道线检测:最新单目3D车道线检测综述

前言 场景理解是自动驾驶中极具挑战的任务,尤其是车道检测。车道是道路分割的关键,对车辆安全高效行驶至关重要。车道检测技术能自动识别道路标记,对自动驾驶车辆至关重要,缺乏这项技术可能导致交通问题和事故。车道检测面临多种…...

稳中向好,今年新招6000人

团子校招 近日,美团宣布开启面向 2025 届的校园招聘,招聘规模达 6000 人。 虽然相比京东(宣布招聘 16000 人)稍有逊色,但 6000 这个校招规模可一点不少。 要知道,京东是重自营的传统电商,16000 …...

使用kettle开源工具进行跨库数据同步

数据库同步可以用: 1、Navicat 2、Kettle 3、自己写代码 调用码神工具跨库数据同步 -连接 4、其它 实现 这里使用Kettle来同步,主要是开源的,通过配置就可以实现了 Kettle的图形化界面(Spoon)安装参考方法 ht…...

Golang | Leetcode Golang题解之第307题区域和检索-数组可修改

题目: 题解: type NumArray struct {nums, tree []int }func Constructor(nums []int) NumArray {tree : make([]int, len(nums)1)na : NumArray{nums, tree}for i, num : range nums {na.add(i1, num)}return na }func (na *NumArray) add(index, val …...

Golang | Leetcode Golang题解之第301题删除无效的括号

题目&#xff1a; 题解&#xff1a; func checkValid(str string, lmask, rmask int, left, right []int) bool {cnt : 0pos1, pos2 : 0, 0for i : range str {if pos1 < len(left) && i left[pos1] {if lmask>>pos1&1 0 {cnt}pos1} else if pos2 <…...

【Story】《程序员面试的“八股文”辩论:技术基础与实际能力的博弈》

目录 程序员面试中的“八股文”&#xff1a;助力还是阻力&#xff1f;1. “八股文”的背景与定义1.1 “八股文”的起源1.2 “八股文”的常见类型 2. “八股文”的作用分析2.1 理论基础的评价2.1.1 助力2.1.2 阻力 3. 实际工作能力的考察3.1 助力3.2 阻力 4. 面试中的背题能力4.…...

初步了解泛型

目录 泛型的引入 泛型 泛型 泛型类 泛型的上界 泛型的引入 之前学习的数组里面是存放着整型或者自字符串中一种的数组&#xff0c;如果想要在一个数组里面放多种类型数据&#xff0c;我们该怎么去做呢&#xff1f;Object类或许是一个好的解决方法&#xff0c;因为Object类…...

【C#】.net core 6.0 webapi 使用core版本的NPOI的Excel读取数据以及保存数据

欢迎来到《小5讲堂》 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景读取并保存NPOI信息NPOI 插件介绍基本功能示例代码写入 Excel 文件…...

C++推荐的oj网站

洛谷 信息学奥赛一本通 C语言网 codeforces 杭电oj...

springmvc处理http请求的底层逻辑

http-nio-8088-Poller线程中在org.apache.tomcat.util.net.NioEndpoint.Poller#run这个函数里循环检测selector&#xff0c;若发现有SocketEvent.OPEN_READ事件则会将SelectionKey.attachment中的内容作为入参包装成runable&#xff0c;然后由org.apache.tomcat.util.threads.T…...

干货满满,从零到一:编程小白如何在大学成为编程大神?

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

前端-如何通过docker打包Vue服务成镜像并在本地运行(本地可以通过http://localhost:8080/访问前端服务)

1、下载安装docker&#xff0c;最好在vs code里安装docker的插件。 下载链接&#xff1a;https://www.docker.com/products/docker-desktop &#x1f389; Docker 简介和安装 - Docker 快速入门 - 易文档 (easydoc.net) 2、准备配置文件-dockerfile文件和nginx.conf文件 do…...

零基础学习【Mybatis】这一篇就够了

Mybatis 查询resultType使用resultMap使用单条件查询多条件查询模糊查询返回主键 动态SQLifchoosesetforeachsql片段 配置文件注解增删改查结果映射 查询 resultType使用 当数据库返回的结果集中的字段和实体类中的属性名一一对应时, resultType可以自动将结果封装到实体中 r…...

Shell入门(保姆级教学)

Shell是一种命令行解释器&#xff0c;也是一种脚本语言&#xff0c;广泛应用于Unix和类Unix系统中&#xff0c;例如Linux。它是用户与操作系统内核交互的桥梁&#xff0c;通过Shell可以执行系统命令、管理文件系统、处理文本数据等。本文将带你入门Shell编程&#xff0c;涵盖基…...

【JDK11和JDK8并行与切换】

一、JDK11安装 1、下载jdk11&#xff0c;点击.exe安装在&#xff1a;C:\Program Files\Java\jdk-11\ 2、配置JAVA_HOME 变量名为JAVA_HOME 变量值为jdk安装路径 3、配置PATH 找到系统变量里的PATH 双击或者单击后点击编辑 点击右上角的新建 新建两条 %JAVA_HOME%\bin …...

vue大数据量列表渲染性能优化:虚拟滚动原理

前面咱完成了自定义JuanTree组件各种功能的实现。在数据量很大的情况下&#xff0c;我们讲了两种实现方式来提高渲染性能&#xff1a;前端分页和节点数据懒加载。 前端分页小节&#xff1a;Vue3扁平化Tree组件的前端分页实现 节点数据懒加载小节&#xff1a;Element Tree Plu…...

昇思25天学习打卡营第1天|快速入门

目录 昇思MindSpore介绍MindSpore的API来快速实现一个简单的深度学习模型通过资料更深入的了解昇思MindSpore 昇思MindSpore介绍 今天有幸学习了昇思MindSpore&#xff0c;让我们来简单的了解一下它 昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行…...

LinkedList 实现 LRU 缓存

LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种缓存淘汰策略&#xff0c;用于在缓存满时淘汰最久未使用的元素。 关键&#xff1a; 缓存选什么结构&#xff1f; 怎么实现访问顺序&#xff1f; import java.util.*;public class LRUCac…...

ubuntu安装workon

pip install virtualenvpip install virtualenvwrapper配置virtualenvwrapper。在你的shell配置文件&#xff08;比如.bashrc&#xff0c;.bash_profile或.zshrc&#xff09;中添加以下内容&#xff1a;export WORKON_HOME$HOME/.virtualenvs export VIRTUALENVWRAPPER_PYTHON/…...

(面试必看!)锁策略

文章导读 引言考点一、重量级锁 VS 轻量级锁1、定义与原理2、主要区别3、适用场景 考点二、乐观锁 VS 悲观锁1、悲观锁&#xff08;Pessimistic Locking&#xff09;2、乐观锁&#xff08;Optimistic Locking&#xff09;3、总结 考点三、读写锁1、读写锁的特性2、读写锁的实现…...

RAGflow:开源AI框架的创新与应用

在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域&#xff0c;AI的应用更是无处不在。今天&#xff0c;我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执…...

AI的学习明确路径

1.不要一开始学习数学。 首先&#xff0c;学习python的语法和工具包。 python的工具包有&#xff1a;numpy,pandas,matlap,sciklt-learn. 然后&#xff0c;学习机械学习算法&#xff0c;学习1.树模型&#xff0c;随机森林 。 2.神经网络。 上kaggle中&#xff0c;找人家的经…...

【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间 本章将分享缺省参数与函数重载相关知识&#xff0c;为了更加深入学习C打下了坚实的基础。本章重点在于缺省参数与函数重载使用前提与注意事项 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1…...

mysql排查死锁的几个查询sql

SHOW PROCESSLIST; select * from information_schema.INNODB_TRX; select * from information_schema.INNODB_LOCKS; select * from information_schema.INNODB_LOCK_WAITS;...

快速部署私有化大模型 毕昇(使用docker-compose方式)

docker安装 1. # Linux系统安装docker&#xff0c;以CentOS/RHEL为例&#xff0c;其他操作系统请参考docker官方安装方法 # 如果已经安装过docker 期望重装&#xff0c;先卸载 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \d…...

B端:导航条就框架提供的默认样式吗?非也,看过来。

导航条不一定必须使用框架提供的默认样式&#xff0c;你可以根据项目需求和设计风格进行自定义。通过使用框架提供的自定义选项、CSS样式覆盖、自行设计或者使用其他UI库或组件&#xff0c;你可以实现独特且符合需求的导航条样式。 下面发一些参考给友友们&#xff0c;可以让设…...

idea的git与SVN切换

1、选择setting->Version Control&#xff0c;新增或者编辑&#xff0c;选择目录&#xff0c;使用git或者svn管理 2、选择项目中的vcs.xml,打开选择要用的&#xff0c;注释掉不用的版本即可...

互联网家政小程序,为大众带来高效、便捷的服务

随着人口老龄化的严重和社会生活节奏的加快&#xff0c;大众对家政服务的需求日益增加&#xff0c;家政行业的市场规模逐渐扩大&#xff01; 在科技的推动下&#xff0c;家政行业开始向数字化发展&#xff0c;“互联网家政”的模式推动了市场的快速发展。互联网家政小程序借助…...

【常用库】【pytorch】基本部件

基本元件 1. 卷积 2. batchnorm loss函数 torch.nn.MSELoss() >>> a torch.rand(3) >>> a tensor([0.2161, 0.2227, 0.9175]) >>> b torch.rand(3) >>> b tensor([0.6976, 0.9149, 0.4918]) >>> mse torch.nn.MSELOSS() &…...

深入Scrapy框架:掌握其工作流程

深入Scrapy框架&#xff1a;掌握其工作流程 引言 作为一名资深的Python程序员&#xff0c;我对各种数据采集工具有着深刻的理解。Scrapy&#xff0c;作为一个上场率极高的爬虫框架&#xff0c;以其高效、灵活和强大的特性&#xff0c;成为数据采集领域的不二选择。在本文中&a…...