本系列文章着重讲解「自动驾驶环境感知算法」相关知识,由特约作者「巫婆塔里的工程师」编写,「焉知新能源汽车」媒体独家发布。
作为关注自动驾驶环境感知的专栏,对这部分内容的介绍当然也是必不可少的。关于注意力机制和 Transformer 的文章非常多,其中也不乏非常好的分析和解读。
自动驾驶环境感知的一个核心任务是「物体检测」,因此本文也会侧重从这个角度来进行介绍。
这次的注意力机制专题计划包含三篇文章:
第一篇文章(也就是本篇文章)里我会回顾一下视觉感知算法尤其是物体检测算法中常用的一些注意力机制。
第二篇文章会介绍 Transformer 和自注意力机制在物体检测领域的应用和最新进展,也会包括一些学术界和工业界在这个方向的的讨论。
第三篇文章会介绍一下最近兴起的 BEV 感知方法,其中交叉注意力机制起到了非常关键的作用。
近些年来,注意力机制在人工智能领域可以说是大火特火。
基于自注意力机制的 Transformer 模型首先在自然语言处理(NLP)领域取得了显著的性能提升,取代了之前常用的循环神经网络结构(RNN)。
之后,Transformer 也被应用到了计算机视觉领域,在图像分类、物体检测、语义分割等视觉任务上都展示出了非常强大的潜力。
在自动驾驶系统中,视觉感知是非常关键的一个模块。因此,Transformer 模型自然也得到了广泛的关注。
01、早期的注意力机制
「注意力(Attention)」这个词最近几年在人工智能的各个领域都被频繁提及,说的大家都有点审美疲劳了。
其实注意力也不是什么特别新的概念,就像卷积神经网络(CNN)一样,概念其实几十年前就有了,只是当时受限于数据量、算力以及训练方法,其效果并不理想,因此也没有得到广泛的关注。
在计算机视觉领域,注意力机制一直以来都是热门的研究课题之一,只不过早期的研究主要关注如何提取数据中具有显著性(Saliency)的部分。
这种方法一般采用自底向上的方式,从底层特征出发,通过预先定义的一些指标来计算图像或者视频数据中具有显著性的部分。
这里一个最典型的例子就是:在一副动物的照片中,算法会将动物而不是背景作为显著性区域。
这种显著性提取方法虽然与人类的感知有相似之处,但其实更像是一种前景背景分割,其隐含的假设就是前景比背景更具有显著性。
这种简单的数据及其隐含的简单假设在实际应用中很可能是无法满足要求的。
实际应用中通常我们都会有一个特定的任务,因此,显著性的提取也需要由任务来进行驱动,也就是说采用 「自顶向下」 的方式。
图像中的显著性区域提取前面说了,物体检测是视觉感知中的关键任务之一。因此,下面就以物体检测这个任务为例来介绍一下自顶向下的注意力。
其实,在物体检测的发展历程中,对注意力的研究是一直存在的,只是有的时候其表现形式并不太明显。
在神经网络兴起之前,物体检测主要依赖于特征和分类器设计。为了提高检测的效率,研究者们会首先用简单的特征过滤掉图像中大部分的背景区域,然后再用复杂的特征来处理剩下的区域。
这是一种典型的「由粗到精」的过程,在物体检测发展的早期非常常见。这里「剩下的区域」其实就是显著性区域,通过快速的显著性区域提取,检测算法的运行速度可以得到极大的提升。
即使是在神经网络被广泛用于物体检测以后,这种由粗到精的策略还是存在其中的。
大家回想一下基于神经网络的两阶段检测器,第一阶段的目标就是得到图像中的感兴趣区域(ROI),然后在第二阶段中再对 ROI 进行进一步的处理,最终得到目标的类别、位置、大小等信息。
这里的 ROI 其实也就是显著性区域的概念,与传统方法中采用简单特征快速得到的显著性区域没有本质的差别。
但是,这里我们需要注意的是,无论是传统方法还是基于神经网络的方法,模型都是通过训练得到的,显著性区域的提取也都是与下游任务相关的,因此它们都是任务驱动的自顶向下的方式。
两阶段物体检测网络 R-CNN
02、神经网络中的注意力机制
通过以上的分析,我们大致可以把注意力机制分为「自底向上」和「自顶向下」两种。
前者不关联特定的任务,而后者则是由任务驱动的。
在大数据时代,引起人们更多关注的自然是 「任务驱动」,或者说 「数据驱动」 的方式。
上一节中介绍的自顶向下的注意力机制,无论是在传统方法中还是深度学习方法中应用,都是作用在 ROI 这个级别上,是一种相对粗粒度的注意力表达方式。
除了这种方式以外,现阶段大家所讨论的更多的是一种细粒度的注意力,在神经网络模型中通常表现为:
通道注意力;
空间注意力;
分支注意力;
自注意力;
交叉注意力。
下面就来介绍一下这几种比较常用的注意力机制。
通道注意力
在神经网络模型中,每一层的输入和输出都有多个特征通道,每个通道描述了输入数据中不同的信息,比如物体的纹理、颜色、形状等。对于不同的下游任务,不同信息的重要性也不尽相同。
举个简单的例子,车辆检测可能更依赖于形状信息,而车道线检测可能更依赖于纹理和颜色信息。
那么对于一个通用的物体检测网络,其特征通道会包含各种各样的信息。当输入图像中出现了车辆时,神经网络就会自动的给包含形状信息的通道更大的权重,以更好的完成车辆检测的任务。
当然这里只是一个直观的解释,实际的通道加权过程可能非常复杂,并不一定具有很好的解释性。
以上就是通道注意力的基本设计动机。
这里有一点需要注意的是:通道的权重并不是离线学习好的,而是在线根据输入数据进行调整的。
这种动态的注意力机制可以使神经网络在处理不同任务时具有非常好的灵活性。
通道注意力的基本做法是:为每一个通道计算一个权重。
这个权重是通过多个通道互相作用(全局或者局部的操作)得到的。这里一个重要的步骤是「提取通道的描述特征」,一般会采用全局的均值 Pooling 操作来得到每个通道的标量(scalar)特征。
Squeeze&Excitation Attention,也可以简称 SE Attention,是一个典型的采用通道注意力的方法。
该方法对每个通道进行全局的均值 Pooling 操作,从而将通道压缩(Squeeze)到一个标量值。
来自多个通道的标量值形成一个向量,经过全连接层(FC)的处理之后,再利用 Sigmoid 函数将其变换为 0 - 1 之间的值,而这些值就对应了不同通道的权重。
这个给通道加权的过程对应了 SE 中的 Excitation。
SE Attention 网络结构
以 SE Attention 为基准,后续又有很多工作对其进行了扩展。
这些扩展主要体现在两方面:
一是通道特征的提取;
二是如何由通道特征得到权重。
对于前者,SE Attention 中采用全局均值 Pooling 来提取通道特征,这可以看作是一种一阶的特征提取方法。
改进的方案通常是采用二阶或高阶的复杂特征。
对于后者,SE Attention 中采用全连接层来生成权重,因此每一个通道的权重计算都包含了所有通道特征的信息,是一种全局的计算方式。
改进的方案通常采用1D卷积操作来进行局部的权重计算,也就是说每一个通道的权重计算只与其相邻的部分通道相关。
ECA-Net中基于相邻通道的局部权重计算方式
空间注意力
相对于通道注意力,空间注意力更容易理解。
与显著性图类似,空间注意力的基本思路也是赋予不同空间位置不同的权重,以此来体现模型所关注的区域。
不同的是,显著性图是自底向上的方式,与任务和数据没有直接的关系,而空间注意力则完全是由「任务和数据驱动」的。
空间注意力与前面提到的物体检测中由粗到精的策略类似,都是在空间维度上进行操作。
但不同的是,物体检测中的采用的是硬注意力机制,也就说会直接抛弃掉不关注的区域,而且这种操作是以物体框为基础的。而空间注意力则是作用于图像或者特征图的像素,对每个像素进行加权而不是选择抛弃一些像素。
因此,空间注意力是看作是一种像素级别的软注意力机制。
CBAM(Convolutional Block Attention Module)模型中提出了一种典型的空间注意力计算方法。
其基本思路是采用 Pooling 操作将特征图的多个通道压缩为一个通道,这个单通道特征图经过卷积和sigmoid操作后,可以得到一个值在 0 - 1 之间的空间注意力图(spatial attention map)。
如下图所示,CBAM 同时采用了 Max 和 Mean Pooling,然后将得到的特征拼接起来,再压缩到一个通道。
CBAM 中的空间注意力计算
这种空间注意力的计算方式与通道注意力非常相似,只不过前者在通道维度上进行压缩,而后者在空间维度上进行压缩。
空间注意力最后表现为一张单通道的 2D Map,而通道注意力最后表现为一个 1D Vector。
空间注意力和通道注意力分别描述了数据不同维度的信息,因此也有研究者提出将二者进行结合。
比如在 Pyramid Feature Attention 中,主干网络中的底层特征被用来计算空间注意力,而高层特征被用来计算通道注意力。
通道注意力与任务相关性较大(参考上一节中物体检测的例子),因此需要包含更多语义信息的高层特征,而基于高层语义信息的通道注意力会用于辅助空间注意力的生成,一定程度上也会帮助选择空间上的细节信息。
Pyramid Feature Attention 中空间和通道注意力的结合
分支注意力
神经网络的结构中经常会出现多个分支,比如 ResNet 结构中的 Shortcut 分支,Inception 结构中不同大小的卷积核对应的多个分支,金字塔结构中不同分辨率的分支等。
这些分支的特征通常会被组合起来(Concat)形成新的特征,而组合的权重则是可学习的参数,通过网络训练固定下来,与当前输入数据没有关系,也就是说这些权重是静态的。
为了使特征组合更加灵活,更好的适应当前的输入数据,我们可以采用注意力机制来对不同分支进行动态加权。
在 Highway Networks 中,类似于 ResNet 的两个分支(一个shortcut分支,一个正常的特征变换分支)被赋予动态的权重。这个权重也是由输入数据经过一定的处理得到的。
下面公式中的 x 是输入数据,同时也是 Shortcut 分支的输出(不做任何处理,保持原数据),而 H 分支是正常的特征变换分支。
两个分支分别用 T(transform gate)和 C(carry gate)进行动态加权,T 和 C 也是输入数据 x 的函数,因此根据数据动态变化的。一般来说,我们可以认为 C 和 T 是相关的,也就是 C = 1 - T,下面的公式也可以进一步简化。
在 Selective Kernel Network 中,不同的分支中采用不同大小的卷积核,以提取不同大小感受野的特征。
这种结构与 Inception 网络类似,但是不同的分支也是采用动态的加权方式进行组合。
如下图所示,两个不同大小的卷积核(3x3 和 5x5)生成的特征组合起来之后,经过一系列处理会生成组合权重。
这个动态的组合权重最后被用来将两个分支的特征进行组合。
Selective Kernel Network 在 Dynamic Head 这个工作中,金字塔结构中不同分辨率的特征也被进行动态加权,也就是下图中的 Scale-aware Attention。
这个工作还同时采用空间注意力(对应 Spatial-aware Attention)和通道注意力(对应 Task-aware Attention)。
Dynamic Head
自注意力
如果上面的你不太熟悉,那大名鼎鼎的 Transformer 你肯定在熟悉不过了,特斯拉将 Transformer 的应用思路推向了市场的高潮。
Transformer 中采用的是「自注意力机制」,其主要思路是计算输入数据之间的相关性,用这个相关性再对输入数据进行重新编码。
理论上说,自注意力并没有限定其作用的范围,其输入数据的基本形式就是一组元素。这些元素可以来自一个序列中不同时间点的数据(时间维度),也可以来自一张图像上不同位置的数据(空间维度),甚至也可以来自不同通道的数据(通道维度)。
从这个意义上说,按照输入数据的不同,自注意力也可以被认为是空间注意力或者通道注意力。
当然一般来说,在视觉领域,自注意力操作一般还是在空间维度上进行的。自注意力机制首先在自然语言处理(NLP)领域被用来处理序列形式的文本数据,并取得了非常好的效果。
与处理序列数据常用的 RNN 不同,自注意力机制并不会按照顺序来处理数据,而是为序列中每个元素提供全局的上下文,也就是说,每个元素和序列中的所有元素都会产生联系。
这样就保证了不管在时序上相距多远,元素之间的相关性都可以被很好地保留。而这种长时相关性对于 NLP 的任务来说通常都是非常重要的。
比如在下图的例子中,句子中的「it」所指的是「The animal」,但是这两个元素之间相距较远,如果用 RNN 来顺序处理的话很难建立起两者之前的联系。
而自注意力并不关心顺序,在计算相关性时,每个元素的重要性是根据数据本身的语义信息计算出来的,因此可以轻松的提取任意两个元素之间的相关性。
一个句子中各个单词之间的相关性以上提到的相关性计算就是 Transformer 中的一个重要概念,也就是自注意力机制(Self Attention)。
之所以叫自注意力,是因为计算的是自身元素之间的相关性,而相关性高的元素需要给予更多的注意力。
还是以上图的句子为例,句子中的每个单词都需要跟所有单词计算相似度(每个单词有一个特征向量)。
Transformer 对每个单词的编码过程就是对所有单词进行加权平均,而权重则是上一步中计算的相似度。每个单词进行编码之后的表示形式依然是一个特征向量,因此以上编码过程可以堆叠多次,以获得更好的特征提取能力。
在自注意力机制中,有三个重要的概念:Query(Q),Key(K),Value(V)。
其中 Query 和 Key 用来计算权重,然后再和 Value 组合进行加权平均就可以得到最终的编码输出。
下面的公式对这个过程进行了形式化。在自注意力中 Q,K,V 都来自于输入数据 X,虽然进行了不同的特征变换(不同的 W 矩阵),但本质上还是同一个来源。
下一节中介绍的交叉注意力在这一点上就会有明显的不同。
在视觉任务上,自注意力机制同样取得了巨大的的成功。
原因主要有两点:
首先,图像虽然本身不是时间序列数据,但其实可以看作空间上的序列。
视觉任务一个关键的步骤就是要提取像素之间的相关性,普通的 CNN 是通过卷积核来提取局部的相关性(也成为局部感受野)。
与 CNN 的局部感受野不同,Transformer 可以提供全局的感受野,因此特征学习能力相比 CNN 要强很多。
其次,如果进一步考虑视频输入数据的话,那么这本身就是时序数据,因此更加适合采用Transformer来处理。
在下图的例子中,Transformer 被用来完成图像分类的任务。
图像被均匀的分成若干小块,按照空间排列的顺序组成了一个图像块的序列。每个图像块的像素值(或者其他特征)组成了该图像块的特征向量,经过 Transformer 编码在进行拼接后就得到整幅图像的特征。
下图右侧给出了编码器的具体结构,其关键部分是一个多头注意力模块(Multi-Head Attention)。
简单来说,多头注意力其实就是多个自注意力模块的集成,这些模块各自独立的进行编码,提取不同方面的特征,在增加编码能力的同时,也可以非常高效的在计算芯片上实现并行处理。
以上简单回顾了一下自注意力机制的基本原理,以及在自然语言处理和计算机视觉任务中的典型应用。自注意力及其在物体检测任务中的应用,会在本专题的第二篇文章再进行详细的介绍。
交叉注意力
自注意力提取的是同一数据自身的相关性,而交叉注意力提取的则是不同数据之间的相关性。
这些数据可以是不同模态的数据,比如文本、语音和图像。
在自动驾驶环境感知的应用中,我们一般关心的是来自不同传感器的数据,而感知任务的核心之一就是将它们进行有效的融合。
交叉注意力非常适合来完成这个任务,特别是将来自不同传感器的数据融合到一个统一的坐标系下。
在目前的自动驾驶系统中,多个传感器共同协作已经成为标配,即使是 Tesla 目前采用的纯视觉方案,其感知系统也包含了安装在车身上不同位置的多个摄像头。
对于 L3/4 级的系统来说,激光雷达和毫米波雷达目前来看更是必不可少的配置。
不同的传感器会采用不同的坐标系,比如,摄像头采用透视坐标系,激光雷达和毫米波雷达的通常采用的是 俯视图坐标系(也被称为 Bird's Eye View,简称 BEV)。
传感器融合需要一个统一的坐标系,BEV 对应的是世界坐标系,因此更加适合自动驾驶系统的需求。
所以一般来说,我们需要将来自不同摄像头的图像数据,或者从图像数据中得到的感知结果,转换到 BEV 坐标系下,再与其它传感器的数据或结果进行融合。
前者对应特征层融合,后者对应决策层融合。
选择特征层融合还是决策层融合一直都是感知领域讨论的热门话题。
工业界现在应用比较多的是决策层融合,其优点是不同传感器之间的独立性较强,对空间和时间对齐的精度要求较低,因此系统设计也相对简单。
近两年来,随着 Tesla 在 AI Day 上提出 BEV 感知这个概念以来,特征层融合也开始逐渐盛行起来,工业界的解决方案也开始慢慢往这个方向发展。
Tesla 的 BEV 感知,其核心思路就是采用「交叉注意力机制」建立图像空间到 BEV 空间的对应关系。
BEV 空间中的每个位置,其特征都可以用图像中所有位置特征的加权组合来表示,当然对应位置的权重肯定大一些。
这个加权组合的过程通过交叉注意力和空间编码来自动的实现,不需要手工设计,完全根据需要完成的任务来进行端对端的学习。
当然,这套 BEV 感知系统还包括时序融合,相机标定以及数据标注等环节。
学术界中最近也有很多 BEV 感知相关的工作,其中一个典型的方法就是 BEV Former。
它的基本的思路也是采用空间上的交叉注意力机制来融合来自多个摄像头的图像数据。
如下图所示,输入数据是来自多个视角的图像(通过主干网络转换为图像特征),输出的结果是 BEV 视图下融合后的特征。
为了完成这个任务,首先需要定义 BEV 网格,这个网格会作为注意力机制中的 Query,是一组可学习的参数。
回顾一下自注意力,其中的 Query、Key 和 Value 都来自于输入数据(图像)。而在交叉注意力中,来自另外一个坐标系的 BEV 网格会作为 Query,这也就是为什么称之为交叉注意力的原因。
理论上说,Query 的每个网格都可以与来自每个视角,每个位置的特征产生关联。但是实际上,每个网格位置只需要对应一部分的视角,因为一个网格位置并不是在所有视角的图像上都能看到。
此外,一个网格也只需要对应图像上的一个局部区域。如果对应全图的话计算量会非常大,而且对于自动驾驶中这种大场景的数据来说也没有太大的必要。
因此,BEV Former 中采用了 Deformable Attention 来定义这种局部的对应关系。
BEVFormer的网络结构
以上简单回顾了一下交叉注意力机制的设计动机,以及在 BEV 感知中的典型应用。
本专题的第三篇文章会对 BEV 感知进行详细的介绍,其中也会包含一些并不是基于注意力机制的方法。
写在最后
本文作为注意力机制专题的第一篇文章,首先回顾了一下注意力机制研究的历史,然后对目前常用的注意力机制,及其在环境感知中的应用进行了介绍。
主要观点可以总结为以下几个方面:
注意力机制并不是一个新的概念。计算机视觉领域很早就有关于显著性(自底向上的注意力)的研究,物体检测中常用的由粗到精策略也可以看作是一种注意力(自顶向下的硬注意力)。
神经网络中的注意力机制一般都是指自顶向下的,或者说任务/数据驱动的软注意力机制,包括通道注意力,空间注意力,分支注意力,自注意力和交叉注意力等。
Transformer 中的自注意力和 BEV 感知中的交叉注意力是目前研究较多的两种注意力机制。前者常用于视觉感知中的特征提取,而后者常用于多传感器感知中的特征层融合。
编辑:黄飞
评论
查看更多