南京大学提出置换注意力机制!SA-Net:融合空域与通道注意力

点击上方“CVer”,选择加"星标"置顶

重磅干货,第一时间送达

本文转载自:AIWalker

标题与作者团队

代码:https://github.com/wofmanaf/SA-Net

论文下载链接:https://arxiv.org/abs/2102.00240


本文是南京大学的杨育彬等人提出了一种新的注意力机制:置换注意力机制。它在空域注意力与通道注意力的基础上,引入了特征分组与通道置换,得到了一种超轻量型的注意力机制。所提方案在ImageNet与MS-COCO数据集上均取得了优于SE、SGE等性能,同时具有更低的计算复杂度和参数量。

Abstract

注意力机制已成为提升CNN性能的一个重要模块,一般来说,常用注意力机制有两种类型:spatial attention与channel attention,它们分别从pixel与channel层面进行注意力机制探索。尽管两者组合(比如BAM、CBAM)可以获得更好的性能,然而它不可避免的会导致计算量的提升。

本文提出了一种高效置换注意力(Shuffle Attention,SA)模块以解决上述问题,它采用置换单元高效组合上述两种类型的注意力机制。具体的说,SA首先将输入沿着通道维度拆分为多组,然后对每一组特征词用置换单元刻画特征在空域与通道维度上的依赖性,最后所有特征进行集成并通过通道置换操作进行组件特征通信。所提SA模块计算高效且有效,以ResNet50为蓝本,其参数增加为300(基准为25.56M),计算量增加为2.76e-3GFLOPs(基准为4.12GFLOPs),而top1精度提升则高达1.34%。

最后作者在公开数据集(包含ImageNet、MS-COCO)上对所提注意力机制进行了验证,所提方案取得了优于SOTA的效果且具有更低的计算复杂度。下图给出了不同注意力机制的性能对比。

image-20210204084128088

本文的主要贡献有如下两点:

  • 引入一种轻量型且有效的注意力模块SA用于提升CNN的性能;

  • 在公开数据集(ImageNet, MS-COCO)上验证所提注意力机制的优异性能,更高的性能、更低的计算复杂度。

Method

接下来,我们将从SA的构成模块出发对其进行介绍;然后介绍如何将其嵌入到现有CNN中;最后可视化并验证所提SA的有效性。

Shuffle Attention

image-20210204084331299

上图给出所提SA模块的整体结构示意图,可以看到它包含以下四个部分:

  • Feature Grouping:它主要用于对输入特征进行分组。假设输入特征为 ,该步骤会将输入X沿着通道维度拆分为G组:。对于每组特征,我们需要通过Spatial与Channel注意力模块生成不同的重要性系数。具体来说,特征 将被沿着通道维度拆分成两个分支:(见上图),一个分支用于学习通道注意力特征,一个分支用于学习空域注意力特征。因此,所学习的注意力特征可以聚焦于“what”与“where”这两种信息。

  • Channel Attention:在通道注意力实现方面,一个可选是SE,然而它会带来过多的参数量,这不利于轻量化注意力模块的设计。为尽可能的轻量化,本文采用了最简单的GAP+Scale+Sigmoid的组合,该过程可以描述如下:

注:表示可学习参数。

  • Spatial Attention:不同于通道注意力,空域注意力聚焦于“where”这个重要因素,它是通道注意力的一个互补。在实现方面,我们首先采用GN对 进行处理得到空域层面的统计信息,然后采用 进行增强。该过程可以描述如下:

注:表示可学习参数。

  • Aggregation:在完成前面两种注意力计算后,我们需要对其进行集成,首先通过简单的Concat进行融合得到:。最后,类似ShuffleNetV2,我们采用通道置换操作进行组间通信。SA的最终输出具有与输入相同的尺寸,这使得SA可以轻易的嵌入到现有CNN架构中。

在与CNN的组合方面,我们采用了与SE完全相同的方式进行嵌入集成。而且SA的实现非常简单,这里给出了核心实现code:

def ShuffleAttention(x, cw, cb, sw, sb, G):
    N, _, H, W = x.shape
    x = x.reshape(N*G, -1, H, W)
    x_0, x_1 = x.chunk(2, dim=1)
    
    xn = avg_pool(x_0)
    xn = cw * xn + cb
    xn = x_0 * sigmoid(xn)
    
    xs = GroupNorm(x_1)
    xs = sw * xs + sb
    xs = x_1 * sigmoid(xs)
    
    out = torch.cat([xn, xs], dim=1)
    out = out.reshape(N, -1, H, W)
    out = channel_shuffle(out, 2)
    return out
    

