论文题目:Robust Lane Detection via Expanded Self Attention

链接地址:https://arxiv.org/abs/2102.07037

文章核心想要解决的是车道线遮挡、缺失、模糊等情况下的识别精度问题。主要通过一个自注意力模块,增强网络对于这部分车道线的关注程度,从而提升效果。

1. 概述

1.1 问题定义

这里的 Lane Detection,检测的目标是抽象意义上的车道分隔线,更关注全局的几何特征;

而不是路面上印刷的 Lane Mark,如果目标是 Lane Mark,则不存在遮挡的问题,能看到什么就识别什么,目标非常明确,且更关注局部特征。

至于为什么把识别目标设定为 Lane 而非 Lane Mark,我想很重要的一个原因是,像素级的 Lane Mark 标注成本远高于用折线段标注的 Lane。目前可用的公开集,也大部分都是 Lane 的形式。

1.2 问题分析

相比于其他更一般化的待识别对象,车道线有很多明显的特点:

  • 细长的外观形态
  • 很强的透视关系
  • 不同目标之间有明显的相互约束

这些都指向了一个结论,Lane Detection 非常依赖全局信息(global contextual information)。

说到增强全局信息,有以下几个思路:

  1. 增大每一个输出像素的感受野(尽量覆盖到全图尺度),而增大感受野的方法,比如:

    • 增加卷积层数,卷积核大小(很影响效率)
    • 使用池化层(近期的网络设计,很多都通过Conv层的Stride设置来实现降采样,很少用Pooling)
    • 使用空洞卷积

    但单纯增大感受野的效果其实是存疑的,因为感受野是类似一个向外扩散的圆形高斯核,既与图片的矩形不符,也与车道线的线形不符,效率可能比较低。

  2. 做更充分的多尺度特征融合,以FPN、PANet、BiFPN这些方法为主。

  3. 加入直接利用全局信息的模块,如:

    这些方法一般计算量都不低,实际能够提升的效果与付出的代价之间,需要结合使用场景来考量。

  4. 摒弃CNN的套路,考虑从Transformer/DETR这一路线来解决 Lane Detection, 而问题的关键可能在于如何定义要识别的目标。可能的路线包括但不限于:

    • 直接回归方程参数(与相机内外参强绑定)
    • 将车道线打散成小的线段,检测线段(相对折中的方案,与DETR有可比性)
    • 像素级分割(后处理更复杂)

1.3 本文方法

本文中增强全局信息的方法为,给网络增加一个 Expanded Self Attention (ESA) 模块。这个 ESA 模块利用车道线预测结果的 Confidence, 来指示车道线的清晰程度。

这个模块不需要对车道线被遮挡部分进行额外的标注,因此称之为 Self Attention

2. 具体方法

2.1 ESA模块

2.1.1 模块结构

原文关于 ESA 的结构和解释如下:

image-20210407145821028

一个简单的理解,分为 HESAVESA,分别对应水平和垂直方向,输出特征尺度分别为C*H*1C*1*W,并统一扩展成C*H*W,称之为 ESA matrix

ESA matrix 作为一个注意力图,与主干网络输出的特征图进行点乘( element-wise product),得到注意力加权后的特征图。

原文中提到 ESA 为一个不影响网络推理速度的方法,因此该模块应该只存在于训练过程中。在执行推理预测的使用环节是不需要的,它的影响已经在训练环节中作用到了车道线检测结果的输出中。

2.1.2 模块输出

对于 ESA 的输出,作者也给出了一个示例:

image-20210407152402548

可以看到,当线比较清晰时,ESA 的输出值较高(基本在0.5以上);而车道线被遮挡的部分,对应的 ESA 的输出值比较低(大致在0~0.25之间)。而不存在车道线的部分(天空),输出为0。

2.2 整体模型

2.2.1 模型结果

原文关于网络模型的结构和解释如下:

image-20210407150429512

2.2.2 输出形式

一个简单的理解,模型为典型的 Encoder-Decoder 结构,输出有三个分支:

  • Segment Branch:输出车道线检测的分割结果

  • Existence Branch:输出每一条车道线是否存在的二分类结果

    这里需要根据车道线位置预设每一条线的编号,这种方式只适合用来刷公开集,无法解决车辆压线/换道过程中的跳变问题,且可识别的车道线数量有上限。

  • ESA Branch:输出每一条线在水平或者垂直方向上的Confidence,生成 ESA matrix

2.2.3 Loss函数

**ESA matrix ** 分别与 Segment Branch 输出的特征图,以及作为 Ground-Truth 的特征图,进行点乘,生成加权后的特征图(weighted probability map / weighted gt map)。

对加权后的 Probability-mapGT-map 计算 ESA loss,再叠加常规的 Segmentation lossExistence loss

ESA loss 形式如下,包括两项:

image-20210407151630643

  • 第一项为对两个特征图使用标准的 MSE-loss。
  • 第二项是一个正则项,主要含义是使得 ESA 的输出均值趋向于 GT-map 均值的一个百分比。根据原文所述,如果不加这个正则项,则 ESA 的输出永远是0(因为加权权重为0,则输出为0,loss也就为0,是最小的)。

2.3 推理效果

原文作者对比了几种典型的 Lane Detection 方法。从给出的例子来看,对于车道线模糊不清的场景,确实效果有所提升。

image-20210407152113399

具体的量化对比可以看原文。

3. 问题和思考

3.1 可借鉴处

对于本文提出的方法,我觉得思路上可以借鉴的地方为:

常规的路况下,其实各种已有的车道线检测网络效果都已经做得比较接近,实际使用中的差别主要体现在各种 Corner Case 上, 而车道线被遮挡/模糊不清,可能是最主要得解决的场景。

在模型容量受限的情况下,应该让模型的识别能力更多关注到这些比较难处理的场景和部分,自然而然的想法就是引入注意力机制。

Self Attention 作为一种不需要额外监督信息的 End-to-End 方法,理论上很适合应用在这个场景。

3.2 疑惑之处

截至目前,原作者还没有发布源码,只能从文章的描述中去推测一些实现细节。

有一个很关键的点,我还没有想通,也没有在原文中找到解答。

根据原文所述,ESA module 输出的是车道线识别的 Confidence,即越确定的地方,输出越高,这一点也可以从文中 Figure 4 得到印证。

将这个输出作为注意力通道,对提取的特征图进行加权,直觉上感觉应该是加强了网络对于车道线清晰部分的注意力,而非加强了被遮挡区域的注意力。结合文中 Figure 5 的解释,画面中部车道线清晰的地方,得到的 MSE loss 低;而画面下部车道线模糊的地方,得到的 MSE loss 高。

那么,随着训练收敛程度的增加,是否会产生这样的情况: ESA 的输出对于车道线清晰的部分,响应越来越强烈,导致 ESA loss 越来越关注车道线清晰的部分,车道线模糊的部分更加没有得到充分的关注和训练。

image-20210407154335908

我的一种猜测是:

是否在加权过程中,实际上对 ESA 的输出进行了取反,即 Confidence 越低的地方,加权的权重越高,从而让模型更加关注车道线模糊的地方。

但这里又存在一个问题,即画面上部天空的位置,是不存在车道线的,ESA 输出理论上为0,这样的话,加权的权重最大,网络又会关注到天空中不存在车道线的位置。

可能是我读得不够仔细,没看到这个关键点,也可能是我对 Self Attention 这种机制的理解有误。也许只能等作者放出源码后,看看实际的实现方式是怎样的。

内容来源于网络如有侵权请私信删除