本文首发于微信大众号 CVHub,不得以任何办法转载到其它平台,仅供学习沟通,违者必究!

导读

视觉留意力机制是人类视觉所特有的一种大脑信号处理机制,而深度学习中的留意力机制正是借鉴了人类视觉的留意力思维办法。一般来说,人类在观察外界环境时会敏捷的扫描全景,然后依据大脑信号的处理快速的确定要点重视的目标区域,终究构成留意力焦点。该机制能够帮助人类在有限的资源下,从很多无关布景区域中筛选出具有重要价值信息的目标区域,帮助人类愈加高效的处理视觉信息。

CVHub | 一文看尽深度学习中的各种注意力机制

起源

留意力机制在核算机视觉范畴的运用首要运用于捕捉图画上的respective field,而在自然言语处理范畴中的运用首要运用于定位要害的token。下面简单介绍下留意力机制在前期的几个经典运用。

CVHub | 一文看尽深度学习中的各种注意力机制

《A Model of Saliency-Based Visual Attention for Rapid Scene Analysis》

CVHub | 一文看尽深度学习中的各种注意力机制

这是前期将留意力机制运用于核算机视觉范畴的一篇代表作,文章于1998年发表于TAPMI。作者受前期灵长目视觉体系的神经元结构启发,提出了一种视觉留意力体系,能够将多标准的图画特征组合成单一的明显性图。终究,运用一个动态神经网络,并依照明显性的顺序来高效的挑选要点区域。

《Recurrent Models of Visual Attention》

CVHub | 一文看尽深度学习中的各种注意力机制

使留意力机制真正火起来的当归于谷歌DeepMind于2014年所提出的这篇文章,该论文初次在RNN模型上运用了留意力机制的办法进行图画分类。

《Neural Machine Translation by Jointly Learning to Align and Translate》

CVHub | 一文看尽深度学习中的各种注意力机制

这是由深度学习三巨头之一Yoshua Bengio等人于2015年发表于ICLR上的一篇论文,该论文的最大奉献是将留意力机制初次运用到NLP范畴,完成了同步的对齐和翻译,处理以往神经机器翻译(NMT)范畴运用Encoder-Decoder架构的一个潜在问题,行将信息都压缩在固定长度的向量,无法对应长句子。

《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》

CVHub | 一文看尽深度学习中的各种注意力机制

这篇文章由Yoshua Bengio等人于2015年在ICML上所发表的,该论文将留意力机制引进到图画范畴,作者提出了两种依据留意力机制的图画描绘生成模型: 运用根本反向传播练习的Soft Attetnion办法和运用强化学习练习的Hard Attention办法。

《Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition》

CVHub | 一文看尽深度学习中的各种注意力机制

这是发表于CVPR 2017年的一篇文章,作者提出了一种依据CNN的留意力机制,叫做循环留意力卷积神经网络(Recurrent Attention Convolutional Neural Network, RA-CANN),该网络能够递归地分析局部信息,并从所获取的局部区域中提取细粒度信息。此外,作者还引进了一个留意力生成子网络(Attenion Proposal Sub-Network, APN),迭代的对整图操作以生成对应的子区域,终究再将各个子区域的猜测记过整合起来,从然后的整张图片终究的分类猜测成果。

《Attention is All Your Need》

CVHub | 一文看尽深度学习中的各种注意力机制

这是由谷歌机器翻译团队于2017年发表于NIPS上的一篇文章,该论文最大的奉献便是抛弃了以往机器翻译根本都会运用的RNN或CNN等传统架构,以编码器-解码器为根底,创新性的提出了一种Transformer架构。该架构能够有用的处理RNN无法并行处理以及CNN无法高效的捕捉长距离依靠的问题,近期更是被进一步地运用到了核算机视觉范畴,一起在多个CV使命上取得了SOTA功能,挑战CNN在CV范畴多年的霸主地位。

开展

本文将要点围绕通道、空间、自留意力、类别等多个维度介绍核算机视觉范畴中较为知名的留意力机制办法,力求用最简短的言语解说得愈加通俗易懂。

