作者|cfzd

来源|https://zhuanlan.zhihu.com/p/157530787

很高兴和大家分享一下我们刚刚被 ECCV 2020 接收的新工作:一种超快速的车道线检测算法(Ultra Fast Structure-aware Deep Lane Detection),能够达到SOTA水平的性能,同时保持超高的检测速度。轻量级的版本可以在接近SOTA的性能情况下达到300+FPS的检测速度,代码和模型已开源(cfzd/Ultra-Fast-Lane-Detection)。话不多说,先放demo。

前言

车道线检测是自动驾驶中的一个基础模块,其实也是一个由来已久的任务,早期已有很多基于传统图像处理实现的车道线检测算法。但随着大家研究的深入,车道线检测任务所应对的场景越来越多样化,逐步已经脱离了对于“白、黄色线条”这种低阶理解。目前更多的方式是寻求对于 语义上 车道线存在位置的检测,即使它是模糊的、被光照影响的、甚至是完全被遮挡的,如下图所示。

图1 目前车道线检测的难点为寻找语义上的线,而不是局限于表观存在的线

对于上图这类问题,基于传统图像处理的方法几乎无法实现检测,因此有了一些方法开始尝试一种最直接的深度学习方案——把车道线检测视为分割任务。虽然深度分割方法效果强于传统方法,但存在两个关键问题

  • 速度慢

因为分割是逐像素分类的,要对图像中每一个像素点进行分类。为了分割车道线要进行非常密集的计算,导致的结果就是速度比较慢。其实车道线像素其实只占图像很少一部分,想想也不需要进行这么舍本逐末的操作。

  • 局部感受野

分割的另一个问题是感受野问题。因为分割一般是全卷积得到分割结果,而卷积基本上是比较局部的,所以每个像素的感受野有限。在其他分割问题中可能问题不大,但在车道线检测中,问题就很大了。由于我们关注的问题大多是上图这种语义线的检测,需要对全局有很好的感知才能实现良好的定位。比如在图1中,对于车道线的定位只有靠周围车流走向这种全局信息才能很好地定位。

虽然有些很好的工作,比如SCNN[1]使用不同方向上的特征传播实现信息传递,间接完成了增大感受野,增加全局信息的目标,但是速度更慢了。

其实直观感受来说,做车道线检测没必要这么大动干戈把每个像素都进行分类。基于此,我们的方法遵循着一个非常简单的动机:有没有更简单的方式建模车道线检测

方法介绍

为了更简单地建模车道线,也为了解决上述两个分割方法存在的问题,我们提出了一个全新的车道线检测定义:将车道线检测定义为寻找车道线在图像中某些行的位置的集合,即基于行方向上的位置选择、分类(row-based classification), 如下图所示。

图2 将车道线检测定义为在某些行上位置的选择、分类

假设我们要检测一条车道线的图像大小为HxW,对于分割问题,我们需要处理HxW个分类问题。

由于我们的方案是行向选择,假设我们在h个行上做选择,我们只需要处理h个行上的分类问题,只不过每行上的分类问题是W维的。因此这样就把原来HxW个分类问题简化为了只需要h个分类问题,而且由于在哪些行上进行定位是可以人为设定的,因此h的大小可以按需设置,但一般h都是远小于图像高度H的。

这样,我们就把分类数目从HxW直接缩减到了h,并且h远小于H,更不用说h远小于HxW了。因此我们的方法将计算复杂度缩减到了一个极小的范围内,解决了分割速度慢的问题,极大地提速的了车道线检测算法的速度,这也是我们方法能够达到300+FPS的原因。下图展示了我们方法和基于分割的车道线检测方法的比较。

图3 和传统分类方法的比较。我们的方法直接做行方向上的选择,而不是逐像素分割。

除了速度快之外,我们的方法还可以解决上文提到的另一个问题:局部感受野小导致的复杂车道线检测困难问题。由于我们的方法不是分割的全卷积形式,是一般的基于全连接层的分类,它所使用的特征是全局特征。这样就直接解决了感受野的问题,对于我们的方法,在检测某一行的车道线位置时,感受野就是全图大小。因此也不需要复杂的信息传递机制就可以实现很好的效果。

除此之外,由于有了水平行方向上直接的位置信息,我们还可以使用这些信息来加入车道线的先验约束——平滑性和刚性。

我们将相邻行上分类的L1范数定义为平滑性,希望车道线位置在相邻行上是相近且平滑变化的。

将相邻行间的二阶差分定义为车道线的形状。由于车道线大多是直线,因此其二阶差分为0,所以约束其二阶差分与0的差异可以在优化过程中使得预测出的车道线更直。

具体公式符号定义请见我们的文章。

由于分割方法得到的为车道线的二值分割图,其结构是逐像素建模,因此几乎无法实现对上述高层语义(平滑、刚性)层级的约束,这也是我们方法的另一个优点。

实验结果

我们在Tusimple和CULane上都进行了测试,都验证了我们的方法可以在超快速度下达到接近或超越SOTA方法的性能。

Tusimple数据集结果

可以看到在Tusimple数据集上我们的方法比SCNN [1]快了41.7倍, 比SOTA的SAD[2]也快了4倍。但是Tusimple数据集上大家性能也比较饱和了,没有达到SOTA的水平。

CULane数据集结果

