当前位置: 代码迷 >> 综合 >> Attention注意力机制学习(一)------->SENet
  详细解决方案

Attention注意力机制学习(一)------->SENet

热度:92   发布时间:2023-12-10 01:52:18.0

目录

前言

论文

注意力机制

Squeeze-and-Excitation (SE) 模块

第一步Squeeze(Fsq)

第二步excitation(Fex)

SE注意力机制应用于inception和ResNet


前言

        在深度学习领域,CNN分类网络的发展对其它计算机视觉任务如目标检测和语义分割都起到至关重要的作用,因为检测和分割模型通常是构建在CNN分类网络(称为backbone)之上。提到CNN分类网络,我们所熟知的是VGG,ResNet,Inception,DenseNet等模型,它们的效果已经被充分验证,而且被广泛应用在各类计算机视觉任务上。这里我们介绍一篇CVPR2017的文章SENet,它赢得了最后一届ImageNet 2017竞赛分类任务的冠军。重要的一点是SENet思路很简单,很容易扩展在已有网络结构中。

论文

https://arxiv.org/abs/1709.01507 2017

注意力机制

        注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。上述机制通常被称为注意力机制。人类视网膜不同的部位具有不同程度的信息处理能力,即敏锐度(Acuity),只有视网膜中央凹部位具有最强的敏锐度。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后集中关注它。例如,人们在阅读时,通常只有少量要被读取的词会被关注和处理。

        注意力机制最早用于自然语言处理领域,后来再计算机视觉领域(CV)也得到广泛的应用,注意力机制被引入视觉信息处理。注意力机制没有严格的数学定义,例如传统的局部图像特征提取、滑动窗口方法等都可以看作一种注意力机制。在神经网络中,注意力机制通常是一个额外的神经网络,能够硬性选择输入的某些部分,或者给输入的不同部分分配不同的权重。注意力机制能够从大量信息中筛选出重要的信息

        在神经网络中引入注意力机制有很多方法,以卷积神经网络为例,可以在空间维度增加引入attention机制(例如inception网络的多尺度,让并联的卷积层有不同的权重),也可以在通道维度(channel)增加attention机制,当然也有混和维度即同时在空间维度和通道维度增加attention机制。

Squeeze-and-Excitation (SE) 模块

        这篇论文就是通道维度(channel-wise)增加注意力机制,关键的两个操作是squeezeexcication,所以论文把这个attention结构命名为SE block,SE block 是为了显式地实现特征通道的相互依赖关系,就是说通过自动学习的方式(用另外一个新的神经网络实现)获取到每个特征通道的重要程度,然后用这个重要程度去给每一个特征通道赋予一个权重值,从而让神经网络重点关注某些特征通道,即提升对当前任务有用的特征通道并抑制对当前任务用处不大的特征通道

        如上图中具体实现过程,先通过普通卷积Ftr得到channel为C的特征,然后进行以下两步操作:

第一步Squeeze(Fsq)

        通过全局池化(global pooling),将每个通道的二维特征(H*W)压缩为1个实数,论文是通过平均池化的方式实现。这属于空间维度的一种特征压缩,因为这个实数是根据二维特征所有的值算出来的,所以在某种程度上具有全局的感受野,通道数不变,因此Squeeze后变为1*1*C。

第二步excitation(Fex)

        通过参数来为每个特征通道生成一个权重值,这个权重值是如何生成就很关键了,论文是通过两个全连接层组成一个Bottleneck结构去建模通道间的相关性,并输出和输入特征同样数目的权重值。

        最后excitation完后接上一个操作,Scale(Fscale),将前面得到的归一化权重加权到每个通道的特征上。论文中的方法是用乘法,逐通道乘以权重系数,完成再通道维度上引入attention机制。

        通过上图可以理解他的实现过程,通过对卷积的到的feature map进行处理,得到一个和通道数一样的一维向量作为每个通道的评价分数,然后将改分数分别施加到对应的通道上,得到其结果。

SE注意力机制应用于inception和ResNet

        SE模块的灵活性在于它可以直接应用现有的网络结构中。这里以Inception和ResNet为例。对于Inception网络,没有残差结构,这里对整个Inception模块应用SE模块。对于ResNet,SE模块嵌入到残差结构中的残差学习分支中,如下图:

        同样地,SE模块也可以应用在其它网络结构,如ResNetXt,Inception-ResNet,MobileNet和ShuffleNet中。这里给出SE-ResNet-50和SE-ResNetXt-50的具体结构,如下表所示:

        增加了SE模块后,模型参数以及计算量都会增加,这里以SE-ResNet-50为例,对于模型参数增加量为:

        其中r为降维系数,S表示stage数量, 为第s个stage的通道数, 为第s个stage的重复block量。当r=16时,SE-ResNet-50只增加了约10%的参数量。但计算量(GFLOPS)却增加不到1%。 

参考:?最后一届ImageNet冠军模型:SENet - 知乎

  相关解决方案