车道线检测网络之LaneNet

在这里插入图片描述


想获取原论文的同学,可关注我的微信公众号:AI Jun,回复:全套,获取全套深度学习论文
在这里插入图片描述
关注微信公众号可扫描下图二维码
在这里插入图片描述


摘要

传统的车道检测方法依赖于高度专业化的、手工制作的特征和启发式方法的组合,通常紧随其后的是后处理技术,这些技术计算昂贵,并且容易由于道路场景的变化而变得可伸缩。

更新的方法利用深度学习模型,这些模型被训练用于像素级车道分割,即使在图像中由于其较大的接受范围而没有标记时也是如此。尽管它们具有优势,但这些方法仅限于检测预定义的固定数量的车道,例如自我车道,并且不能应对车道改变。

相对于以前的工作,该车道检测网络主要有两大贡献

  1. 将车道检测问题归结为一个实例分割问题,其中每条车道都形成了自己的实例,可以端到端地进行训练。
  2. 为了在拟合车道之前将分段车道实例参数化,应用以图像为条件的学习透视变换,而不是固定的“鸟瞰”变换。通过这样做,可以确保车道拟合对于道路平面的变化是鲁棒的,而不像现有的依赖于固定的、预定义的变换的方法。

综上所述,这是一种快速车道检测算法,运行速度为50fps,可以处理可变数量的车道和应对车道变化。在tuSimple数据集上验证了该方法,并取得了有竞争力的结果。

一、引言

全自动驾驶汽车是当今计算机视觉和机器人研究的主要焦点,无论是在学术层面还是在工业层面上都是如此。每种情况的目标都是通过使用各种传感器和控制模块来全面了解汽车周围的环境。基于摄像头的车道检测是迈向这种环境感知的重要一步,因为它允许汽车在道路车道内正确定位自己。它对于任何后续的车道偏离或轨迹规划决策也是至关重要的。因此,实时执行基于摄像头的准确车道检测是实现完全自动驾驶的关键因素。

传统的车道检测方法依赖于高度专门化、手工制作的特征和试探法的组合来识别车道段。这种手工制作的线索的流行选择包括基于颜色的特征结构张量条形滤波器脊线特征等,这些特征可能与霍夫变换、和粒子或卡尔曼滤波器相结合。在识别车道段之后,采用后处理技术来过滤错误检测并将分段分组在一起以形成最终车道。

有关车道检测系统的详细概述,请读者参阅《 Recent progress in road andlane detection: a survey》。通常,由于道路场景的变化,这些传统的方法容易出现鲁棒性问题,而这些变化不能很容易地被这样的基于模型的系统建模。

更新的方法已经用深度网络取代了手工制作的特征检测器,以学习密集预测,即像素级车道分段。Gopalan等人使用像素层次特征描述符来建模上下文信息,并使用提升算法来选择用于检测车道标记的相关上下文特征。类似地,Kim和Lee将卷积神经网络(CNN)与RANSAC算法相结合,从边缘图像开始检测车道。注意,在他们的方法中,CNN主要用于图像增强,并且仅当道路场景复杂时才使用,例如,它包括路边树、栅栏或十字路口。

Huval等人展示现有的CNN模型如何用于高速公路驾驶应用,其中包括执行车道检测和分类的端到端CNN。He等人介绍了双视图CNN(DVCNN),它同时使用正视和俯视图像来分别排除错误检测和去除非棒状结构。Li等人建议使用专注于寻找几何车道属性(例如位置和方向)的多任务深度卷积网络,以及检测车道的递归神经网络(RNN)。最近,Lee等人展示多任务网络如何在恶劣天气和低光照条件下联合处理车道和道路标记检测和识别。除了前述网络更好地分割车道标记的能力外,它们的大接收范围还允许它们即使在图像中没有标记的情况下也能估计车道。然而,在最后阶段,仍然需要将生成的二元车道分段解缠到不同的车道实例中。

为了解决这个问题,一些方法已经应用了后处理技术,这些技术再次依赖于启发式算法,通常是由几何属性指导的。如上所述,这些启发式方法计算昂贵,并且容易由于道路场景变化而产生鲁棒性问题。另一项工作将车道检测问题描述为多类别分割问题,其中每条车道形成其自己的类别。通过这样做,网络的输出包含每个车道的解缠的二进制地图,并且可以以端到端的方式进行训练。尽管有其优点,该方法仅限于检测预定义的固定数量的通道,即自我通道。此外,由于每条车道都有指定的等级,因此无法应对变道。

