一种基于道路分类特性的超快速车道检测算法

摘要:

本文介绍了一种新颖、简单但有效的车道检测公式。

车道检测是自动驾驶和高级驾驶员辅助系统 (ADAS) 的基本组成部分,在实际高阶驾驶辅助应用中,考虑车道保持、转向、限速等相关的控制问题,这种方式通常是通过受限的车辆计算资源为下游任务提供即时感知结果,车道检测算法通常会被大量、快速且高效的执行。此外,车道检测可区分和定位道路上的车道标记。

主流的车道检测方法主要将车道检测视为逐像素分割问题,该问题正在努力解决效率问题和具有挑战性的场景(例如严重遮挡和极端照明条件)。受人类感知的启发,严重遮挡和极端光照条件下的车道识别主要基于上下文和全局信息。
 

由车道检测的CornerCase引出的问题如何解?

尽管深度学习模型取得了巨大成功,但仍然存在一些重要且具有挑战性的问题需要解决。

第一个就是效率问题。以前的车道检测方法主要基于分割,这是在密集的自下而上的学习管道中制定的,因此很难实现快速计算。除了效率问题之外,另一个挑战是无视觉线索问题,因为,车道检测任务是找到车道的位置,无论车道是否在可见或不可见都希望采用一定的算法进行有效的道线检测处理,如何处理没有可见信息的严重遮挡和极端光照条件的场景是该领域的一大难点。

如下图1所示。大多数具有挑战性的场景在各种照明条件下都会被严重遮挡或扭曲,导致很少或根本没有可用于车道检测的车道视觉线索。

图片

图 1. 车道检测CornerCase(其中不同的车道用不同的颜色标记)

为了缓解如上这种遮挡问题,需要通过一定的算法追踪可能的检测线索,这类线索暗示了可视化车道线以外且至关重要的线索。例如,道路形状、汽车行驶方向趋势、车道的非遮挡端点等都可能有利于检测。为了能够使用额外的线索,扩大感受野以利用更多信息,比车道检测更可取。

这就提出了一个自然的问题:能否找到一种快速、全局的、具有较大感受野的车道检测任务公式?

出于上述动机,本文介绍了一种自上而下的稀疏公式来解决效率和无法探测到视觉道线的问题。首先,介绍了一种新颖的行锚驱动的车道表示方法。即将一条车道用一系列预定义的行锚点上的坐标来表示,如下图所示。

图片

图 2. 行锚系统示意图

由于一条车道可以用一小组关键点很好地表示在固定的稀疏行锚点系统中,因此效率问题可以通过锚驱动表示的稀疏性来解决。行锚是预定义的稀疏行位置,车道可以以基于分类的方式表示为行锚上的坐标。

其次,使用基于分类的方式来学习具有锚驱动表示的车道坐标。使用基于分类的方式能够确保使用了整个全局特征,能够确保感受野与整个输入一样大。它使网络能够更好地捕获全局和远程信息进行车道检测,并有效缓解无视觉线索的问题。

此外,在这项工作中将带有行锚的车道表示扩展到混合锚系统。行锚系统可能不适用于所有类型的车道,并且可能会导致更多定位相关的问题。

图片

图 3. 每种车道的定位精度图示

如上图 3a 和 3b 所示,(a) 显示了 CULane 数据集对车道的定义。(b)是行锚系统的车道精度。(c) 说明了柱锚系统的车道精度。可以看到,使用行锚点时,旁车道的定位精度明显低于自车道的定位精度。如果我们使用列锚点呢?在图3c中,则可以看到相反的现象,即柱锚系统对自车道的定位能力较差。也就是对于自车道来说,行锚系统可以获得更好的性能,而列锚系统则对于侧车道获得更好的性能。

根据上述观察,将这种现象定位为放大定位误差问题。这个问题使得行锚很难定位水平侧车道,同样使得列锚很难定位垂直自车道。因此,建议使用混合(行和列)锚点来分别表示不同的车道。具体来说,对自车道使用行锚,对旁车道使用列锚。这样可以缓解定位误差放大的问题,提高性能。

如上描述使用的混合锚定系统,是可以通过锚定系统上的坐标来表示车道。如何有效地学习这些坐标是另一个重要问题。

最直接的方法是使用回归。通常,回归方法适用于局部范围预测设置,并且在长期建模方面相对较弱和全球本地化。为了应对全局范围预测,建议以基于分类的方式学习车道坐标,它使用不同的类别表示不同的坐标。在这项工作中,进一步将原始分类扩展到序数分类。在序数分类中,相邻类之间具有密切的序数关系,这与原始分类不同。

