Happy · 2021年02月05日

SANet|融合空域与通道注意力,南京大学提出置换注意力机制

首发:AIWalker
作者:HappyAIWalker

image.png

本文是南京大学的杨育彬等人提出了一种新的注意力机制:置换注意力机制。它在空域注意力与通道注意力的基础上,引入了特征分组与通道置换,得到了一种超轻量型的注意力机制。所提方案在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.png
本文的主要贡献有如下两点:

  • 引入一种轻量型且有效的注意力模块SA用于提升CNN的性能;
  • 在公开数据集(ImageNet, MS-COCO)上验证所提注意力机制的优异性能,更高的性能、更低的计算复杂度。

Method

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

Shuffle Attention

image.png

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

image.png
image.png
在与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.png

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

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

image.png

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.png

上表给出了不同注意力机制在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.png

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

  • 无论是单阶段还是双阶段目标检测,SE与SA均能显著提升其性能;
  • SA以更低的计算复杂度取得了优于SE的效果。具体来说,以Faster R-CNN为基准,SA能够以1.0%优于SE@ResNet50;如果采用RetinaNet作为基准,性能提升可以达到1.5%。

image.png

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

  • 相比原始ResNet,SA可以取得显著的性能提升;
  • 相比其他注意力机制,SA可以取得更好的性能,同时具有更低的计算复杂度。
  • 特别的,SA在小目标分割方面的增益更为显著。

与SGE、BAM的对比

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

image.png

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

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

推荐阅读

本文章著作权归作者所有,任何形式的转载都请注明出处。更多动态滤波,图像质量,超分辨相关请关注我的专栏深度学习从入门到精通
推荐阅读
关注数
6197
内容数
191
夯实深度学习知识基础, 涵盖动态滤波,超分辨,轻量级框架等
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息