论文阅读之: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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享