车道线检测是自动驾驶中的一个基础模块,车道保持,自适应巡航,自动变道;对于全自动驾驶汽车后续的车道偏离或轨迹规划决策也很重要。

目前车道线检测主要有两种方案:传统方法深度学习

1.传统方法

(1)边缘检测+霍夫变换
方法流程:彩色图像转灰度,模糊处理,边缘检测,霍夫变换
这种方法一般能够检测出简单场景下的车辆目前行驶的两条车道线,以及偶尔的相邻车道(依赖前视相机的角度)。该方法可以利用霍夫变换的结果(线的斜率),进一步过滤出左右车道线。不过同时,该方法也依赖于边缘检测的结果,所以调参(边缘检测、霍夫变换)以及其他的trick(ROI选取等)很重要。

(2)颜色阈值
方法流程:将图像转颜色空间(一般HSV),对新的color space中的各个通道设置阈值(大于阈值取值为1,小于取值为0),得到结果。
该方法依赖于各通道的阈值的选取,只需要调整几个阈值参数,但有时候鲁棒性会较差,例如当前车辆前方的车辆可能会被全部置1。

(3)透视变换
方法流程:获取透视变换矩阵,透视变换,车道线检测
该方法的优点是将前视摄像头抓拍的图像转为鸟瞰图,能够检测到多条线。其关键在于透视变换矩阵的准确性(不考虑转换后的车道线检测),对于转换后的鸟瞰图,可以通过上述两种方式检测车道线。

边缘检测、k-Means、高斯概率模型

(1)Udacity车道线检测

  • 相机标定、openCV

原因:sensor制造误差、非线性径向畸变、切向畸变

参考:https://zhuanlan.zhihu.com/p/87334006; https://blog.csdn.net/a083614/article/details/78579163

  • ROI选取,图像透视变换,把图像转换为俯视图
  • 二值化并且找到车道线


滑动窗口与多项式拟合

  • 最小二乘法拟合中心点形成车道线

(2)基于投影的车道线检测

  • 图片标定、ROI透视

原图:

二值化:

  • 把二值化的点投影到横坐标上

选取对应的最大值:

  • Ransac(随机抽样一致性算法)多项式拟合附近的点

投影回原图效果:

在实际场景中,传统方法的鲁棒性不好,除去光照和邻近车辆的影响外,车道中间的指示箭头和人行道也是此类算法很难处理的挑战。

2.深度学习

深度学习的浪潮使车道线检测有了很大进步

车道线检测工作的局限性(持续,即目前为止普遍存在):

车道线检测工作的baseline并不明确,不同的方法与不同的场景应用都有各自的局限性。例如:

  • 输出类型:mask掩码/点集/矢量线条
  • 实例化:每个车道线是否形成实例
  • 分类:是否对车道线进行了分类(单白、双黄等)
  • 提前定义的参数:是否只能检测固定数量的车道线
  • 车道标记:是否对车道上的行车标记也做了检测

这会影响到数据的标注和网络的输出形式,而且最终需要的是车道线在世界坐标系下的方程。而神经网络更适合提取图像层面的特征,直接回归方程参数有较多限制。所以,网络推理输出后需要相对复杂的后处理去解决真实坐标的问题。

车道检测问题通常被表述为一个分割任务,其中,给定一个输入图像,输出是一个具有每个像素预测的分割图。

性能指标:

在评判Ture或False时,主要有两种方式:

  • end point:通过判断线的端点间的距离及其包围面积是否超过阈值
  • IOU:直接计算IOU的重叠面积

IOU=(A∩B)/(A∪B)

IOU=SI/(SA+SB-SI)

工作pipeline:

目前的主流方法pipeline分为多阶段与单阶段。

  • 多阶段可以分为两个部分,二值语义分割产生掩码图和对掩码图进行线的拟合。其中,二值语义分割主要采用CNN方法,并通过SCNN(Spatial As Deep: Spatial CNN for Traffic Scene Understanding)、CNN+RNN(Robust Lane Detection from Continuous Driving Scenes Using Deep Neural Networks)、GAN(EL-GAN:Embedding Loss Driven Generateive Adversarial Networks for Lane Detection)等方法来提高语义分割精度。而对掩码图的线的拟合,有采用学习到的转换矩阵先将分割结果转换为鸟瞰图视角,然后,采用均匀取点+最小二乘法拟合,拟合方程可选三次方程。
  • 对于单阶段方法,即是直接回归出线的参数,即在CNN上修改分支,使用特殊层将参数输出。

datasets:

  • 需要各场景类别的数据平衡,比如高速公路,辅路,盘山路,夜晚,雨天等数据
  • 检查筛选出质量较好的图片,比如高速公路夜间的数据和雨中驾驶的视频较为模糊
  • 相近的图片抽帧标注,可以每10张抽取1张,比如低速的多张图片相似会造成准确率虚高
  • 增广小类别的图片,比如查看车道线系数直方图,再小幅度旋转使每个系数分布更为合理
  • 缩放并归一化数据,加速收敛

