前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >即插即用 | 超越CBAM,全新注意力机制,GAM不计成本提高精度(附Pytorch实现)

即插即用 | 超越CBAM,全新注意力机制,GAM不计成本提高精度(附Pytorch实现)

作者头像
集智书童公众号
发布2021-12-15 17:26:30
5.7K0
发布2021-12-15 17:26:30
举报
文章被收录于专栏:集智书童

为了提高计算机视觉任务的性能,人们研究了各种注意力机制。然而,以往的方法忽略了保留通道和空间方面的信息以增强跨维度交互的重要性。因此,本文提出了一种通过减少信息弥散和放大全局交互表示来提高深度神经网络性能的全局注意力机制。 本文引入了3D-permutation 与多层感知器的通道注意力和卷积空间注意力子模块。在CIFAR-100和ImageNet-1K上对所提出的图像分类机制的评估表明,本文的方法稳定地优于最近的几个注意力机制,包括ResNet和轻量级的MobileNet。

1简介

卷积神经网络已广泛应用于计算机视觉领域的许多任务和应用中。研究人员发现,CNN在提取深度视觉表征方面表现良好。随着CNN相关技术的改进,ImageNet数据集的图像分类准确率在过去9年里从63%提高到了90%。这一成就也归功于ImageNet数据集的复杂性,这为相关研究提供了难得的机会。由于它覆盖的真实场景的多样性和规模,有利于传统的图像分类、表征学习、迁移学习等研究。特别是,它也给注意力机制带来了挑战。

近年来,注意力机制在多个应用中不断提高性能,引起了研究兴趣。Wang等人使用编码-解码器residual attention模块对特征图进行细化,以获得更好的性能。Hu 等人分别使用空间注意力机制和通道注意力机制,获得了更高的准确率。然而,由于信息减少和维度分离,这些机制利用了有限的感受野的视觉表征。在这个过程中,它们失去了全局空间通道的相互作用。

本文的研究目标是跨越空间通道维度研究注意力机制。提出了一种“全局”注意力机制,它保留信息以放大“全局”跨维度的交互作用。因此,将所提出的方法命名为全局注意力机制(GAM)。

2相关工作

注意力机制在图像分类任务中的性能改进已经有很多研究。

SENet在抑制不重要的像素时,也带来了效率较低的问题。

CBAM依次进行通道和空间注意力操作,而BAM并行进行。但它们都忽略了通道与空间的相互作用,从而丢失了跨维信息。

考虑到跨维度交互的重要性,TAM通过利用每一对三维通道、空间宽度和空间高度之间的注意力权重来提高效率。然而,注意力操作每次仍然应用于两个维度,而不是全部三个维度。

为了放大跨维度的交互作用,本文提出了一种能够在所有三个维度上捕捉重要特征的注意力机制。

3GAM注意力机制

本文的目标是设计一种注意力机制能够在减少信息弥散的情况下也能放大全局维交互特征。作者采用序贯的通道-空间注意力机制并重新设计了CBAM子模块。整个过程如图1所示,并在公式1和2。给定输入特征映射F_1\in R^{C×H×W} ,中间状态F_2 和输出F_3 定义为:

其中M_cM_s 分别为通道注意力图和空间注意力图; 表示按元素进行乘法操作。

通道注意力子模块

通道注意子模块使用三维排列来在三个维度上保留信息。然后,它用一个两层的MLP(多层感知器)放大跨维通道-空间依赖性。(MLP是一种编码-解码器结构,与BAM相同,其压缩比为r);通道注意子模块如图2所示:

空间注意力子模块

在空间注意力子模块中,为了关注空间信息,使用两个卷积层进行空间信息融合。还从通道注意力子模块中使用了与BAM相同的缩减比r。与此同时,由于最大池化操作减少了信息的使用,产生了消极的影响。这里删除了池化操作以进一步保留特性映射。因此,空间注意力模块有时会显著增加参数的数量。为了防止参数显著增加,在ResNet50中采用带Channel Shuffle的Group卷积。无Group卷积的空间注意力子模块如图3所示:

Pytorch实现GAM注意力机制
代码语言:javascript
复制
import torch.nn as nn
import torch


class GAM_Attention(nn.Module):
    def __init__(self, in_channels, out_channels, rate=4):
        super(GAM_Attention, self).__init__()

        self.channel_attention = nn.Sequential(
            nn.Linear(in_channels, int(in_channels / rate)),
            nn.ReLU(inplace=True),
            nn.Linear(int(in_channels / rate), in_channels)
        )

        self.spatial_attention = nn.Sequential(
            nn.Conv2d(in_channels, int(in_channels / rate), kernel_size=7, padding=3),
            nn.BatchNorm2d(int(in_channels / rate)),
            nn.ReLU(inplace=True),
            nn.Conv2d(int(in_channels / rate), out_channels, kernel_size=7, padding=3),
            nn.BatchNorm2d(out_channels)
        )

    def forward(self, x):
        b, c, h, w = x.shape
        x_permute = x.permute(0, 2, 3, 1).view(b, -1, c)
        x_att_permute = self.channel_attention(x_permute).view(b, h, w, c)
        x_channel_att = x_att_permute.permute(0, 3, 1, 2)

        x = x * x_channel_att

        x_spatial_att = self.spatial_attention(x).sigmoid()
        out = x * x_spatial_att

        return out


if __name__ == '__main__':
    x = torch.randn(1, 64, 32, 48)
    b, c, h, w = x.shape
    net = GAM_Attention(in_channels=c, out_channels=c)
    y = net(x)

4实验

4.1 CIFAR-100

4.2 ImageNet-1K

4.3 消融实验

5参考

[1].Global Attention Mechanism: Retain Information to Enhance Channel-Spatial Interactions

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 集智书童 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1简介
  • 2相关工作
  • 3GAM注意力机制
    • 通道注意力子模块
      • 空间注意力子模块
        • Pytorch实现GAM注意力机制
        • 4实验
          • 4.1 CIFAR-100
            • 4.2 ImageNet-1K
              • 4.3 消融实验
              • 5参考
              相关产品与服务
              图像处理
              图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档