在本文介绍的算法中,类别性质上是有序的(例如,第 8 类的车道坐标在空间上始终位于第 7 类的车道坐标的右侧)。序数分类的另一个属性是类空间的连续性。比如7.5级这样的非整数类是有意义的,可以看作是7级和8级之间的中间类。为了实现序数分类,提出了两个损失函数来建模类之间的序数关系,包括基本分类损失和数学期望损失。利用序数关系和连续类空间属性,可以使用数学期望代替argmax来获得预测的连续类。期望损失是为了约束预测的连续类等于真实值。通过同时限制基数损失和期望损失,可以输出具有更好的序数关系,并有利于车道的局部化。

已有的车道建模检测方法论

传统的车道检测方法通常使用低级图像处理技术来解决车道检测问题。通过使用低级图像处理,传统方法本质上以自下而上的方式工作。主要思想是通过 HSI 颜色模型和边缘提取算法等图像处理来利用视觉线索。当然,最早也有尝试使用立体视觉系统的边缘提取算法来检测车道和障碍物的。除了使用不同颜色模型和边缘提取方法的特征之外,也有学者建议利用现实世界中车道通常是平行这一先验信息使用投影几何和逆透视映射来实现车道检测。尽管许多方法尝试了不同的传统车道特征,但在复杂场景中,来自低级图像处理的语义信息仍然相对不足。基于此,将跟踪作为另一种流行的后处理解决方案,以增强检测的鲁棒性。除了跟踪之外,马尔可夫和条件随机场,以及采用学习机制(如模板匹配、决策树和支持向量机)的方法也被用作后处理方法。

随着深度学习的发展,一些基于深度神经网络的方法在车道检测方面显示出优越性。这些方法通常使用指示车道存在和位置的热图来处理车道检测任务。在这些早期尝试之后,主流方法开始将车道检测视为分割问题。例如,VPGNet这种网络提出了一种由消失点引导的多任务分割网络,用于车道和道路标记检测。为了扩大逐像素分割的感受野并提高性能,SCNN 在分割模块中采用了特殊的卷积运算。通过处理切片特征并将它们一一相加来聚合来自不同维度的信息,这类似于循环神经网络。RONELD提出了一种通过分别查找和构建直线和曲线活动车道来增强 SCNN 的方法。RESA也提出了一种类似的方法,通过循环特征转换来扩大感受野。由于分割方法的计算量很大,一些工作尝试探索用于实时应用的轻量级方法。自注意力蒸馏(SAD)则采用注意力蒸馏机制,将高层和低层的注意力分别视为训练者和被训练者。IntRA-KD还使用区域间亲和力蒸馏来提高训练网络的性能。这样,通过注意力蒸馏,浅层网络可以具有与深层网络相似的性能。CurveLane-NAS则通过引入了神经架构搜索技术来搜索为车道检测量身定制的分割网络。在 LaneAF中,这项工作提出通过基于分割的亲和力场投票来检测车道。FOLOLane提出对局部模式进行建模,并以自下而上的方式使用全局几何解码器实现全局结构的全局预测。

除了主流的分割公式外,一些工作还尝试探索其他车道检测公式。采用长短期记忆(LSTM)网络来处理车道的长线结构。同样的原理,Fast-Draw预测每个车道点的车道方向,然后依次绘制出来。车道检测问题被视为通过聚类二进制片段进行实例分割。E2E提出通过可微最小二乘拟合来检测车道,并直接预测车道的多项式系数。类似地,Polylanenet和LSTR也提出分别通过深度多项式回归和Transformer来预测车道的多项式系数。

LaneATT建议使用将图像中的线条视为锚点的对象检测管道。然后,它对密集线锚点的车道进行分类和定位。遵循利用消失点先验和对象检测管道的想法,建议使用由消失点引导的线锚。与之前作品的2D视图不同,还有许多方法尝试在3D空间中检测车道。

本文中的超快车道检测算法

与之前介绍的方法不同,本文介绍的方法是自上而下的建模方法。通过自上而下的建模,该方法自然可以更多地关注全局信息,这有利于解决无视觉线索问题。与之前的自顶向下方法相比,本文介绍的方法旨在采用行和混合锚车道表示的新车道检测公式,这可以大大降低学习难度并加快检测速度。

在本节中,将详细描述如何在超快车道中进行检测方法。首先,在所提出的混合锚系统上演示了车道的坐标表示。其次,展示了深层网络架构的设计和相应的序数分类损失。最后,实现了对车道的有效分类。

1、带锚点的车道表示

