深度学习中的注意力机制汇总

什么是注意力机制

视觉注意力机制是人类视觉所特有的一种大脑信号处理机制而深度 学习中的注意力机制正是借鉴了人类视觉的注意力思维方式。一般来说, 人类在观察外界环境时会迅速的扫描全景,然后根据大脑信号的处理快速的锁定重点关注的目标区域,最终形成注意力焦点该机制可以帮助人类在有限的资源下,从大量无关背景区域中筛选出具有重要价值信息的目标 区域,帮助人类更加高效的处理视觉信息

1、Recurrent Models of Visual Attention
这种注意力机制拟在模拟人看东西的方式,例如从上到下或从左到右观察图像。因此,每次将一整张图片划分为多个区域,每次观察到的视野就是一个小区域,最终将所有的区域信息结合起来成为整体。

 
在这个模型中,基本模型是一个 recurrent neural network(RNN) ,按照时间顺序处理输入,一次在一张图像中处理不同的位置,逐渐的将这些部分的信息结合起来,来建立一个该场景的动态间隔表示。并非马上处理整张图像。在每一个步骤中,模型基于过去的信息和任务的需要选择下一个位置进行处理。这样就可以控制模型的参数和计算量,使之摆脱输入图像的大小的约束。这里和CNN有明显的不同。我们就是要描述这么一个端到端的优化序列,能够直接训练模型,最大化一个性能衡量,依赖于该模型在整个任务上所做的决策。

2、通道注意力机制:SENet

论文下载:paper-https://arxiv.org/abs/1709.01507
代码下载:github-https://github.com/hujie-frank/SENet

方法结构简单,其核心内容就是提出了SELayer,一种即插即用的模块,可以结合多种网络使用。

通道注意力机制,顾名思义就是给予特征图不同通道不同的权重系数,使之更注意那些重要的特征。

 上图是SENet的结构图,图中的Ftr是传统的卷积结构,XUFtr的输入(C’xH’xW’)和输出(CxHxW)。X通过一系列卷机即可变换通道数从C’为C。接下来再进行三个操作:Squeeze, Excitation, Reweight.

(1) 图中的Fsq(.),也即Squeeze过程。目的是将得到的特征图U进行特征压缩,通过Global Average Pooling将每个通道特征图都变成了一个数,成就了全剧感受野的生成。此操作生成的特征图是1x1xC,和XU的尺度一致。

(2) 图中的Fex(.),也即Excitation过程。目的是学习特征通道之间的相关性,并融合各个通道的特征图信息。将(1) 中得到的输出z,先用W1乘以z,就是一个全连接层操作,然后再经过一个ReLU层,输出的维度不变;然后再和W2相乘,和W2相乘也是一个全连接层的过程,输出的维度就是1*1*C;最后再经过sigmoid函数得到s。为什么要用两次全连接层?这是因为Squeeze得到的信息都是对于单个channel来说的,在这里是为了融合所有通道的特征图信息。

(3) 图中的Fscale(.),也即Reweight过程。目的是通过控制scale的大小,把重要的特征增强,不重要的特征减弱,从而让需要的特征指向性更强。通过对卷积后的特征图进行处理,得到一个和通道数一样的一维向量作为每个通道的评价分数,然后将该分数分别施加到对应的通道上。

3、空间—通道混合注意力机制:CBAM

2、SENet通道注意力机制中所述,通道注意力旨在显示的建模出不同通道之间的相关性,通过网络学习的方式来自动获取到每个特征通道的重要程度,最后再为每个通道赋予不同的权重系数,从而来强化重要的特征抑制非重要的特征。
空间注意力由于将每个通道中的特征都做同等处理,忽略了通道间的信息交互;通道注意力则是将一个通道内的信息直接进行全局处理,容易忽略空间内的信息交互;混合注意力主要是共同结合了通道域、空间域等注意力的形式来形成一种更加综合的特征注意力方法。
CBAM:Convolutional Block Attention Module结构图:

 CBAM由(1)Channel Attention Module 和(2) Spatial Attention Module两个部分组成。

(1)Channel Attention Module 用于对每个通道进行检测,以寻找最应该关注的区域。 输入是一个 H × W × C 的特征 F ,我们先分别进行一个空间的全局平均池化和最大 池化得到两个 1 × 1 × C 的通道描述。接着,再将它们分别送入一个两层的神经网络, 第一层神经元个数为 C/r ,激活函数为 Relu ,第二层神经元个数为 C 。这个两层的神经网络是共享的。然后,再将得到的两个特征相加后经过一个 Sigmoid 激活函数得到权重系数 Mc 。最后,拿权重系数和原来的特征 F 相乘即可得到缩放后的新特征。

对应的shu xue biao de

 (2)Spatial Attention Module 用于关注哪里的特征是有意义的。给定一个 H×W×C 的特征 F',我们先分别进行一个通道维度的平均池化和最大池化得到两个 H×W×1 的通道描述,并将这两个描述按照通道拼接在一起。然后,经过一个 7×7 的卷积层,激活函数为 Sigmoid,得到权重系数 Ms。最后,拿权重系数和特征 F' 相乘即可得到缩放后的新特征。

对应的数学表达式为:

 4、自注意力机制:Non-local neural networks

其目的是为了减少对外部信息的依赖,尽可能地利用特征内部固有的信息进行注意力的交互。捕捉Long-range信息是必要的。在CNN中,其获得Long-range的方式是堆积卷积模块,来将多个小感受野扩大成大感受野。在RNN中,获得Long-range的方式需要依靠多步操作,是需要一定顺序的,无法捕捉较远位置的信息,理论上也不是Long-range。

        Non-local 本质就是去找特征图中给定一个像素点与其他像素点之间的关系,将这样的关系转化成像素点之间相关性权重系数,就可以知道注意力权重的分配。下面这张图是原文中的non-local 模块,如果不做任何介绍就不是很好理解,不过至少能看出来这里有个残差的过程:Z=x+something(注意力系数)。

先看公式(1):x_i特征图X 中的一个点,x_j是其他任意一个点。我们通过f(\cdot)计算x_ix_j之间的距离,然后乘以一个归一化系数\frac{1}{C(x)}就可以得到两点之间的相关性值。最后再乘以一个权重系数g(\cdot)就完成了整个注意力的计算方式。

值得注意的是,我们要弄清楚这三个函数\frac{1}{C(x)} ,f(\cdot)g(\cdot)到底是什么。

        刚刚说到f(\cdot)是用来计算像素点距离,通常就是点积的方式。 在原文中,作者拓展成 Embedded Gaussian,本质上还是没有变。只不过\theta(x_i) = W_{\theta}x_i, \indent \phi(x_j) = W_{\phi}x_jW_{\phi} W_{\theta}都是学到的。

对于 \frac{1}{C(x)},那就变成了\frac{1}{\sum_{\forall j}f(x_i,x_j)}做一个距离归一化。再结合上面这个公式,是不是就是一个softmax?

 对于g(\cdot),就是一个权重计算函数g(x_j) = W_gx_j,其中W_g也是学习得到的。

         通过这一系列操作,注意力系数就被算出来了。最终每个点都能知道其他点与自己的关系了

很好理解,原来的点x_i 加上一个权重W_z乘以上面算出来的y_i就是新的一个能拥有注意力机制的点了。 最后,强调一下这个加法之所以成立是因为用了1*1的卷积核,这样的话就可以保证通道一样,直接相加了。 

 先介绍那么多,后面排版再改一下。 都是自己手打的,一方面记录自己的学习内容,一方面也可以给刚接触注意力机智的同学一些帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值