《Towards End-to-End Lane Detection: an Instance Segmentation Approach》论文阅读

摘要

        车道自动保持是一项重要的辅助驾驶功能,它依赖于车道线检测算法。传统的车道线检测算法依赖人为设计的特征和规则,以及后处理方法,因此计算量大且无法适应不同的场景。近期人们开始使用深度学习实现像素级的车道线分割,由于巨大的感受野,即使没有显著的特征的车道线也能检测出来。但是这些方法只能检测预定义好的固定数量的车道线,譬如ego-lanes方法;且无法处理车道线的变化。这篇文章中作者提出一种端到端的方法,将车道线检测作为一个实例分割问题来处理——每条车道线都是一个实例。同时提出一个H-Net网络,可以根据图像内容学习得到一个H矩阵,代替固定的变换矩阵应用于图像变换,由此来应对车辆运动时相机姿态的变化。网络运行速度达到50fps,且能处理任意数量的车道线和相机位姿变化问题。作者在TuSimple数据集上做了实验,认为结果还不错。

简介

        使用相机检测车道线是自动驾驶中一项基础且重要的功能。传统的车道线检测方法依赖人工设计的特征和规则,譬如基于颜色的特征,结合霍夫变换和粒子滤波;之后使用后处理方法来过滤误检得到最终结果。传统方法的缺点在于难以适应不同的道路情况导致鲁棒性不佳。

        近期人们开始使用深度学习实现像素级的车道线分割;但是这些方法只能检测预定义好的固定数量的车道线,且无法处理相机位姿变化导致的车道线的变化。据此作者提出将车道线检测作为实例分割问题处理,每个车道线作为一个实例;设计了一个多任务网络,包含一个车道线分割分支和一个车道线特征分支。车道线分割分支将预测像素是否属于车道线,特征分值用于将属于车道线的像素聚类为不同的实例,这样就可以处理任意数量的车道线。

        之后需要将各个车道线实例进行参数化表示,这里会用到曲线拟合算法。一般会将图像使用变换矩阵变换为鸟瞰图再进行车道线拟合,来提高拟合质量。其中变换矩阵一般是固定的,但实际车辆运动时会因为颠簸等原因导致变换矩阵会发生变化,此时若仍使用固定的变换矩阵,将得到错误的鸟瞰图从而影响车道线拟合结果。针对该问题作者训练了一个网络,输入图像内容输出对应的变换矩阵。整体框架如下图所示。

方法

        LaneNet输出的是不同的车道线实例,每个实例有对应的像素集合。需要对像素集合进行处理来拟合车道线,这里先使用H-Net估计得到一个合理的变换矩阵应用于输入图像得到鸟瞰图,之后在鸟瞰图中做车道线拟合操作。

LaneNet

        LaneNet分为两部分,一部分用于车道线分割,另一部分用于车道线实例的聚类;为了提高速度和精度这两部分放到了一个多任务网络中,如下图所示。

        二值分割分支将输出一个二值图,标记像素是否属于车道。这里作者在产生真实值时将地面上因为其他物体遮挡或者自身不存在但在人类感官上“存在”的车道线都做了标记,使得训练出来的模型也拥有类似的“预测”能力。由于图像中车道线区域占比过小,导致训练中样本失衡,作者使用了bounded inverse class weighting应用于交叉损失熵的计算。

        实例分割分支将输出每个像素点的特征值,用于车道线的聚类。在训练中设计损失函数使得属于同一条车道线的像素之间特征值的距离比较小,属于不同车道线的像素之间特征值的距离比较大。这个设计比较经典,在后续的车道线检测论文中都会看到。

        网络模型上参考了ENet,将编码阶段中的1/2层共享,第三层和后续的解码分为两个分支单独训练;二值分割分支输出宽高与输入相同,通道数为1;实例分割分支输出宽高与输入相同,通道数为N;两个分支的loss的权重相等。

基于H-NET的曲线拟合

        一般不会在原始图像中拟合曲线,因为图像的透视效果使得需要更高次多项式做拟合;可以把检测到的线段变换至鸟瞰视角,使用二阶/三阶多项式拟合。

        为了减少车辆运动时因颠簸等问题导致的实际变换矩阵会变化的问题,作者提出一个H-Net网络,输入图像数据后网络输出一个6自由度的H矩阵。这里的H自由度为6,作者是为了确保原始图像中水平线变换到鸟瞰图中之后依然保持水平。

        H-Net网络结构如下所示。

        使用上述H作用于原图得到鸟瞰图中的坐标,之后使用最小二乘法拟合n阶曲线。这里训练H-Net时将loss设为了变换后的点更好地拟合为n阶曲线时更小。

猜你喜欢

转载自blog.csdn.net/lwx309025167/article/details/127284049