一种速度很快的Lane Detection 检测方法
代码:https://github.com/cfzd/Ultra-Fast-Lane-Detection。
当前问题(截止文章pubilc之前):
车道线检测的一个问题被称为“无视觉线索问题”,如图1所示。在严重遮挡和极端光照条件下的复杂场景中,这是车道线检测的另一关键问题。在这种情况下,车道线检测急需对车道进行更高层次的语义分析。但有两个问题:
(1)深度分割方法相较于传统图像处理方法,天然具备更强的语义表示能力,因而成为主流方法。但由于像素级别的密集通信,这种消息传递机制需要更高的计算成本。
(2)车道线被表示为分割后的二进制特征,而非线条或曲线。尽管深度分割方法主导了车道线检测领域,但这种表示方式使得这些方法难以显式地利用车道线的先验信息,如车道的刚性和光滑性。
解决方法:
(1)通过使用全局特征在图像预定义的行(row)中选择车道线位置,而不是基于局部感受野分割每个像素,从而大幅降低了计算成本。位置选择的示意图如图2所示。
(2)基于全局特征在行级别进行选择。借助全局特征,我们的方法具备整个图像的感受野。与基于有限感受野的分割相比,来自不同位置的视觉线索和消息能够被学习和利用。
(3)基于所提出的方法,车道线被表示为在不同行上选择的位置,而不是分割图。因此,我们可以通过优化所选位置之间的关系(即结构损失),直接利用车道线的刚性和光滑性等特性。
Method
如图(a)所示,假设(a)中蓝色代表特征提取后的深层次特征(h*w*c),那么其h和w远小于图片原来的尺寸H 和 W,利用c(通道信息)代表不同车道线,利用h代表预选anchor行的数量,利用w代表每行中格子的数量。例如:
这种方法相较于常用的分割方法,计算量显著减小:
分割方法:H*W*(C+1)
row-based方法:C*h*(w+1) 其中h、w远小于 H、W
例如,使用常见的 CULane 数据集的设置,我们方法的理想计算成本是 次计算,而分割方法的计算成本是
计算。计算成本显著降低,我们的方法能够实现极快的速度。
如何处理无视觉线索问题
为了应对无视觉线索问题,利用其他位置的信息非常重要,因为无视觉线索意味着目标位置没有信息。例如,车道线被一辆车遮挡,但我们仍然可以通过其他车道线的信息、道路形状甚至车辆方向来定位车道线。因此,利用其他位置的信息是解决无视觉线索问题的关键,如图1所示。
从感受野的角度来看,我们的公式具有整个图像的感受野,这比分割方法要大得多。图像中其他位置的上下文信息和信息可以被用来解决无视觉线索问题。从学习的角度来看,像车道线的形状和方向等先验信息也可以通过我们公式中的结构损失来学习,如第3.2节所述。这样,我们的公式可以处理无视觉线索问题。
另一个显著的好处是,这种公式以行级的方式建模车道线位置,这使我们有机会显式地建立不同行之间的关系。原始的语义差距,即由低级的像素级建模和高级的长车道线结构造成的差距,可以被弥合。
Lane structural loss
除了分类损失,我们进一步提出了两个损失函数,旨在建模车道点的位置关系。通过这种方式,可以鼓励结构信息的学习。
第一个损失函数源自车道线的连续性,即相邻行锚点中的车道点应该彼此接近。在我们的公式中,车道线的位置由分类向量表示。因此,连续性属性是通过约束相邻行锚点上的分类向量的分布来实现的。这样,相似性损失函数可以表示为:
也就是在同一个车道线中,两个相邻行的相同列索引的网格处的概率值应该是相近的,这样便保证了车道线的连续性
另一个结构损失函数关注于车道线的形状。一般来说,大多数车道线是直的。即使是弯曲的车道线,由于透视效果,大部分也仍然是直的。在这项工作中,我们使用二阶差分方程来约束车道线的形状,对于直线车道线,其值为零。(这一方法其实是不准确的,因为后续的研究表明,再出现路面高度变化时,车道线即使在透视效果下,也不是直的)
具体而言:使用 softmax 函数来获取不同位置的概率:
位置的期望值可以表示为:
二阶差分约束可以写为:
我们使用二阶差分而不是一阶差分的原因是,一阶差分在大多数情况下不为零。因此,网络需要额外的参数来学习车道位置一阶差分的分布。此外,二阶差分的约束相对于一阶差分约束较弱,因此在车道线不是直线的情况下对结果的影响较小
该定位方法的优点有两个。首先,期望值函数是可微分的。其次,这种操作通过离散随机变量恢复了连续位置。
最后,总体结构损失可以表示为:
Feature aggregation
在上节中,损失设计主要关注车道线内部关系。在本节中,我们提出了一种辅助特征聚合方法,该方法在全局上下文和局部特征上进行。我们提出了一种利用多尺度特征的辅助分割任务来建模局部特征。我们使用交叉熵作为我们的辅助分割损失。这样,我们的方法的总体损失可以表示为:
需要注意的是,我们的方法仅在训练阶段使用辅助分割任务,在测试阶段会将其移除。这样,即使我们添加了额外的分割任务,我们的方法的运行速度也不会受到影响,其运行速度与没有辅助分割任务的网络相同。
Experiment
1. 训练要根据不同数据集预先设置anchor的范围。具体来说,Tusimple 数据集的图像高度为 720 像素,行锚点范围从 160 到 710,步长为 10。CULane 数据集的行锚点范围从 260 到 530,步长与 Tusimple 相同。CULane 数据集的图像高度为 540 像素。在 Tusimple 数据集中,格网单元数设置为 100,在 CULane 数据集中设置为 150。
2.数据增强。由于车道线的固有结构,基于分类的网络可能会很容易过拟合训练集,并在验证集上表现不佳。为了防止这种现象并提高泛化能力,采用了一种由旋转、垂直和水平平移组成的增强方法。此外,为了保留车道线的结构,车道线被扩展到图像的边界。增强结果可以见图 5。
3.网格单元数量的影响。如第 3.1 节所述,我们使用网格和选择来建立车道线结构信息与基于分类的公式之间的关系。为了进一步验证我们的方法,我们尝试使用不同数量的网格单元来观察其对方法的影响。我们将图像分为 25、50、100 和 200 个网格单元。结果见图 6。
随着网格单元数量的增加,我们可以看到 top1、top2 和 top3 分类准确率逐渐下降。这是因为更多的网格单元需要更细粒度、更困难的分类。然而,评估准确率并不是严格单调的。尽管较少的网格单元意味着更高的分类准确率,但定位误差会更大,因为网格单元太大,无法精确表示位置。在本研究中,我们选择了 100 作为 Tusimple 数据集上的网格单元数量。
Result
从表 5 中可以看出,我们的方法在性能上与最先进的方法相当,同时运行速度极快。我们的方法与 SCNN 之间的最大运行时间差距是我们的方法推断速度快 41.7 倍。即便与第二快的网络 SAD 相比,我们的方法仍然快了 2 倍以上。
在 Tusimple 和 CULane 数据集上的可视化。前两行是 Tusimple 数据集的结果,其余行是 CULane 数据集的结果。从左到右,结果依次为图像、预测和标签。在图像中,预测结果用蓝色标记,真实标签用红色标记。由于我们的方法仅在预定义的行锚上进行预测,因此图像和标签在垂直方向上的尺度不一致。
结论
毋庸置疑,这种方法实现较快的检测速度,通过在深层次特征处理,利用分类网络,使用row-based的方法,实现了检测速度的提升,另外利用struct-loss 兼顾了车道线的平滑和联系。
但现如今来看,是有较多问题的:
1. 使用row-based方法,精度有限,因为无法预测网格中的车道线的精确位置;
2. 需要预先设置超参数,例如anchor位置,数量。
3. 忽略了高度信息,没有解决在高度变化这种case
4. 默认车道线是直的,因此设计的损失函数也是利用二次差分约束,显然这种假设是不准确的。