本文设计了一个类似《Fast Scene Understanding for Autonomous Driving》的分枝多任务车道实例分割网络,该网络由车道分割分支和车道嵌入分支组成,可端到端训练。车道分割分支具有两个输出类别,即背景或车道,而车道嵌入分支进一步将分割的车道像素解开为不同的车道实例。通过将车道检测问题分解为上述两个任务,我们可以充分利用车道分割分支的能力,而不必将不同的类别分配给不同的车道。取而代之的是,使用聚类损失函数训练的车道嵌入分支将车道ID分配给车道分割分支中的每个像素,同时忽略背景像素。通过这样做,我们缓解了车道改变的问题,并且我们可以处理可变数量的车道。

在估计了车道实例(即,哪些像素属于哪个车道)之后,作为最后一步,我们希望将它们中的每一个都转换为参数描述。为此,曲线拟合算法在文献中得到了广泛的应用。流行的模型有三次多项式、样条或回旋线。为了在保持计算效率的同时提高拟合质量,通常使用透视变换将图像转换为“鸟瞰图”[39]并在那里执行曲线拟合。注意,鸟瞰图中拟合的线可以通过逆变换矩阵重新投影到原始图像中。通常,变换矩阵在单个图像上计算,并且保持固定。但是,如果地平面改变形式(例如,通过倾斜上坡),则此固定变换不再有效。因此,接近地平线的车道点可能会投影到无穷远,从而对直线拟合产生负面影响。

为了弥补这种情况,我们还在拟合曲线之前对图像进行透视变换,但与现有的依赖于固定变换矩阵进行透视变换的方法不同,我们训练神经网络来输出变换系数。特别地,神经网络将图像作为输入,并利用针对车道拟合问题量身定做的损失函数进行优化。所提出的方法的固有优点是车道拟合对道路平面变化是稳健的,并且被特别优化以更好地拟合车道。我们整个管道的概况可以在下图1中看到。

在这里插入图片描述
本文的贡献可以归结为以下两点:

  1. 一种分支的多任务体系结构,将车道检测问题转化为实例分割任务,处理车道变化,并允许推断任意数量的车道。具体地,车道分割分支输出密集的每像素车道分段,而车道嵌入分支进一步将分段的车道像素解缠成不同的车道实例。
  2. 给定输入图像的网络估计透视变换的参数,该透视变换允许车道拟合对道路平面变化(例如,上坡/下坡坡度)具有鲁棒性。

二、车道线检测网络

本文端到端地训练神经网络进行车道检测,以解决前面提到的车道切换问题以及车道数量的限制。这是通过将车道检测视为实例分割问题来实现的,我们将其称为LaneNet。如下图2,结合了二进制车道分割的优点和专为单次实例分割而设计的聚类损失函数。在LaneNet的输出中,为每个车道像素分配其相应车道的ID。
在这里插入图片描述

2.1 LaneNet

实例分割任务由两部分组成,分割部分和集群部分,下面几节将对此进行更详细的说明。为了提高性能,在速度和准确性方面[27],这两个部分在多任务网络中联合训练(见图2)。

(1) 二进制分割

对LaneNet的分段分支(参见图2,底部分支)进行训练,以输出二进制分段图,指示哪些像素属于车道,哪些不属于车道。为了构建地面真实分割图,我们将所有地面真实车道点1连接在一起,形成每条车道的连通线。请注意,即使通过遮挡汽车之类的对象,或者在没有明显可见车道段(例如虚线或褪色车道)的情况下,我们也会绘制这些地面真实车道。这样,网络将学会预测车道位置,即使它们被遮挡或在不利的情况下也是如此。用标准的交叉熵损失函数对分割网络进行训练。由于这两个类别(车道/背景)高度不平衡,因此我们应用有界反向类别权重,如[29]中所述。

(2) 实例分割

为了解开由语义分支标识的车道像素,我们训练LaneNet的第二个分支用于车道实例嵌入(参见图2)。大多数流行的检测和分割方法(例如,[14]、[38])对于车道实例分割并不理想,因为边界框检测更适合于紧凑的对象,而车道不适合。因此,我们使用了De Braband ere等人提出的基于距离度量学习的一次性方法[5],它可以很容易地与标准前馈网络集成,并且是专门为实时应用设计的。