为了表示车道,引入了用于车道检测的行锚点,如图3所示。车道用行锚点上的点表示。然而,行锚系统可能会导致定位误差放大的问题,如图2所示。通过这种方式,可以进一步将行锚系统进行扩展到混合锚系统。

图片

图 4. 放大的定位误差问题的图示

蓝色区域代表没有锚定系统的理想定位误差带(网络可能出现的最小不可避免的误差,这可能是由网络的偏差、注释器引入的误差等引起的)。紫色区域显示锚定系统引入的放大误差带。可以看到,当车道和锚点之间的角度很小时,定位误差会被极大地放大。放大的定位误差问题也适用于列锚。

这个问题的原因如图4所示。假设没有任何锚系统的理想最小定位误差为ε,这可能是由网络偏差、标注错误等引起的。可以看到,行锚系统上的误差带乘以因子1sinθ。当车道和锚之间的角度θ很小时,放大系数1sinθ将趋于无穷大。例如,当车道严格水平时,不可能用行锚系统来表示车道。这个问题使得行锚很难定位更水平的车道(通常是侧车道),同样,它使得列锚很难定位更垂直的车道(通常是自车道)。相反,当车道和锚点垂直时,锚点系统引入的误差最小(在这种情况下θ=0),并且它等于理想的定位误差ε。

受上述观察的启发,建议使用混合锚来表示车道。对于不同类型的车道,使用不同的锚定系统来减少放大的定位误差。具体来说,规则是:一条车道只能分配一种锚点,并且选择与该车道更垂直的锚点类型。在实践中,像 CULane和 TuSimple这样的车道检测数据集仅注释两个自车道和两个侧车道,如图 2a 所示。这样,对自车道使用行锚,对侧车道使用列锚,混合锚系统可以缓解放大的定位误差问题。

通过混合锚点系统,我们可以将车道表示为锚点上的一系列坐标,如图 5 所示。

图片

图 5.混合锚系统的车道表示

输入图像及其注释显示在左侧。对于自车道,使用行锚来表示车道标记的位置,边车道采用柱锚。通过混合锚定系统,车道可以简单地表示为对应于四个车道的四个矩阵,如右图所示。此外,锚点的固定和共享坐标可以省略。对于不存在的位置,使用-1来表示。

假设将 Nrow 表示为行锚点的数量,将 Ncol 表示为列锚点的数量。同时,假设分配给行锚点的车道数为 Nr Lane,分配给列锚点的车道数为 Nc Lane。对于每个车道,首先分配相应的锚定系统,该锚定系统具有最小的定位误差。然后计算车道与每个锚点之间的线与线的交点,并记录交点的坐标。如果车道在某些锚点之间没有交叉点,则坐标将设置为-1。

图像中的车道可以用固定大小的目标T来表示,其中每个元素要么是车道的坐标,要么是-1,其长度为Nrow × Nr Lane + Ncol × Nc Lane。T可以分为两部分Tr和Tc,分别对应行锚和列锚上的部分,大小为Nrow × Nr。

图片

图6 混合锚点的网络架构设计

2、锚点驱动的网络设计

借助混合锚点的车道表示,设计网络的目标是通过分类来学习固定大小的目标 Tr 和 Tc。为了通过分类来学习 Tr 和 Tc,将 Tr 和 Tc 中的不同坐标映射到不同的类。假设 Tr 和 Tc 被归一化(Tr 和 Tc 的元素范围从 0 到 1 或等于 -1,即“无车道”情况),类别数为 Nr dim 和 Ncdim。映射可以写为:

图片

其中Trcls 和Tccls 为坐标的映射类标号,b·c 为取整操作,Tr cls_i,j 为Trcls 第i 行j 列的元素。这样,就可以将混合锚点上的坐标学习转化为维度分别为Nrdim和Ncdim的两个分类问题。对于无车道情况,即 Tri,j 或 Tcm,n 等于 -1,使用附加的双向分类来指示:

图片

其中Trext是坐标存在的类标号,Trext_i,j是Trext第i行j列的元素。柱锚 Tcext 的存在目标类似:

图片

通过上述推导,整个网络就是学习Trcls、Tccls、Trext 和Tcext 两个分支,分别是定位分支和存在分支。假设输入图像的深层特征为X,网络可以写为:

图片

