论文阅读之:SA-NET: SHUFFLE ATTENTION FOR DEEP CONVOLUTIONAL NEURAL NETWORKS

2022/1/27 6:06:20

本文主要是介绍论文阅读之:SA-NET: SHUFFLE ATTENTION FOR DEEP CONVOLUTIONAL NEURAL NETWORKS,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • Abstract
  • Introduction
  • 相关工作
    • 多分支网络 (multi-branch architectures)
    • 分组特征(grouped features)
    • attention 机制(attention mechanism)
  • Shuffle Attention
    • pipeline
    • 特征分组(feature grouping)
    • channel attention(通道 attention)
    • 空间 attention(spatial attention)
      • Aggregation
  • 代码和资源链接

Abstract

  • 之前的 attention 方法都是结合 spatial attention 和 channel attention 结合的方法来捕捉 pixel-wise(逐像素的)关系和各个通道之间的 dependecy;虽然结合他们来进行任务会提高性能,但是不可避免地引入很多冗余参数
  • 这篇文章采用了 shuffle attention:
    • 将特征按照通道进行分组,然后对 group 后的特征进行并行处理
    • 然后将这些处理后的并行部分进行 concate 来恢复原有的通道维度,并使用一个 “channel shuffle” 算子来建立不同(sub-features)子特征之间的关系

Introduction

  • attention 的引用是为了注意有效的特征而抑制噪声和非必要的特征
  • attention 主要是两类工作,通道 attention 和 空间 attention,他们都是通过使用不同的聚合策略来聚合所有 position 的特征来起到最终增强特征图的目的
  • 然而他们无可避免参数的大量增长
  • 有一些工作提出简化计算 attention 的过程,ECA-Net 通过提出使用一个 1-D 的卷积层来简化计算 SE block 中通道 weight。SGE 将特征通道分成几个 group 的 sub-features 来代表不同的语义信息,并且结合一个 attention mask 的空间 attention 机制来 scale 每个 feature group 中的特征向量。
  • 然而上述的工作都不能充分发挥 spatial attention 和 channel attention 的优势,因此都是 less efficient 的
  • 为了解决 “使用一个轻量化的 attention 机制来更高效地结合 channel 和 spatial attention” 本文先回顾一下 shuffleNetv2
    在这里插入图片描述
  • 首先将输入的 c c c 通道特征分成 c − c c-c c−c’ 以及 c ′ c' c′ 个通道;然后通过几个卷积层去获取 high level 的特征表示;接下来将这两个分支 concate 起来保持与输入通道 c 相同的通道维度;最后采用了一个 channel shuffle 算子来建立两个分支之间的 communication。为了加速运算, SGE 提出了一种分组策略,可以将输入的特征图分入多个组,方便进行并行的计算操作,以便将多个组的 sub-features 进行并行地提升操作。
  • Shuffle Attention 也是基于这种思路提出的。
  • 本文主要贡献:
    • 提出了一个轻量化的 attention module,按照通道切分特征成几个 sub-features,并对每个 sub-features 进行 channel 和 spatial 的 attention 操作;并使用一个 shuffle unit 来整合这些 sub-features 的 channel 和 spatial attention module
    • 在 imagenet 和 coco 上验证了这种 attention 在更低复杂度的情况下超过了 state of the art 的杰出表现

相关工作

多分支网络 (multi-branch architectures)

  • 多分支网络近年很常用,设计原则是 “split-transform-merge”,避免了网络一直往深度设计,简化了训练难度
  • inception 系列网络是分支网络的代表作
  • resnet 也可以看做是分支网络,一个分支是 mapping identity
  • SKNet 和 ShuffleNet 都是 inception 的衍生工作,区别在:
    • SKNet 使用了自适应选择机制 adaptive selection mechanism 来实现网络中每个神经元的自适应感受野尺寸(adaptive receptive field size of neurons)
    • ShuffleNets 进一步将“channel split”和“channel shuffle”算子合并乘逐元素操作(element-wise operations),以在速度和准确性之间进行权衡

分组特征(grouped features)

  • mobileNet 和 shufflenet 把每个通道看做一组,并且在他们之间建模通道间的关系
  • 胶囊网络(capsuleNets)将每个分组的神经元建模为一个胶囊,其中 active 胶囊中的神经元活动代表图像中特定实体的各种属性
  • SGE 升级了胶囊网络并且将 channel 分成了多个 sub-features 来学习不同的语义信息。

