欢迎关注下方公众号阿宝1990,本公众号专注于自动驾驶和智能座舱,每天给你一篇汽车干货,我们始于车,但不止于车。
车道检测是自动驾驶和高级驾驶员辅助系统 (ADAS) 的基本组成部分,在实际高阶驾驶辅助应用中,考虑车道保持、转向、限速等相关的控制问题,这种方式通常是通过受限的车辆计算资源为下游任务提供即时感知结果,车道检测算法通常会被大量、快速且高效的执行。此外,车道检测可区分和定位道路上的车道标记。
第一个就是效率问题。以前的车道检测方法主要基于分割,这是在密集的自下而上的学习管道中制定的,因此很难实现快速计算。除了效率问题之外,另一个挑战是无视觉线索问题,因为,车道检测任务是找到车道的位置,无论车道是否在可见或不可见都希望采用一定的算法进行有效的道线检测处理,如何处理没有可见信息的严重遮挡和极端光照条件的场景是该领域的一大难点。
如下图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 进行缩放以适合输入图像的大小。
总结
本文介绍了一种新颖、简单但有效的车道检测公式。与以前的方法相比,本方法将车道表示为基于锚的坐标,并且坐标以基于分类的方式学习。该公式在解决无视觉线索问题方面非常快速且有效。基于该公式,提出了一种混合锚系统,进一步扩展了之前的行锚系统,可以有效地减少定位误差。具体来说,将车道检测过程视为使用全局特征锚驱动的序数分类问题。首先,在一系列混合(行和列)锚点上表示具有稀疏坐标的车道。接着,在锚驱动表示的帮助下,将车道检测任务重新表述为序数分类问题以获取车道坐标,通过锚驱动表示显着降低了计算成本。利用序数分类公式的大感受野特性,解决了高速场景和极端场景的车道线问题。
加入《阿宝说车》知识星球,可获得这些模块的相关学习资料(目前有研究报告,线上大咖分享、线下闭门会),包括16大板块,详细清单如下:
原文始发于微信公众号(阿宝1990):Introducing an ultra-fast lane detection algorithm based on road classification characteristics
Download: