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
)
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
评论记录:
回复评论: