简述车道线检测

article/2025/10/2 21:32:11

针对车道线检测的任务,我们需要弄清楚几个问题:

1. 车道线的表示形式?

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

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

2. 神经网络推理到哪一步?

  • 图像分割方案倾向于像素点的分类,该像素点是否属于车道线标识并对标识类别进行判断;
  • 图像检测方案倾向于抽象出分割边界线,在设定的一系列anchor中判断是否存在车道线,以及回归车道线的位置参数。

逐像素的车道线标识本身 or 表征出抽象的车道分隔边界线

数据集

1. 需要各场景类别的数据平衡,比如高速公路,辅路,盘山路,夜晚,雨天等数据

2. 检查筛选出质量较好的图片,比如高速公路夜间的数据和雨中驾驶的视频较为模糊

3. 相近的图片抽帧标注,可以每10张抽取1张,比如低速的多张图片相似会造成准确率虚高

4. 增广小类别的图片,比如查看车道线系数直方图,再小幅度旋转使每个系数分布更为合理

5. 缩放并归一化数据,加速收敛

开源车道线数据集包括:

Caltech:一共约1.2k张图片,场景比较简单,且视角较好;图片大小:640x480,如下图

v2-6455e6b33f88a965f69b64c9792048a9_b.jpg

VPGNet:一共20k张图片,包含白天(非雨天、雨天、大雨天)、夜晚的数据,同时包含了各种车道线类型,以及其他不同类型的车道标识(左转箭头、直行箭头、斑马线等等),如下图所示:

TuSimple:一共72k张图片,位于高速路,天气晴朗,车道线清晰,特点是车道线以点来标注;图片大小:1280x720,如下图

v2-50bc91351e4e50bd2fc4c839840ad289_b.jpg

CULane:一共98k张图片,包含拥挤,黑夜,无线,暗影等八种难以检测的情况,最多标记4条车道线;图片大小:1640x590,如下图

v2-93224d9d3ba2fe5c2e242e3c236f88ac_b.jpg

BDD100k:120M张图片, 包含美国4个区的白天、黑夜各种天气状况,二维8类别车道线;图片大小:1280x720,如下图

v2-a18e606b91ee1bf2ed8e9d9a6880fc77_b.jpg

ApolloScape:140k张图片,特点是车道线以掩码的形式标注,包含2/3维28个类别;图片大小:3384x2710,如下图

v2-2a65bd638e3e465eccbe46a96102c76b_b.jpg

CurveLanes:华为弯道检测数据集 135k张图片, 采用三次样条曲线手动标注所有车道线,包括很多较为复杂的场景,如S路、Y车道,还有夜间和多车道的场景。分为训练集10万张,验证集2万张,测试级3万张;图片大小:2650x1440,如下图

v2-5d7e3f09c04b6f2b340c7c85b244f5b8_b.jpg

传统图像方法

通过边缘检测滤波等方式分割出车道线区域,然后结合霍夫变换、RANSAC等算法进行车道线检测。这类算法需要人工手动去调滤波算子,根据算法所针对的街道场景特点手动调节参数,工作量大且鲁棒性较差,当行车环境出现明显变化时,车道线的检测效果不佳。主流方式如下:

1. 基于霍夫变换的车道线检测;

2. 基于LSD直线的车道线检测;

3. 基于俯视图变换的车道线检测;

4. 基于拟合的车道线检测;

5. 基于平行透视灭点的车道线检测;

难点:

1. 应用场景受限;霍夫直线检测方法准确但不能做弯道检测,拟合方法可以检测弯道但不稳定,仿射变换可以做多车道检测但在遮挡等情况下干扰严重。

2. 透视变换操作会对相机有一些具体的要求,在变换前需要调正图像,而且摄像机的安装和道路本身的倾斜都会影响变换效果。

v2-fb8d6246ae2b1da0b30fca137668a400_b.jpg

深度学习方法

车道线检测的应用场景具有时序信息特性,为了利用时序特征通常会引入RNN模块,加上Encoder-Decoder的形式已经成为CNN特征提取的标配,所以一般的做法是对Encoder提取的Features进行进一步加工,提取连续帧带来的历史信息。或者借助一些额外的相关业务更好的引导车道线的回归。主流深度学习的车道线检测方法:包括二值语义分割产生掩码图部分和掩码图的线拟合部分。

二值语义分割主要采用CNN方法并引入一些方式提高语义分割精度,在线的拟合阶段可以采用学习到的转换矩阵先将分割结果转换为鸟瞰图视角,然后,采用均匀取点+最小二乘法拟合,拟合方程可选三次方程。

1.《Robust Lane Detection from Continuous Driving Scenes Using Deep Neural Networks》:采用CNN+RNN的方式,在Encoder和Decoder之间插入LSTM模块,对连续帧的输入预测二值分割图。

2. 《Unifying Lane-Sensitive Architecture Search and Adaptive Point Blending》:采用CNN的方式,通过多尺度融合和输出的方式提高定位精度,最后采用一种类似于NMS方法,将低层输出中位置精度回归较高的点逐步向高层输出替换,得到最后融合优化的车道线点输出。

3. 《Heatmap-based Vanishing Point boosts Lane Detection》:采用Encoder-Decoder结构,在车道线的预测Head以外,增加了一个Head用于消失点的预测;这种结构将特征提取阶段的输出和车道线预测的输出进行信息融合,再经过卷积层的处理后,输出消失点的预测结果。(类似VPGNet)

4. 《Lane Detection Model Based on Spatio-Temporal Network with Double ConvGRUs》:采用Encoder+RNN+Decoder的方式,在Encoder和Decoder之间插入GRU模块,同样对连续帧的输入预测一张二值图。

5.《RESA: Recurrent Feature-Shift Aggregator for Lane Detection》:采用Encoder-Decoder的方式,在Encoder和Decoder部分之间,插入RESA模块,增强空间结构信息在全局的传播能力。(类似SCNN)

6. 《Real-Time LaneDtection Networks for Autonomous Driving》:采用Encoder-LSTM的方式,分割出车道线后采用聚类算法将不同的车道线进行区分,然后再通过一个HNet变换到鸟瞰视角去检测车道线。

7. 《Key Points Estimation and Point Instance Segmentation Approach for Lane Detection》:PiNet算法将车道线用点表示转换成点的回归问题,然后使用聚类算法区分不同车道线上的点和去掉一部分多余的点。

8. 《Ultra Fast Structure-aware Deep Lane Detection》:将车道线检测定义为寻找车道线在图像中某些行的位置的集合,即基于行方向上的位置选择、分类。

区别于上述车道线检测和曲线拟合分开两步去做的方式,还有一种端到端的车道线拟合,输入图片,输出车道线曲线模型参数。比如:《End-to-end Lane Detection through Differentiable Least-Squares Fitting》

性能指标

在评判True or False时,主要有两种方式:

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

面临挑战

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

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

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

欢迎关注小编公众号,最新文章同步更新。

 


http://chatgpt.dhexx.cn/article/QTXZQyE8.shtml

相关文章

PaddleSeg:车道线检测

向AI转型的程序员都关注了这个号👇👇👇 0.1 任务 要求参赛者利用提供的训练数据,设计一个车道线检测和分类模型,来检测测试数据中车道线的具体位置和类别。样例示范: 0.2 数据集描述 本次赛题数据集包括x张…

3D车道线检测杂记

3D车道线检测相关论文学习 单目 一、3D-LaneNet: End-to-End 3D Multiple Lane Detection-ICCV2019 0 前言 这篇文章是第一篇通过单目前视相机直接预测3D车道线的论文。 一般想得到3D车道线信息有两种途径: 一种是利用离线高精度地图以及准确的自车定位信息&a…

车道线检测-LSTR-论文学习笔记

论文:《End-to-end Lane Shape Prediction with Transformers》代码:https://github.com/liuruijin17/LSTR地址:https://arxiv.org/abs/2011.04233v2内容:使用 CNNTransformer,基于三次曲线拟合车道线 整体结构 模型输…

车道线检测学习总结

之前学习了一个非常酷炫的车道线检测项目:Advanced Lane Finding Project 现在写一个学习笔记,备注一下,方便以后复习: 项目总体流程如下: 第一步,采用棋盘对相机进行校正: 第二步,对…

2D车道线检测算法总结

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

车道线检测-Eigenlanes 论文学习笔记

论文:《Eigenlanes: Data-Driven Lane Descriptors for Structurally Diverse Lanes》 代码:https://github.com/dongkwonjin/Eigenlanes 核心:在 Eigenlane Space 中检测车道线 创新点 Eigenlane:数据驱动的车道描述符&#xff…

OpenCV的车道线检测

资源下载地址:https://download.csdn.net/download/sheziqiong/85604275 资源下载地址:https://download.csdn.net/download/sheziqiong/85604275 final_mark.py是最终,前面的都是一部分一部分测试的功能,用的是霍夫变换拟合&…

动手学无人驾驶(7):车道线检测

最近在研究视觉语义地图,需要进行车道线检测,发现这篇车道线检测论文效果蛮好的 (Ultra Fast Structure-aware Deep Lane Detection)。论文作者在知乎上已经介绍过了:https://zhuanlan.zhihu.com/p/157530787&#xff…

高级车道线检测

基于图像处理相关技术的高级车道线检测(可适用于弯道,车道线颜色不固定,路面阴影,亮光) pipeline: 1.校准摄像头的畸变,使拍摄照片能够较完整的反映3D世界的情况 2.对每一帧图片做透视转换(pers…

传统方法车道线标注及相关知识

目录 一、图像二值化处理 1.Sobel算子绝对值 2.Sobel算子 3.倾斜角度 4.HLS颜色空间 5.二值图结合 二、车道线分割 1.仿射变换 2.车道线直方图 3.滑动窗口寻找车道线 4.车道线拟合 5.车道线区域标注 一、图像二值化处理 主要目的是通过二值化图像,使得车…

学习笔记之车道线相关记录

一. 车道线相关的知识 &&1.标线的分类 以下分类来自于百科: 按照道路交通标线的功能划分为:指示标线、警告标线和禁止标线。 按标划方法可分为:白色虚线、白色实线、黄色虚线、黄色实线、双白虚线、双白实线、双黄虚线和双黄实线…

关于python 最简单封装实例

一、 #定义一个类 class Person: #init是定义类实例初始化函数 ,没有返回return def __init__(self,name,area): self.name name self.area area #类里面定义方法 def run(self): print(self.name) …

Python软件封装打包

作者:Naples 链接:https://www.zhihu.com/question/32703639/answer/165326590 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Python Tkinter打包封装的方法有:PyInstaller, py…

Python封装、继承和多态

Python 语言在设计之初,就定位为一门面向对象的编程语言,“Python 中一切皆对象”。同时,Python 也支持面向对象的三大特征:封装、继承和多态。 一、封装 封装(Encapsulation),即在设计类时&am…

python程序封装

python程序封装1 报错请执行pip install --upgrade setuptools 和 pip install --upgrade wheel 步骤如下: (1)安装pyinstaller,可以直接在cmd命令行中,输入命令“pip install pyinstaller”,安装pyinsta…

python封装程序

#终端/cmd命令下: 1.安装python Welcome to Python.org 2.安装pip pip PyPI 下载get-pip.py 在cmd窗口下执行,python */*/get-pip.py(*为文件所在位置) *如果安装好后出现 不是内部命令的情况 需要在环境中添加&#xff…

制作python包,封装成可用模块

制作python包,封装成可用模块 首先编写py程序: printtest.py #coding: utf-8 def test():print(print test)if __name__ __main__:test() 将以上.py文件做成python模块,需要在相同目录下创建setup.py文件,setup.py中输入配置信息: #cod…

Python 程序封装-打包成exe程序

Python 程序封装-打包成exe程序 前言一、 Python 打包工具—Pyinstaller二、打包具体过程1. 打包成仅包含一个独立的exe程序2. 打包成包含文件夹的程序,内有相关的依赖库(推荐)3. 其他的打包命令 三、注意事项 欢迎学习交流! 邮箱…

怎么python程序封装?此文详解

python程序封装1 步骤如下: (1)安装pyinstaller,可以直接在cmd命令行中,输入命令“pip install pyinstaller”,安装pyinstaller (2)进入py代码的保存目录,这里py代码放在“E:\python学习\python_work” (3)cmd,输入命令:e:,进入e盘 (4)继续输入:E:\pytho…

Python封装

在用新电脑做python的封装的时候,出现了一系列的问题。在这里简单写一下Python的封装的一些流程以及可能出现的问题和解决方法吧。 封装我选择的是pyinstaller 首先是安装pyinstaller:Python 默认并不包含 PyInstaller 模块,因此需要自行安…