SUPER车道线检测:异构数据集训练、物理驱动拟合
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
介绍一篇今年的车道线检测论文 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:
,
车道线拟合的目的就是根据鸟瞰图中车道线上的点,得到不同车道线对应的 和 。
由于车道线是平行的,因此不同的车道线对应的多项式除了截距项以外,其余的项是相同的。
道路中心线的拟合
理想情况下,道路中心线和车道线也是平行的,如下图所示:
因此道路中心线多项式与车道线多项式有相同的。设为道路中心线的截距项,为鸟瞰图中道路区域上点的坐标,定义损失函数
用于控制道路中心线对离群点的敏感程度,本文中
最小化该损失函数,求得的多项式就是道路中心线。
道路中心线的作用有二:其一,绝大多数情况下,道路中心线和车道线几乎是平行的,因此道路中心线与车道线有同样的,道路中心线至少可以作为拟合车道线的初始起点;其二,场景复杂的情况下,车道线检测效果不好时,由车道线得到的拟合点可能比较少,道路中心线可以为车道线的拟合提供参考。
车道线的拟合
在车道线和道路中心线平行的假设条件下,车道线和道路中心线的多项式中有同样的和不同的。若使用代表鸟瞰图中第n条车道线上的点,则表示该点与鸟瞰图中y轴的距离,如下图所示:
理想情况下,同一车道线上的点,使用公式进行计算,得到的值几乎相同。
然而,计算道路中心线时未使用车道线信息,得到的道路中心线很可能与车道线“不太平行”。可以使用函数表示的精确程度:
当很精确,即值能很好地表示车道线除截距以外的其他信息,对于同一车道线上的点,值应该差不多,由得到的直方图更“整齐”,即函数值更小。
相反,当的值不能很好地表示车道线除截距以外的其他信息时,由得到的直方图更“混乱”,函数值更大。
因此可以通过最小化函数来调整的值。
定义如下损失函数:
上面公式中的是个很“工程”的做法,其中表示用于拟合车道线的所有点的个数,表示在一个预定义区域内用于拟合车道线的点的个数。论文里没有明确说明如何计算,个人推测的值应该与的值有关。
可能会存在某些的值,能使比较小,但是并不是我们想要的比较合适的值,此时会比较小,则会变大,从而使变大,以遏制此种情况的发生。实际使用时取。
融合和形成最终的损失函数,寻找最优的和使损失函数最小,即:
上式中的用于平衡两个损失,实际使用时取。
联合使用两个损失函数的好处是,当用于拟合车道线的点很多时,可以通过优化得到很好的结果;当用于拟合车道线的点比较少时,最小化也能得到可以接受的结果。
通过优化损失函数得到最优的以后,可以通过下式求得每条车道线的截距:
上式中表示所有车道线的截距值。上式中的peaks操作作者使用了matlab中的findpeaks函数实现,关于findpeaks的详细信息可以参考:https://www.mathworks.com/help/signal/ref/findpeaks.html。
下图为车道线检测、拟合的示例:
上图中,图(a)为输入图像,图(b)和图(c)分别是语义分割和车道线分割的结果。图(d)中红色的点是利用车道线上的点做运算只保留截距信息的点,绿色的点是路面上的点做运算只保留截距信息的点。图(e)用于寻找峰值,以得到不同车道线的截距。
03
坡度场景下的补偿
以上的推理在平坦的路面上是合理的,但是若路面有起伏,且仍按照平坦路面进行建模,从输入图像转换为鸟瞰图后,在输入图像中平行的车道线在鸟瞰图中并不平行。因此有必要对有坡度的场景进行补偿。
根据逆透视变换(Inverse Perspective Mapping,IPM)的原理,若输入图像上的点(u, v)对应于世界坐标点(x,y,z),则有:
其中是相机坐标系下物体在z轴上的位置。由于未知,且在有起伏的路面上,因此无法求出x和y的值。
若假设此时路面是平坦的,设图像上的点(u,v)对应的世界坐标点为,h为相机距地面的距离,则有:
根据上式,显然有:
,
即:
,
当路面有起伏时,对路面的起伏程度进行建模:,则上式可以表示为:
假设是线性函数,即,则可以很容易得到:
由于和可以通过IPM的方法得到,因此只要知道的值,即可以求得和。
可以将和的公式带入到和表达式中,通过得到最优的值。
04
工程实现
在工程实现时,作者使用了Nelder-Mead simplex 算法优化损失函数,具体可参考论文《Proper initialization is crucial for the Nelder-Mead simplex search》。
在实际应用中,车道线检测算法的输入是一串连续的图片,因此前一帧图片得到的车道线表达式的系数,可以作为拟合后一帧车道线的初始参数。
05
实验结果
作者使用Cityscape、Vistas、Apollo三个数据集进行训练,在Tusimple、Caltech上测试,在Intel Xeon W-2155CPU和Titian Xp GPU上能跑到11FPS。需要特别指出的是,训练和测试时用的不是同一个数据集,而且训练时同时使用了多个数据集进行训练,这也是本文的特色之一。
在Tusimple数据集上的测试结果如下:
上表中的“sc”表示使用了坡度补偿,“sq”表示在当前帧做车道线拟合时使用上一帧的拟合结果作为初始值。可以看到虽然算法没有使用Tusimple数据集做过训练,但仍然取得了不错的效果。
在Caltech数据集上的测试结果如下:可以看到在Caltech数据集上,本文提出的方法取得了很好的结果。
06
总结
针对车道线检测的场景,设计了跨异构数据集训练的卷积神经网络,用于车道线分割。
在车道线拟合时,充分利用了车道线平行这一先验信息,并给出了拟合时的损失函数和优化方法。
在对车道线拟合时,不仅仅考虑平坦道路场景,还对坡道场景做了补偿,提高拟合精度。
好消息!
小白学视觉知识星球
开始面向外开放啦
SUPER车道线检测:异构数据集训练、物理驱动拟合相关推荐
- 自动驾驶——车道线检测相关数据集整理
自动驾驶视觉方向的分支车道线检测需要的相关数据集 暂时没有好好整理,先作个记录: 1.KITTI KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办,主要于算法评测. KITTI数据 ...
- LaneNet车道线检测tusimple数据集处理
tusimple数据集处理 一.下载数据集 1.官方下载地址 https://github.com/TuSimple/tusimple-benchmark/issues/3,数据集很大,下载速度超级慢 ...
- CVPR2022车道线检测Efficient Lane Detection via Curve Modeling
分享前段时间看的一篇车道线检测方向的新工作,也是中了最近公开结果的2022CVPR,是上海交大.华东师大.香港城市大学和商汤科技合作完成的,代码已经开源.关于车道线检测任务,我之前也分享过几篇文章: ...
- 车道线检测CLRNet算法复现在Tusimple数据集测试demo
0 写在前面 分享最近在车道线检测方面的工作,详细跟大家说下我的配置环境和过程,欢迎自动驾驶的朋友来交流学习,助力自动驾驶早日落地. 分享一篇今年CVPR车道线检测方向的新工作--CLRNet: Cr ...
- tusimple车道线检测 处理自己的数据集 用自己的数据集训练模型
tusimple车道线检测 处理自己的数据集 用自己的数据集训练模型_喜欢爱喝矿泉水的男孩的博客-CSDN博客 标注数据 将自己的数据用labelme(至于如何安装和使用请自查)打开,然后选择线段或者 ...
- 车道线检测综述及新工作汇总
编辑丨3D视觉工坊 车道线检测综述及近期新工作--为ADAS.自动驾驶服务. 部分视频效果展示: https://www.bilibili.com/video/BV1E54y1V7G4 https:/ ...
- 车道线检测综述及近期新工作
车道线检测综述及近期新工作--为ADAS.自动驾驶服务. 部分视频效果展示: https://www.bilibili.com/video/BV1E54y1V7G4 https://www.bilib ...
- CVPR 2022 | Accuracy和F1-score真的能代表车道线检测网络性能吗?
点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[车道线检测]技术交流群 后台回复[车道线综述]获取基于检测.分割.分类.曲线拟合等近几 ...
- 基于实例分割方法的端到端车道线检测 论文+代码解读
Towards End-to-End Lane Detection: an Instance Segmentation Approach 论文原文 https://arxiv.org/pdf/1802 ...
最新文章
- 移动端给img加上max-width:100%
- Go语言中查询SqlServer数据库
- jMeter parallel controller 无法使用 CSV Data config 提供的变量?
- Istio 1.10 发布及官网改版
- 【牛客 - 551E】CSL 的魔法(贪心,思维,STLmap,分块)
- php strpose_php中strpos()和stripos()函数的区别用法详解
- mysql procedure
- 裘宗燕:C/C++ 语言中的表达式求值
- html缩放排版乱了_交作业 | 代码排版逐行显现效果
- js Dom对象的属性与方法
- Redis设计与实现 - chapter7 压缩列表
- NLP和CV的双子星,注入Mask的预训练模型BERT和MAE
- First Kernel-pwn
- 配置虚拟机NAT模式连通外网并使用Xshell登陆
- 方正BPM开发平台(FIX ES2007)帮助手册+知识库
- 修复鹏城开发者云硬盘扩容报错 fdisk: cannot write disk label: Invalid argument
- matlab程序 直线插补,无聊写matlab仿真直线插补算法
- 一文看全!史上以来的59家测序仪公司
- ResNet详细介绍
- 网络对抗 Exp5 MSF基础应用 20154311 王卓然
热门文章
- 20200223——起点文学免费小说爬取
- 基于Python语言使用RabbitMQ消息队列(三)
- 完美删除MySQL数据库
- 消息在网络中的传输过程
- 分享技术Prometheus监控神器
- nView 多显示屏幕技术
- Python报错File “「string」“, line 1, in 「module」 NameError: name ‘q‘ is not defined
- imagick php7.0,Installing Imagick for PHP 7 on Windows 10
- 小米mix2安兔兔html5跑分,小米MIX 2S跑分多少?高通骁龙845安兔兔跑分实测
- window11 DELL电脑照片浏览器硬件加速闪屏黑屏解决