CondLaneNet | 使用"动态卷积核"预测每个车道线实例

题目: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相关的内容。

3.1 点在每一行中的位置

依据上图所示,将输入图像分为尺寸为的网格,Conditional shape head将Backbone的输出特征作为conditional convolution的输入特征。
对于每个车道线实例,Conditional shape head会输出尺寸为的feature map,通过输出feature map每一行的值,确定该行中车道线像素点所在的网格,这可以抽象成个类别的分类问题,这个类别对应的概率可以表示为:
上式中的表示feature map中第行特征,表示第行中个类别的概率分布,概率最大的类别即为车道线像素所在的网格。
有时候会出现车道线像素点横跨多个网格的情况,因此使用横坐标的期望值来表示车道线像素点的位置:
上式表示第行中车道线像素所在的位置,表示车道线像素位于网格处的概率值。
在训练时,使用L1损失回归车道线像素位于网格的位置,损失函数表示如下:
上式中的表示车道线的纵向范围,表示车道线纵向跨的行数。

3.2 纵向范围

在上文所述的输出feature map中增加全连接层,对feature map中的每一行进行二分类,判断该行是否存在车道线像素,从而得到车道线的纵向范围。
使用softmax和交叉熵损失函数,表示如下:
上式中的表示第行是否存在车道线像素点的预测值,为真值。

3.3 offset

为了进一步提高车道线位置的预测精度,作者在3.1中“网格粗预测”的基础上,又增加了偏置信息,该偏置信息由网络预测得到。
在训练时,使用L1损失函数,表示如下:
上式中的表示车道线的宽度,表示网络输出的预测offset,表示offset的真值。表示中的像素个数。

3.4 车道线表示

最终检测到的车道线使用一系列有顺序的点集来表示。对于第条车道线,第行的像素点位置表示如下:
上式中,和分别表示纵向范围的最小值和最大值;为横坐标期望的取整,表示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君其他账号好友请直接私信。

在看,让更多人看到

(0)

相关推荐