通过使用它们的聚类损失函数,训练实例嵌入分支来为每个车道像素输出嵌入,使得属于同一车道的像素嵌入之间的距离较小,而属于不同车道的像素嵌入之间的距离是最大的。通过这样做,同一通道的像素嵌入将群集在一起,形成每个通道的唯一群集。这是通过引入两个项来实现的:方差项 L v a r L_{var} Lvar距离项 L d i s t L_{dist} Ldist,其中方差项 L v a r L_{var} Lvar向每个嵌入施加朝向车道的平均嵌入的拉力,距离项 L d i s t L_{dist} Ldist将群集中心彼此推开。这两个术语都是铰链的:仅当嵌入距离其群集中心的距离大于δ时,拉力才有效,而中心之间的推力仅当它们彼此之间的距离大于δ时才有效。C表示簇(通道)的数量, N c N_c Nc表示簇c中的元素数, x i x_i xi是一个像素嵌入, µ c µ_c µc表示簇c的平均嵌入,|| . ||表示L2距离, [ x ] + = m a x ( 0 , x ) [x]_+=max(0,x) [x]+=max(0x)铰链,总损失L等于 L v a r + L d i s t L_{var}+L_{dist} Lvar+Ldist

在这里插入图片描述
一旦网络已经收敛,车道像素的嵌入将被聚集在一起,使得每个簇彼此之间的铺设距离大于 δ d δ_d δd,并且每个簇的半径小于 δ v δ_v δv

(3) clustering

群集是通过迭代过程完成的。通过在上述损失中设置 δ d > 6 δ v δ_d>6δ_v δd>6δv,可以采用半径为 2 δ v 2δ_v 2δv的随机通道嵌入和其周围的阈值来选择属于同一通道的所有嵌入。重复此操作,直到将所有车道嵌入指定给车道为止。为了避免选择离群点作为阈值,我们首先使用均值漂移来靠近聚类中心,然后进行阈值处理。

(4) 网络结构

LaneNet的架构基于编解码器网络ENet[29],该网络因此被修改为双分支网络。由于ENet的编码器比解码器包含更多的参数,完全在两个任务之间共享完整的编码器将导致不令人满意的结果[27]。因此,虽然原来的ENet编码器由三个阶段(阶段1、2、3)组成,但LaneNet只在两个分支之间共享前两个阶段(1和2),留下ENet编码器的阶段3和完整的ENet解码器作为每个单独分支的主干。分割分支的最后一层输出单通道图像(二进制分割),而嵌入分支的最后一层输出N通道图像,其中N是嵌入维度。图2示意性地描述了这一点。每个分支的损耗项都是相等加权的,并通过网络反向传播。

2.2 H-NET

由于LaneNet输出每个车道的像素集合,因此我们仍然必须通过这些像素拟合曲线才能获得车道参数化。通常,车道像素首先使用固定的变换矩阵投影到“鸟瞰”表示中。然而,由于变换参数对于所有图像都是固定的,这在遇到非平坦地平面时(例如在斜坡中)会引起问题。为了缓解这个问题,我们训练了一个网络,称为H-Net,它根据输入图像估计“理想”透视变换的参数。这种转变不一定是典型的“鸟瞰”。相反,它是一种变换,在这种变换中,车道可以用低阶多项式进行最佳拟合。

正如上一节所解释的,LaneNet的输出是每个通道的像素集合。在原始图像空间中通过这些像素拟合多项式是不理想的,因为人们必须求助于高阶多项式才能处理弯曲的车道。

该问题的一种常用解决方案是将图像投影到“鸟瞰”表示中,在该表示中,车道彼此平行,因此,曲线车道可以用2到3次多项式来拟合。

然而,在这些情况下,变换矩阵H被计算一次,并且对于所有图像保持固定。通常,这会导致地平面以下的误差,即投影到无穷远处的消失点向上或向下移动(见图4,第二行)。
在这里插入图片描述
为了解决这个问题,我们训练了一个具有自定义损失函数的神经网络H-Net:对网络进行端到端的优化,以预测透视变换H的参数,其中变换后的车道点可以用二阶或三阶多项式进行最佳拟合。预测是以输入图像为条件的,允许网络在地平面变化时自适应投影参数,因此车道拟合仍将是正确的(参见图4的最后一行)。在我们的例子中,H有6个自由度:
在这里插入图片描述
放置零是为了强制约束,即在变换下水平线保持水平。

(1) 曲线拟合

在这里插入图片描述

