题目:CondLaneNet:a Top-to-down Lane Detection Framework Based on Conditional Convolution
论文:https://arxiv.org/pdf/2105.05003.pdf
代码:https://github.com/aliyun/conditional-lane-detection
作者单位:阿里巴巴,Simon Fraser University
0
动机
近年来,基于深度学习的车道线检测技术取得很大进展,但仍有挑战。
挑战之一为车道线的实例检测,通常做法是将不同的车道线检测为不同的类别,但该方法通常需要预定义最多能检测到的车道线条数;另外一种做法是对语义分割的结果进行聚类,得到不同的车道线,该方法无法解决车道线交叉、密集的场景。如下图所示:
作者借鉴了分割领域中的conditional instance segmentation策略,参考CondInst和SOLOv2,将其适配到车道线检测任务中,提出了新的车道线检测算法CondLaneNet,来解决车道线的实例检测问题。
CondLaneNet能够解决交叉线等复杂场景,且具有端到端和推理速度快的优势。
1
网络整体结构
给定输入图像 作为输入,CondLaneNet输出车道线集合,记作 ,其中 表示车道线数量。
每条车道线 使用有顺序的点集表示,即:
上式中 表示车道线的索引, 表示第 条车道线中点的数量。
CondLaneNet的整体结构如下图所示:
使用ResNet系列网络做为Backbone,Backbone中还包含用于提取多尺度特征的FPN模块。为了增强Backbone提取全局特征的能力,Backbone中还有一个Transformer Encoder模块,其结构如下图所示:
上图中的 表示矩阵加法, 表示矩阵的点乘, 表示元素乘法操作。
网络结构图中的Proposal head用于检测车道线实例,并为每个实例生成动态的卷积核参数;Conditional shape head利用Proposal head步骤生成的动态卷积核参数和conditional卷积确定车道线的点集。
2
Proposal head
Proposal head的输出之一是维度为 的heatmap。
对于通用的conditional instance segmentation方法,通常检测每个目标的中心点。对于细长的车道线来说,检测中心点是有难度的。因此作者检测每个车道线实例的起始点。作者参考CenterNet和CornerNet,预测heatmap用于表示车道线的起始点,使用focal loss损失函数,表示如下:
上式中的 表示 位置处的标签, 为该位置处的预测值, 是proposal point的个数。
Proposal head的另外一个输出是维度为 的feature map,用于表示动态卷积核参数。对于位置 处的proposal point,取该feature map中 位置的 个元素作为卷积核参数。
在实际使用时,存在同一proposal point对应2个车道线实例的情况,比如交叉线。作者提出了RIM(Recurrent Instance Module)来解决该问题,RIM结构如下图所示:
RIM基于LSTM结构实现,RIM输出一个二值的状态来表示“continue”和“stop”,还会输出向量 表示卷积核参数。
在推理时,RIM会循环执行,为同一proposal point对应的多个车道线实例预测动态卷积核参数,直到输出的状态为"stop"。从而解决单个proposal point对应多个车道线实例的问题。
在训练时,使用交叉熵损失函数约束输出状态,损失函数表示如下:
上式中的 表示第 个状态的softmax输出, 表示第 个状态的真值, 表示一个batch中的输出状态数量。
需要特别指出的是,只在使用CurveLanes这种包含交叉线的数据集上使用了RIM,其他数据集并未使用RIM。
3
Conditional shape head
Conditional shape head使用Proposal head输出的车道线实例(用proposal point表示)和动态卷积参数,预测每个车道线实例所包含的点集。
Conditional shape head对每个车道线实例会输出三部分:(1)点在每一行中的位置;(2)纵向取值范围;(3)offset。如下图所示:
上图中没有画出offset相关的内容。
依据上图所示,将输入图像分为尺寸为 的网格,Conditional shape head将Backbone的输出特征作为conditional convolution的输入特征。
对于每个车道线实例,Conditional shape head会输出尺寸为 的feature map,通过输出feature map每一行的值,确定该行中车道线像素点所在的网格,这可以抽象成 个类别的分类问题,这 个类别对应的概率可以表示为:
上式中的 表示feature map中第 行特征, 表示第 行中 个类别的概率分布,概率最大的类别即为车道线像素所在的网格。
有时候会出现车道线像素点横跨多个网格的情况,因此使用横坐标的期望值来表示车道线像素点的位置:
上式表示第 行中车道线像素所在的位置, 表示车道线像素位于网格 处的概率值。
在训练时,使用L1损失回归车道线像素位于网格的位置,损失函数表示如下:
上式中的 表示车道线的纵向范围, 表示车道线纵向跨的行数。
在上文所述的输出feature map中增加全连接层,对feature map中的每一行进行二分类,判断该行是否存在车道线像素,从而得到车道线的纵向范围。
使用softmax和交叉熵损失函数,表示如下:
上式中的 表示第 行是否存在车道线像素点的预测值, 为真值。
为了进一步提高车道线位置的预测精度,作者在3.1中“网格粗预测”的基础上,又增加了偏置信息,该偏置信息由网络预测得到。
在训练时,使用L1损失函数,表示如下:
上式中的 表示车道线的宽度, 表示网络输出的预测offset, 表示offset的真值。 表示 中的像素个数。
最终检测到的车道线使用一系列有顺序的点集来表示。对于第 条车道线,第 行的像素点位置表示如下:
上式中 , 和 分别表示纵向范围的最小值和最大值; 为横坐标期望的取整, 表示offset。
4
一些细节
在训练时,Proposal head和Conditional shape head的总体损失函数为:
上式中的 用于Proposal head中实例关键点预测, 、 和 用于Conditional shape head中车道线形状预测; 用于预测RIM的状态,用于处理同一实例关键点对应2条车道线实例的现象。
在具体应用时,上式中的 和 值为1, 的值为0.4, 的值为1。
在训练和测试时,输入图片分辨率为 。
5
实验结果
FPS的测试均是在2080Ti机器上进行。
CondLaneNet在CurveLanes数据集上的测试结果如下表所示:
在CULane数据集上的测试结果如下:
从上表中可以看出,CondLaneNet能够在CULane数据集中的多个场景下取得最好的性能;CondLaneNet的轻量级版本能达到220FPS的速度,且有着不错的性能。
在TuSimple数据集上的测试结果如下:
一个可视化的结果如下图所示:
上图中第一行为CurveLanes中的图片,第二行为CULane中的图片,第三行为TuSimple中的图片。
6
总结
作者借鉴了分割领域中的conditional instance segmentation策略,提出了CondLaneNet算法用于车道线检测任务,来应对车道线实例检测、交叉线的挑战。
CondLaneNet中包含Proposal head和Conditional shape head,其中Proposal head用于预测车道线实例和实例级别的卷积核动态参数,Conditional shape head用于预测每个车道线实例的形状信息。CondLaneNet能够很好地解决车道线实例分割、交叉线检测问题,并且有很好的实时性。
备注:车道线
车道线交流群
车道线检测等技术,
若已为CV君其他账号好友请直接私信。