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

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

动机

近年来,基于深度学习的车道线检测技术取得很大进展,但仍有挑战。

挑战之一为车道线的实例检测,通常做法是将不同的车道线检测为不同的类别,但该方法通常需要预定义最多能检测到的车道线条数;另外一种做法是对语义分割的结果进行聚类,得到不同的车道线,该方法无法解决车道线交叉、密集的场景。如下图所示:

CondLaneNet | 使用

作者借鉴了分割领域中的conditional instance segmentation策略,参考CondInst和SOLOv2,将其适配到车道线检测任务中,提出了新的车道线检测算法CondLaneNet,来解决车道线的实例检测问题。

CondLaneNet能够解决交叉线等复杂场景,且具有端到端和推理速度快的优势。


1

网络整体结构

给定输入图像 作为输入,CondLaneNet输出车道线集合,记作 ,其中 表示车道线数量。

每条车道线 使用有顺序的点集表示,即:

上式中 表示车道线的索引, 表示第 条车道线中点的数量。

CondLaneNet的整体结构如下图所示:

CondLaneNet | 使用

使用ResNet系列网络做为Backbone,Backbone中还包含用于提取多尺度特征的FPN模块。为了增强Backbone提取全局特征的能力,Backbone中还有一个Transformer Encoder模块,其结构如下图所示:

CondLaneNet | 使用

上图中的 表示矩阵加法, 表示矩阵的点乘, 表示元素乘法操作。

网络结构图中的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结构如下图所示:

CondLaneNet | 使用

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。如下图所示:

CondLaneNet | 使用

上图中没有画出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数据集上的测试结果如下表所示:

CondLaneNet | 使用

在CULane数据集上的测试结果如下:

CondLaneNet | 使用

从上表中可以看出,CondLaneNet能够在CULane数据集中的多个场景下取得最好的性能;CondLaneNet的轻量级版本能达到220FPS的速度,且有着不错的性能。

在TuSimple数据集上的测试结果如下:

CondLaneNet | 使用

一个可视化的结果如下图所示:

CondLaneNet | 使用

上图中第一行为CurveLanes中的图片,第二行为CULane中的图片,第三行为TuSimple中的图片。


6

总结

作者借鉴了分割领域中的conditional instance segmentation策略,提出了CondLaneNet算法用于车道线检测任务,来应对车道线实例检测、交叉线的挑战。

CondLaneNet中包含Proposal head和Conditional shape head,其中Proposal head用于预测车道线实例和实例级别的卷积核动态参数,Conditional shape head用于预测每个车道线实例的形状信息。CondLaneNet能够很好地解决车道线实例分割、交叉线检测问题,并且有很好的实时性。

备注:车道线

CondLaneNet | 使用

车道线交流群

车道线检测等技术,

若已为CV君其他账号好友请直接私信。

在看,让更多人看到  CondLaneNet | 使用

你可能感兴趣的:(计算机视觉,机器学习,人工智能,深度学习,算法)