注意力机制(Attention Mechanism)源于人类视觉的研究,在认知科学中,人类会选择性地关注所有信息的一部分,而忽略其他可见信息。为了合理利用有限的资源,就需要选择视觉区域的特定部分,并重点关注它。
在神经网络中,attention机制通常是一个额外的神经网络,能够选择输入的某些部分或给不同部分分配不同的权重,从而能够在大量信息中筛选出重要的信息。
1、以inception网络为例,给并联的不同卷积层不同的权重
1、不同通道赋予不同的权重
通过对通道维度(channel-wise)增加attention机制,包括squeeze和excitation两个关键操作,通过自动学习的方式(用另一个神经网络实现),获取每个特征通道的最佳权重值。
其中不同的颜色代表每个通道的不同权重。
通过全局平均池化(global average pooling),将每个通道的二位特征( H × W H\times W H×W)压缩成1个实数,经squeeze后变成 1 × 1 × C 1\times 1\times C 1×1×C:
z c = F s q ( u c ) = 1 H × W ∑ i = 1 H ∑ j = 1 W u c ( i , j ) \begin{aligned} z_c=F_{sq}(u_c) =\frac{1}{H\times W}\sum_{i=1}^H\sum_{j=1}^Wu_c(i,j) \end{aligned} zc=Fsq(uc)=H×W1i=1∑Hj=1∑Wuc(i,j)
为每一个特征通道生成一个权重值,通过两个全连接层组成一个Bottleneck结构去构建通道间的相关性,并输出和输入特征相同数目的权重值。
FC+Relu+FC+Sigmoid就是excitation操作,具体过程是通过一个全连接层(FC)将特征维度降低到 1 / r 1/r 1/r,然后通过Relu激活函数再经过一个全连接层将特征维度恢复,最后通过sigmoid函数完成归一化。
excitation操作中的参数随模型 m i n i m i z e l o s s minimize\ loss minimize loss不断迭代更新。
将得到的权重加权到每个通道特征上,通过对应通道值相乘完成引入attention过程。
(1)对比加入与不加入SE block的效果,SE-Net核心是通过全连接网络根据loss自动学习权重,而不是直接根据数值分布判断,使得有效的特征通道权重更大。
(2)两个全连接层比一个全连接层的好处:增加了非线性,可以更好地拟合通道间的复杂性
CBAM结合了空间(spatial)和通道(channel)的attention机制模块,不像SE-Net只关注通道,因此可以取得更好的效果,attention模块架构如下:
主要包括通道Attention模块和空间Attention模块两部分。
将输入feature map分别经过global max pooling和global avgerage pooling,然后经过MLP转换,再通过elementwise的加和操作将两种结果合并,并进行sigmoid归一化,公式如下:
M c ( F ) = σ ( M L P ( A v g P o o l ( F ) ) + M L P ( M a x P o o l ( F ) ) ) = σ ( W 1 ( W 0 ( F a v g c ) ) + W 1 ( W 0 ( F m a x c ) ) ) , 其 中 W 0 ∈ R C / r × C , W 1 ∈ R C × C / r , σ ( ⋅ ) 为 s i g m o i d 操 作 , r 为 减 少 率 W 0 后 接 R E L U 激 活 。 \begin{aligned} M_c(F)=\sigma(MLP(AvgPool(F)) + MLP(MaxPool(F)))\\=\sigma(W_1(W_0(F_{avg}^c)) + W_1(W_0(F_{max}^c))),\\其中W_0\in R^{C/r\times C},W_1\in R^{C\times C/r},\sigma(\cdot)为sigmoid操作,r为减少率W_0后接RELU激活。 \end{aligned} Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))=σ(W1(W0(Favgc))+W1(W0(Fmaxc))),其中W0∈RC/r×C,W1∈RC×C/r,σ(⋅)为sigmoid操作,r为减少率W0后接RELU激活。
将通道Attention模块的输出作为输入,首先经过基于通道的global max pooling和global avgerage pooling,并将结果在channel维度concat在一起,在经过一个卷积变成单通道,并通过sigmoid归一化生成spatial attention feature,公式如下:
M s ( F ) = σ ( f 7 × 7 ( [ A v g P o o l ( F ) ; M a x P o o l ( F ) ] ) ) = σ ( f 7 × 7 ( [ F a v g s ; F m a x s ] ) ) \begin{aligned} M_s(F)=\sigma(f^{7\times 7}([AvgPool(F);MaxPool(F)]))\\ =\sigma(f^{7\times 7}([F_{avg}^s;F_{max}^s])) \end{aligned} Ms(F)=σ(f7×7([AvgPool(F);MaxPool(F)]))=σ(f7×7([Favgs;Fmaxs]))
其中, σ ( ⋅ ) \sigma(\cdot) σ(⋅)是sigmoid操作, f 7 × 7 f^{7\times 7} f7×7是指核大小为 7 × 7 7\times 7 7×7的卷积操作。
最后将其与输入做乘法,得到处理后的特征。
CBAM虽然是基于空间和通道,但是空间Attention和通道Attention是分离的,Triplet Attention模块旨在捕捉Cross-dimension交互,并且对通道attention和空间attention的建模几乎无参数。
Triplet Attention由3个平行的Branch组成,其中两个负责捕获通道C和空间( W × H W\times H W×H)之间的跨纬交互,最后一个类似CBAM用来构建空间attention,最后将三个Branch的输出进行平均聚合。
通过三个分支分别捕捉输入张量的(C,H), (C,W), (H,W)维间的依赖关系来引入Attention中的跨维度交互作用。
负责将C维度的Tensor缩减到2维,即将该维上的平均汇集特征和最大汇集特征连接在一起。这使得该层能够保留实际张量的丰富表示,同时缩小其深度以使进一步的计算量更轻,如下所示:
Z − p o o l ( x ) = [ M a x P o o l 0 d ( x ) , A v g P o o l 0 d ( x ) ] \begin{aligned} Z-pool(x) = [MaxPool_{0d}(x), AvgPool_{0d}(x)] \end{aligned} Z−pool(x)=[MaxPool0d(x),AvgPool0d(x)]
给定输入张量 x ∈ R C × H × W x\in R^{C\times H\times W} x∈RC×H×W,将其传递到Triplet Attention模块中的三个分支中。
在第1个分支中,建立(H,C)维交互:
将输入张量 x x x沿H轴逆时针旋转90° ,此时形状为 ( W × H × C ) (W\times H\times C) (W×H×C),经过Z-pool后变为 ( 2 × H × C ) (2\times H\times C) (2×H×C),再通过 k × k k\times k k×k标准卷积层和BN(batch normalize)得到 ( 1 × H × C ) (1\times H\times C) (1×H×C)的中间输出,然后sigmoid生成attention权值,最后输出是沿着H轴顺时针旋转90°保持和输入shape一致。
在第2个分支中,建立(C,W)维交互:
将输入张量 x x x沿W轴逆时针旋转90° ,此时形状为 ( H × C × W ) (H\times C\times W) (H×C×W),经过Z-pool后变为 ( 2 × C × W ) (2\times C\times W) (2×C×W),再通过 k × k k\times k k×k标准卷积层和BN(batch normalize)得到 ( 1 × C × W ) (1\times C\times W) (1×C×W)的中间输出,然后sigmoid生成attention权值,最后输出是沿着W轴顺时针旋转90°保持和输入shape一致。
在第3个分支中,建立(H,W)维交互:
输入张量 x x x维度经Z-pool变为 ( 2 × H × W ) (2\times H\times W) (2×H×W),再经过标准卷积层和BN,通过sigmoid生成形状为 ( 1 × W × H ) (1\times W\times H) (1×W×H)的attention权值,应用于输入 x x x。
最后将三个分支产生的张量聚合在一起,即求平均。