曲线拟合之前,通过车道像素P拟合曲线,后者使用H网输出的变换矩阵进行变换。给定通道像素pi=[Xi,yi,1]T∈P,变换像素P0i=[X0i,Y0i,1]T∈P0等于Hpi。接下来,使用最小二乘算法通过变换后的像素P0拟合n次多项式f(Y0)。为了获得在给定y位置yi的车道的x位置,x∗i,点pi=[−,yi,1]ti被变换为P0i=hpi=[−,y0 i,1]t,并且计算为:x0∗i=f(Y0 I)。请注意,x值并不重要,用‘-’表示。通过将这个点p0∗i=[x0∗i,y0 i,1]t重新投影到原始像空间中,我们得到:p∗i=H−1p0∗i,p∗i=[x∗i,yi,1]T。这样,我们可以评估不同y位置的车道。该过程在图3中示出:

在这里插入图片描述

(2) 损失函数

损失函数为了训练H-网输出对车道像素拟合多项式最优的变换矩阵,我们构造了以下损失函数。给定N个地面真实车道点pi=[xi,yi,1]T∈P,我们首先使用H-NET的输出转换这些点:
在这里插入图片描述在这里插入图片描述
由于车道拟合是使用最小二乘算法的闭合解进行的,因此损失是可微的。我们使用自动微分来计算梯度。

(3) 网络结构

网络体系结构H-NET的网络体系结构故意保持较小,由3x3卷积、 batchnorm 和 Relu 的连续块构成。使用最大池化层来降低维度,并在最后添加2个全连接层。完整的网络结构请参见表I:
在这里插入图片描述

三、实验结果

3.1 数据集

目前,tuSimple车道数据集是用于测试车道检测任务中的深度学习方法的唯一大规模数据集。它包括3626个训练集图片和2782个测试集图片,样本均在良好和中等天气条件下。

它们被记录在2车道/3车道/4车道或更多的高速公路上,在不同的白天。对于每个图像,它们还提供了未加注释的前19个帧。注释以JSON格式出现,指示车道在多个离散化的y位置处的xposition。在每个图像上,当前(EGO)车道和左/右车道都有注释,这在测试集上也是预期的。在换道时,可以增加第5条车道,以避免混淆。

精度按每幅图像的平均正确点数计算:
在这里插入图片描述

C i m C_{im} Cim值表示正确点的个数,用 S i m S_{im} Sim表示地真值点的个数。当地面实测点与预测点之间的差值小于某一阈值时,该点是正确的。与准确性一起,它们还提供假阳性和假阴性分数:
在这里插入图片描述在这里插入图片描述

3.2 Setup

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 实验

插值法

在表III中,我们计算了基于H-Net的无变换、固定变换和条件变换的车道拟合精度。我们还测量了二阶或三阶多项式拟合之间的差异。当在没有变换的情况下直接在原始图像空间中拟合曲线时,这会导致较差的结果;这是因为曲线车道很难使用低阶多项式来拟合。
在这里插入图片描述
通过使用固定变换,我们已经获得了更好的结果,三阶多项式比二阶多项式性能更好。然而,并非所有车道点都可以在固定变换下适配(另见图4)。当地平面的坡度改变时,接近消失点的点不能被正确拟合,因此在MSE测量中被忽略,但仍被计为遗漏的点。

利用H网生成的变换矩阵对车道拟合进行优化,其结果优于固定变换的车道拟合结果。我们不仅获得了更好的均方根分数,而且使用这种方法可以拟合所有的点,无论地平面的坡度是否改变。

通过使用LaneNet结合三阶多项式拟合和H-Net的变换矩阵,我们在tuSimple挑战中获得了第四名,与第一名相比只有0.5%的差异。结果可以在表II中看到。请注意,我们只在tuSimple数据集的训练图像上进行了训练,对于其他条目,这一点并不清楚,它们的速度性能也是不清楚的。
在这里插入图片描述

四、结论

本文提出了一种50fps的端到端车道检测方法。受最近的实例分割技术的启发,与其他相关的深度学习方法相比,我们的方法可以检测到可变数量的车道,并且可以应对车道变换动作。

为了使用低阶多项式对分割的车道进行参数化,我们训练了一个网络来生成透视变换的参数,该参数以图像为条件,其中车道拟合是最优的。该网络是使用用于车道拟合的自定义损失函数来训练的。与流行的“鸟瞰”方法不同,我们的方法通过相应地调整变换参数,对地平面的坡度变化具有鲁棒性。


关注微信公众号,更多精彩内容等着你哦!

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wjinjie/article/details/108532329