针对车道线检测的任务,我们需要弄清楚几个问题:
1. 车道线的表示形式?
这会影响到数据的标注和网络的输出形式,而且最终需要的是车道线在世界坐标系下的方程。而神经网络更适合提取图像层面的特征,直接回归方程参数有较多限制。所以,网络推理输出后需要相对复杂的后处理去解决真实坐标的问题。
2. 神经网络推理到哪一步?
逐像素的车道线标识本身 or 表征出抽象的车道分隔边界线
1. 需要各场景类别的数据平衡,比如高速公路,辅路,盘山路,夜晚,雨天等数据
2. 检查筛选出质量较好的图片,比如高速公路夜间的数据和雨中驾驶的视频较为模糊
3. 相近的图片抽帧标注,可以每10张抽取1张,比如低速的多张图片相似会造成准确率虚高
4. 增广小类别的图片,比如查看车道线系数直方图,再小幅度旋转使每个系数分布更为合理
5. 缩放并归一化数据,加速收敛
开源车道线数据集包括:
Caltech:一共约1.2k张图片,场景比较简单,且视角较好;图片大小:640x480,如下图
VPGNet:一共20k张图片,包含白天(非雨天、雨天、大雨天)、夜晚的数据,同时包含了各种车道线类型,以及其他不同类型的车道标识(左转箭头、直行箭头、斑马线等等),如下图所示:
TuSimple:一共72k张图片,位于高速路,天气晴朗,车道线清晰,特点是车道线以点来标注;图片大小:1280x720,如下图
CULane:一共98k张图片,包含拥挤,黑夜,无线,暗影等八种难以检测的情况,最多标记4条车道线;图片大小:1640x590,如下图
BDD100k:120M张图片, 包含美国4个区的白天、黑夜各种天气状况,二维8类别车道线;图片大小:1280x720,如下图
ApolloScape:140k张图片,特点是车道线以掩码的形式标注,包含2/3维28个类别;图片大小:3384x2710,如下图
CurveLanes:华为弯道检测数据集 135k张图片, 采用三次样条曲线手动标注所有车道线,包括很多较为复杂的场景,如S路、Y车道,还有夜间和多车道的场景。分为训练集10万张,验证集2万张,测试级3万张;图片大小:2650x1440,如下图
通过边缘检测滤波等方式分割出车道线区域,然后结合霍夫变换、RANSAC等算法进行车道线检测。这类算法需要人工手动去调滤波算子,根据算法所针对的街道场景特点手动调节参数,工作量大且鲁棒性较差,当行车环境出现明显变化时,车道线的检测效果不佳。主流方式如下:
1. 基于霍夫变换的车道线检测;
2. 基于LSD直线的车道线检测;
3. 基于俯视图变换的车道线检测;
4. 基于拟合的车道线检测;
5. 基于平行透视灭点的车道线检测;
难点:
1. 应用场景受限;霍夫直线检测方法准确但不能做弯道检测,拟合方法可以检测弯道但不稳定,仿射变换可以做多车道检测但在遮挡等情况下干扰严重。
2. 透视变换操作会对相机有一些具体的要求,在变换前需要调正图像,而且摄像机的安装和道路本身的倾斜都会影响变换效果。
车道线检测的应用场景具有时序信息特性,为了利用时序特征通常会引入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时,主要有两种方式:
(1)车道线这种细长的形态结构,需要更加强大的高低层次特征融合,来同时获取全局的空间结构关系,和细节处的定位精度。
(2)车道线的形态有很多不确定性,比如被遮挡,磨损,以及道路变化时本身的不连续性。需要网络针对这些情况有较强的推测能力。
(3)车辆的偏离或换道过程会产生自车所在车道的切换,车道线也会发生左/右线的切换。一些提前给车道线赋值固定序号的方法,在换道过程中会产生歧义的情况。
欢迎关注小编公众号,最新文章同步更新。