在另一个更为挑战性的CULane数据集上,我们的方法同时达到了最快的速度和最好的精度。SOTA性能的模型能跑到175帧,轻量级的模型甚至可以跑到322帧。

这个速度是我们在GTX 1080Ti上测的,在20系或者Tesla显卡上应该速度会更快。但已经这么快了,还要啥自行车 : )

目前代码和模型都已开源,希望大家多多指教!

论文:https://arxiv.org/abs/2004.11757

代码:https://github.com/cfzd/Ultra-Fast-Lane-Detection

参考

  1. https://arxiv.org/abs/1712.06080

  2. https://arxiv.org/abs/1908.00821

觉得有用麻烦给个在看啦~  

ECCV2020|超快的车道线检测,代码模型已开源相关推荐

  1. ECCV 2020 | 超快的车道线检测

    本文转载自知乎,已获作者授权转载. 链接:https://zhuanlan.zhihu.com/p/157530787 很高兴和大家分享一下我们刚刚被 ECCV 2020 接收的新工作:一种超快速的车 ...

  2. ECCV2020 | Gen-LaneNet:百度Apollo提出两阶段的3D车道线检测算法,已开源

    点击上方"3D视觉工坊",选择"星标 干货第一时间送达 这篇文章收录于ECCV2020,是百度Apollo团队发表的关于3D车道线检测的文章,针对3D-LaneNet做了 ...

  3. 智慧交通day03-车道线检测实现09:车道线检测代码汇总(Python3.8)

    import cv2 import numpy as np import matplotlib.pyplot as plt #遍历文件夹 import glob from moviepy.editor ...

  4. Python+OpenCV实现车道线检测代码部分

    实验时 使用的是python3.7+cv2,直接在Anaconda上面直接安装,代码在Jupyter上跑的,图片是老师给的(-.-) 经过各个滤波后,划定区域 : 最终合成的图像 : 最后实际上是先把 ...

  5. 一个3D车道线检测方法PersFormer及其开源OpenLane数据集

    来源丨计算机视觉深度学习和自动驾驶 arXiv上2022年3月论文"PersFormer: 3D Lane Detection via Perspective Transformer and ...

  6. CVPR 2022 3月7日论文速递(17 篇打包下载)涵盖 3D 目标检测、医学影像、图像去模糊、车道线检测等方向

    CVPR2022论文速递系列: CVPR 2022 3月3日论文速递(22 篇打包下载)涵盖网络架构设计.姿态估计.三维视觉.动作检测.语义分割等方向 CVPR 2022 3月4日论文速递(29 篇打 ...

  7. AUTOSAR从入门到精通100讲(二十二)-手把手教你写Demo系列之车道线检测

    本文是一篇从零开始做车道线检测Demo的教学式文章,从场景的定义到模型微调的输出,描述车道线Demo式例程中在每个环节需要做的工作,以及中途可能会遇到的各种问题. 1 场景维度定义 根据任务需求,需要 ...

  8. 基于OpenCV 的车道线检测方法

    车道线检测是图像处理运用到无人驾驶的一项技术,目前也过渡到了部分汽车上,高速公路的自动车道保持就是一个应用. 最近研究了两个基于opencv的车道检的代码,先放链接: A.Udacity车道线检测代码 ...

  9. 车道线检测的学习笔记

    1 前言 我们准备开始做车道线检测的项目,搭建一个帅气的车道线检测的模型- 2 模型 使用DeepLabv3+: 3 备注 3.1 CPNet的想法还是挺不错的 CPNet指的是华科在 CVPR 20 ...

最新文章

  1. python3写unicode编码到文件
  2. python爬虫简单实例-最简单的Python爬虫案例,看得懂说明你已入门,附赠教程
  3. Java实现冒泡排序及其优化
  4. eclipse 直接去手机中拖文件
  5. java9新特性 2017_Java 9 ← 2017,2019 → Java 13 ,来看看Java两年来的变化
  6. 学java的就业方向_学习Java的就业前景怎么样
  7. opencv 轮廓特征
  8. SetDll把Dll文件注入到.exe应用程序中
  9. RDA实现SQL CE与SQL Server间数据存取
  10. GBK编码/GBK内码/Big5
  11. veu的常用指令(复习使用)
  12. 客户端负载均衡Ribbon
  13. 【VMware】Assuming drive cache: write through
  14. 利用python爬取贝壳网租房信息
  15. PDF文档用什么软件打开?
  16. 一款牛逼的Java工具类库,GitHub星标11.6k+
  17. 和谐平等_并非所有观点都是平等的
  18. PS2手柄模控制ESP32控制舵机 ArduinoPWM控制
  19. Spring Cloud入门-Gateway服务网关(Hoxton版本)
  20. WinXpSp3升级后不能访问 codeproject 站点的问题

热门文章

  1. 技术图文:集合技术在求解算法题中的应用
  2. Matlab与线性代数 -- 矩阵的重组5
  3. Matlab与线性代数 -- Pascal矩阵
  4. OTSU 二值化的实现
  5. IDEA HDFS客户端准备
  6. 【Codeforces】401C Team (01010110...)
  7. 无代码的时代真的来了吗?
  8. 新战场路在何方——详解360金融数据中台之旅
  9. 这可能是Python面向对象编程的最佳实践
  10. 人工智能的浪潮中,知识图谱何去何从?