Rotate to Attend: Convolutional Triplet Attention Module


在本文中,研究了轻量级但有效的注意力机制,并提出了 Triplet Attention,一种通过使用三支结构捕获跨维交互来计算权重。 对于输入张量,Triplet Attention通过旋转操作和残差变换建立维度间的依赖关系,并以可忽略的计算开销对通道和空间信息进行编码。该方法既简单又有效,并且可以轻松地插入经典Backbone中。


本文方法

​ 所提出的Triplet Attention如下图所示,Triplet Attention由3个平行的Branch组成,其中两个负责捕获通道C和空间H或W之间的跨维交互。最后一个Branch类似于CBAM,用于构建Spatial Attention,最终3个Branch的输出使用平均求和。

本文的目的是研究如何建立廉价但有效的通道注意力模型,而又不涉及任何降维。

1、Cross-Dimension Interaction

​ 传统的计算通道注意力的方法为了计算这些通道的权值,输入张量在空间上通过全局平均池化分解为一个像素。这导致了空间信息的大量丢失,因此在单像素通道上计算注意力时,通道维数和空间维数之间的相互依赖性也不存在。后面提出基于Spatial和Channel的CBAM模型缓解了空间相互依赖的问题,但是通道注意和空间注意是分离的,计算是相互独立的。基于建立空间注意力的方法,本文提出了跨维度交互作用(cross dimension interaction)的概念,通过捕捉空间维度和输入张量通道维度之间的交互作用,解决了这一问题。

​ 这里是通过三个分支分别捕捉输入张量的(C, H),(C, W)和(H, W)维间的依赖关系来引入Triplet Attention中的跨维交互作用。

2、Z-pool

​ Z-pool层负责将C维度的Tensor缩减到2维,将该维上的平均池化特征和最大池化特征连接起来。这使得该层能够保留实际张量的丰富表示,同时缩小其深度以使进一步的计算量更轻。可以用下式表示:

3、Triplet Attention

给定一个输入张量χ RC×H×W,首先将其传递到Triplet Attention模块中的三个分支中。

在第1个分支中,在H维度和C维度之间建立了交互:

  1. 输入张量χ沿H轴逆时针旋转90°,这个旋转张量表示为 χˆ1 的形状为(W×H×C);
  2. 然后经过Z-Pool后的张量χˆ*1的shape为(2×H×C);
  3. 接着通过大小为k×k的标准卷积层,再通过批处理归一化层,得到(1×H×C)的中间输出;
  4. 然后,通过将张量通过sigmoid来生成的注意力权值;
  5. 在最后输出是沿着H轴进行顺时针旋转90°保持和输入的shape一致。

在第2个分支中,在C维度和W维度之间建立了交互:

​ 第二个分支与第一个分支操作基本一样,不同的是输入张量先沿W轴逆时针,最后输出也是沿W轴进行顺时针旋转保持和输入的shape一样,建立了C维度和W维度之间的交互。

在第3个分支中,在H维度和W维度之间建立了交互:

  1. 输入张量X的通道通过Z-pool将变量简化为2;
  2. 将这个形状的简化张量(2×H×W)简化后通过核大小k定义的标准卷积层,然后通过批处理归一化层。
  3. 输出通过sigmoid激活层生成形状为(1×H×W)的注意权值,并将其应用于输入,得到结果。
  4. 然后通过简单的平均将3个分支产生的精细张量(C×H×W)聚合在一起。

最终输出的Tensor:

4、Complexity Analysis

通过与其他标准注意力机制的比较,验证了Triplet Attention的效率,C为该层的输入通道数,r为MLP在计算通道注意力时瓶颈处使用的缩减比,用于2D卷积的核大小用k表示,k<<<C。

posted @ 2020-10-29 18:08  lixinaa  阅读(1093)  评论(0编辑  收藏  举报