Attention机制发展历程和总结
什么是attention?
Attention是被广泛运用于深度学习领域中的一种方法,此方法也比较符合人类的认知常识。人类在观察一个事物或者图片的时候,会对不同的区域投入不一样的关注度。我们的相机也会对重点的区域进行对焦。比如下面一幅图片中。人类会关注到骏马、草地和蓝天。尤其是骏马一定是最博人眼球的。但计算机一开始在认识这张图的时候,它“看到”的是一个个三通道的像素值。在计算机视觉的不同任务上有不同的标签,然后利用计划函数获得局部响应值来增加对图片的识别性能。相对于那些一视同仁的方法,attention的策略对资源的分配更加合理。结合自己之前的研究领域发现attention机制在很多任务上是很有效果的。
attention机制的发展历史
2014年Google Mind团队《Recurrent Models of Visual Attention》,他们在RNN模型上使用了Attention机制来进行图像分类。2015年,Bahdanau等人在《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似Attention的机制在机器翻译任务上将翻译和对齐同时进行,这是Attention在NLP上的首次应用。2017年,Google机器翻译团队《Attention is all you need》大量使用自注意力(Self-Attention)机制来学习文本表示。具体历程如下图所示。
几种典型的attention机制
1. 空间注意力机制——Spatial Transformer Networks
这里主要以一篇STN的工作为例。论文全名:Spatial Transformer Networks。普通的CNN能够显示的学习平移不变性,以及隐式的学习旋转不变性,但attention model 告诉我们,与其让网络隐式的学习到某种能力,不如为网络设计一个显式的处理模块,专门处理以上的各种变换。因此,DeepMind就设计了Spatial Transformer Layer,简称STL来完成这样的功能。
关于平移不变性 ,对于CNN来说,如果移动一张图片中的物体,那应该是不太一样的。假设物体在图像的左上角,我们做卷积,采样都不会改变特征的位置,糟糕的事情在我们把特征平滑后后接入了全连接层,而全连接层本身并不具备 平移不变性 的特征。但是 CNN 有一个采样层,假设某个物体移动了很小的范围,经过采样后,它的输出可能和没有移动的时候是一样的,这是 CNN 可以有小范围的平移不变性 的原因。为了解决这个问题,作者提出了STN的策略。STN的系统框图如下图所示。
STN中含有三个模块,分别是:参数预测:Localisation net 、坐标映射:Grid generator和像素的采集:Sampler。
上图展示了STN是如何实现feature map的平移、缩放和旋转功能的。平移功能主要是通过矩阵乘法操作来让不同行或者不同列的位置发生变化。缩放操作是通过乘一个对角矩阵去操作的。旋转操作通过乘一个正弦余弦向量得到的。
可以发现,无论如何做旋转,缩放,平移,只用到六个参数就可以了,如上图所示。而缩放的本质,其实就是在原样本上采样,拿到对应的像素点,通俗点说,就是输出的图片(i,j)的位置上,要对应输入图片的哪个位置。
那么问题的关键来了,如何让最后一个模块sampler求解可微,因为只有这样才可以优化。如果是离散的权重肯定是优化不了的,这里采用的是距离度量,来去让sampler可优化。详细见下图。他们对应的权值都是与结果对应的距离相关的,如果目标图片发生了小范围的变化,优化的式子也是可以捕捉到这样的变化的,这样就能用梯度下降法来优化了。
2. 空间注意力机制——Dynamic Capacity Networks
受到STN的启发, Dynamic Capacity Networks在feature map上使用了两种类型的彷射变化器。相比于Spatial Transformer Networks 一步完成目标的定位和仿射变换调整,Dynamic Capacity Networks则采用的两个子网络,分别是低性能的子网络(coarse model)和高性能的子网络(fine model)。低性能的子网络(coarse model)用于对全图进行处理,定位感兴趣区域,如下图中的操作。高性能的子网络(fine model)则对感兴趣区域进行精细化处理,如下图的操作。两者共同使用,可以获得更低的计算代价和更高的精度。
3. 通道注意力机制——Squeeze and Excitation Net
对于输入2维图像的CNN来说,一个维度是图像的尺度空间,即长宽,另一个维度就是通道,因此基于通道的Attention也是很常用的机制。SENet(Sequeeze and Excitation Net)[3]是2017届ImageNet分类比赛的冠军网络,本质上是一个基于通道的Attention模型,它通过建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道,原理图如下。
在正常的卷积操作后分出了一个旁路分支,首先进行Squeeze操作(即图中Fsq(·)),它将空间维度进行特征压缩,即每个二维的特征图变成一个实数,相当于具有全局感受野的池化操作,特征通道数不变。然后是Excitation操作(即图中的Fex(·)),它通过参数w为每个特征通道生成权重,w被学习用来显式地建模特征通道间的相关性。在文章中,使用了一个2层bottleneck结构(先降维再升维)的全连接层+Sigmoid函数来实现。得到了每一个特征通道的权重之后,就将该权重应用于原来的每个特征通道,基于特定的任务,就可以学习到不同通道的重要性。将其机制应用于若干基准模型,在增加少量计算量的情况下,获得了更明显的性能提升。作为一种通用的设计思想,它可以被用于任何现有网络,具有较强的实践意义。而后SKNet等方法将这样的通道加权的思想和Inception中的多分支网络结构进行结合,也实现了性能的提升。通道注意力机制的本质,在于建模了各个特征之间的重要性,对于不同的任务可以根据输入进行特征分配,简单而有效。
上图展示了SE的在两个经典网络的结构图,左边是SE-inception Module,右边是SE-ResNet Module。
4. 空间通道注意力机制——Convolutional Block Attention Module
前述的Dynamic Capacity Network是从空间维度进行Attention,SENet是从通道维度进行Attention,自然也可以同时使用空间Attention和通道Attention机制。CBAM(Convolutional Block Attention Module)是其中的代表性网络,结构如下:
通道方向和空间方向的Attention建模的是特征的重要性,结构分别如下:
同时使用最大pooling和均值pooling算法,然后经过几个MLP层获得变换结果,最后分别应用于两个通道,使用sigmoid函数得到通道的attention结果。首先将通道本身进行降维,分别获取最大池化和均值池化结果,然后拼接成一个特征图,再使用一个卷积层进行学习。这两种机制,分别学习了通道的重要性和空间的重要性,还可以很容易地嵌入到任何已知的框架中。
Attention机制常见应用
在介绍完几种经典的注意力机制后,我们来看一下注意力机制的几个比较典型的应用。
1. 注意力机制在目标检测上的应用
这里介绍的一篇来自于CVPR2019的一篇论文:Towards Universal Object Detection by Domain Attention (CVPR2019)。该论文提出了一个通用的物体检测模型,适用于任一目标检测场景,在多个数据集上表现良好。该模型基于SENet,将多个SENet得到的特征图连接在一起,并且提出了domain attention,将其施加在连接好的特征图后,这样能够使模型更好地适应不同场景下的目标检测任务。论文中指出,以往训练的目标检测模型基本都是针对某一领域、某一场景或某一数据集下的目标检测任务(放屁),这些目标检测模型如下图a所示。然后将这些模型组合在一起,就能更好地完成多场景检测任务,如下图所示:
论文基于此思想,使用了多个SENet来实现通用目标检测,并且提出了Domain attention,这个attention机制应该是用来让模型适应不同场景下的目标检测任务。
由上图可以看到,该模型就是将多个SENet得到的结果连接到一起,同时提出一个Domain Assignment结构,该结构也基本上是借鉴SENet的,用于在检测场景上施加Attention操作,最后得到一个综合了通道attention和domain attention的CX1X1的结构,该结构最后和原特征图做channel-wise multiplication。下图是论文中的模型结构图。
2.注意力机制在细粒度识别上的应用
这里介绍的论文是发表在CVPR2017上的:Look Closer to See Better: Recurrent Attention Convolutional Neural Network for Fine-grained Image Recognition(CVPR2017)。识别纹理细密的物体类别(比如鸟类)是很困难的,这是因为判别区域定位(discriminative region localization)和细粒度特征学习(fine-grained feature learning)是很具有挑战性的。现有方法主要都是单独地来解决这些挑战性问题,然而却忽略了区域检测(region detection)和细粒度特征学习之间的相互关联性,而且它们可以互相强化。本篇论文中,我们提出了一个全新的循环注意力卷积神经网络(recurrent attention convolutional neural network——RA-CNN),用互相强化的方式对判别区域注意力(discriminative region attention)和基于区域的特征表征(region-based feature representation)进行递归学习。在每一尺度规模上进行的学习都包含一个分类子网络(classification sub-network)和一个注意力建议子网络(attention proposal sub-network——APN)。APN 从完整图像开始,通过把先期预测作为参考,由粗到细迭代地生成区域注意力,同时精调器尺度网络(finer scale network)以循环的方式从先前的尺度规格输入一个放大的注意区域(amplified attended region)。RA-CNN 通过尺度内分类损失(intra-scale classification loss)和尺度间排序损失(inter-scale ranking loss)进行优化,以相互学习精准的区域注意力和细粒度表征。RA-CNN 并不需要边界框或边界部分的标注,而且可以进行端到端的训练。如下图所示, 两种啄木鸟。我们可以从高度局部区域(highly local regions),比如黄色框里的头部,观察到非常不易察觉的视觉差异,这是难以在原始图像规格中进行学习的。然而,如果我们可以学着去把注意区域放大到一个精细的尺度,差异可能就会更加生动和显著。
下图是整个系统的pipeline,输入图像从上到下按粗糙的完整大小的图像到精炼后的区域注意力图像排列。不同的网络分类模块(蓝色部分)通过同一尺度的标注预测 Y(s) 和真实 Y∗之间的分类损失 Lcl 进行优化,注意力建议(红色部分)通过相邻尺度的 p (s) t 和 p (s+1) t 之间的成对排序损失 Lrank(pairwise ranking loss Lrank)进行优化。其中 p (s) t 和 p (s+1) t 表示预测在正确类别的概率,s 代表尺度。APN 是注意力建议网络,fc 代表全连接层,softmax 层通过 fc 层与类别条目(category entry)匹配,然后进行 softmax 操作。+代表「剪裁(crop)」和「放大(zoom in)」。
注意力机制的应用还有很多,现在一个大趋势是越来越多的注意力机制被用于自监督学习等领域。
- 点赞
- 收藏
- 关注作者
评论(0)