注意力机制最早在自然语言处理和机器翻译对齐文本中提出并使用,并取得了不错的效果。在计算机视觉领域,也有一些学者探索了在视觉和卷积神经网络中使用注意力机制来提升网络性能的方法。注意力机制的基本原理很简单:它认为,网络中每层不同的(可以是不同通道的,也可以是不同位置的,都可以)特征的重要性不同,后面的层应该更注重其中重要的信息,抑制不重要的信息。比如,性别分类中,应该更注意人的头发长短,这些和性别关系大的特征的抽取和判断,而不是去注意人体和性别关系不大的,像腰部粗细、身高头部比例,这些特征。
①2017 年SEnet(Squeeze-and-Excitation Network)
SENet考虑了特征通道之间的关系,在特征通道上加入了注意力机制,SENet通过学习的方式自动获取每个特征通道的重要程度,并且利用得到的重要程度来提升特征并抑制对当前任务不重要的特征。通过Squeeze模块和Exciation模块实现所述功能。
首先作者通过squeeze操作,对空间维度进行压缩,直白的说就是对每个特征图做全局池化,平均成一个实数值,该实数从某种程度上来说具有全局感受野。作者提到该操作能够使得靠近数据输入的特征也可以具有全局感受野,这一点在很多的任务中是非常有用的。
紧接着就是excitaton操作,由于经过squeeze操作后,网络输出了1x1xC大小的特征图,作者利用权重W来学习C个通道直接的相关性。在实际应用时有的框架使用全连接,有的框架使用1x1的卷积实现,从参数计算角度更加推荐使用1*1卷积。该过程中作者先对C个通道降维再扩展回C通道。好处就是一方面降低了网络计算量,一方面增加了网络的非线性能力。
最后一个操作时将exciation的输出看作是经过特征选择后的每个通道的重要性,通过乘法加权的方式乘到先前的特征上,从而实现提升重要特征,抑制不重要特征这个功能。 ②2018年在ECCV发表的论文《CBAM: Convolutional Block Attention Module》
CBAM通过学习的方式自动获取每个特征通道的重要程度,和SENet类似。此外还通过类似的学习方式自动获取每个特征空间的重要程度,并且利用得到的重要程度来提升特征并抑制对当前任务不重要的特征。
图2:该模块有两个子模块:通道和空间。在深度网络的每个卷积块上,通过(CBAM)自适应地细化中间特征映射
CBAM提取特征通道注意力的方式基本和SEnet类似,如下Channel Attention所示,其在SEnet的基础上增加了max_pool的特征提取方式,其余步骤是一样的。将通道注意力提取厚的特征作为空间注意力模块的输入。
CBAM提取特征空间注意力的方式:经过Channel Attention后,最终将经过通道重要性选择后的特征图送入特征空间注意力模块,和通道注意力模块类似,空间注意力是以通道为单位进行最大和平均迟化,并将两者的结果进行concat,之后再一个卷积降成1wh的特征图空间权重,再将该权重和输入特征进行点积,从而实现空间注意力机制。
③ECA-Net 2020提出的一个深度卷积神经网络的高效通道注意
上述提到的所有方法致力于开发更复杂的注意力模块,以获得更好的性能,不可避免地增加了计算负担。为了克服性能与复杂度权衡的悖论,ECANet就是一种用于提高深度CNNs性能的超轻注意模块。ECA模块,它参数很少,但带来了明显的性能增益。ECA模块通过分析SEnet的结构了解到降维和跨通道交互的影响,作者通过实验证明了降维是没有作用的,并通过自适应内核大小的一维卷积实现局部跨通道的信息交互。
(ECA)模块示意图。给定通过全局平均池(GAP)获得的聚合特征,ECA通过执行大小k的快速1D卷积来生成信道权重,其中k通过信道维度C的映射自适应地确定。 ④GAM
SENet在抑制不重要的像素时,也带来了效率较低的问题。CBAM依次进行通道和空间注意力操作,而BAM并行进行。但它们都忽略了通道与空间的相互作用,从而丢失了跨维信息。考虑到跨维度交互的重要性,TAM通过利用每一对三维通道、空间宽度和空间高度之间的注意力权重来提高效率。然而,注意力操作每次仍然应用于两个维度,而不是全部三个维度。为了放大跨维度的交互作用,GAMS是一种能够在所有三个维度上捕捉重要特征的注意力机制。
GAM的目标是设计一种注意力机制能够在减少信息弥散的情况下也能放大全局维交互特征。为此作者,采用序贯的通道-空间注意力机制并重新设计了CBAM子模块。
其中Mc和Ms分别为通道注意力图和空间注意力图, 表示按元素进行乘法操作。
通道注意子模块使用三维排列来在三个维度上保留信息。然后,它用一个两层的MLP放大跨维通道-空间依赖性。
在空间注意力子模块中,为了关注空间信息,使用两个卷积层进行空间信息融合。还从通道注意力子模块中使用了与BAM相同的缩减比r。与此同时,由于最大池化操作减少了信息的使用,产生了消极的影响,这里删除了池化操作以进一步保留特性映射。因此,空间注意力模块有时会显著增加参数的数量。
⑤Dual Attention 场景分割的双注意网络
虽然上下文融合有助于捕获不同比例的对象,但却无法利用全局视图中对象之间的关系。容易忽略不显眼的对象,或是没有综合考虑各个位置的联系和相关性,致使分割的类内不一致性,产生误分割。对于语义分割,每个通道的map相当于是对每一类的响应,因此对于通道间的相关性也应着重考虑。
为解决这一问题,提出了双注意力网络(DANet),基于自注意力机制来分别捕获空间维度和通道维度中的特征依赖关系。两种注意力模块,分别对空间维度和通道维度上的语义依赖关系进行建模。
空间注意力模块与通道注意力模块并联连接,最终将两个模块的结果进行elementwise操作。在特征提取处,作者对ResNet做出以下改动,将最后的downsampling取消,采用空洞卷积来达到即扩大感受野又保持较高空间分辨率的目的,最终的特征图扩大到了原图的1/8。
位置注意模块通过所有位置特征的加权和,有选择地聚合每个位置的特征,不管距离有多远,相似的特征都是相互关联的。同时,通道注意模块通过整合所有通道图之间的关联特征,有选择地强调相互依赖的通道图。将两个注意模块的输出相加,进一步改进特征表示,从而得到更精确的分割结果。
Position Attention Module (PAM)
位置注意力模块旨在利用任意两点特征之间的关联,来相互增强各自特征的表达。
判别特征表示对于场景理解至关重要,场景理解可以通过捕捉远程上下文信息来实现。为了在局部特征上建立丰富的上下文关系模型,引入了位置注意模块。位置注意模块将更广泛的上下文信息编码到局部特征中,从而增强其表征能力。
全局上下文视图,并根据空间注意图选择性地聚合上下文,相似的语义特征实现了相互增益,从而提高了类内的紧凑性和语义一致性。
高层特征的每个通道图都可以被视为一个特定于类的响应,不同的语义响应相互关联。通过利用通道映射之间的相互依赖性,可以强调相互依赖的特征映射,并改进特定语义的特征表示。为此,构建了一个通道注意模块来显式地建模通道之间的相互依赖关系。
为了充分利用远程上下文信息,作者将这两个注意模块中的特征集合起来。具体来说,通过卷积层变换两个注意模块的输出,并执行元素级求和以实现特征融合。最后通过卷积层生成最终的预测图。不采用级联操作,因为它需要更多的GPU内存。不会增加太多参数,但可以有效地增强特征表示。