BAM: Bottleneck Attention Module
BMVC 2018 (oral),是CBAM的姊妹篇,原班人马打造。
摘要
在这项工作中,把重心放在了Attention
对于一般深度神经网络的影响上,提出了一个简单但是有效的Attention
模型—BAM
,它可以结合到任何前向传播卷积神经网络中,模型通过两个分离的路径 channel
和spatial
,得到一个Attention Map
,实验验证了算法的有效性。
网络结构图
将BAM放在了
Resnet
网络中每个stage之间。有趣的是,通过可视化我们可以看到多层BAMs形成了一个分层的注意力机制,这有点像人类的感知机制。BAM
在每个stage之间消除了像背景语义特征这样的低层次特征,然后逐渐聚焦于高级的语义–明确的目标(比如图中的狗)。
这个模块的输入是中间的feature map
F ∈ R C ∗ H ∗ W F \in \mathbb R^{C ∗ H ∗ W} F∈RC∗H∗W,BAM
可以得到一个3D的Attention map
M ( F ) ∈ R C ∗ H ∗ W M(F)\in \mathbb R^{ C ∗ H ∗ W} M(F)∈RC∗H∗W,然后得到加强的feature map
F ′ F′ F′:
F ′ = F + F ⊗ M ( F ) \mathbf{F}^{\prime}=\mathbf{F}+\mathbf{F} \otimes \mathbf{M}(\mathbf{F}) F′=F+F⊗M(F)
为了设计一个有效且强大的模型,Attention map
M ( F ) M(F) M(F)通过两个单独的Attention
分支通道注意力channel attention
: M c ( F ) M_c(F) Mc(F) 和空间注意力spatial attention
: M s ( F ) M_s(F) Ms(F)。把两个分支合在一起之后进行加和之后激活。这时 M ( F ) M(F) M(F)就变成:
M ( F ) = σ ( M c ( F ) + M s ( F ) ) M(F)= \sigma(M_c(F)+M_s(F)) M(F)=σ(Mc(F)+Ms(F))
这里 σ \sigma σ 代表sigmoid函数,两个分支的形状在加和之前都会被整形成 R C ∗ H ∗ W \mathbb R^{ C ∗ H ∗ W} RC∗H∗W
这个module
计算对应的这里有两个超参数 dilation value
( d d d)和reduction ratio
( r r r)。 d d d参数决定了感受野大小这对空间分支聚合上下文信息非常重要, r r r参数决定了通道分支和空间分支的压缩比例。这里我们设置 d = 4 , r = 16 d=4 ,r=16 d=4,r=16。
由于这两个注意图的形状不同,在加和之前会把将注意图扩展到 R C ∗ H ∗ W \mathbb R^{C ∗ H ∗ W} RC∗H∗W,然后将它们合并。
在逐项求和、乘法、max运算等多种分支组合方法中,针对梯度流的特点,选择逐项求和。我们通过实证验证了基于元素的求和在三种选择中效果最好。求和后,取一个sigmoid函数进行激活,得到0到1范围内的最终三维注意映射 M ( F ) M(F) M(F)。将该三维注意图与输入特征图 F F F巧妙相乘,然后将其添加到原始输入特征图上,得到细化后的特征图 F ′ F′ F′
channel attention branch
为了聚合feature map
在每个通道维度,我们采用全局平均池化得到代表空间的向量信息 F c ∈ R c ∗ 1 ∗ 1 F_c \in \mathbb R^{c*1*1} Fc∈Rc∗1∗1。通过这个向量然后再对全局信息在每个通道进行软编码。试图评估Attention
在每个通道的效果,使用了一个多层感知MLP
用一层隐藏层(隐藏层的维度较低,有编解码的内涵在里面)。在MLP
之后,我们增加了BN
去调整分布和空间分支一样的输出,channel attention
可以被计算为:
M c ( F ) = B N ( M L P ( A vgPool ( F ) ) ) = B N ( W 1 ( W 0 A v g Pool ( F ) + b 0 ) + b 1 ) \begin{aligned} \mathbf{M}_{\mathbf{c}}(\mathbf{F}) &=B N(M L P(A \operatorname{vgPool}(\mathbf{F}))) \\ &=B N\left(\mathbf{W}_{\mathbf{1}}\left(\mathbf{W}_{0} A v g \operatorname{Pool}(\mathbf{F})+\mathbf{b}_{0}\right)+\mathbf{b}_{1}\right) \end{aligned} Mc(F)=BN(MLP(AvgPool(F)))=BN(W1(W0AvgPool(F)+b0)+b1)
Spatial attention branch
这个空间分支产生了空间Attention
去增强或者抑制特征在不同的空间位置,众所周知,利用上下文信息是去知道应该关注哪些位置的关键点。在这里我们为了高效性运用空洞卷积去增大感受野。
我们观察到,与标准卷积相比,空洞卷积有助于构造更有效的spatial map
。
M s ( F ) ∈ R 1 ∗ H ∗ W \mathbf{M}_{\mathbf{s}}(\mathbf{F}) \in \mathbb R^{1*H*W} Ms(F)∈R1∗H∗W
M s ( F ) = B N ( f 3 1 × 1 ( f 2 3 × 3 ( f 1 3 × 3 ( f 0 1 × 1 ( F ) ) ) ) ) \mathbf{M}_{\mathbf{s}}(\mathbf{F})=B N\left(f_{3}^{1 \times 1}\left(f_{2}^{3 \times 3}\left(f_{1}^{3 \times 3}\left(f_{0}^{1 \times 1}(\mathbf{F})\right)\right)\right)\right) Ms(F)=BN(f31×1(f23×3(f13×3(f01×1(F)))))
- 空洞卷积的加入:增大感受野
- 压缩比:增加编码的内涵,减少计算量
- 1*1卷积核:减少计算量
实验
做了如下的实验
针对不同压缩比例参数的参数搜索实验
针对不同空洞卷积参数的参数搜索实验
针对两个分支都有,仅有一个分支,没有分支的消融实验
针对两个分支拼接实验的方式进行遍历实验
针对BAM模块和其他相似类型模块的比较实验
现有网络加入之后的多数据集验证
针对空洞卷积的实验
表1为四种不同dilation
值的对比结果。虽然dilation
值为4时已经饱和,但膨胀值越大,性能改善越明显。这种现象可以用上下文推理来解释,上下文推理在密集预测任务中早就得到了广泛的应用。
由于空洞卷积会形成感受野的指数级扩展,因此它使我们的模块能够无缝地聚合上下文信息。注意,标准卷积(即dilation
值为1)的准确率最低,这表明上下文先验在推断空间注意图方面的有效性。
针对链接方式的实验
从经验上证实了元素求和
这种方式获得了最好的性能。
就
信息流
而言,元素求和是整合和保护来自前几层的信息的有效方法。在前向阶段,它使网络能够使用来自通道和空间两个互补分支的信息,而不会丢失任何信息。
在后向阶段,梯度被平均分配给所有输入,导致有效的训练。
逐元素乘积可以将大的梯度赋给小的输入,使得网络难以收敛,从而产生较差的性能。
元素方向的最大值,只将梯度路由到较高的输入,在某种程度上提供了正则化效果,导致不稳定的训练,因为我们的模块几乎没有参数。
请注意,所有三种不同的实现都优于基线,这表明利用每个分支是至关重要的,而最佳组合策略进一步提高了性能。
参考文献
[1807.06514] BAM: Bottleneck Attention Module