论文笔记(7):BAM: Bottleneck Attention Module

BAM: Bottleneck Attention Module

BMVC 2018 (oral),是CBAM的姊妹篇,原班人马打造。

摘要

在这项工作中,把重心放在了Attention对于一般深度神经网络的影响上,提出了一个简单但是有效的Attention模型—BAM,它可以结合到任何前向传播卷积神经网络中,模型通过两个分离的路径 channelspatial,得到一个Attention Map,实验验证了算法的有效性。

网络结构图

image-20201221095013776

将BAM放在了Resnet网络中每个stage之间。有趣的是,通过可视化我们可以看到多层BAMs形成了一个分层的注意力机制,这有点像人类的感知机制。BAM在每个stage之间消除了像背景语义特征这样的低层次特征,然后逐渐聚焦于高级的语义–明确的目标(比如图中的狗)。

这个模块的输入是中间的feature map F ∈ R C ∗ H ∗ W F \in \mathbb R^{C ∗ H ∗ W} FRCHWBAM可以得到一个3D的Attention map M ( F ) ∈ R C ∗ H ∗ W M(F)\in \mathbb R^{ C ∗ H ∗ W} M(F)RCHW,然后得到加强的feature map F ′ F′ F
F ′ = F + F ⊗ M ( F ) \mathbf{F}^{\prime}=\mathbf{F}+\mathbf{F} \otimes \mathbf{M}(\mathbf{F}) F=F+FM(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} RCHW

这个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} RCHW,然后将它们合并。

在逐项求和、乘法、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} FcRc11。通过这个向量然后再对全局信息在每个通道进行软编码。试图评估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)R1HW

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

BAM: Bottleneck Attention Module__实现_xu_fu_yong的专栏-CSDN博客

BAM: Bottleneck Attention Module算法笔记_DBG的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/qq_41554005/article/details/111476529