Towards End-to-End Lane Detection: an Instance Segmentation Approach

2.方法

我们训练一种端到端地车道检测神经网络,是为了处理解决上面提到的车道变换的问题和车道数量限制的问题。方法是将车道检测作为实例分割问题。这个神经网络我们称为LaneNet(Figure2),结合了二值化车道分割和完成one-hot实例分割的一个聚类损失函数。LaneNet的输出,每一个车道像素被指定一个与之相联系的车道ID号。进一步的解释在Section II-A部分。
因为LaneNet输出的是每一个车道的像素集合,我们还是要通过这些像素拟合得到车道的曲线方程。车道图像首先要通过一个规定的变换矩阵,映射到一张鸟瞰视图中。但是图像地面通常不一定是平的,比如说各种倾斜角度,这就带来了一个问题。为了减轻这个地平面变化的问题,我们训练了一个叫做H-Net的网络,去估计一个“理想”的透视变换的参数(适应所有地平面变化)。这个变换没有必要一定是典型的鸟瞰图。只要这个变换能让车道能被一个低阶的多项式最优地拟合。Section II-B描述了这个步骤。

A. LANENET

通过把车道检测问题当做实例分割问题,LaneNet是端到端训练出来的车道检测网络。这样的话,网络不会受到它要检测的车道数量和车道变化的限制。实例分割任务包含两部分:分割和聚类,更多的细节下面会解释。为了考虑速度和准确率这两个性能指标,这两部分在一个多任务网络里面联合训练(Figure 2)。

二值化分割

LaneNet的分割分支被训练为输出一个二值化的segmentation map,指出哪个像素属于车道哪个不是。为了建立segmentation map的真实值,我们把所有的真实车道线上的点连接起来,每条车道形成一个连接好的线。注意到我们形成这些车道线真实值,即使有堵塞的车辆,明显的车道区域缺失,如虚线和褪色的车道线(也要连成一条完整的车道线)。这样,网络能够学习预测车道位置,即使存在堵车和多样化的环境。分割网络通过标准的交叉熵损失函数进行训练。由于车道/背景这两个类别高度不平衡,我们使用一个bounded inverse class weighting,在【29】中有描述。

实例分割

为了区分由分割分支识别出来的车道像素(属于哪个车道),我们训练LaneNet的第二个分支来进行lane instance embedding。大多数的检测分割方法【14, 38】对车道实例分割来说都不理想,因为边界框检测更适用于紧凑的物体,很明显车道不是。因此我们使用DeBrabandere等【5】的基于距离指标学习的one-hot方法,它可以很容易与标准前馈网络结合,也可以被设计到实时检测应用中去。

通过使用聚类损失函数,instance embedding branch可以被训练用来输出一个车道像素的embedding,属于相同车道的embedding很小,属于不同车道的embedding很大。通过这样做,相同车道的pixel embedding将会聚集在一起,针对每一车道形成独一无二的聚类。通过引入两项来实现这个,a variance term (Lvar), that applies a pull force on each embedding towards the mean embedding of a lane, and a distance term (Ldist), that pushes the cluster centers away from each other。这两项是hinged:当一个embedding远离它的类别中心时,the pull force激活;当两个类别中彼此靠近到小于δd,the push force被激活。With C denoting the number of clusters (lanes), Nc the number of elements in cluster c, xi a pixel embedding, µc the mean embedding of cluster c, ||·||the L2 distance, and [x]+ = max(0; x) the hinge, the total loss L is equal to Lvar + Ldist with:
在这里插入图片描述

聚类

通过一个迭代步骤完成一个聚类。在上面的损失函数中设置 δd > 6δv,可以采用任意一个车道embedding,用一个2δv 阈值化选择所有属于同一车道的embedding,我们使用均值转移使得转移到类别中心,然后再做阈值化。

网络结构

LaneNet的结构是基于ENet【29】这样的编解码结构,因此被设计成一个二分支的网络。因为ENet的编码器比解码器包含更多的参数,完全共享两个任务之间的全编码器将会导致一个令人难以满意的结果【27】。正因为这样,虽然原始的ENet的编码器包含三个阶段,但是LaneNet只共享两个分支之间的前两个阶段,让ENet编码器的第3个阶段和full ENet decoder作为每个单独分支的backbone。分割分支的最后一层输出一通道的图像(二值化分割),同时embedding branch的最后一层输出N通道的图像,N是the embedding的维度。每一个分支的损失项平等地加权,反向传播经过整个网络。

B.使用H-NET进行曲线拟合

LaneNet的输出是每个车道的像素集合。通过原始图像空间的这些像素拟合一个多项式并不理想,因为不得不借助高阶多项式处理弯曲车道。对这个问题的广泛使用的解决方法是将原图像映射到鸟瞰图表示,那样的话车道彼此平行,曲线车道能够用二阶或三阶多项式拟合。

但是,在这种情况下,变换矩阵H只被计算了一次,之后在所有图片中保持不变。当地平面变化时,这会导致误差,vanishing-point会被映射到无限,shift up或者downwards。

为了解决这个问题,我们训练一个神经网络,H-Net,损失函数是专门设计好的:网络被优化成端到端的预测一个透视变换H的参数,变换之后的车道点可以最优地用一个2阶或3阶的多项式拟合。根据特定的输入图片得预测,允许网络当地平面变化时调整映射参数,所以车道线能够被拟合的很好。在我们的模型中,H有6个自由度:
在这里插入图片描述

曲线拟合

在通过所有的车道像素拟合曲线前,要通过一个H-Net输出的转换矩阵进行变换。
在这里插入图片描述

损失函数

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

网络结构

H-Net的网络结构有意地保持很小,通过一系列的3*3卷积,batchnorm和Relu。通过最大池化层降低维度,尾部有2个全连接层。Table1展示了完整的网络结构。

3.结果

数据集

目前tuSimple车道数据集是唯一的大规模在车道检测任务上测试深度学习方法的数据集【40】。它包含3626个训练样本和2782个测试样本,有好的或中等的天气条件,包括不同时间段2/3/4车道或更多的高速路段。对于每一张图片,提供了19未标注的之前的数据帧。标注文件采用json格式,一系列离散化y位置的x点位置。 在每一幅图片上,当前车道的左右车道被标注,测试集也一样。当改变车道时,增加第5个车道避免confusion。

准确率是通过计算每幅图像的平均正确分类的数据点个数计算的:
在这里插入图片描述

B. 安装

LaneNet 是通过一个4维的embeddiing训练的,with δv = 0:5 and δd = 3. 图像被放缩到512256,优化算法采用Adam算法,batch size为8, learning rate为5e-4。
H-Net 是训练来完成一个3阶的多项式拟合,输入图像放缩到128
64。优化算法为Adam,batch size为10,learning rate为5e-5。
speed 给定一个分辨率为512*256的输入图像,得到每个像素4维的embedding,再使用3阶的多项式拟合,我们的车道检测算法运行速度可以达到50FPS。

C.试验

4.结论

在这篇论文中,我们提出了一个端到端速度达到50fps的车道检测。受到最近实例分割技术的启发,我们的方法能够检测(一张图片中)不同数量的车道,也能处理车道变化。

为了使用低阶多项式参数化分割出来的车道区域,我们训练了一个网络去生成一个随着输入图片变化的透视变换的参数,这样车道拟合才能最优。这个车道拟合网络通过一个定制的损失函数进行训练。不同于其他的鸟瞰图方法,我们的方法对地平面斜率的变化鲁棒性很强,通过相应地改变变换的参数。

猜你喜欢

转载自blog.csdn.net/weixin_38498050/article/details/89363508
今日推荐