通道&空间留意力

通道留意力旨在显现的建模出不同通道之间的相关性,经过网络学习的办法来自动获取到每个特征通道的重要程度,终究再为每个通道赋予不同的权重系数,然后来强化重要的特征按捺非重要的特征。
空间留意力旨在提高要害区域的特征表达,本质上是将原始图片中的空间信息经过空间转换模块,改换到另一个空间中并保留要害信息,为每个位置生成权重掩膜(mask)并加权输出,然后增强感兴趣的特定目标区域一起弱化不相关的布景区域。

SE-Net

《Squeeze-and-Excitation Networks》发表于CVPR 2018,是CV范畴将留意力机制运用到通道维度的代表作,后续很多依据通道域的作业均是依据此进行润(魔)色(改)。SE-Net是ImageNet 2017大规模图画分类使命的冠军,结构简单且作用明显,能够经过特征重标定的办法来自适应地调整通道之间的特征响应。

CVHub | 一文看尽深度学习中的各种注意力机制

  • Squeeze 运用大局均匀池化(Global Average Pooling, GAP) 操作来提取大局感触野,将一切特征通道都抽象为一个点;
  • Excitation 运用两层的多层感知机(Multi-Layer Perceptron, MLP) 网络来进行非线性的特征改换,显现地构建特征图之间的相关性;
  • Transform 运用Sigmoid激活函数完成特征重标定,强化重要特征图,弱化非重要特征图。
