介绍一篇今年的车道线检测论文 SUPER: A Novel Lane Detection System,作者来自密歇根大学和SF Motors 公司。
论文:https://arxiv.org/abs/2005.07277
0
背景介绍
车道线检测算法的研究最早可追溯至上世纪八十年代,由于车道线本身具有多样性(环岛、交叉线),以及外界光照、车辆遮挡的影响,现有的车道线检测算法仍很难实际用于高安全性的自动驾驶任务中。
单靠提取车道线特征解决车道线检测问题很难应对外界光照、遮挡等不利因素。联合低层次特征(车道线、车辆)和高层次特征(街道场景理解)去进行车道线检测,即网络先学习到街道布局信息、道路几何信息,然后关注车道线信息,也许会大大提高算法的准确率。
很多基于CNN的车道线检测算法的输出都是像素级别的分割信息,将车道线从场景中分离出来,然后使用后处理算法进行视角变换和车道线拟合。然而大多数方法都忽视了车道线的一个重要特性:绝大多数情况下,车道线都是互相平行的。利用这一重要性质,再使用几何知识处理坡道情况,使用简单的优化方法即可得到精确的车道线多项式。
01
使用异构数据集训练层次化分割网络
若要使网络联合车道线特征和场景语义信息,需要同时有语义标注和车道线标注的数据集,然而几乎没有这样的开源数据集可供使用。使用如下三个数据集近30000张图片联合训练网络:
然而这三个数据集标注的层次、类别不尽相同,即这三个数据集是“异构”的。
Cityscape数据集仅提供了语义分割标签,不包含与车道线相关的标签。
Vistas数据集提供了一些通用的车道线标记。
Apollo数据集提供了比Vistas更细粒度的车道线标记。
为了使用异构数据集进行训练,参考了论文:Training of Convolutional Networks on Multiple Heterogeneous Datasets for Street Scene Semantic Segmentation.结合车道线检测的实际情况,提出了如下图所示的层次化分割网络:
如上图所示,该网络共有4个Head:
Head 1:将垂直的物体(楼、树、车)与水平的物体(路面)分开。
Head 2:结合backbone输出与Head1的输出,将垂直的物体和水平的物体进一步细分。
Head 3:结合backbone输出与Head2的输出,粗略地分割出带有车道线标记的区域。
Head 4:结合backbone输出与Head3的输出,精确地分割出不同类型的车道线。
以上4个Head对应于4个分类器,由于不同分类器输出类别的粒度不同,因此可以用上文提到的异构数据集训练与数据集标注粒度相近的分类器。训练分类器时使用了softmax层和交叉熵损失函数。后一个分类器使用了前一个分类器的输出结果,极大地提高了车道线分割效果。
02
物理驱动的车道线拟合
在车道线拟合之前,需要将分割得到的车道线上的点映射到鸟瞰图中(BEV,birds' eye view),如下图所示
使用 表示原始图像空间的点, 表示鸟瞰图中的点。在鸟瞰图中,使用如下形式的多项式拟合车道线,本文中取m=2:
,
车道线拟合的目的就是根据鸟瞰图中车道线上的点,得到不同车道线对应的 和 。
由于车道线是平行的,因此不同的车道线对应的多项式除了截距项 以外,其余的项 是相同的。
道路中心线的拟合
理想情况下,道路中心线和车道线也是平行的,如下图所示:
因此道路中心线多项式与车道线多项式有相同的 。设 为道路中心线的截距项,