题目: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
近年来,基于深度学习的车道线检测技术取得很大进展,但仍有挑战。
挑战之一为车道线的实例检测,通常做法是将不同的车道线检测为不同的类别,但该方法通常需要预定义最多能检测到的车道线条数;另外一种做法是对语义分割的结果进行聚类,得到不同的车道线,该方法无法解决车道线交叉、密集的场景。如下图所示:作者借鉴了分割领域中的conditional instance segmentation策略,参考CondInst和SOLOv2,将其适配到车道线检测任务中,提出了新的车道线检测算法CondLaneNet,来解决车道线的实例检测问题。CondLaneNet能够解决交叉线等复杂场景,且具有端到端和推理速度快的优势。
网络整体结构
给定输入图像作为输入,CondLaneNet输出车道线集合,记作,其中表示车道线数量。
上式中表示车道线的索引,表示第条车道线中点的数量。
使用ResNet系列网络做为Backbone,Backbone中还包含用于提取多尺度特征的FPN模块。为了增强Backbone提取全局特征的能力,Backbone中还有一个Transformer Encoder模块,其结构如下图所示:
上图中的表示矩阵加法,表示矩阵的点乘,表示元素乘法操作。网络结构图中的Proposal head用于检测车道线实例,并为每个实例生成动态的卷积核参数;Conditional shape head利用Proposal head步骤生成的动态卷积核参数和conditional卷积确定车道线的点集。
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。
Conditional shape head
Conditional shape head使用Proposal head输出的车道线实例(用proposal point表示)和动态卷积参数,预测每个车道线实例所包含的点集。
Conditional shape head对每个车道线实例会输出三部分:(1)点在每一行中的位置;(2)纵向取值范围;(3)offset。如下图所示:
3.1 点在每一行中的位置
依据上图所示,将输入图像分为尺寸为的网格,Conditional shape head将Backbone的输出特征作为conditional convolution的输入特征。对于每个车道线实例,Conditional shape head会输出尺寸为的feature map,通过输出feature map每一行的值,确定该行中车道线像素点所在的网格,这可以抽象成个类别的分类问题,这个类别对应的概率可以表示为:上式中的表示feature map中第行特征,表示第行中个类别的概率分布,概率最大的类别即为车道线像素所在的网格。有时候会出现车道线像素点横跨多个网格的情况,因此使用横坐标的期望值来表示车道线像素点的位置:上式表示第行中车道线像素所在的位置,表示车道线像素位于网格处的概率值。在训练时,使用L1损失回归车道线像素位于网格的位置,损失函数表示如下:上式中的表示车道线的纵向范围,表示车道线纵向跨的行数。
3.2 纵向范围
在上文所述的输出feature map中增加全连接层,对feature map中的每一行进行二分类,判断该行是否存在车道线像素,从而得到车道线的纵向范围。上式中的表示第行是否存在车道线像素点的预测值,为真值。
3.3 offset
为了进一步提高车道线位置的预测精度,作者在3.1中“网格粗预测”的基础上,又增加了偏置信息,该偏置信息由网络预测得到。上式中的表示车道线的宽度,表示网络输出的预测offset,表示offset的真值。表示中的像素个数。
3.4 车道线表示
最终检测到的车道线使用一系列有顺序的点集来表示。对于第条车道线,第行的像素点位置表示如下:上式中,和分别表示纵向范围的最小值和最大值;为横坐标期望的取整,表示offset。
一些细节
在训练时,Proposal head和Conditional shape head的总体损失函数为:
上式中的用于Proposal head中实例关键点预测,、和用于Conditional shape head中车道线形状预测;用于预测RIM的状态,用于处理同一实例关键点对应2条车道线实例的现象。
在具体应用时,上式中的和值为1,的值为0.4,的值为1。
实验结果
FPS的测试均是在2080Ti机器上进行。
CondLaneNet在CurveLanes数据集上的测试结果如下表所示:
从上表中可以看出,CondLaneNet能够在CULane数据集中的多个场景下取得最好的性能;CondLaneNet的轻量级版本能达到220FPS的速度,且有着不错的性能。
在TuSimple数据集上的测试结果如下:
上图中第一行为CurveLanes中的图片,第二行为CULane中的图片,第三行为TuSimple中的图片。
总结
作者借鉴了分割领域中的conditional instance segmentation策略,提出了CondLaneNet算法用于车道线检测任务,来应对车道线实例检测、交叉线的挑战。
CondLaneNet中包含Proposal head和Conditional shape head,其中Proposal head用于预测车道线实例和实例级别的卷积核动态参数,Conditional shape head用于预测每个车道线实例的形状信息。CondLaneNet能够很好地解决车道线实例分割、交叉线检测问题,并且有很好的实时性。车道线检测等技术,
若已为CV君其他账号好友请直接私信。
在看,让更多人看到