本文主要是对CLRNet的总结和自己的理解。有一部分还不理解。希望大佬们多教教。
CLRNet论文链接
CLRNet代码链接
车道线检测的难点: 1. 低级语义信息检测的结果,车道线奇异,缺少全局信息,将地标误认为车道线。
总结: 1. [SCNN](Spatial as deep: Spatial cnn for traffic scene understanding)和[RESA](Resa: Recurrent feature-shift aggregator for lane detection)提出了一个消息传递机制来收集全局上下文,但是这些方法执行逐像素预测并且不采取车道作为一个整体。
CLRNet 充分利用低级和高级特征进行车道检测。首先在高语义特征中进行检测,粗略地定位车道。然后,进行细化的基于精细细节特征来获得更准确的位置。逐步细化车道的位置和特征提取可以获得高精度检测结果。ROIGather以捕获更多全局上下文信息,通过建立ROI车道特征和整个特征图。并定义了lane的IoU线兵提出Line IoU(LIoU)损失来回归车道作为一个整体。与标准损失相比,性能显著提高,即平滑l1损失。
一、提出了一个新的网络架构CLRNet以充分利用用于车道检测的低级和高级特征。
二、ROIGather通过收集全局上下文进一步增强车道特征的表示,也可以插入其他网络。
三、提出了为车道检测量身定制的Line IoU(LIoU)损失,将车道作为一个整体进行回归并显著提高了性能。为了更好地比较不同检测器的定位精度,采用了新的mF1指标。
采用逐像素预测方式。即将车道检测视为语义分割任务。
1、SCNN提出了一种消息传递解决无视觉证据问题的机制,捕捉车道的强烈空间关系。显著提高了检测性能,但对实时来说速度较慢。
2、RESA提出了一个实时特征聚合模块,使网络收集全局特征并提高性能。
3、Curvelane-NAS使用神经架构搜索(NAS)来寻找更好的网络来捕获准确的信息,从而有利于曲线的检测车道。
采用预定义的线锚作为回归准确的参考车道。
[Line-CNN](Line-cnn:End-to-end traffic line detection with line proposal unit)是在车道检测中使用线锚的开创性工作。
[LaneATT](Keep your eyes on the lane: Real-time attention-guided lane detection)提出了一种新颖的聚合全局的基于锚的注意力机制信息。
[SGNet](Structure guided lane detection)介绍了一个新颖的消失点引导锚生成器,并增加了多个结构引导以提高性能。
预测可能的单元格对于图像上的每个预定义行。
[UFLD]((Ultra fast structure-aware deep lane detection))首先提出了一种基于行锚的车道检测方法,并采用轻量级骨干网以实现高推理速度。尽管简单快速,但它的整体性能并不好。
[CondLaneNet](Cond-lanenet: a top-to-down lane detection framework based on conditional convolution)引入了一种基于条件卷积和基于行锚的公式的条件车道检测策略。即它首先定位车道的起点,然后执行基于行锚的车道检测。但在一些复杂场景下,起点难以识别,导致性能相对较差。
与点回归不同,基于参数的方法使用参数对车道曲线进行建模,然后对这些参数进行回归以为检测车道。
PolyLaneNet采用多项式回归问题并实现了高效率。
LSTR考虑道路结构和摄像机位姿对车道形状进行建模,然后将变压器引入车道检测任务以获得全局特征。
基于参数的方法需要回归的参数较少,但它们对预测参数很敏感,例如,高阶系数的误差预测可能导致形状
变道。 虽然基于参数的方法有推理速度快,他们仍然难以达到更高表现。
Lane Prior。车道又细又长,形状先验很强,因此预定义的车道先验可以更好地帮助网络定位车道。在常见的对象检测中,对象由矩形框表示。这里使用等间距的2D点作为车道表示。具体地说,就是将lane表示为一个序列点数。y坐标在图像垂直方向上均等采样。
每个车道先验将由网络预测,由四个部分组成:1.前景和背景概率。2.先验车道的长度。3.车道线的起点和车道先验的x轴之间的角度(称为x、y、θ)。4.N个偏移量,即预测与其gt之间的水平距离。
在神经网络中,深层的高层特征对具有更多语义意义的整个对象做出强烈反应,而浅层的低层特征则具有更多的局部上下文信息。允许车道对象访问高级特征有助于利用更多有用的上下文信息,例如区分车道线或地标。同时,精细细节特征有助于检测具有高定位精度的车道。
受 Cascade RCNN 的启发,可以将车道对象分配到所有级别并按顺序检测车道。特别是,可以检测具有高级特征的车道以粗略地定位车道。根据检测到的车道,可以用更详细的特征对其进行细化。
利用ConvNet的金字塔特征层次结构,它具有从低到高的语义,并构建一个贯穿始终具有高级语义的特征金字塔。从具有高语义的最高层执行检测。Pt是车道先验的参数(起点坐标x、y和角度theta)。受[Sparse r-cnn](Sparse r-cnn: End-to-end object detection with learnable proposals)启发,对于第一层L0,P0均匀分布在像平面上。细化Rt以Pt作为输入得到ROI车道特征,然后执行两个FC层得到细化参数Pt。逐步细化车道先验和特征提取对于跨层细化的成功非常重要。
ROIGather模块是轻量级的且易于实现。它以特征图和车道先验作为输入,每个车道先验有N个点。
对于每个车道先验,按照ROIAlign得到车道先验的ROI特征( X p ∈ R C ⋅ N p X_p \in R^{C \cdot N_p} Xp∈RC⋅Np)。与边界框的 ROIAlign 不同,从车道先验中统一采样 Np 个点,并使用双线性插值来计算这些位置处输入特征的精确值。(理解: 也就是把车道先验映射到Feature map中)。
对于 L1、L2 的 ROI 特征,将前一层的 ROI 特征连接起来以增强特征表示。
对提取的 ROI 特征进行卷积,以收集每个车道像素的附近特征。为了节省内存,使用全连接来进一步提取车道先验特征( X p ∈ R C ⋅ 1 X_p \in R^{C \cdot 1} Xp∈RC⋅1)。将特征图调整为 X f ∈ R C ⋅ H ⋅ W X_f \in R^{C \cdot H \cdot W} Xf∈RC⋅H⋅W并展平为 X f ∈ R C ⋅ H W X_f \in R^{C \cdot HW} Xf∈RC⋅HW 。
为了收集车道先验特征的全局上下文,首先计算ROI车道先验特征(Xp)和全局特征图(Xf)之间的注意力矩阵W,如图中式子2。输出G反映了Xf对从Xf的所有位置中选择的Xp的奖励。最终,将输出添加到原始输入Xp。
(也就是一个attention提取特征的过程。)
W = s o f t m a x ( X p T X f C ) W = softmax({X^T_pX_f \over \sqrt C}) W=softmax(CXpTXf)
G = W X f T G = WX^T_f G=WXfT
车道先验由离散点组成,需要利用其基本事实进行回归。 可以使用smooth-l1等常用的距离损失来回归这些点。然而,这种损失将点作为单独的变量,这是一个过于简单的假设,导致回归不太准确。Line IoU(交互超过
union) 可以通过根据采样的 xi 位置对扩展段的 IoU 进行积分来计算。 与距离损失相比,联合交叉路口 (IoU) 可以将车道先验作为一个整体进行回归,并且它是为评估指标量身定制的。
Line IoU loss有两个优点:1、简单且可微分,很容易实现并行计算。2、将车道作为一个整体进行预测,有助于提高整体性能。
在训练期间,每个真实车道都被动态分配一个或多个预测车道作为正样本。特别是,首先根据分配成本对预测车道进行排序。Ccls 是预测和标签之间的焦点成本。 Csim 是预测车道和地面实况之间的相似性成本。它由三部分组成,Cdis 表示所有有效车道点的平均像素距离,Cxy 表示起点坐标的距离,Ctheta 表示 theta 角的差值,它们都归一化为 [0, 1]。 wcls 和 wsim 是每个定义的分量的权重系数。 每个地面实况车道都分配有基于 Cassign 的预测车道的动态数量(top-k)。
训练损失。 训练损失包括分类损失和回归损失。 回归损失仅在分配的样本上执行。
Lcls 是预测和标签之间的焦点损失,Lxytl 是起点坐标、theta 角和车道长度回归的 smooth-l1 损失,LIoU 是预测车道和地面实况之间的 Line IoU 损失。 或者,可以在 [Ultra fast structure-aware deep lane detection](Ultra fast structure-aware deep lane detection) 之后添加辅助分割损失。 它只在训练期间使用,在推理上没有成本。
设置了一个带有分类分数的阈值来过滤背景车道(低分车道先验),使用 nms 去除 [Keep your eyes on the lane: Real-time attention-guided lane detection](Keep your eyes on the lane: Real-time attention-guided lane detection)之后的高重叠车道。 如果使用一对一的分配,CLRNet的方法也可以是无 nms 的,即设置 top-k = 1。
CULane和Tusimple以及最近发布的LLAMAS。
CULane是一个大规模的车道挑战数据集检测,包含九个具有挑战性的类别。例如拥挤、夜晚、十字路口等。CULane数据集包含十万张用于训练、验证和测试集的图像。所有图像都是 1640 × 590 像素。
LLAMAS 也是一个拥有超过 100k 图像的大规模车道检测数据集。 LLAMAS 中的车道标记会自动使用高精度地图进行注释。测试数据不公开,需要将检测结果上传到LLAMAS benchmark的网站进行测试。
Tusimple 车道检测基准是车道检测中使用最广泛的数据集之一。 它仅包含高速公路场景,其中 3268 幅图像用于训练,358 幅图像用于验证,2782 幅图像用于测试。 都有 1280 × 720 像素。
采用 ResNet 和 DLA 作为预训练骨干。 所有输入图像的大小都调整为 320 × 800。对于数据增强,类似于 [[Cond-lanenet](Cond-lanenet: a top-to-down lane detection framework based on conditional convolution), [Focus on local](Focus on local: Detecting lane marker from bottom up via key point.)],使用随机仿射变换(平移、旋转和缩放)、随机水平翻转。
在优化过程中,使用初始学习率为 1e-3 的 AdamW [16] 优化器和功率设置为 0.9 的余弦衰减学习率策略 [15]。 分别为 CULane、Tusimple 和 LLAMAS 训练了 15 个 epoch、70 个 epoch、20 个 epoch。 网络是基于 Pytorch 实现的,配备 1GPU 来运行所有实验。 设置车道先验点数 N = 72,采样数 Np = 36。ROIGather 中调整大小的 H、W 分别为 10、25,通道 C = 64。LIoU 中的扩展半径 e 为 15。分配成本的系数设置为 wcls = 1 和 wsim = 3。
参考COCO的[email protected]:.95,用[email protected]:.95来作为评价指标。
对于 Tusimple [26] 数据集,评估公式如下。其中Cclip、Sclip分别是图像的正确点数和ground truth点数。如果超过 85% 的预测车道点在地面实况的 20 像素内,则预测车道是正确的。Tusimple 数据集还报告了误报率(FP)和漏报率(FN)。