车道线检测论文
车道线检测论文
本文将对论文 Towards End-to-End Lane Detection: an Instance Segmentation Approach 进行解读。这篇论文是于2018年2月挂在arxiv上的。
文中提出了一种端到端的车道线检测算法,包括LaneNet和H-Net两个网络模型。其中,LaneNet是一种将 语义分割 和 对像素进行向量表示 结合起来的多任务模型,负责对图片中的车道线进行 实例分割 ;H-Net是由卷积层和全连接层组成的网络模型,负责预测转换矩阵H,使用转换矩阵H对属于同一车道线的像素点进行回归(我的理解是对使用坐标y对坐标x进行修正)。
根据论文中的实验结果,该算法在图森的车道线数据集上的准确率为96.4%,在NVIDIA 1080 TI上的处理速度为52FPS。
如图1所示,对于同一张输入图片,LaneNet输出实例分割的结果,为每个车道线像素分配一个车道线ID,H-Net输出一个转换矩阵H,使用转换矩阵H对车道线像素进行修正,并对修正的结果拟合出一个三阶的多项式作为预测得到的车道线。
论文中将实例分割任务拆解为 语义分割 和 聚类 两部分,如图2所示,LaneNet中decoder分为两个分支,Embedding branch对像素进行嵌入式表示,训练得到的embedding向量用于聚类,Segmentation branch负责对输入图像进行语义分割(对像素进行二分类,判断像素属于车道线还是背景)。最后将两个分支的结果进行结合得到实例分割的结果。
在设计语义分割模型时,论文主要考虑了以下两个方面:
1.在构建label时,为了处理遮挡问题,论文对被车辆遮挡的车道线和虚线进行了还原;
2. Loss使用 交叉熵 ,为了解决样本分布不均衡的问题(属于车道线的像素远少于属于背景的像素),参考论文 ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation ,使用了boundedinverse class weight对loss进行加权:
其中,p为对应类别在总体样本中出现的概率,c是超参数(ENet论文中是1.02,使得权重的取值区间为[1,50])。
为了区分车道线上的像素属于哪条车道,embedding_branch为每个像素初始化一个embedding向量,并且在设计loss时, 使得属于同一条车道线的像素向量距离很小,属于不同车道线的像素向量距离很大 。
这部分的loss函数是由两部分组成:方差loss(L_var)和距离loss(L_dist):
其中,x_i为像素向量,μ_c为车道线的均值向量,[x]+ = max(0,x)
为了方便在推理时对像素进行聚类,在图4中实例分割loss中设置δ_d > 6*δ_v。
在进行聚类时,首先使用mean shift聚类,使得簇中心沿着密度上升的方向移动,防止将离群点选入相同的簇中;之后对像素向量进行划分:以簇中心为圆心,以2δ_v为半径,选取圆中所有的像素归为同一车道线。重复该步骤,直到将所有的车道线像素分配给对应的车道。
LaneNet是基于 ENet 的encoder-decoder模型,如图5所示,ENet由5个stage组成,其中stage2和stage3基本相同,stage1,2,3属于encoder,stage4,5属于decoder。
如图2所示,在LaneNet中,语义分割和实例分割两个任务 共享stage1和stage2 ,并将stage3和后面的decoder层作为各自的分支(branch)进行训练;其中, 语义分割分支(branch)的输出shape为W*H*2,实例分割分支(branch)的输出shape为W*H*N,W,H分别为原图宽和高,N为embedding vector的维度;两个分支的loss权重相同。
LaneNet的输出是每条车道线的像素集合,还需要根据这些像素点回归出一条车道线。传统的做法是将图片投影到鸟瞰图中,然后使用2阶或者3阶多项式进行拟合。在这种方法中,转换矩阵H只被计算一次,所有的图片使用的是相同的转换矩阵,这会导致地平面(山地,丘陵)变化下的误差。
为了解决这个问题,论文训练了一个可以预测转置矩阵H的神经网络H-Net, 网络的输入是图片 , 输出是转置矩阵H :
由图6可以看出,转置矩阵H只有6个参数,因此H-Net的输出是一个6维的向量。H-Net由6层普通卷积网络和一层全连接网络构成,其网络结构如图7所示:
Curve fitting的过程就是通过坐标y去重新预测坐标x的过程:
LaneNet和H-Net是分别进行训练的。在论文的实验部分,两个模型的参数配置如下所示:
• Dataset : Tusimple
• Embedding dimension = 4
• δ_v=0.5
• δ_d=3
• Image size = 512*256
• Adam optimizer
• Learning rate = 5e-4
• Batch size = 8
• Dataset : Tusimple
• 3rd-orderpolynomial
• Image size =128*64
• Adam optimizer
• Learning rate = 5e-5
• Batch size = 10
车道线检测算法-Ultra-Fast-Lane-Detection
车道线检测算法通常分为两种类型:一种是基于基于视觉特征来做语义分割或者实例分割,例如 LaneNet 和 SCNN ;另一种是通过视觉特征来预测车道线所在位置的点,以此来解决 no-visual-clue 问题的模型,比如本文提到的 Ultra-Fast-Lane-Detection 。
offical github : paper : Ultra Fast Structure-aware Deep Lane Detection
下图展示了整个模型的结构,基本可以分为三个部分: Backbone 、 Auxiliary 部分和用于车道线候选点选择的 Group Classification 部分。可以看出,由于整个 pipeline 中参与最终 inference 的部分只进行了下采样而不像分割模型还进行了多轮的上采样,因此模型整体的计算量是相当低的,根据论文给出的结果可以达到 300FPS 。
Backbone 部分采用了较小的 ResNet18 或者 ResNet34 ,下采样到 4X 的部分作为最终的特征,这里其实是较为浅层的特征,一般分割模型要下采样到 16x 或者 32x 。论文里也提到了使用较大的感受野就可以达到不错的检测效果,这样就可以极大的提高模型的推理速度。
Auxiliary 部分对三层浅层特征进行了 concat 和上采样,用来进行实例分割。其目的是在训练过程中增强视觉特征,不参与推理。
Group Classification 部分如下所示,论文称之为 row-based selecting method based on global image features ,即在全局特征上进行行索引来计算候选点,这样的方法将先验假设融入到了车道线检测的任务中。
在分割任务上,最终的特征图的大小是 HxWxC 。分类是要沿着 C 方向的, C 方向的向量代表一个像素位置的特征向量属于哪一个类别;在本方法中,最终的特征图的大小是 hx(w+1)xC 。 h 是要在垂直方向上采样的行的数量( row anchor ), h 文章中使用的 Loss 函数分为三部分,分别是多分类损失 L_cls , 分割损失 L_seg 和车道结构化损失 L_str 。其中 L_cls 和 L_seg 是常用的分类、分割任务中常用的两种损失。 结构损失的目的是利用车道结构的先验知识来约束预测出来的车道线的形状。其中 L_sim 为相似度损失, L_shp 为形状损失。 相似度损失的出发点是同一个车道中,相邻的两个点之间的距离应该尽可能的近,这里使用 L1 范式来进行距离的约束。 形状损失的出发点是基于大多的的车道线都是直线,即使是曲线其大部分也是近似的直线。对于同一条车道线,在相邻 row achor 上的车道线的候选点的位置的选择应该尽可能的相近。理想的状况下它的值应该为 0 。 Loc 函数的含义是第 i 条车道的第 j 个 row anchor 中车道点的期望。 Prob 代表的是第 i 条车道的第 j 个 row anchor 中,第 k 个位置是车道点的概率。因为背景不被计算在内,因此 k 的取值从 1 开始。 论文给出 metric 结果如下所示,其评估硬件应该为 NVIDIA GTX 1080TI 。该方法在保证精度接近的情况下,极大的提升了推理速度,很适合实时检测的任务。 为了测试其真实的推理性能,我在 NVIDIA RTX 3070+CUDA11+Pytorch1.7 的环境性进行了测试。模型的 backbone 为 resnet18 ,输入尺寸为 (288, 800, 3) 的情况下, Ultra-Fast-Lane-Detection 的推理性能如下所示,单 batch 推理速度约为 350FPS ,其性能与论文给出的结果基本一致。 原文链接: Monocular 3D Lane Line Detection in Autonomous Driving — A Review 你好,车道线检测本质上是参数估计问题。在做实际工程时,要回答两个问题:1、车道线的Mathematical Model选什么?2、检测到的车道线到底属于什么类型?[搬运]自动驾驶中的单目 3D 车道线检测——综述
车道线检测是自动驾驶中最基本和关键的安全任务之一。这一重要感知任务的应用范围从 ADAS(高级驾驶员辅助系统)功能如车道保持到更高级别的自主任务,如与高清地图和轨迹规划的融合。给定在自动驾驶车辆上收集的输入 RGB 图像,车道线检测算法旨在在图像上提供结构化线的集合,每条线代表 3D 车道线的 2D 投影。这种算法本质上是二维的,因为输入和输出都驻留在同一个图像空间中。
另一方面, Monocular 3D Lane Line Detection 旨在从单个图像直接预测道路场景中车道的 3D 布局。具体来说,3D 车道线检测算法在相机坐标系的 3D 度量空间中输出一系列结构化的车道线。最近,学术界和工业界已经在探索这项任务的可行性和应用方面做出了一些努力。
一种简单的方法是使用逆透视映射 (IPM) 将 2D 车道检测结果重新投影回 3D 空间。IPM 是一种单应变换,可将透视图像变形为鸟瞰 (BEV) 图像。但是,IPM 假定地面平坦,并且是静态且经过良好校准的相机外在因素。在现实世界的驾驶环境中,道路很少是平坦的,并且由于速度变化或崎岖不平的道路,相机外在因素对车身运动很敏感。
因此,正确的方法是恢复检测到的 2D 车道线上每个点的深度。如果我们在推理时可以使用激光雷达等主动 3D 测量设备,则通过将 3D 测量分配给车道线点,2D 到 3D 的提升相对简单。如果我们在推理时只有相机图像,理论上,我们可以利用 单目深度估计 的最新进展来为车道线点分配深度值。虽然这种方法是通用的,但它的计算量很大。这篇博文回顾了更轻量级的方法来直接预测车道线点的 3D 位置。
单目 3D 车道线检测是对其他单目 3D 任务的补充,这些任务可以从单个 RGB 图像预测驾驶环境的 3D 信息,例如 单目 3D 对象检测 和 单目 BEV 分割 。也许并不奇怪,如何从单目图像中准确地恢复环境深度是这些领域的核心。
二维车道探测网络
在我们深入研究 3D 车道线检测算法之前,一个重要的 2D 车道线检测算法是重新审视 LaneNet ( Towards End-to-End Lane Detection: an Instance Segmentation Approach , IV 2018)。它的 2D 车道线检测性能已经被许多新算法超越,但在当时还是相当创新的,它的许多想法构成了 3D 车道线检测的基础。
它对 2D 车道线感知的贡献是提出了一种用于车道线语义分割的分段然后聚类方法——我们稍后将在 Semi-local 3D LaneNet 中再次讨论这个想法。更有趣的是,它还使用称为 H-Net 的轻量级网络直接从透视图像预测单应变换(以 3x3 矩阵 H 的形式)。单应变换矩阵 H 本质上是将采样的车道线点投影到 BEV 的 IPM,用于优化车道拟合后处理。这里的基本假设是车道应该由 BEV 空间中的三阶多项式完美描述。
LaneNet 采用的另一个隐含假设是车道线位于平坦的道路上。对于有坡度的非平坦道路,没有一个最好的 IPM 可以描述透视图像和 BEV 图像之间的转换,LaneNet 仍然使用单应变换逼近道路相机模型。
那么问题是——描述非平坦道路的最佳转换是什么?可能会争辩说,最好的转换应该准确地将地平线(相机图像中道路和天空之间的交汇点)映射到无限深度,或者您可能会争辩说最好的转换应该将最接近自我汽车的车道线投影到 3D 中的平行线空间。LaneNet 将最佳变换定义为一种映射,该映射使拟合曲线的重投影误差最小化。
3D 车道探测网络
普及单目 3D 车道线检测领域的开创性工作是来自通用汽车以色列研究中心的 3D-LaneNet (ICCV 2019)。 3D LaneNet 不需要诸如平坦地面假设之类的脆弱假设,它只假设对局部路面的摄像机滚动为零。与 2D LaneNet 一样,它也估计 2D 透视图像和 3D 局部道路平面之间的单应变换。与直接预测单应矩阵的 LaneNet 不同,3D LaneNet 预测唯一确定单应矩阵的 相机高度和间距。 这两个参数是以监督的方式学习的。
网络架构是从图像转换为 BEV 空间的双通路主干。这实际上让我想起了自监督深度学习 Sfm-learner (CVPR 2017) 中的 PoseNet 结构,它预测 6 DoF 自我运动,然后用它来扭曲相邻图像。
基于锚点的 3D 车道线表示
它不是直接预测车道线点的深度,而是首先预测相机的俯仰/高度,从而构建 道路投影平面 。道路投影平面根据摄像机安装俯仰角 ? _cam 和高度 h_cam 定义 。然后相对于该平面表示 3D 车道线。具体而言,车道线点由其在平面上的投影点(x,y)和高程 Δz 定义。
3D LaneNet 使用基于锚的车道预测头。与 groundtruth 车道关联的锚点是最接近车道 x 坐标 Y_ref=20 m 处的锚点。
每个车道线类型的预测总数为#anchor*(2*K+1)。K (K=6) 是每条车道线的预定义 y 位置的数量。K 个点中的每一个预测两个数字,与锚点 dx 的偏差和高度 z. 每个anchor也有一个conf分数来预测车道线的存在。
请注意,由于这种锚点设计,3D LaneNet 只能处理具有与自我汽车运动方向大致平行的车道线的正常拓扑。例如,它无法处理与自我汽车垂直的车道线。
半局部 3D LaneNet( 3D LaneNet+)
半局部 3D LaneNet 建立在 3D-LaneNet 的基础上,并增加了两个贡献,即处理更复杂拓扑的能力和不确定性预测。不确定性估计是相当标准的 任意不确定性 估计,这里不再赘述。 该论文以3D-LaneNet+ 的形式 在 NeurIPS 2020 研讨会上重新发布 。
大部分工作基于 3D LaneNet。它还具有双路径主干、相机高度和滚动预测,并具有 BEV 空间中的最后一个特征图。主要区别在于更灵活的车道线表示,允许对更复杂的车道拓扑进行建模,包括拆分、合并和垂直于车辆行驶方向的车道。
半局部表示还利用 道路投影平面 作为参考,并将其 BEV 投影到道路投影平面上的 3D 车道线公式化。然而,半局部 3D LaneNet 并没有将每个车道与预定义的锚点相关联,而是提出了一种紧凑的半局部表示。本质上,它将 BEV 图像(将 3D 结构投影到道路投影平面)分解为称为图像块的非重叠网格。假设每个图像瓦片只能有一条车道线穿过它,并且每个瓦片中裁剪的车道线段足够简单,可以参数化为 2 DoF 线段(到瓦片中心的距离和方向)。然后下一步是为每个车道学习全局一致的嵌入,以将小车道段聚集成完整的曲线。
这种先检测后聚类方法的灵感来自 2D LaneNet 。半局部 3D LaneNet 使用推挽损失来训练图像块上的嵌入,并且比原始 2D LaneNet 的语义分割具有更少的计算负担。在推理过程中,通过模式搜索算法 mean-shift 完成聚类,找到每个聚类的中心,然后设置阈值来获取聚类成员。
Gen-LaneNet
Gen-LaneNet (ECCV 2020) 基于 3D LaneNet 的标准实践,提出了一种用于 3D 车道线检测的两阶段方法。它提出首先执行 2D 车道线检测,然后使用称为 3D-GeoNet 的单独网络将 2D 检测结果提升到 3D。
将 3D 结构预测与 2D 车道线检测分离的原因在于 3D 几何的编码与图像特征相当独立。这种解耦使模块更加灵活和可扩展。它可以立即受益于第一阶段不断发展的二维车道线检测算法。更重要的是,它允许仅使用合成数据集对第二阶段进行训练,即使是非真实感模拟也可以完成,因为对图像特征的依赖已被消除。
在 3D LaneNet 中,不能保证预测的投影与图像匹配,并且缺乏 2D-3D 一致性。在 Gen-LaneNet 中,3D 从 2D 提升,因此这种一致性是管道固有的。
在第二阶段故意去除图像特征类似于仅在 Deep Object Distance Estimator中使用 bbox info 预测距离,而在 MonoLoco 中仅使用骨架预测距离。 在单目 BEV 语义分割 的许多早期研究中也可以找到类似的缓解 sim2real 域差距的策略。
Gen-LaneNet 还指出了 3D-LaneNet 的一个主要缺点,即在存在非零斜率的情况下,顶视图投影与 IPM 转换的特征不对齐。换句话说,IPM 假设一个平坦的地面,并且当这个假设以非零斜率打破时,IPM 转换后的视图不是 真正的顶视图 (BEV)。相反,IPM 转换的特征是一个扭曲的 BEV 视图,在本文中称为 虚拟顶视图。 这个虚拟顶视图是通过光线追踪每个车道线点并投影到道路投影平面(下图中的橙色点)获得的。3D 车道线groundtruths 被预处理为虚拟顶视图,以与IPM 转换特征对齐。
真实顶视图和虚拟顶视图的概念不是很容易掌握。举一个更具体的例子,零偏航角的上坡 3D 车道将其两条平行车道线投射到 真实俯视图中完全平行的目标,但在 虚拟俯视图 中,当我们上坡时,它们会显得发散。这种不同的观点实际上与来自 3D LaneNet 的双路径主干网的 IPM 转换特征一致。
在数学上,在上图中,我们有以下等式,其中 h 是相机高度,z 是距离道路投影平面 xoy 平面的高度偏差(以上为正)。
假设我们在 3D 中有两条平行的车道线,因此车道宽度 Δx 是恒定的。在真实的顶视图中,由于车道宽度仍为 Δx,它们仍将平行显示。在虚拟俯视图中,车道宽度变为 Δx̄ = Δx*h/(hz),如果上坡路的 z 变大(z < h),则车道宽度变宽并显得发散。
Gen-LaneNet 仍然使用基于锚的表示,因此存在与 3D LaneNet 相同的缺点。更好的方法可能是将两种方法的优点结合起来:使用 Gen-LaneNet 的虚拟顶视图和解耦管道以及 Semi-local 3D LaneNet 的半局部图块表示。
数据集
3D 车道一检测领域研究有限的主要原因之一是缺乏相关的数据集和基准。构建 3D 车道线数据集主要有三个数据源:合成数据、深度测量(使用激光雷达或可能的立体相机)和时间传感器融合。
3D LaneNet 和 Semi-Local 3D LaneNet 使用模拟环境 Blender 生成大量具有已知 3D groundtruth 的合成数据。同样, Gen-LaneNet 利用 Apollo 项目中的模拟器并生成 Apollo 3D Synthetic 车道线数据集 。
3D LaneNet 和 Semi-Local 3D LaneNet 还使用激光雷达检测器和半手动注释收集了 2.5 小时的真实数据,但这只是为了验证这个想法。收集校准和同步的相机和激光雷达数据的多传感器数据不太可扩展。此外,基于激光雷达的数据集本质上只能达到约 50 米,因为激光雷达能够可靠地检测超出此范围的车道线。
获取真实 3D 车道线数据的另一种更具可扩展性的方法类似于 MonoLayout (WACV 2020) 中描述的方法。鉴于可以获得准确的自我运动信息,它通过聚合整个视频的结果(所谓的时间传感器融合)来使用自生成的地面实况。聚合的groundtruth可以根据预设的距离阈值截断并投影回单个图像帧。如果我们想看到超过上述 50 米的限制,同样的想法也适用于激光雷达数据。
要点
- 预测相机外部参数以在特征图上执行 单应变换 (IPM) 似乎是标准做法。
- 虚拟顶视图 解决了转换后的特征图和生成的groundtruth之间的错位。
- 由于城市驾驶场景中复杂的车道线拓扑(环形交叉路口、垂直车道线等), 基于锚点的表示将失败。 对半局部图块进行 预测然后进行聚类似乎是一种更灵活的处理复杂几何图形的方法。
- 合成数据集和 sim2real 是引导 3D 车道线检测系统的方法,特别是考虑到开源的 Apollo 数据集。 从时间聚合的单个图像感知结果 构建 3D 车道线数据集的可扩展方法仍未得到充分探索。我期待着未来在这个方向上做更多的工作。
- 对于未来的工作,最好使用 Gen-LaneNet 的虚拟顶视图和解耦管道以及 Semi-local 3D LaneNet 的半局部 tile 表示。
References
LaneNet : Towards End-to-End Lane Detection: an Instance Segmentation Approach , IV 2018
3D-LaneNet : End-to-End 3D Multiple Lane Detection , ICCV 2019
Semi-local 3D LaneNet : Semi-Local 3D Lane Detection and Uncertainty Estimation , ArXiv, 03/2020
Gen-LaneNet : A Generalized and Scalable Approach for 3D Lane Detection , ECCV 2020
3D-LaneNet+ : Anchor Free Lane Detection using a Semi-Local Representation , NeurIPS 2020 workshop
Deep Radar Detector: Vehicle Detection With Automotive Radar Using Deep Learning on Range-Azimuth-Doppler Tensors , ICCV 2019
SfMLearner : Unsupervised Learning of Depth and Ego-Motion from Video , CVPR 2017
MonoLayout : Amodal scene layout from a single image , WACV 2020自动驾驶环境传感器是如何检测车道线类型的?有哪些判断逻辑
对于第一个问题,常用的车道线模型分为两类,参数化模型如Line/parabola/cubic, poly-line/spline, Clothoid, 只需若干个参数,即可描述整个车道线形状;也有基于数据的,如Support Vector Regression, Gaussian Process Regression,这种方法需要有正确数据的支撑,学习出相应的参数。
用于车道线的参数估计问题并不简单,因为数据本身除了noise外,还有outlier。一个外点就能让传统的最小二乘法失效。Hough Transform, RANSAC, Least Trimmed Square, Bayesian Filter都可以用来鲁棒参数估计。
对于第二个问题,检测到的车道线可以分为白实线、黄实线等,要用到分类的算法,我不是很懂,就不强答了。
ps:使用相机检测车道线已经是ADAS的标配了,但是,但是,但是,对无人驾驶而言,相机对环境的敏感性,导致车道线检测有时候会失效。这个时候,最好使用激光传感器作为补充。
pps:更进一步,为什么一定要检测车道线呢?Stanford的博士论文就没有涉及到车道线,他们把地面上的有效信息(包含车道线、人行横道、转向箭头、甚至裂缝)拼接为高精度地图,在线定位就行了。
上一篇:疫病检测论文
下一篇:论文范文体温论文