注意力机制大概分为以下,Spatial domain,Channel domain,Mixed domain以及Self-attention。接下来简单介绍这部分方法。
SE-Net应用比较多,其基本原理是对于每个输出channel,预测一个常数权重,对每个channel加权一下。结构如下图:
第一步每个通道H*W个数全局平均池化得到一个标量,称之为Squeeze,然后两个FC得到01之间的一个权重值,对原始的每个HxW的每个元素乘以对应通道的权重,得到新的feature map,称之为Excitation。任意的原始网络结构,都可以通过这个Squeeze-Excitation的方式进行feature recalibration,如下图。
具体实现上就是一个Global Average Pooling-FC-ReLU-FC-Sigmoid,第一层的FC会把通道降下来,然后第二层FC再把通道升上去,得到和通道数相同的C个权重,每个权重用于给对应的一个通道进行加权。上图中的r就是缩减系数,实验确定选取16,可以得到较好的性能并且计算量相对较小。
Convolutional Block Attention Module (CBAM) 表示卷积模块的注意力机制模块。是一种结合了空间(spatial)和通道(channel)的注意力机制模块。相比于senet只关注通道(channel)的注意力机制可以取得更好的效果。
通道注意力:将输入的featuremap,分别经过基于width和height的global max pooling 和global average pooling,然后分别经过MLP。将MLP输出的特征进行基于elementwise的加和操作,再经过sigmoid激活操作,生成最终的channel attention featuremap。将该channel attention featuremap和input featuremap做elementwise乘法操作,生成Spatial attention模块需要的输入特征。
空间注意力:将Channel attention模块输出的特征图作为本模块的输入特征图。首先做一个基于channel的global max pooling 和global average pooling,然后将这2个结果基于channel 做concat操作。然后经过一个卷积操作,降维为1个channel。再经过sigmoid生成spatial attention feature。最后将该feature和该模块的输入feature做乘法,得到最终生成的特征。
本文提出了一个有效的通道注意(ECA)模块,它只涉及少量的(k<=9)参数。
ECANet主要对SENet模块进行了一些改进,提出了一种不降维的局部跨信道交互策略(ECA模块)和自适应选择一维卷积核大小的方法,从而实现了性能上的提优。
如图 (b)所示,在不降低维数的通道级全局平均池化之后,通过考虑每个通道及其k近邻来捕获局部跨通道交互信息。通过大小为k的快速一维卷积来捕获了跨通道交互信息。
ECA可以通过大小为k的快速一维卷积来有效实现,其中卷积核大小k代表了局部跨信道交互的覆盖率,即该通道附近有多少邻居参与了这个通道的注意力预测。
为了避免对k进行手动调优,本文提出了一种方法来自适应地确定k,k决定了交互的覆盖范围。k与通道维数c有关,给定通道维C,自适应确定内核大小k:
这里 表示最近的奇数t。本文中将γ设置为2,b设置为1。
Non-local不同查询位置的注意力图可视化
为了捕获长距离依赖关系,产生了两类方法:1)采用自注意力机制来建模query对的关系;2)对query-independent(可以理解为无query依赖)的全局上下文建模。NLNet就是采用自注意力机制来建模像素对关系。然而NLNet对于每一个位置学习不受位置依赖的attention map,造成了大量的计算浪费。SENet用全局上下文对不同通道进行权值重标定,来调整通道依赖。然而,采用权值重标定的特征融合,不能充分利用全局上下文。通过严格的实验分析,作者发现non-local network的全局上下文在不同位置几乎是相同的,这表明学习到了无位置依赖的全局上下文。本文提出了GCNet,即能够像NLNet一样有效的对全局上下文建模,又能够像SENet一样轻量。
本文的GCNet,是一个不依赖于查询的形式,而且保持NLNet准确度的同时,减少计算量。
简化版的non-local block可以抽象为3个步骤:
(a)全局attention pooling:采用1x1卷积Wk和softmax函数来获取attention权值,然后执行attention pooling来获得全局上下文特征。
(b)特征转换:采用1x1卷积Wv。
(c)特征聚合:采用相加操作将全局上下文特征聚合到每个位置的特征上。
本文所设计的SC Net可以通过自校正操作 自适应地在每个空间位置周围建立了远程空间和通道间依存关系;设计简单且通用,可以轻松增强标准卷积层的性能,而不会引入额外的参数和复杂性。
作为标准卷积的增强版本,自校正卷积使每个空间位置能自适应地编码远距离区域的信息上下文,打破了在小区域内(3*3)进行卷积操作的传统。自校正卷积有助于很好地捕获整个判别区域,可以更准确、更完整地定位目标物,并且采用SCNet的输出对前景有明显的分割。
自校正卷积具体步骤如图所示:
第一步,输入特征图X为C * H * W大小,拆分为两个C/2 * H * W大小的X1,X2;
第二步,卷积核K的维度为C * C * H * W,将K分为4个部分,每份的作用各不相同,分别记为K1,K2,K3,K4,其维度均为C/2 * C/2 * H * W,来收集不同类型的上下文信息。(K1,K2,K3)对X1进行自校正操作,得到Y1。此外,我们进行了一个简单的卷积操作:Y2 = F1(X2) = X2 * K1,目的是保留原始的空间背景。
第三步,对自校正尺度空间进行处理(Self-Calibration)
对特征X1采用平均池化下采样r倍(论文r=4,公式2),再进行特征提取及上采样(双线性插值,公式3),经过Sigmoid激活函数对K3卷积提取后的特征进行校准得到输出特征Y1。σ为sigmoid函数,UP为上采样。
第四步,对原尺度特征空间进行处理,对特征X2经过K1卷积提取得到特征Y2;
第五步,对两个尺度空间输出特征Y1,Y2进行拼接操作,得到最终输出特征Y。