BEV和单目图像车道线检测方法总结
共 6790字,需浏览 14分钟
·
2023-07-28 07:04
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
编者荐语
文章主要对主流的车道线检测(包括BEV视角和图像视角)方法进行总结。由于基于深度学习的方法性能远超传统方法,所以文章只总结了基于学习的方法。
作者丨wanghy@知乎
链接丨https://zhuanlan.zhihu.com/p/551743843
文中车道线检测有些是有高度的3D检测,有些没有高度的BEV检测,统一标识了BEV,没有特别区分是否预测高度。主要分了六大类,包括基于分割的方法、基于关键点的方法、基于row-wise的方法、基于多项式回归的方法、基于anchor的方法和直接输出实例的方法。
1基于分割和辅助实例化信息的方法:
-
HDMapNet (BEV): 通过MLP得到视觉bev特征,通过Pointpillar得到激光bev特征,concat得到最终bev feature。在bev feature上学习语义分割、实例分割instance embedding和方向预测direction prediction,并通过后处理得到语义要素;后处理得到的线会出现闭环; -
3D-LaneNet+ (BEV): 将图像划分成格子,每个格子进行二分类(判断是否有线经过),另外,对有线的格子回归线段的横向偏移、角度(N个bins分类+offset微调)、高度偏移和Embedding vector(用于把曲线小片段聚合成车道线曲线)。在特征学习上,沿用了3D-LaneNet,都是两路的path way。只不过相机外参俯仰角、安装高度直接输入而不是模型预测。 -
LaneAF (Affinity fields): 输出binary seg, 横纵向affinity fields,分别表示:在每行中,每个前景像素位于它所属车道线中心的左边还是右边、当前像素相较于上一行的车道线中心,是在左边还是右边。最后通过这三个预测解码得到车道线实例。 -
Spatial CNN: 将车道线检测问题构建为一个多类别语义分割问题,提出spatial cnn方法来建模空间结构信息(信息向下/向上/向右/向左传播),来学习形状先验。该方法对细长的车道线检测很有效;该方法固定数量、需要聚类等处理、多类别分割模型较大,速度慢; -
RESA: 这篇文章是SCNN的升级,减少计算量。RESA整体思路和SCNN相同,包含四种OPs:”往上“、”往下“、”往左“、”往右“。区别是每个OPs会重复做K次,每次的stride会逐渐增加。 -
LaneNet:利用实例分割instance embedding管道来处理可变数量的线,但它需要推理后聚类来生成线实例。 -
SAD: 提出基于知识蒸馏(Knowledge Distillation)的车道线检测模型SAD,能增强CNN的特征表达能力。由于SAD只参与模型训练,因此不会增加推断时的计算复杂度。 -
ONCE-3DLanes (BEV): 在图像视图中回归车道的三维坐标,而不将特征地图转换为鸟瞰视图(BEV)。该方法还利用分割分支和空间上下文分支分别预测图像层面分割和像素位置偏移。最后通过几何处理得到3D车道线; -
分割方法局限:需要后处理,速度慢,实例区分有困难;它们还受到分割任务的局部性的影响,因此它们往往在遮挡或极端光照条件下表现更差。
2基于关键点的方法
-
RelayChain: 模型预测一个分割图来对前景和背景区域进行分类。对于前景区域中的每个像素点,通过前向分支和后向分支来恢复整个车道。每个分支解码传输图和距离图以产生移动到下一个点的方向,以及逐步预测relay station(下一个点)的步骤。实际上就是预测三种图:分割图、两侧间隔1m距离点的方向图和距离两个端点的距离图。最后通过分割图得到的关键点生成车道线实例,并通过NMS进行处理得到最终的车道线。 -
FOLOLane: 第一次将车道线检测做成局部的几何建模。模型只需要在受限的空间范围内,关注于比较简单的任务,使估计出来的局部曲线非常精确。输入一张图片,经过CNNs提取特征。把图片沿着高度等距离画线,距离为固定值,这样等分线和车道线曲线的交点就是关键点集合的子集。然后逐像素的预测四个map:key points, 关键点与上一个交点关键点在水平上的坐标偏差、关键点与当前交点关键点在水平上的坐标偏差、关键点与下一个交点关键点在水平上的坐标偏差。最后通过后处理连线。 -
PINet: 经过feature extraction layer,由关键点预测里最常用的2个Hourglass block构成,每个block有三个output branch,分别为confidence branch、offset branch、feature branch。最后通过后处理聚类得到实例车道线;关键点检测方法,相比分割网络而言,模型更小,计算开销也更小。 -
A Keypoint-based Global Association Network for Lane Detection: 提出了一个全局关联网络(GANet)来从一个新的角度描述车道检测问题,其中每个关键点直接回归到车道线的起点,而不是逐点扩展。关键点与其所属车道线的关联是通过预测它们在全局范围内与相应车道起点的偏移量来实现的。还提出了一种车道感知特征聚合器(LFA),它自适应地捕获相邻关键点之间的局部相关性。
3基于row-wise的方法
行分类方法是一种简单的基于输入图像为网格划分的检测方法。对于每一行,只选择一个最可能的一个网格。
-
Ultra Fast Structure-aware Deep Lane Detection: 对一张图在高度H 上划分为h个row-anchors, 在宽度W上划分为w个griding-cells,并将车道线检测问题变成一个分类问题:分类预测一个三维tensor Ch(w+1),P_i,j代表i_th车道线在j_th row-anchor上的概率分布向量。w+1是分类类别,而不是C。基于分割的方法计算量是HW(C+1),每个像素上都要做一次分类,类别数为C+1; 本文方法计算量是Ch(w+1),需要做C*h次分类,类别数为w+1。计算量下降了两个数量级。 -
CondLaneNet: 利用 conditional convolution,实现了更精细的车道线检测,并且引入了 Recurrent instance module 用于解决车道线分叉场景; -
局限:不能适用于横向车道线;由于每一行选择一个网格,所以需要对每条可能的车道线都要重复操作,这种方法还需要后处理;
4基于多项式回归的方法:
-
STSU (BEV): STSU采用基于DETR的方法学习每个object的query,然后基于MLP学习每根线的控制点(贝塞尔曲线表征线)和线之间的拓扑关系;学到的线分段,且有重叠; -
Rethinking efficient lane detection via curve Curve Modeling: 提出了基于可变形卷积的特征翻转融合,以利用驾驶场景中的对称特性。提出更合理的Bezier曲线采样损失,通过在一组均匀间隔的t值(T)处采样曲线,这意味着曲线长度相等相邻的样本点;先验对称假设过强; -
PolyLaneNet:直接学习预测具有简单全连接层的多项式系数,速度快,但是由于现有的数据集不均衡,造成一些偏差 -
LSTR: End-to-end Lane Shape Prediction with Transformers : 使用transformer块来预测基于 DETR 的端到端模式中的多项式,速度非常快420 FPS;该方法的多项式表征方式不适用于横向车道线。 -
局限:抽象因子难以优化;基于参数化拟合的方案虽然回归更少的参数,但对于预测的参数较为敏感,如高阶系数的错误预测可能造成车道线形状的变化。尽管基于参数化的方案有更快的推理速度,但在精度上有一定的瓶颈。大曲率弯拟合效果较差。
5基于anchor的方法:
-
Persformer (BEV): 通过关注以摄像机参数作为参考的相关前视图局部区域(deformable cross attention)来生成鲁棒的BEV特征,图像和BEV下的检测头分别采用LaneATT和3D-LaneNet的方法。2D和3D统一anchor设计,图像视角anchor是bev视角投影到图像中生成的; -
LineCNN: 采用经典的Faster R-CNN作为一级车道线检测器,但推理速度较低(<30 FPS); -
LaneATT: 采用了更通用的单阶段检测方法,用一条线作为 anchor,并且在整个图片的左右、下面设置了上千个 anchor,对车道线关于 anchor 的 offset 进行回归; -
3D-LaneNet (BEV): 3D车道线检测的开创性工作,采用spatial transformer network来完成特征的空间投影;在弯曲或挤压转弯的情况下,存在着特征转换不当的问题; -
Gen-LaneNet (BEV): 建立在3D-LaneNet之上,并设计了一个两阶段的网络来解耦分割器和三维车道预测头,第一阶段首先对 2D 层面进行图像分割,然后利用外参的真值将分割的图像投影到 virtual top view,最终预测得到 3D 下的结果;非端到端,性能很大程度取决于第一阶段二值分割的准确性,不利于极端天气情况。该算法对相机参数要求还是比较高的,当参数出现“些许”不准确时,检测结果会变得较差; -
CLGO (BEV): 设计了一个两阶段框架,首先预测摄像机姿态,然后利用相机姿态生成俯视图图像,进行精确的三维车道检测;非端到端,不易收敛; -
EigenLanes: 提出特征车道(eigenlane)的概念,把训练集中的所有车道线利用SVD降维的方法,提取出有代表性的特征车道;每条车道线可以由eigenlane的线性组合近似;在车道线检测时,先筛选出合适的eigenlane,然后基于近似的车道,回归出offset进行车道线的refine; -
CLRNet: 提出一种coarse-to-fine的机制,利用高层特征检出车道线,利用低层特征调节车道线位置;提出RoIGather模块(attention)获取全局语境信息; -
局限:需要预定义anchor,不够灵活,anchor很难适应各种复杂的车道线型;Y_ref的匹配,使得在一些复杂场景中的起点很难识别,会丢线。
6直接输出实例的方法:
-
VectorMapNet (BEV): 端到端矢量化高精地图学习pipeline, 采用板载传感器观测,并预测BEV视角中一组稀疏的折线基元,以对高精地图的几何形状进行建模。利用折线作为基元来建模复杂的地图元素,并通过两步来解析几何元素:地图元素检测器和折线生成器,分别是sparse cross attention(element query and bev feature)和自回归的点列回归transformer; -
STSU (BEV): STSU采用基于DETR的方法学习每个object的query,然后基于MLP学习每根线的控制点(贝塞尔曲线表征线)和线之间的拓扑关系;学到的线分段,且有重叠; -
HRAN (BEV): 它首先迭代找到每条车道线的起点,然后对于每条车道线,迭代地绘制沿该线的下一个顶点。这两个RNN以分层方式进行组织。提出了折线损失的想法(双向最近点距离),以鼓励神经网络输出结构化折线。 -
DagMapper (BEV): 该方法要解决HRAN不能解决的分叉、合并场景,它接受激光雷达强度图并输出DAG(有向无环图)。DAGMapper的核心还有一个循环卷积头,它迭代地关注以最后一个预测点为中心的裁剪特征图补丁,并预测下一个点的位置。变化之处在于它还预测了点的状态为合并,派生或继续。 -
局限:目前还缺少一个能够适用于城区各种类型车道线或者矢量元素的矢量化表征方法
7参考
[1] https://zhuanlan.zhihu.com/p/391718860
[2] https://zhuanlan.zhihu.com/p/355305715
[3] https://www.zhihu.com/people/chongwang-88/posts
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~