class SELayer(nn.Module):
    def __init__(self, channel, reduction=16):
        super(SELayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.fc = nn.Sequential(
            nn.Linear(channel, channel // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel // reduction, channel, bias=False),
            nn.Sigmoid()
        )
    def forward(self, x):
        b, c, _, _ = x.size()
        y = self.avg_pool(x).view(b, c)
        y = self.fc(y).view(b, c, 1, 1)
        return x * y.expand_as(x)

GE-Net

《Gather-Excite: Exploiting Feature Context in Convolutional Neural Networks》发表于NIPS 2018,从上下文建模的视点动身,提出了一种比SE-Net更一般的办法。GE-Net充沛运用空间留意力来更好的发掘特征之间的上下文信息。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

  • Gather 用于从局部的空间位置上提取特征;
  • Excite 用于将特征缩放至原始标准。

RA-Net

《Residual attention network for image classification》发表于CVPR 2017,运用下采样和上采样操作提出了一种依据空间留意力机制的残差留意力网络。

CVHub | 一文看尽深度学习中的各种注意力机制

以往的Attention模型大多运用于图画切割和明显性检测使命,动身点在于将留意力会集在部分感兴趣区域或明显区域上。本文测验在惯例的分类网络中引进侧边分支,该分支同样是由一系列卷积和池化操作来逐渐地提取高档语义特征并增大网络的感触野,终究再将该分支直接上采样为原始分辨率标准作为特征激活图叠加回原始输入。

CVHub | 一文看尽深度学习中的各种注意力机制

该办法提高作用好像并不明显,而且因为引进很多额定的参数,导致核算开支非常大。

SK-Net

《Selective Kernel Networks》发表于CVPR 2019,原SE-Net的作者Momenta也参与到这篇文章中。SK-Net首要创意来源于Inception-Net的多分支结构以及SE-Net的特征重标定策略,研讨的是卷积核之间的相关性,并进一步地提出了一种挑选性卷积核模块。SK-Net从多标准特征表征的视点动身,引进多个带有不同感触野的并行卷积核分支来学习不同标准下的特征图权重,使网络能够挑选出愈加合适的多标准特征表明,不只处理了SE-Net中单一标准的问题,而且也结合了多分枝结构的思想从丰厚的语义信息中筛选出重要的特征。

CVHub | 一文看尽深度学习中的各种注意力机制

  • Split 选用不同感触野巨细的卷积核捕获多标准的语义信息;
  • Fuse 交融多标准语义信息,增强特征多样性;
  • Select 在不同向量空间(代表不同标准的特征信息)中进行Softmax操作,为合适的标准通道赋予更高的权重。
class SKConv(nn.Module):
    def __init__(self, features, M=2, G=32, r=16, stride=1, L=32):
        """ Constructor
        Args:
            features: input channel dimensionality.
            M: the number of branchs.
            G: num of convolution groups.
            r: the ratio for compute d, the length of z.
            stride: stride, default 1.
            L: the minimum dim of the vector z in paper, default 32.
        """
        super(SKConv, self).__init__()
        d = max(int(features/r), L)
        self.M = M
        self.features = features
        self.convs = nn.ModuleList([])
        for i in range(M):
            self.convs.append(nn.Sequential(
                nn.Conv2d(features, features, kernel_size=3, stride=stride, padding=1+i, dilation=1+i, groups=G, bias=False),
                nn.BatchNorm2d(features),
                nn.ReLU(inplace=False)
            ))
        self.gap = nn.AdaptiveAvgPool2d((1,1))
        self.fc = nn.Sequential(nn.Conv2d(features, d, kernel_size=1, stride=1, bias=False),
                                nn.BatchNorm2d(d),
                                nn.ReLU(inplace=False))
        self.fcs = nn.ModuleList([])
        for i in range(M):
            self.fcs.append(
                 nn.Conv2d(d, features, kernel_size=1, stride=1)
            )
        self.softmax = nn.Softmax(dim=1)
    def forward(self, x):
        batch_size = x.shape[0]
        feats = [conv(x) for conv in self.convs]      
        feats = torch.cat(feats, dim=1)
        feats = feats.view(batch_size, self.M, self.features, feats.shape[2], feats.shape[3])
        feats_U = torch.sum(feats, dim=1)
        feats_S = self.gap(feats_U)
        feats_Z = self.fc(feats_S)
        attention_vectors = [fc(feats_Z) for fc in self.fcs]
        attention_vectors = torch.cat(attention_vectors, dim=1)
        attention_vectors = attention_vectors.view(batch_size, self.M, self.features, 1, 1)
        attention_vectors = self.softmax(attention_vectors)
        feats_V = torch.sum(feats*attention_vectors, dim=1)
        return feats_V

SPA-Net

《Spatial Pyramid Attention Network for Enhanced Image Recognition》 发表于ICME 2020 并取得了最佳学生论文。考虑到 SE-Net 这种运用 GAP 去建模大局上下文的办法会导致空间信息的丢失,SPA-Net另辟蹊径,运用多个自适应均匀池化(Adaptive Averatge Pooling, APP) 组成的空间金字塔结构来建模局部和大局的上下文语义信息,使得空间语义信息被愈加充沛的运用到。

CVHub | 一文看尽深度学习中的各种注意力机制

class CPSPPSELayer(nn.Module):
    def __init__(self,in_channel, channel, reduction=16):
        super(CPSPPSELayer, self).__init__()
        if in_channel != channel:
            self.conv1 = nn.Sequential(
                nn.Conv2d(in_channel, channel, kernel_size=1, stride=1, bias=False),
                nn.BatchNorm2d(channel),
                nn.ReLU(inplace=True)
            )
        self.avg_pool1 = nn.AdaptiveAvgPool2d(1)
        self.avg_pool2 = nn.AdaptiveAvgPool2d(2)
        self.avg_pool4 = nn.AdaptiveAvgPool2d(4)
        self.fc = nn.Sequential(
            nn.Linear(channel*21, channel*21 // reduction, bias=False),
            nn.ReLU(inplace=True),
            nn.Linear(channel*21 // reduction, channel, bias=False),
            nn.Sigmoid()
        )
    def forward(self, x):
        x = self.conv1(x) if hasattr(self, 'conv1') else x
        b, c, _, _ = x.size()
        y1 = self.avg_pool1(x).view(b, c)  # like resize() in numpy
        y2 = self.avg_pool2(x).view(b, 4 * c)
        y3 = self.avg_pool4(x).view(b, 16 * c)
        y = torch.cat((y1, y2, y3), 1)
        y = self.fc(y)
        b, out_channel = y.size()
        y = y.view(b, out_channel, 1, 1)
        return y

ECA-Net

《ECANet:Efficient Channel Attention for Deep Convolutional Neural Networks》发表于CVPR 2020,是对SE-Net中特征改换部分进行了改善。SE-Net的通道信息交互办法是经过全衔接完成的,在降维和升维的进程中会损害一部分的特征表达。ECA-Net则进一步地运用一维卷积来完成通道间的信息交互,相关于全衔接完成的大局通道信息交互所带来的核算开支,ECA-Net提出了一种依据自适应挑选卷积核巨细的办法,以完成局部交互,然后明显地降低模型杂乱度且坚持功能。

CVHub | 一文看尽深度学习中的各种注意力机制

class ECALayer(nn.Module):
    """Constructs a ECA module.
    Args:
        channel: Number of channels of the input feature map
        k_size: Adaptive selection of kernel size
    """
    def __init__(self, channel, k_size=3):
        super(ECALayer, self).__init__()
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.conv = nn.Conv1d(1, 1, kernel_size=k_size, padding=(k_size - 1) // 2, bias=False) 
        self.sigmoid = nn.Sigmoid()
    def forward(self, x):
        # feature descriptor on the global spatial information
        y = self.avg_pool(x)
        # Two different branches of ECA module
        y = self.conv(y.squeeze(-1).transpose(-1, -2)).transpose(-1, -2).unsqueeze(-1)
        # Multi-scale information fusion
        y = self.sigmoid(y)
        return x * y.expand_as(x)

混合留意力

空间留意力因为将每个通道中的特征都做平等处理,疏忽了通道间的信息交互;
通道留意力则是将一个通道内的信息直接进行大局处理,简单疏忽空间内的信息交互;
混合留意力首要是共同结合了通道域、空间域等留意力的办法来构成一种愈加综合的特征留意力办法。

CBAM

《CBAM: Convolutional Block Attention Module》发表于CVPR 2018,在原有通道留意力的根底上,衔接了一个空间留意力模块(Spatial Attention Modul, SAM)。SAM是依据通道进行大局均匀池化以及大局最大池化操作,产生两个代表不同信息的特征图,合并后再经过一个感触野较大的77卷积进行特征交融,终究再经过Sigmoid操作来生成权重图叠加回原始的输入特征图,然后使得目标区域得以增强。总的来说,关于空间留意力来说,因为将每个通道中的特征都做平等处理,疏忽了通道间的信息交互;而通道留意力则是将一个通道内的信息直接进行大局处理,简单疏忽空间内的信息交互。

CVHub | 一文看尽深度学习中的各种注意力机制

作者终究经过试验验证先通道后空间的办法比先空间后通道或许通道空间并行的办法作用更佳。

# https://github.com/Jongchan/attention-module/blob/master/MODELS/cbam.py
class CBAM(nn.Module):
    def __init__(self, gate_channels, reduction_ratio=16, pool_types=['avg', 'max'], no_spatial=False):
        super(CBAM, self).__init__()
        self.ChannelGate = ChannelGate(gate_channels, reduction_ratio, pool_types)
        self.no_spatial=no_spatial
        if not no_spatial:
            self.SpatialGate = SpatialGate()
    def forward(self, x):
        x_out = self.ChannelGate(x)
        if not self.no_spatial:
            x_out = self.SpatialGate(x_out)
        return x_out

BAM

《BAM: Bottleneck Attention Module》发表于BMC 2018,提出了一个简单有用的留意力模型来获取空间和通道的留意力求。

CVHub | 一文看尽深度学习中的各种注意力机制

BAM构成了一种分层的留意力机制,能够有用地按捺布景特征,使模型愈加聚集于前景特征,然后加强高档语义,完成更高的功能。

CVHub | 一文看尽深度学习中的各种注意力机制

不同于CBAM并联的办法,BAM以串联的办法来相继提取不同域的留意力求。

scSE

《Concurrent Spatial and Channel Squeeze & Excitation in Fully Convolutional Networks》发表于MICCAI 2018,是一种更轻量化的SE-Net变体,在SE的根底上提出cSE、sSE、scSE这三个变种。cSE和sSE分别是依据通道和空间的重要性来校准采样。scSE则是一起进行两种不同采样校准,得到一个更优异的成果。

CVHub | 一文看尽深度学习中的各种注意力机制

class SCSEModule(nn.Module):
    def __init__(self, ch, re=16):
        super().__init__()
        self.cSE = nn.Sequential(nn.AdaptiveAvgPool2d(1),
                                 nn.Conv2d(ch,ch//re,1),
                                 nn.ReLU(inplace=True),
                                 nn.Conv2d(ch//re,ch,1),
                                 nn.Sigmoid())
        self.sSE = nn.Sequential(nn.Conv2d(ch,ch,1),
                                 nn.Sigmoid())
    def forward(self, x):
        return x * self.cSE(x) + x * self.sSE(x)

A2-Nets

《A2-Nets: Double Attention Networks》发表于NIPS 2018,提出了一种双重留意力网络。该网络首要运用二阶的留意力池化(Second-order Attention Pooling, SAP) 用于将整幅图的一切要害特征归纳到一个调集当中,然后再运用另一种留意力机制将这些特征分别运用到图画中的每个区域。

CVHub | 一文看尽深度学习中的各种注意力机制

class DoubleAtten(nn.Module):
    """
    A2-Nets: Double Attention Networks. NIPS 2018
    """
    def __init__(self,in_c):
        super(DoubleAtten,self).__init__()
        self.in_c = in_c
        """Convolve the same input feature map to produce three feature maps with the same scale, i.e., A, B, V (as shown in paper).
        """
        self.convA = nn.Conv2d(in_c,in_c,kernel_size=1)
        self.convB = nn.Conv2d(in_c,in_c,kernel_size=1)
        self.convV = nn.Conv2d(in_c,in_c,kernel_size=1)
    def forward(self,input):
        feature_maps = self.convA(input)
        atten_map = self.convB(input)
        b, _, h, w = feature_maps.shape
        feature_maps = feature_maps.view(b, 1, self.in_c, h*w) # reshape A
        atten_map = atten_map.view(b, self.in_c, 1, h*w)       # reshape B to generate attention map
        global_descriptors = torch.mean((feature_maps * F.softmax(atten_map, dim=-1)),dim=-1) # Multiply the feature map and the attention weight map to generate a global feature descriptor
        v = self.convV(input)
        atten_vectors = F.softmax(v.view(b, self.in_c, h*w), dim=-1) # 生成 attention_vectors
        out = torch.bmm(atten_vectors.permute(0,2,1), global_descriptors).permute(0,2,1)
        return out.view(b, _, h, w)

自留意力

自留意力是留意力机制的一种变体,其意图是为了削减对外部信息的依靠,尽可能地运用特征内部固有的信息进行留意力的交互。

Non-Local

《Non-local Neural Networks》发表于CVPR 2018,是第一篇将自留意力机制引进图画范畴的文章。文中提出了经典的Non-Local模块,经过Self-Attention机制对大局上下午进行建模,有用地捕获长距离的特征依靠。后续许多依据自留意力的办法都是依据Non-Local来改善的。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

自留意力流程一般是经过将原始特征图映射为三个向量分支,即Query、Key和Value。

  • 首要,核算Q和K的相关性权重矩阵系数;
  • 其次,经过软操刁难权重矩阵进行归一化;
  • 终究,再将权重系数叠加到V上,以完成大局上下文信息的建模。

DA-Net

《DA-Net:Dual Attention Network for Scene Segmentation》发表于CVPR 2019,该论文将Non-local的思想一起引进到了通道域和空间域,分别将空间像素点以及通道特征作为查询语句进行上下文建模,自适应地整合局部特征和大局依靠。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

  • Position Attention Module

CVHub | 一文看尽深度学习中的各种注意力机制

PAM将更广泛的上下文信息编码为局部特征,然后提高了它们的代表性。

  • Channel Attention Module

CVHub | 一文看尽深度学习中的各种注意力机制

CAM经过发掘通道图之间的相互依靠联系,能够着重相互依靠的特征图,改善特定语义的特征表明。

ANLNet

《ANLNet:Asymmetric Non-local Neural Networks for Semantic Segmentation》发表于ICCV 2019,是依据Non-Local的思路往轻量化方向做改善。Non-Local模块是一种作用明显的技术,但一起也受限于过大核算量而难以很好地嵌入网络中运用。为了处理以上问题,ANLNet依据Non-Local结构并融入了金字塔采样模块,在充沛考虑了长距离依靠的前提下,融入了不同层次的特征,然后在坚持功能的一起极大地削减核算量。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

  • 结合SPP和Non-Local,前者从不同巨细区域内提取出要害点,后者对这些要害点建模长距离依靠;
  • Non-Local 需要核算每一个像素点,能够看作是点对点建模;ANL-Net只核算经过SPP提取出的要害点,能够看作是点对区域建模;
  • AFNB包括两个输入,一个高档特征图,一个低级特征图,分别对应图中的Stage5和Stage4。其中高档特征图作为Query,低级特征图作为Key和Value;
  • APNB的建模办法与AFNB类似。

CC-Net

《CCNet:Criss-Cross Attention for Semantic Segmentation》发表于ICCV 2019,同样是同Non-Local轻量化的另一种测验。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

与Non-Local的每个查询点需要与其它一切点核算相关性的建模办法不同,CC-Net仅核算该查询点与其在水平缓垂直方向上的点相关性,而且重复核算两次就能够获取该点的大局依靠,极大削减核算量。

CVHub | 一文看尽深度学习中的各种注意力机制

  • CC-Net依据Non-Local的思路并运用横纵穿插办法完成对大局上下文建模。时刻杂乱度从O(HW∗HW)O(HW*HW)变为O(HW∗(H+W−1))O(HW*(H+W-1)),降低了1~2个数量级;
  • 和ANL-Net一样,CC-Net也是点对区域建模一次建模只能获取当时查询点上同一行和一列的信息,二次建模就能够捕捉大局信息;
  • Loop1:右上方像素点(蓝色)只能捕捉水平(左上)和垂直(右下)方向的像素点信息,但无法捕捉左下角像素点(绿色)信息;
  • Loop2:右上方像素点(蓝色)再次捕捉左上和右下的像素点信息时,因为在Loop1左上和右下像素点现已捕捉了左下的像素点信息,此刻右上像素点就能够直接捕捉到左下像素点信息。

GC-Net

《GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond》发表于ICCV 2019,受SE-Net和Non-local思想的启发提出了一种更简化的空间自留意力模块。Non-local选用Self-attention机制来建模大局的像素对联系,建模长距离依靠,但这种依据大局像素点(pixel-to-pixel) 对的建模办法其核算量无疑是巨大的。SE-Net则运用GAP和MLP完成通道之间的特征重标定,虽然轻量,但未能充沛运用到大局上下文信息。因而,作者提出了GC-Net能够高效的建模大局的上下文信息。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

类别留意力

OCR-Net

《Object-Contextual Representations for SemanticSegmentation》发表于ECCV 2020,是一种依据自留意力对类别信息进行建模的办法。与从前的自留意力对大局上下文建模的视点(通道和空间)不同,OCR-Net是从类别的视点进行建模,其运用粗切割的成果作为建模的目标,终究加权到每一个查询点,这是一种轻量并有用的办法。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

  • Soft Object Regions 对Backbone倒数第二层所输出的粗切割成果进行监督;
  • Object Region Representations 交融粗切割和Backbone网络终究一层所输出的高档语义特征图生成目标区域语义,每一条向量代表不同的类别信息;
  • Pixel-Region Relations 结合终究一层的高档语义特征图以及目标区域语义信息,建模像素与目标区域之间的相关性;
  • Object Contextual Representations 将像素-目标区域相关性加权到目标区域信息中,完成加权目标类别信息到每一个像素上; 不难发现,这种类别信息的建模办法是彻底遵循自留意力机制(Q,K,V)的。

时刻留意力

IAU-Net

《IAUnet: Global Context-Aware Feature Learning forPerson Re-Identification》发表于 IEEE Trans. on Neural Networks and Learning Systems,将自留意力机制的办法扩展到时刻维度并运用于行人充辨认使命,有用的处理了大多数依据卷积神经网络的办法无法充沛对空间-时刻上下文进行建模的坏处。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

  • 交互聚合模块(Interaction-Aggregation-Update, IAU)一起包括大局空间,时刻和频道上下文信息,可用于高功能的reID;
  • 空间-时刻IAU(Spatial-Temporal IAU, STIAU)可有用地交融两种类型的上下文依靠;
  • 通道IAU(Channel IAU, CIAU)模块旨在模拟信道特征之间的语义上下文交互,以增强特征表明,尤其是关于小型视觉线索和身体部位。

频率留意力

Fca-Net

《FcaNet: Frequency Channel Attention Networks》截止至目前还未被接纳,作者从频域视点切入,证明了GAP是DCT的特例,弥补了现有通道留意力办法中特征信息不足的缺点,将GAP推广到一种更为一般的表明办法,即二维的离散余弦改换(Discrete Cosine Transform, DCT),并提出了多光谱通道留意力Fca-Net, 经过引进更多的频率重量来充沛的运用信息。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

经过讨论运用不同数量的频率重量及其不同组合的影响,提出了挑选频率重量的两步准则:

  • 分别核算出通道留意力中每个频率重量的成果;
  • 依据所得成果筛选出Top-k个功能最佳的频率重量。

大局留意力

RGA-Net

《Relation-Aware Global Attention for Person Re-identification》发表于CVPR 2020,作者针对行人重辨认使命提出了的一种依据联系感知的大局留意力办法。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

作者以为,要直观地判断一个特征节点是否重要,首要要知道其大局范围的特征信息,以便在决议计划的进程中更好地探索每个特征节点各自的大局联系,然后学习出更鲁棒的留意力特征。更具体的解读可参考本文

高阶留意力

GSoP-Net

《Global Second-order Pooling Convolutional Networks》发表于CVPR 2019,经过运用GSoP能够充沛运用到图画中的二阶计算量,以高效的捕获大局的上下文信息。考虑到传统的一阶网络明显不能够有用的表征CNN,因为其目标是表征高维空间中数千个类别的杂乱边界,因而学习高阶表明关于增强非线性建模能力至关重要。【代码链接可拜访github】

CVHub | 一文看尽深度学习中的各种注意力机制

从底层到高层逐渐引进大局的二阶池化模块,经过对整体图画信息的相关性建模,来捕获长距离的计算信息,充沛运用到了图画的上下文信息。与SE等操作发起的运用二维的GAP操作不同,GSoP经过引进协方差来核算通道之间的联系。具体来说,在运用卷积和池化进行非线性改换今后,该协方差矩阵不只能够用于沿通道维度进行张量的缩放,也能够用于沿空间维度进行张量缩放。

总结

在核算机视觉范畴中,留意力机制大致可分为强留意力和软留意力。因为强留意力是一种随机的猜测,其着重的是动态变化,虽然作用不错,但因为不可微的性质导致其运用很受限制。与之相反的是,软留意力是处处可微的,即能够经过依据梯度下降法的神经网络练习所取得,因而其运用相对来说也比较广泛,本文所列举的留意力办法均为软留意力办法。总的来说,目前一切的留意力机制办法大都是依据各个不同的维度运用有限的资源进行信息的充沛运用,本质作用是增强重要特征,按捺非重要特征。留意力机制的特点是参数少-速度快-作用好。

写在终究

假如您也对人工智能和核算机视觉全栈范畴感兴趣,强烈推荐您重视有料、风趣、有爱的大众号『CVHub』,每日为我们带来精品原创、多范畴、有深度的前沿科技论文解读及工业成熟处理方案!欢迎扫码与我沟通,一起讨论更多风趣的论题!