关注车道:实时注意力引导车道线检测
摘要
现代车道线检测方法在复杂的现实世界场景中取得了显著的性能,但许多方法在保持实时效率方面存在问题,这对自动驾驶汽车很重要。在这项工作中,我们提出了LaneATT:一种基于锚点的深度学习车道线检测模型,与其他通用的深度学习对象检测器类似,它使用锚进行特征池化流程。由于车道线遵循一个有规律的模式并且高度相关,我们假设在某些情况下,全局信息可能对推断其位置至关重要,尤其是在遮挡、车道标记缺失等情况下。因此,这项工作提出了一种新的基于锚的注意力机制,该机制聚合全局信息。该模型在文献中使用最广泛的三个数据集上进行了广泛评估。结果表明,我们的方法优于目前最先进的方法,显示出更高的精准度和性能。此外,还进行了消融研究,并讨论了在实践中有用的效率权衡选项。
1、简介
深度学习对于许多领域的最新进展至关重要,尤其是在自动驾驶领域[2]。自动驾驶汽车中的许多深度学习应用都在其感知系统中。为了在人类周围保持安全,自动驾驶汽车应该感知周围环境,包括其他车辆和自身的位置。最终,汽车的运动越可预测,对乘客和行人来说就越安全。因此,自动驾驶汽车了解每条车道的确切位置是很重要的,这是车道线检测系统的目标。
车道检测模型必须克服各种挑战。将在现实世界场景中使用的模型应该对几种不利条件具有鲁棒性,例如极端的光线和天气条件。此外,车道标记可能被其他物体(如汽车)遮挡,这在自动驾驶汽车中非常常见。一些方法,如多项式回归模型,也可能存在由长尾效应引起的数据不平衡问题,因为具有更尖锐曲线的情况不太常见。此外,该模型不仅必须是鲁棒的,而且必须是有效的。在一些应用中,车道线检测必须实时或更快地执行,以节省其他系统的处理能力,这是许多模型难以应付的要求。
文献中有许多作品解决了这个问题。在深度学习出现之前,一些方法使用了更传统的计算机视觉技术,如霍夫线[4,1]。最近,随着卷积神经网络(CNNs)的发展,焦点已转移到深度学习方法[17,11,18]。在这种情况下,车道检测问题通常被公式化为分割任务,其中,给定输入图像,输出是具有每像素预测的分割图[17]。尽管深度学习的最新进展使分割网络能够实时使用[22],但各种模型都难以实现实时性能。因此,基于分割的方法的主干选项的数量相当有限。因此,最近的一些工作提出了其他方向的解决方案[13,23]。除此之外,在车道检测工作中,许多其他问题也很常见,例如需要后处理步骤(通常是启发式的)、长的训练时间以及缺乏公共可用的源代码,这阻碍了比较和再现性
在这项工作中,我们提出了一种实时车道线检测方法,该方法比大多数现有技术的方法更快、更准确。我们提出了一种基于锚点的单阶段车道检测模型,称为LaneATT。其结构使得能够在保持高精度的同时使用轻量级骨干CNN。还提出了一种新的基于锚的注意力机制来聚合全局信息。在三个基准点(TuSimple[24]、CULane[17]和LLAMAS[3])上显示了广泛的实验结果,同时与最先进的方法进行了比较,讨论了效率权衡,并对我们的设计选择进行了消融研究。总之,我们的主要贡献是:
在庞大而复杂的数据集上,一种比现有最先进的实时方法更准确的车道检测方法;
与大多数其他模型相比,该模型能够实现更快的训练和推理时间(达到250 FPS,并且比以前的最先进技术几乎少一个数量级的乘法累积运算(MAC));
一种用于车道检测的新的基于锚的注意力机制,该机制在检测到的对象相关的其他领域中可能有用。
2、相关工作
尽管第一种车道检测方法依赖于分类计算机视觉,但最近的深度学习方法在准确性和效率方面取得了实质性进展。因此,本文献综述的重点是深度学习车道线检测器。本节首先讨论了主要的方法,这些方法基于语义分割[17,11,29,15]或按行分类[10,20,27],然后回顾了其他方向的解决方案。最后,讨论了再现性的缺乏(车道检测工作中的一个常见问题)。
基于语义分割的方法
在这种方法中,以每个像素为基础进行预失真,将每个像素分类为车道或背景。在生成分割图的情况下,需要进行后处理步骤将其解码为一组车道。在SCNN[17]中,作者提出了一种专门为细长结构设计的方案,并展示了其在车道检测中的有效性。然而,该方法速度较慢(7.5 FPS),这阻碍了它在现实世界中的适用性。由于较大的主干是速度较慢的罪魁祸首之一,作者在[11]中提出了一种自关注蒸馏(SAD)模块来聚合上下文信息。该模块允许使用更轻量级的主干,在保持实时效率的同时实现高性能。在CurveLanes NAS[26]中,作者建议使用神经结构搜索(NAS)来找到更好的主干。尽管他们取得了最先进的成果,但他们的NAS在计算上极其昂贵,每个数据集需要5000个GPU小时。
按行分类方法
逐行分类方法是一种基于输入图像的网格划分来检测车道的简单方法。对于每一行,模型预测最有可能包含车道标记一部分的单元格。由于每行只选择一个单元格,因此对图像中的每个可能车道重复此过程。与分割方法类似,它还需要后处理步骤来构建车道集。该方法首次在E2E-LMD[27]中介绍,在两个数据集上获得了最先进的结果。在[20]中,作者表明它能够达到高速,尽管会损失一些准确性。IntRA KD[10]中也使用了这种方法。
其他方法
在FastDraw[18]中,作者提出了一种新的基于学习的方法来解码车道结构,这避免了对后处理步骤进行聚类的需要(在分割和逐行分类方法中需要)。尽管所提出的方法被证明可以实现高速,但就准确性而言,它的性能并不比现有的最先进的方法好。PolyLaneNet[23]中也显示了同样的效果,其中提出了一种基于深度多项式回归的更快的模型。在这种方法中,模型学习为每条车道输出一个多项式。尽管速度很快,但该模型仍在与车道检测数据集的不平衡性质作斗争,正如其预测中对直车道的高偏差所证明的那样。在有线有线电视新闻网[13]中,提出了一种基于锚的车道检测方法。该模型在公共数据集上取得了最先进的结果,在另一个不公开的数据集上也取得了有希望的结果。尽管具有实时效率,但该模型比其他方法慢得多。更重要的是,代码是不公开的,这使得结果很难重现。还有一些工作涉及车道检测器的管道的其他部分。在[12]中,提出了一种专注于遮挡情况的后处理方法,其结果远高于其他工作,但代价是速度明显较低(约4 FPS)。
再现性
如[23]所述,许多被引用的作品并没有发布代码来重现重新报告的结果[13,18,27],或者在某些情况下,代码只是部分公开的[11,10]。这阻碍了更深入的定性和定量比较。例如,衡量模型效率的两个最常见的指标是多层累积操作(MAC)和每秒帧数(FPS)。虽然第一个并不依赖于基准平台,但它并不总是第二个的好代理,这才是真正的目标。因此,FPS的比较也因缺乏源代码而受到阻碍。
与之前提出的大多数以精度为代价实现高速的方法不同,我们提出了一种比现有最先进的方法更快、更准确的方法。此外,还为社区发布了重新生成报告结果的完整代码。
3、提出的方法
LaneATT是一种用于车道线检测的基于锚的单级模型(如YOLOv3[21]或SSD[16])。该方法的概述如图1所示。它接收从安装在车辆中的前置摄像头拍摄的RGB图像I∈R 3×HI×WI作为输入。输出是车道边界线(以下称为车道,遵循文献中的常用术语)。为了生成这些输出,被称为主干的卷积神经网络(CNN)生成一个特征图,然后将其合并以提取每个锚的特征。这些特征与注意力模块产生的一组全局特征相结合。通过结合局部和全局特征,该模型可以更容易地使用来自其他车道的信息,这在有遮挡或没有可见车道标记等情况下可能是必要的。最后,将组合的特征传递到完全连接的层,以预测最终的输出通道。
图1 方法概述 主干从输入图像生成特征图。随后,将每个锚点投影到特征图上。该投影用于汇集与注意力模块中创建的另一组特征相连接的特征。最后,使用这个生成的特征集,两层,一层用于分类,另一层用于回归,进行最终预测。
3.1、车道和锚点表示
车道由等间距y坐标y={yi}Npts−1 i=0的二维点表示,其中yi=i·HI Npts–1。由于Y是固定的,因此车道只能由其x坐标x={xi}Npts−1 i=0来定义,每个xi与各自的yi∈Y相关联。由于大多数车道不会垂直穿过整个图像,因此使用开始索引s和结束索引e来定义X的有效连续序列。
同Line CNN[13]一样,我们的方法使用线而不是框来执行基于锚的检测,这意味着车道的建议是以这些线作为参考。
锚点是由
(i)原点O=(xorig,yorig)(其中yorig∈Y)位于图像的边界之一(顶部边界除外)和
(ii)方向θ定义的图像平面中的“虚拟”线。
所提出的方法使用与[13]相同的一组锚。这种车道和锚表示满足了现实世界中绝大多数车道的要求。
3.2、骨干网络
所提出的方法的第一阶段是特征提取,可以通过任何通用的CNN执行,如ResNet[9]。该阶段的输出是一个特征图Fback∈R C 0F×HF×WF,如下一节所述,将通过池化过程从中提取每个锚点的特征。对于降维,将1×1卷积应用到Fback上,生成按通道降维的特征图F∈RCF×HF×WF。执行这种减少是为了减少计算成本。
3.3、基于锚点的特征池
锚点定义了将用于各个方案的F点。由于锚点被建模为线,因此给定锚点的兴趣点是截取锚点的虚拟线的兴趣点(考虑到减少到特征图尺寸的光栅化线)。对于每个yj=0,1,2,HF−1时,将存在单个对应的x坐标,
其中(xorig,yorig)和θ分别是锚线的原点和斜率,δback是骨干的全局步幅。因此,每个锚i都将具有其对应的特征向量loc i∈R CF·HF(列向量表示法),该向量由携带局部特征信息(局部特征)的F合并而成。在锚的一部分在F的边界之外的情况下,loc i为零填充。
请注意,池化操作类似于Fast R-CNN的[8]感兴趣区域投影(RoI投影),然而,不是使用池化建议,而是通过使用锚本身来实现单级检测器。此外,RoI池化层(用于生成固定大小的特征)对于我们的方法来说是不必要的。与仅利用特征图的边界的Line CNN[13]相比,我们的方法可以潜在地探索所有特征图,这使得能够使用更轻、感受野更小的主干。
3.4、注意机制
根据模型架构的不同,汇集的特征向量所携带的信息最终大多是局部的。对于更浅、更快的模型尤其如此,它们倾向于利用具有较小感应场的主干。然而,在某些情况下(例如有遮挡的情况),局部信息可能不足以预测车道的存在及其位置。为了解决这个问题,我们提出了一种注意力机制,该机制作用于局部特征(loc•),以产生聚合全局信息的附加特征(glob•)。
基本上,注意力机制结构由全连接层Latt组成,其处理局部特征向量a loc i,并输出每个锚j的概率(权重)wi,j,j6=i。形式上,
然后,将这些权重与局部特征相结合,以产生相同维度的全局特征向量:
自然,整个过程可以通过矩阵乘法有效地实现,因为对于所有锚都执行相同的过程。让Nanc是一个合唱的数字。设Aloc=[a loc 0,…,a loc Nanc−1]T是包含局部特征向量(作为行)的矩阵,W=[wi,j]Nanc×Nanc是等式(2)中定义的权重矩阵wi,j。因此,全局特征可以计算为:
请注意,Aglob和Aloc具有相同的维数,即Aglob∈R Nanc×CF·HF。
3.5、方案预测
预测每个锚的车道方案,该方案由三个主要组成部分组成:
(i)K+1概率(K种车道类型和一类“背景”或无效方案),
(ii)Npts偏移(预测和锚线之间的水平距离),
以及(iii)方案的长度l(有效偏移的数量)。方案的起始指数直接由锚原点的y坐标确定(yorig,见第3.1节)。
因此,结束指数可以确定为e=s+b le−1。
为了生成最终的建议,通过连接loc i和glob i来聚合局部和全局信息,产生一个增强的特征向量aug i∈R2·CF·HF。这个扩充向量被馈送到两个平行的完全连接层,一个用于分类(Lcls),另一个用于重新划分(Lreg),这两个层产生最终建议。Lcls预测pi={p0,…,pK+1}(项目i),并且Lreg预测ri=
3.6、非最大抑制(NMS)
在基于锚点的深度检测中,NMS对于减少误报数量至关重要。在所提出的方法中,基于[13]中提出的车道距离度量,该程序在训练和测试阶段都适用。两个车道Xa={x a i}Npts i=1和Xb={x b i}Nspts i=1之间的距离是基于它们的共同有效指数(或y坐标)来计算的。设s0=max(sa,sb)和e0=min(ea,eb)定义了这些常见指数的范围。因此,车道距离度量定义为
3.7、模型培训
在训练期间,等式(5)中的距离度量也用于定义正锚和负锚。 首先,该度量用于测量每个锚点(未在NMS中过滤的锚点)与地面实况车道之间的距离。随后,具有距离的锚(等式5) 低于阈值τp被认为是正的,而距离大于τn的被认为是负的。 在这些阈值之间具有距离的锚点(及其相关提议)将被忽略。剩余的Np&n用于多任务丢失,定义为:
其中,pi、ri是锚点i的分类和回归输出,而pi和ri是锚点i分类和回归目标。仅使用长度l和x坐标值来计算回归损失,这些值对应于概率和地面实况共同的指数。x坐标的公共索引(在s0和e0之间)的选择类似于车道距离(方程5),但e0=egt而不是e0=min(eprop,egt),其中eprop和egt分别是提案及其相关地面实况的最终索引。如果使用建议eprop中预测的结束指数,则训练可能会因收敛到退化解而变得不稳定(例如,eprop可能收敛到零)。函数Lcls和Lreg分别是焦点损失[14]和平滑L1。如果锚i被认为是负的,则其对应的Lreg等于0。系数λ用于平衡损耗分量。
3.8、速度效率的锚过滤
整套锚固件包括总共2782个锚固件。这个升高的数字是限制模型速度的主要因素之一。由于大量锚在训练期间将不起作用(例如,一些锚的起点可能在训练数据集中所有图像的地平线之上),因此可以减小集合的大小。为了选择哪些锚在训练和测试阶段都将被忽略,该方法测量训练集中每个锚被标记为阳性的次数(与训练中的标准相同)。最后,只有顶部Nanc标记的锚被保留以供进一步处理(也在测试期间)。
4、实验
我们的方法在两个最广泛使用的车道检测数据集(TuSimple[24]和CULane[17])和最近发布的基准(LLAMAS[3])上进行了评估。数据集概述见表1。本节开始描述效率指标和一些实现细节。所有实验都使用了数据集创建者设置的默认度量参数,这些参数与相关工作使用的参数相同。前三小节讨论了每个数据集的实验结果(包括数据集描述和评估指标)。最后两个小节介绍了效率权衡实验和零件烧蚀研究。
效率指标
两个与效率相关的指标被重新移植:每秒帧数(FPS)和乘法累加运算(MAC)。一个MAC大约是两个浮动操作(FLOP)。FPS是使用每批单个图像和恒定输入计算的,因此度量不取决于I/O操作,而仅取决于模型的效率
实施细节
除明确指定外,所有输入图像的大小都调整为HI×WI=360×640像素。对于所有训练会话,Adam优化器在CULane上用于15个时期,在TuSimple上用于100个时期(较大的差异是由于数据集大小之间的巨大差异)。对于数据扩充,执行随机仿射变换(具有平移、旋转和缩放)以及随机水平翻转。大多数实验和所有FPS测量都是在配备Intel i9-9900KS和RTX 2080 Ti的机器上计算的。模型参数为Npts=72,Nanc=1000,τp=15和τn=20。使用的数据集不提供车道类型(例如,虚线或实线),因此,我们设置K=1(根据第3.5节)。有关更多细节和参数值,可以访问代码1以及每个实验的配置。
图2 TuSimple(上排)、CULane(中排)和LLAMAS(下排)的LaneATT定性结果。 蓝线是基本事实,而绿线和红线分别是真阳性和假阳性。
4.1、TuSimple
数据集描述
TuSimple[24]是一个仅包含高速公路场景的车道检测数据集,这种场景通常被认为比街道场景更容易。尽管如此,它还是车道检测工作中使用最广泛的数据集之一。所有图像都有1280×720像素,最多有5个通道。
评估指标
在TuSimple上,三个标准符合率是错误发现率(FDR)、假阴性率(FNR)和准确性。准确度定义为
其中Cclip是剪辑中正确预测的车道点的数量,Sclip是剪辑(或图像)中的点的总数。对于被认为是正确的点预测,预测必须在地面实况的20个像素以内。 为了将车道预测视为真正(对于FDR和FNR度量),其正确预测点的数量必须大于85%。我们还报告了F1分数(以下称为F1),这是精确度和召回率的调和平均值。
结果
LaneATT在TuSimple上的结果,以及其他最先进的方法,如表2和图3(左侧)所示。定性结果如图2(顶行)所示。如前所述,LaneATT的准确性与其他最先进的方法不相上下。然而,很明显,该数据集中的结果已经饱和(高值),可能是因为其场景并不复杂,并且度量是允许的[23]。与更复杂的数据集和不太宽松的数据集(如第4.2节所示)的结果相比,不同方法之间的性能差异很小,这证明了这一点。尽管如此,我们的方法比其他方法快得多。[20]中提出的方法是唯一一种速度与我们的方法相当的方法。由于FDR和FNR指标在他们的工作中没有报告,我们使用发布的代码计算它们,并报告这些指标。
尽管它们实现了高精度,但FDR明显较高。例如,使用ResNet-122,我们的最高假阳性率为5.64%,而最低假阳性率则为18.91%,几乎高出四倍。
4.2、CULane
数据集描述
CULane[17]是最大的公开可用车道检测数据集之一,也是最复杂的数据集之一。所有图像的像素为1640×590,所有测试图像分为九类,如拥挤、夜间、无可见线等。
评估指标
唯一的度量是F1,它基于并集上的交集(IoU)。由于IoU依赖于区域而不是点,因此车道被表示为连接各个车道点的粗线。特别是,数据集的官方指标将车道视为30像素厚的线条。如果一个预测具有大于0.5的IoU,并且具有地面实况车道,则它被认为是真正的。
结果
LaneATT在CULane上的结果以及其他最先进的方法如表3和图3(右侧)所示。定性结果如图2(中间一行)所示。我们没有与[12]中所示的结果进行比较,因为主要贡献是一种后处理方法,它可以很容易地结合到我们的方法中,但源代码不是公开的。此外,它非常慢,这使得该模型在现实世界的应用中不切实际(正如他们的工作中所报道的,整个管道的运行速度低于10 FPS)。在这种情况下,LaneATT在CULane(一个具有高度复杂场景的数据集)上保持高效率(+170 FPS)的同时,在所比较的方法中实现了最高的F1。与[20]相比,我们最轻的型号(使用ResNet-18)比最大的型号(ResNet34)高出F1的近3%,同时速度要快得多(250 vs。在同一台机器上为175 FPS)。此外,在“夜晚”和“阴影”场景中,我们的方法优于所有其他方法,包括专门为这些场景设计的SIM CycleGAN[15]。这些结果证明了LaneATT的疗效和效率
4.3、LLAMAS
数据集描述
LLAMAS[3]是一个拥有超过10万张图像的大型车道检测数据集。注释不是手动生成的,而是使用高清晰度地图生成的。所有图像均来自高速公路场景。评估基于CULane的F1,该F1由LLAMAS基准的作者计算,因为测试集的注释不是公开的。
结果
LaneATT对LLAMAS的结果以及PolyLaneNet[23]的结果如表4所示。定性结果如图2(底部一行)所示。由于该基准是最近的,并且只有PolyLaneNet提供了在LLAMAS上评估的必要源代码,因此它是唯一可比较的方法。正如所证明的那样,LaneATT能够在所有三个主干中实现大于90%的F1。结果也可以在基准的网站2中看到。
4.4、效率权衡
对于车道检测模型来说,高效是至关重要的。在某些情况下,为了达到应用程序的要求,甚至可能需要交换一些精度。在这个实验中,显示了一些可能的权衡。特别是图像输入大小(HI×WI)和锚点数量(Nanc,如第3.8节所述)的不同设置。结果如表5所示。他们表明,在没有大的F1下降的情况下,可以减少锚的数量,从而在效率方面略有提高。然而,如果减小过大,F1开始显著下降。此外,如果使用过多的锚,效果也会降低,这可能是不必要的合唱干扰训练的结果。对于输入大小,结果是相似的,尽管MAC下降更大。锚的数量和输入大小对训练时间的影响最大。在推理过程中,建议在NMS过程之前被过滤(使用置信阈值)。在训练过程中,没有这样的过滤。由于NMS是模型的主要瓶颈之一,其运行时间直接取决于对象的数量,因此锚点的数量对训练阶段的影响比对测试阶段的影响大得多。
4.5、消融研究
本实验评估了所提出方法的每个主要部分(一次一个)的影响:基于锚的池、共享层、焦点丢失和注意力机制。结果如表6所示。第一行包括标准LaneATT的结果,而下面的行显示了标准模型的略微修改版本的结果。在第二行中,删除了基于锚点的池,并使用了相同的程序来选择Line CNN[13]的特征(即,每个锚点只使用来自特征图中单个点的特征)。在第三种方法中,不是使用一对完全连接的层(Lreg和Lcls)进行最终预测,而是使用三对(六层),其中一对与一个边界(左、下或右)匹配。也就是说,从图像的左边界开始的所有锚都具有由相同的层对L L reg和L L cls生成的建议,并且类似地针对底部(L B reg和L B cls)和右侧(L R reg和L R cls)边界生成建议。在第四个例子中,焦点损失被交叉熵取代,在最后一个例子中消除了注意力机制。
当移除基于锚点的池化过程时,性能的大幅下降表明了它的重要性。这一过程使得能够使用更轻的主干网,这在有线有线电视新闻网[13]中是不可能的,而不会出现大的性能下降。结果还表明,图像的每个边界都有一个层,这不仅是不必要的,而且对模型的效率不利。此外,使用焦点损失代替交叉熵也被证明是有益的。此外,它还消除了对一个参数(损失计算中使用的负样本数量)的需要。最后,所提出的注意力机制是另一个显著提高模型性能的修改
个人总结
这篇论文并不是使用anchor进行车道线检测的第一篇论文,第一篇论文是 Line-CNN: End-to-End Traffic Line Detection With Line Proposal Unit,Line-CNN论文借鉴了faster-cnn的思想,预设anchor进行检测,anchor 设计的具体思路可以参考Line-CNN
本篇论文个人理解,在 Line-CNN 论文之上的创新是加入了注意力机制
本文设置了2784个anchor,不是2782论文中写错了。
2*72*6+128*15=2784
2:左右两侧
72:y方向上选择了72个点,作为起始点
6:两侧方向每个点按不同角度出6个角度的线
128:底端出128个点,作为起始点
15:低端每个点出按不同角度出15个角度的线
论文地址
https://arxiv.org/pdf/2010.12035.pdf
代码复现
https://github.com/lucastabelini/LaneATT
B站讲解视频
手撕LaneATT:当车道线遇到了Anchor_哔哩哔哩_bilibili
参考链接
车道线检测:LaneATT———Keep your Eyes on the Lane_Thomson Tang的博客-CSDN博客
Line-CNN: Line-CNN: End-to-End Traffic Line Detection With Line Proposal Unit - 知乎