等式4是直接展平来自主干的深层特征并将其输入分类器。其中P和E是定位和存在分支,f是分类器,flatten(·)是展平操作。相比之下,传统的分类网络使用全局平均池化(GAP)。使用 GAP 会消除空间信息并导致性能不佳。这里使用 flatten 而不是 GAP 的原因是空间信息对于基于分类的车道检测网络至关重要。P和E的输出均由两部分组成(Pr,Pc,Er和Ec),分别对应于行和列锚点。Pr和Pc的大小分别为NrLane × Nrow × Nrdim和NcLane × Ncol × Ncdim,其中Nrdim和Ncdim是行和列锚点的映射分类维度。Er和Ec的大小分别为NrLane×Nrow×2和NcLane×Ncol×2。

3、序数分类损失

正如我们在等式中看到的,一个本质属性是上述分类网络中的类具有序数关系。在分类网络中,相邻类被定义为具有紧密的顺序关系,这与传统的分类不同。为了更好地利用序数关系的先验,建议使用基本分类损失和期望损失。

图片

图 7. 建议的期望损失的图示

4、网络推理

接下来将展示如何在推理过程中获取想要的车道检测结果。以行锚点系统为例,假设 Pr i,j 和 Er i,j 是第 i 个车道和第 j 个锚点的预测。那么Pr i,j 和Er i,j 的长度分别为Nr dim 和2。车道每个位置的概率可以写为:

图片

其中P robr i,j 的长度为Nr dim。

接下来,通过预测分布的数学期望获得车道的位置。此外,不存在车道的预测将根据存在分支的预测被过滤掉:

图片

最后,对获得的位置 Loc 进行缩放以适合输入图像的大小。

总结

本文介绍了一种新颖、简单但有效的车道检测公式。与以前的方法相比,本方法将车道表示为基于锚的坐标,并且坐标以基于分类的方式学习。该公式在解决无视觉线索问题方面非常快速且有效。基于该公式,提出了一种混合锚系统,进一步扩展了之前的行锚系统,可以有效地减少定位误差。具体来说,将车道检测过程视为使用全局特征锚驱动的序数分类问题。首先,在一系列混合(行和列)锚点上表示具有稀疏坐标的车道。接着,在锚驱动表示的帮助下,将车道检测任务重新表述为序数分类问题以获取车道坐标,通过锚驱动表示显着降低了计算成本。利用序数分类公式的大感受野特性,解决了高速场景和极端场景的车道线问题。

作者 | 山丘

来源 | 焉知汽车

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/410104.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【牛客】2024牛客寒假算法基础集训营6ABCDEGHIJ

文章目录 A 宇宙的终结题目大意主要思路代码 B 爱恨的纠葛题目大意主要思路代码 C 心绪的解剖题目大意主要思路代码 D 友谊的套路题目大意主要思路代码 E 未来的预言题目大意主要思路代码 G 人生的起落题目大意主要思路代码 I 时空的交织题目大意主要思路代码 J 绝妙的平衡题目…

Kotlin 进阶版 协程

kotlin是协程的一种实现 Dispatchers.IO:适用于执行磁盘或网络 I/O 操作的调度器,例如文件读写、网络请求等。在 Android 中,Dispatchers.IO 会使用一个专门的线程池来处理这些操作,以防止阻塞主线程。 Dispatchers.Main&#xf…

幻兽帕鲁服务器多少钱?有买过的吗?

幻兽帕鲁服务器多少钱?太卷了,降价到24元1个月,阿里云4核16G10M游戏服务器26元1个月、149元半年,腾讯云4核16G游戏服务器32元、312元一年,华为云26元,京东云主机也是26元起。云服务器吧yunfuwuqiba.com给大…

[RCTF2015]EasySQL1 题目分析与详解

一、题目介绍: 1、题目来源: BUUCTF网址 2、题目介绍: 拿到flag。 二、解题思路: 我们发现题目首页有登录和注册账号两个选项,我们首先尝试注册账号,尝试注册username为admin的账号,输入密码…

这10款设计工具,助你轻松搞定主视觉设计!

我们浏览网站、App或其他数字产品时,页面或屏幕上最显著最重要的部分,比如设计风格、颜色、排版、图片和元素等信息,就是数字产品的主视觉,也是用户首次接触产品时最能直观感受的部分。 由此可见,主视觉设计有多重要&…

【大数据】Flink 内存管理(四):TaskManager 内存分配(实战篇)