attention 机制(attention mechanism)

  • self attention (自注意力)将一个位置的上下文 context 计算为图像中所有位置的加权和
  • SE 模块通过两个个全连接层建模了一个特征图通道间的关系(哪个通道的信息是更加重要的)
  • ECA-Net 通过 1-D 卷积来生成通道权重并且显著地降低了 SE 的模块的复杂度
  • wang 等人提出了 non-local(NL)模块,通过计算特征图中每个空间点之间的相关矩阵来生成大尺寸的 attention map
  • CBAM,GCNet 和 SGE 都通过有序地结合 spatial attention 和 channel attention 来实现功能提升
  • DANet 通过对来自不同分支的两个注意力模块求和,自适应地将局部特征与其全局依赖项相结合。

Shuffle Attention

pipeline

在这里插入图片描述

特征分组(feature grouping)

  • 给定特征 X ∈ R C × H × W X\in \R^{C×H×W} X∈RC×H×W,将特征按照通道分成 G G G 个组 X = [ X 1 , X 2 , . . . , X G ] , X k ∈ R C / G × H × W X=[X_1,X_2,...,X_G],X_k \in \R^{C/G×H×W} X=[X1​,X2​,...,XG​],Xk​∈RC/G×H×W 每一个 sub-feature X k X_k Xk​ 都会在训练过程中逐渐获得一个特殊的语义相应(gradually captures a specific semantic response)
  • 然后,我们通过注意力模块为每个子特征生成相应的重要性系数。特别的,在 attention 开始的时候,对于每一个组中的 X k X_k Xk​ 都分成两个部分 X k 1 , X k 2 ∈ R C / 2 G × H × W X_{k1},X_{k2} \in \R^{C/2G×H×W} Xk1​,Xk2​∈RC/2G×H×W
  • 这每个 group 中被切分成的两部分,一个分支利用通道间的相互关系生成 channel attention,而另一个分支利用特征的空间关系生成 spatial attention,从而使模型专注于“what”和“where”。

channel attention(通道 attention)

  • 为了克服 SE 通道 attention 中存在的弊端,本文采用了一种可选择的方式,这种方式首先采用 global average pooling 来产生 channel-wise 的数据,维度为 R C / 2 G × 1 × 1 \R^{C/2G×1×1} RC/2G×1×1,公式表示为:
    在这里插入图片描述
  • 这个公式表示的就是,对于 X k 1 X_{k1} Xk1​ 沿着通道的维度,对每个通道的特征图进行求和得到一个值,然后除以这个图的点的数量,即:对特征图的每个通道进行加和求平均,并用这个值来代替这个通道的特征信息
  • 然后通过 F c F_c Fc​ 进行运算,并通过 sigmoid 进行激活来产生每个通道对应的 attention 权重
    在这里插入图片描述
  • 其中 F c ( ⋅ ) F_c(·) Fc​(⋅) 运算就是对 s s s 乘了一个矩阵 W 1 ∈ R C / 2 G × 1 × 1 W_1 \in \R^{C/2G×1×1} W1​∈RC/2G×1×1 再加一个偏置 b 1 ∈ R C / 2 G × 1 × 1 b_1\in \R^{C/2G×1×1} b1​∈RC/2G×1×1 他们的作用是来 scale 放缩和转换shift s s s
  • 整个 channel attention 部分的代码如下
    在这里插入图片描述

空间 attention(spatial attention)

  • 空间 attention 关注的是 “where” 即,“看哪里” 的问题
  • 首先先用一个 group_norm (GN) 对 X k 2 X_{k2} Xk2​ 进行处理来获得 spatial-wise 的数据。
  • 接着使用 F c ( ⋅ ) F_c(·) Fc​(⋅) 来提升 X k 2 ^ \hat{X_{k2}} Xk2​^​,最终 spatial attention 被表示为:
    在这里插入图片描述
  • 接下来将两个特征 X k 1 , X k 2 X_{k1},X_{k2} Xk1​,Xk2​ 进行结合 aggregation

Aggregation

  • 类似 shufflenetv2,我们采用“channel shuffle” 算子来实现跨组信息(cross_group)沿着通道维度流动。 SA 模块的最终输出与 X X X 大小相同,使 SA 很容易与现代架构集成
  • W 1 , b 1 , W 2 , b 2 W_1,b_1,W_2,b_2 W1​,b1​,W2​,b2​ 和 Group Norm 超参数只是在 SA 中引入的参数。
  • 因为 X k 1 , X k 2 X_{k1},X_{k2} Xk1​,Xk2​ 分别是有 C / 2 G C/2G C/2G 的通道数,再加上 W , b W,b W,b 引入的参数,可得到总的参数数量为 3 C / G 3C/G 3C/G,这与网络结构数百万的参数相比可以说是微乎其微的,所以 SA 模块是非常的轻量级模块

代码和资源链接

External-Attention-pytorch/model/attention/ShuffleAttention.py /



这篇关于论文阅读之:SA-NET: SHUFFLE ATTENTION FOR DEEP CONVOLUTIONAL NEURAL NETWORKS的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程