常用的车道线检测数据集包括TuSimple, CULane, BDD100K等。其中TuSimple数据集共有7K张图片,场景为美国高速公路数据。CULane共有133K张数据,场景包含拥挤、黑夜等八种难以检测的情况,数据在北京采集。BDD100K共有120M张图片,数据集包含多种自动驾驶感知任务,数据集较新,算法采用度不高。(数据更新)

papers with code https://paperswithcode.com/task/lane-detection/latest#code


论文1:《LaneATT——Keep your Eyes on the Lane: Real-time Attention-guided Lane Detection》实时注意力引导车道检测

论文地址:

https://arxiv.org/pdf/2010.12035.pdf

Github地址:

https://github.com/lucastabelini/LaneATT

现有方法的不足之处:maintaining real-time efficiency

LaneATT:一种基于锚点的深车道单阶检测模型,它类似于其他一般的深目标检测器,使用锚点进行特征池化步骤

从安装在车辆上的前置摄像头接收作为输入的RGB图像:

输出是车道边界线(车道),为了生成这些输出,卷积神经网络(CNN),即主干,生成一个特征映射,然后合并该特征映射来提取每个锚点的特征。那些特征结合一组由注意力模块产生的全局特征。通过结合局部和全局特征,该模型可以更容易地使用来自其他车道的信息,这在闭塞或没有可见车道标志等情况下可能是必要的。最后,将组合的特征传递到全连接层,以预测最终的输出通道。

骨干网络从输入图像生成特征映射。随后,每个锚被投影到特征映射上。这个投影被用于聚合与注意力模块中创建的另一组特征相连接的特征。最后,使用得到的特征集,两个层,一个用于分类,另一个用于回归,进行最后的预测。

Reproducibility:

衡量模型效率:乘法累积操作(multiply-accumulate operations, mac)和帧数每秒(frames-per-second, FPS)

结论:

Tusimple:该方法获得了第二高的F1(仅0.02%的差异),同时比顶级F1方法(171 vs 30 FPS)快得多;

CULane:该方法在速度和准确性方面都在实时方法中达到高水平(与最先进的方法相比,前者的速度约为170 FPS);

在LLAMAS基准测试中获得了较高的F1(+93%)。

论文2:《Towards End-to-End Lane Detection: an Instance Segmentation Approach》面向端对端的车道检测 一种实例分割

论文地址:

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

Github地址:

https://github.com/MaybeShewill-CV/lanenet-lane-detection

  1. LaneNetH-Net两个网络模型

LanNet 是一种将语义分割和对像素进行向量表示结合起来的多任务模型,最后利用聚类完成对车道线的实例分割。H-Net 是有个小的网络结构,负责预测变换矩阵 H,使用转换矩阵 H 对同属一条车道线的所有像素点进行重新建模(使用 y 坐标来表示 x 坐标)。

LaneNet

实例分割任务→语义分割(LanNet 一个分支)和聚类(LanNet一个分支提取 embedding express, Mean-Shift 聚类)

Embedding branch :对像素进行嵌入式表示

Segmentation branch:二分类,判断像素属于车道线还是背景

训练得到 embedding 向量用于聚类

设计语义分割模型

1.处理遮挡问题:对车辆遮挡的车道线和虚线进行还原(估计);

2.解决样本分布不均衡问题(属于车道线的像素远少于属于背景的像素):使用了 bounded inverse class weight 对 loss 进行加权:

p 为对应类别在总体样本中出现的概率,c 是超参数(论文中是1.02)《A Deep Neural Network Architecture for Real-Time Semantic Segmentation》

像素embedding:

为了区分车道线上的像素属于哪条车道,embedding_branch 为每个像素初始化一个 embedding 向量,并且在设计 loss 时,使属同一条车道线的表示向量距离尽可能小,属不同车道线的表示向量距离尽可能大。

这部分的 loss 函数是由三部分组成:



C:车道线数量;Nc:属同一条车道线的像素点数量;μc :车道线的均值向量;xi 是像素向量(pixel embedding);[x]+=max(0,x)。

H-Net:

LaneNet的输出是每条车道线的像素集合,还需要根据这些像素点回归出一条车道线。传统的做法是将图片投影到 bird’s-eye view 中,然后使用 2 阶或者 3 阶多项式进行拟合。在这种方法中,变换矩阵 H 只被计算一次,所有的图片使用的是相同的变换矩阵,这会导致地平面(山地,丘陵)变化下的误差。

为了解决这个问题,论文训练了一个可以预测变换矩阵 H 的神经网络 H-Net,网络的输入是图片,输出是变换矩阵 H:

通过置 0 对转置矩阵进行约束,即水平线在变换下保持水平。(即坐标 y 的变换不受坐标 x 的影响)

转置矩阵 H 只有6个参数,因此H-Net的输出是一个 6 维的向量。H-Net 由 6 层普通卷积网络和一层全连接网络构成,其网络结构如图所示:

结论:

H-Net比用固定的转换矩阵要好,用3阶多项式拟合要比2阶好,用了透视变换比不用好。

车道线识别深度学习面临的挑战:

(1)车道线这种细长的形态结构,需要更加强大的高低层次特征融合,来同时获取全局的空间结构关系,和细节处的定位精度。

(2)车道线的形态有很多不确定性,比如被遮挡,磨损,以及道路变化时本身的不连续性。需要网络针对这些情况有较强的推测能力。

(3)车辆的偏离或换道过程会产生自车所在车道的切换,车道线也会发生左/右线的切换。一些提前给车道线赋值固定序号的方法,在换道过程中会产生歧义的情况。

车道线检测传统方法深度学习方法概览+两篇论文领读LaneATT+LaneNet相关推荐

  1. 车道线检测传统方法笔记

    车道线检测是自动驾驶中的一个基础模块,车道保持,自适应巡航,自动变道:对于全自动驾驶汽车后续的车道偏离或轨迹规划决策也很重要. 目前车道线检测主要有两种方案:传统方法与深度学习. 1.传统方法 (1) ...

  2. 计算机视觉——车道线(路沿)检测

    目录 系列文章目录 一.实验内容与方法 二.视频的导入.拆分.合成 1.视频时长读取 2.视频的拆分 3.视频的合成 三.图像处理/边缘检测 0.尝试 1.图像处理->边缘检测(原理) 2.Ca ...

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

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

  4. 2D车道线检测算法总结

    关于2D车道线检测算法的总结主要分为两类:一类基于语义分割来做,一类基于anchor和关键点来做.还有基于曲线方程来做的,但是落地的话还是上面两种为主. 一.基于语义分割的车道线检测算法 1.Lane ...

  5. 【深度学习】实战教程 | 车道线检测项目实战,霍夫变换 新方法 Spatial CNN

    此文按照这样的逻辑进行撰写.分享机器学习.计算机视觉的基础知识,接着我们以一个实际的项目,带领大家自己动手实践.最后,分享更多学习资料.进阶项目实战,这部分属于我CSDN上的专栏,最后会按照顺序给出相 ...

  6. 基于深度强化学习的车道线检测和定位(Deep reinforcement learning based lane detection and localization) 论文解读+代码复现

    之前读过这篇论文,导师说要复现,这里记录一下.废话不多说,再重读一下论文. 注:非一字一句翻译.个人理解,一定偏颇. 基于深度强化学习的车道检测和定位 官方源码下载:https://github.co ...

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

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

  8. 【camera】自动驾驶感知系统实现(车道线检测和拟合、目标检测与跟踪、道路可行驶区域分割、深度估计、图像视野到BEV空间映射、像平面到地平面映射)

    自动驾驶感知系统实现(车道线检测和拟合.目标检测与跟踪.道路可行驶区域分割.深度估计.图像视野到BEV空间映射.像平面到地平面映射) 项目下载地址:项目下载地址 推理引擎下载地址:推理引擎下载地址 支 ...

  9. 自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法

    自动驾驶系统进阶与项目实战(九)基于行锚框和全局信息的深度学习车道线检测方法 目前多数基于深度学习的车道线检测方法通常把车道线的识别问题处理为车道线像素分割问题,单纯的像素级语义分割模型的推理的实时性 ...

最新文章

  1. postgreSQL外键引用查询 查询外键被那些表占用
  2. KubeShere安装Redis
  3. FckEditor-未能映射路径/UserFiles/image/
  4. Linux下安装rlwrap
  5. 关于web性能一些特性汇总
  6. HDU 1402——A * B Problem Plus
  7. 【读书笔记】MSDN 上关于加密解密的一个例子
  8. 横流式冷却塔计算风量_10T-1000T冷却塔厂家批发零售
  9. 201621123053《Java程序设计》第三周学习笔记文章
  10. 现有Android项目中集成Flutter/Flutter混合开发实战(一)
  11. python分析掷骰子游戏
  12. uniapp对接极光推送
  13. labwindows制作特殊图形面板
  14. C++之常用集合(总结)
  15. 盘点中国人民大学与加拿大女王大学金融硕士项目这个让在职学员梦开始的地方
  16. 四年级计算机考试反思,小学四年级信息技术考试质量分析报告
  17. MySQL导入数据导致C盘空间不足
  18. torchaudio安装与实例
  19. 怎么把exe转成手机的可执行文件
  20. 微信小程序实战 (WXML:小程序版HTML)

热门文章

  1. time、date 和 microtime函数区别
  2. Android OpenCV + tess-two 实现身份证识别
  3. atomiclong 初始化_突击并发编程JUC系列-原子更新AtomicLong
  4. 优秀文章收藏(慢慢消化)持续更新~
  5. Loadrunner不能录制自带的WebTours
  6. 【读书笔记】软件需求第3版
  7. Python关键字参数和可变参数
  8. 微服务项⽬整合SwaggerUI3.0
  9. Linux创建目录和文件 mkdir、touch、cp、rm、mv 和 ln命令
  10. ps处理图片成灰色图