参考
GCNet: Non-local networks meet squeeze-excitation networks and beyond
CBAM: convolutional block attention module
ECA-Net: Efficient channel attention for deep convolutional neural networks
SGE: Spatial group-wise enhance: Improving semantic feature learning in convolutional networks
Shufflenet: An extremely efficient convolutional neural network for mobile devices
Shufflenet V2: practical guidelines for efficient CNN architecture design
DANet: Dual attention network for scene segmentation
SENet: Squeeze-and-excitation networks
方法
Feature Grouping:将X沿着通道维数分组,
X
=
[
X
1
,
⋯
,
X
G
]
,
X
k
∈
R
C
/
G
×
H
×
W
X=\left[X_{1}, \cdots, X_{G}\right], X_{k} \in \mathbb{R}^{C / G \times H \times W}
X=[X1,⋯,XG],Xk∈RC/G×H×W,然后,我们通过注意力模块为每个子特征生成相应的重要系数。具体来说,在每个注意单元的开始,
X
k
X_k
Xk的输入沿着通道维度被分成两个分支
X
k
1
,
X
k
2
∈
R
C
/
2
G
×
H
×
W
X_{k 1}, X_{k 2} \in \mathbb{R}^{C / 2 G \times H \times W}
Xk1,Xk2∈RC/2G×H×W,一个分支用于通过利用通道的相互关系来产生通道注意力映射,而另一个分支用于通过利用特征的相互空间关系来产生空间注意力映射,使得模型可以关注“什么”和“哪里”是有意义的。
Channel Attention:首先通过简单地使用全局平均池化(GAP)来嵌入全局信息,以生成通道方式的统计信息 s ∈ R C / 2 G × 1 × 1 s\in \mathbb{R}^{C / 2 G \times 1 \times 1} s∈RC/2G×1×1,即 s = F g p ( X k 1 ) = 1 H × W ∑ i = 1 H ∑ j = 1 W X k 1 ( i , j ) s=\mathcal{F}_{g p}\left(X_{k 1}\right)=\frac{1}{H \times W} \sum_{i=1}^{H} \sum_{j=1}^{W} X_{k 1}(i, j) s=Fgp(Xk1)=H×W1i=1∑Hj=1∑WXk1(i,j)
此外,还创建了一个紧凑的特征,以便为精确和自适应的选择提供指导。这是通过sigmoid激活的简单门控机制实现的。然后,可以通过以下方式获得通道注意的最终输出 X k 1 ′ = σ ( F c ( s ) ) ⋅ X k 1 = σ ( W 1 s + b 1 ) ⋅ X k 1 X_{k 1}^{\prime}=\sigma\left(\mathcal{F}_{c}(s)\right) \cdot X_{k 1}=\sigma\left(W_{1} s+b_{1}\right) \cdot X_{k 1} Xk1′=σ(Fc(s))⋅Xk1=σ(W1s+b1)⋅Xk1
其中 W 1 ∈ R C / 2 G × 1 × 1 W_{1} \in \mathbb{R}^{C / 2 G \times 1 \times 1} W1∈RC/2G×1×1和 b 1 ∈ R C / 2 G × 1 × 1 b_{1} \in \mathbb{R}^{C / 2 G \times 1 \times 1} b1∈RC/2G×1×1为用于缩放和移动s的参数。
Spatial Attention:空间注意力侧重于“何处”这一信息性部分,是对通道注意力的补充。首先,我们使用 X k 2 X_{k 2} Xk2上的群归一化(Group normalization)来获得空间方式统计。然后,采用 F c ( ) \mathcal{F}_{c}() Fc()来增强 X k 2 {X}_{k 2} Xk2的表示。空间注意力的最终输出通过以下方式获得 X k 2 ′ = σ ( W 2 ⋅ G N ( X k 2 ) + b 2 ) ⋅ X k 2 X_{k 2}^{\prime}=\sigma\left(W_{2} \cdot G N\left(X_{k 2}\right)+b_{2}\right) \cdot X_{k 2} Xk2′=σ(W2⋅GN(Xk2)+b2)⋅Xk2
其中 W 1 ∈ R C / 2 G × 1 × 1 W_{1} \in \mathbb{R}^{C / 2 G \times 1 \times 1} W1∈RC/2G×1×1和 b 1 ∈ R C / 2 G × 1 × 1 b_{1} \in \mathbb{R}^{C / 2 G \times 1 \times 1} b1∈RC/2G×1×1.
然后将两个分支连接起来,使通道数与输入的相同, X k ′ = [ X k 1 ′ , X k 2 ′ ] ∈ R C / G × H × W X_{k}^{\prime}=\left[X_{k 1}^{\prime}, X_{k 2}^{\prime}\right] \in \mathbb{R}^{C / G \times H \times W} Xk′=[Xk1′,Xk2′]∈RC/G×H×W.
Aggregation:之后,所有子特征被聚集。最后,与ShuffleNet v2类似,我们采用了一个“通道shuffle”操作符,使跨组信息流能够沿着通道维度流动,来进行不同子特征之间的信息交流。SA模块的最终输出与X相同大小,使得SA相当容易与现代架构集成。单个SA模块中,每个分支的通道数为C/2G,因此总参数是3C/G(G通常是32或64)。
可视化与解释见图4和5.
实验
输入图像:224×224,G=64,权重衰减1e-4,动量0.9,小批量(mini-batch)大小256,100个epochs,从初始学习速率0.1开始,每30个epochs减少10倍。对于验证集的测试,首先将输入图像的短边调整到256,并使用224×224的中心裁剪进行评估。
分类:表1
消融:表2
目标检测:表3
实例分割:表4
未来,我们将进一步探索SA的空间和通道注意力模块,并将其应用到更多CNN架构中,包括ShuffleNet family,SKNet和MobileNet V3.