Visualization

为验证SA是否可以改善特征的语义表达能力,我们在ImageNet上训练了两个模型:SANet50B(即无通道置换)与SANet50(有通道置换)。下图给出了SA_5_3(即最后一个阶段最后一个bottleneck)后不同组的top1精度统计,结果见下图。

image-20210204090727439

正如上图所示,(1) 在SA之后,top1精度表示出了统计上的提升(平均提升约0.4%),这也就意味着特征分组可以显著提升特征的语义表达能力;(2) 不同类别的分布在前面的层中非常相似,这也就意味着在前期特征分组的重要性被不同类别共享;(3) 随着深度加深,不同的特征激活表现出了类别相关性。

为更好的验证SA的有效性,我们基于ImageNet,采用GradCAM对其进行了可视化,见下图。可以看到:SA使得分类模型聚焦于目标信息更相关的区域,进而使得SA模块可以有效的提升分类精度。

image-20210204091637494

Experiments

为更好说明所提方案的有效性,我们在ImageNet与MS-COCO数据集上进行了更充分的对比试验。SANet中的G=64,对应参数 初始化为0, 初始化为1.所有模型采用SGD(weight_decay=1e-4,momentum=0.9)从头开始训练,batch=256,初始学习率为0.1(前5个epoch采用了线性warm-up)。

image-20210204092229292

上表给出了不同注意力机制在ImageNet上的性能对比,从中可以看到:

  • SANet具有与原始ResNet相同的几乎相同计算复杂度和参数量,但取得了1.34%的top1精度提升@ResNet50;

  • 在ResNet101上,所提SANet取得了0.76%的top1精度提升;

  • 相比其他SOTA注意力机制,所提方案具有更高精度、更低计算复杂度。比如,在R而是Net101基础上,SE导致了4.778M参数量提升,14.34Flops提升,0.268%top1精度提升,而SA仅提升了0.002M参数量,5.12Flops提升,0.76%top1精度提升。

image-20210204092713568

上表给出了COCO数据集上目标检测性能对比,可以看到:

  • 无论是单阶段还是双阶段目标检测,SE与SA均能显著提升其性能;

  • SA以更低的计算复杂度取得了优于SE的效果。具体来说,以Faster R-CNN为基准,SA能够以1.0%优于SE@ResNet50;如果采用RetinaNet作为基准,性能提升可以达到1.5%。

image-20210204092943976

上表给出了COCO数据集上实例分割性能对比,可以看到:

  • 相比原始ResNet,SA可以取得显著的性能提升;

  • 相比其他注意力机制,SA可以取得更好的性能,同时具有更低的计算复杂度。

  • 特别的,SA在小目标分割方面的增益更为显著。

与SGE、BAM的对比

看到这里肯定有不少同学会觉得SA与SGE、BAM非常相似。确实非常相似,下面给出了SGE与BAM的核心模块示意图。SA采用了类似SGE的特征分组思想,SA同时还采用了与BAM类似的双重注意力机制(空域注意力+通道注意力)。

SGE
BAM

我们对这三中注意力机制进行更细节的拆分,SGE可以视作多组SE,即SGE= Group+SE;而BAM可以视作空域注意力与通道注意力的组合(注:这里采用加法进行两种注意力融合),即BAM=SPA+CA;(为了与SA区分,这里空域注意力表示为SPA);如果是Concat进行两种注意力融合呢,我们可以表示为Cat(SPA, CA),那么SA则可以表示为:Group+Cat(SPA, CA)。另外还有一点:BAM在分别进行SPA与CA计算时未进行分组,而SA则是进行分组。

全文到此结束,更多消融实验与分析建议各位同学查看原文。

SANet论文下载

后台回复:SANet,即可下载上述论文PDF和源代码,肝起来!

CV资源下载

后台回复:CVPR2020,即可下载代码开源的论文合集

后台回复:ECCV2020,即可下载代码开源的论文合集

后台回复:YOLO,即可下载YOLOv4论文和代码

后台回复:Transformer综述,即可下载两个最新的视觉Transformer综述PDF,肝起来!

重磅!CVer-细分垂直交流群成立

扫码添加CVer助手,可申请加入CVer-细分垂直方向 微信交流群,可申请加入CVer大群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、Transformer、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,才能通过且邀请进群

▲长按加微信群

▲长按关注CVer公众号

整理不易,请给CVer点赞和在看

  • 3
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值