《Flink 内存管理》系列(已完结),共包含以下 4 篇文章: Flink 内存管理(一):设置 Flink 进程内存Flink 内存管理(二):JobManager 内存分配(含实际…

PyTorch中Tensor(张量)数据结构内部观察

上图中是一个张量embeds,打开其内部存储空间,我们可以看到内部的构成。在PyTorch中,Tensor 具有许多属性和方法。以下是其中一些关键的属性和方法: 属性: H: 在标准的PyTorch API中并没有直接表示为 .H 的…

IO进程线程:共享内存

shmsnd.c #include<myhead.h> #define PAGE_SIZE 4096 //一页的大小 int main(int argc, const char *argv[]) {//1.创建key值key_t key-1;if((keyftok("/",k))-1){perror("ftok error");return -1;}printf("key%d\n",key);//2.通过key…

【计算机网络】传输层——TCP和UDP详解

文章目录 一. TCP和UDP简介二. UDP 协议详解1. UDP报文格式2. UDP的使用场景 三. TCP 协议详解1. TCP报文格式2. TCP协议的重要机制确认应答&#xff08;保证可靠传输的最核心机制&#xff09;超时重传连接管理&#xff08;三次握手、四次挥手&#xff09;&#xff01;&#xf…

C语言 int和unsigned int逻辑比较

文章目录 测试1、测试 CMP (int,int)2、测试 CMP (int ,unsigned int)3、测试 CMP (unsigned int ,unsigned int) 总结 测试 在IAR(8.40.2)平台下测试单片机为STM32F103ZET6 1、测试 CMP (int,int) //a -2,b 3 int test_fun(int a, int b) {if(a>b){return 1;}else{re…

[力扣 Hot100]Day35 LRU 缓存

题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否…

Linux7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…

【每日一题】938. 二叉搜索树的范围和-2024.2.26

题目&#xff1a; 938. 二叉搜索树的范围和 给定二叉搜索树的根结点 root&#xff0c;返回值位于范围 [low, high] 之间的所有结点的值的和。 示例 1&#xff1a; 输入&#xff1a;root [10,5,15,3,7,null,18], low 7, high 15 输出&#xff1a;32示例 2&#xff1a; 输入…

Python实用技巧:输出列表(list)的倒序/逆序的几种方法

Python实用技巧&#xff1a;输出列表&#xff08;list&#xff09;的倒序/逆序的几种方法 &#x1f4c5;2024年02月25日 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质…

力扣随笔之寻找重复数(中等287)

思路1&#xff1a;暴力解法&#xff0c;根据要求不修改数组且只用常量级O(1)的额外空间&#xff0c;我们写两层嵌套循环&#xff0c;寻找重复的数;可以解决部分问题&#xff0c;但会超出时间限制无论Java还是C; Java实现&#xff1a; class Solution {public int findDuplicat…

第四节:Vben Admin登录对接后端getUserInfo接口

系列文章目录 第一节&#xff1a;Vben Admin介绍和初次运行 第二节&#xff1a;Vben Admin 登录逻辑梳理和对接后端准备 第三节&#xff1a;Vben Admin登录对接后端login接口 第四节&#xff1a;Vben Admin登录对接后端getUserInfo接口 文章目录 系列文章目录前言一、回顾Vben…

Elastic Search的RestFul API入门:使用SQL查询ES

确实,Elasticsearch 中也支持 SQL 语法,但我们通常使用 DSL 进行 API 操作,很少有人用 SQL 进行 Elasticsearch 的操作。然而,如果你刚开始学习 Elasticsearch,这一节的内容可以帮助你更快地理解 Elasticsearch(前提是你已经熟悉 SQL)。通过 SQL 查询,你可以进行一些简…

HTTPS对HTTP的加密过程

1、HTTPS是在HTTP的基础上&#xff0c;引入了一个加密层&#xff08;SSL&#xff09;&#xff0c;对数据进行保护&#xff0c;HTTP 是明文传输的&#xff08;不安全&#xff0c;很可能会被运营商通过referer劫持&#xff0c;或者黑客通过修改链接来窃数据&#xff09; 2、加密…

数字人的未来:数字人对话系统 Linly-Talker + 克隆语音 GPT-SoVITS

&#x1f680;数字人的未来&#xff1a;数字人对话系统 Linly-Talker 克隆语音 GPT-SoVITS https://github.com/Kedreamix/Linly-Talker 2023.12 更新 &#x1f4c6; 用户可以上传任意图片进行对话 2024.01 更新 &#x1f4c6; 令人兴奋的消息&#xff01;我现在已经将强…

【数据结构】图——最短路径

最短路径问题&#xff1a;从在带权有向图G中的某一顶点出发&#xff0c;找出一条通往另一顶点的最短路径&#xff0c;最短也就是沿路径各边的权值总和达到最小。 最短路径分为图中单源路径和多源路径。 本文会介绍Dijkstra和Bellman-Ford解决单源路径的问题 Floyd-Warshall解…