热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【综述】attention机制在CV中的回顾

一、写在前面从网络结构本身的角度出发,可以从以下四个维度来提升卷积神经网络的性能,分别是:深度(ResNet)

一、写在前面

从网络结构本身的角度出发,可以从以下四个维度来提升卷积神经网络的性能,分别是:深度(ResNet)、宽度(WideResNet)、基数(ResNeXt)和注意力(SENet)。一般来说,网络越深,所提取到的特征就越抽象;网络越宽,其特征就越丰富;基数越大,越能发挥每个卷积核独特的作用;而注意力则是一种能够强化重要信息抑制非重要信息的方法,也是本文重点阐述的对象。

注意力(attention)其实是一个非常常见,但是又会被忽略的事实。如图,往往你会盯着婴儿脸,文字,毛巾等高频信息,其他的自然成为了一个背景(background)信息。

preview


 


Encoder-Decoder框架

要了解深度学习中的注意力模型,就不得不先谈Encoder-Decoder框架,因为目前大多数注意力模型附着在Encoder-Decoder框架下,当然,其实注意力模型可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意。

Encoder-Decoder框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。如图是文本处理领域里常用的Encoder-Decoder框架最抽象的一种表示。通过在编码时,给编码器的参数添加不同的权值使得在解码(decoder)时注意到某些信息,从而实现注意力机制-能够忽略无关信息而关注重点信息

详细参考动手深度学习 ch10.9-ch10.12


 注意力在CV方面研究进展简介

注意力机制,其本质是一种通过网络自主学习出的一组权重系数,并以“动态加权”的方式来强调我们所感兴趣的区域同时抑制不相关背景区域的机制。在计算机视觉领域中,注意力机制可以大致分为两大类:强注意力软注意力[1]。

强注意力与软注意力不同点在于,首先强注意力是更加关注点,也就是图像中的每个点都有可能延伸出注意力,同时强注意力是一个随机的预测过程,更强调动态变化。当然,最关键是强注意力是一个不可微的注意力,训练过程往往是通过增强学习(reinforcement learning)来完成的。

与之相反的是,软注意力是处处可微的,即能够通过基于梯度下降法的神经网络训练所获得,因此其应用相对来说也比较广泛。软注意力按照不同维度(如通道、空间、时间、类别等)出发,目前主流的注意力机制可以分为以下三种:通道注意力、空间注意力以及自注意力(Self-attention)。


空间域(Spatial Domain)

设计思路:

Spatial Transformer Networks(STN)模型是15年NIPS上的文章,这篇文章通过注意力机制,将原始图片中的空间信息变换到另一个空间中并保留了关键信息。

这篇文章的思想非常巧妙,因为卷积神经网络中的池化层(pooling layer)直接用一些max pooling 或者average pooling 的方法,将图片信息压缩,减少运算量提升准确率。

但是这篇文章认为之前pooling的方法太过于暴力,直接将信息合并会导致关键信息无法识别出来,所以提出了一个叫空间转换器(spatial transformer)的模块,将图片中的的空间域信息做对应的空间变换,从而能将关键的信息提取出来。

比如这个直观的实验图:

  1. (a)列是原始的图片信息,其中第一个手写数字7没有做任何变换,第二个手写数字5,做了一定的旋转变化,而第三个手写数字6,加上了一些噪声信号;

  2. (b)列中的彩色边框是学习到的spatial transformer的框盒(bounding box),每一个框盒其实就是对应图片学习出来的一个spatial transformer;

  3. (c)列中是通过spatial transformer转换之后的特征图,可以看出7的关键区域被选择出来,5被旋转成为了正向的图片,6的噪声信息没有被识别进入。

  4. 最终可以通过这些转换后的特征图来预测出(d)列中手写数字的数值。

spatial transformer其实就是注意力机制的实现,因为训练出的spatial transformer能够找出图片信息中需要被关注的区域,同时这个transformer又能够具有旋转、缩放变换的功能,这样图片局部的重要信息能够通过变换而被框盒提取出来。

Spatial Transformer由三部分组成

  • Localisation net

Localisation net输入为一张Feature map: U\in R^{H \times W \times C}

也就是说,对于输出Feature map的每一个位置,我们对其进行空间变换(仿射变换)寻找其对应与输入Feature map的空间位置,到目前为止,如果这一步的输出为整数值(往往不可能),也就是经过变换后的坐标可以刚好对应原图的某些空间位置,那么ST的任务便完成了,既输入图像在Localisation net和Grid generator后先后的确定了空间变换方式和映射关系。

但是一些读者看到这可能有一个疑问,这个嵌入的ST网路如何通过反向传播进行参数的训练?没错,如果仅仅包含上述的两个过程,那么ST网络是无法进行反向传播的,原因就是我们上述的操作并不是直接对Feature map进行操作,而是对feature position进行计算,从而寻找输入到输出的对应关系。而feature position对应到feature score是离散的,即feature position进行微小变化时,输出O[x+△x,y]值是无法求解的(图像的计算机存储为离散的矩阵存储)。这里论文作者使用了笔者认为STN最精髓算法,双线性插值算法。 

  • Sampler

经过以上的两步操作后,输出的Feature map上每一个像素点都会通过空间变换对应到输入Feature map的某个像素位置,但是由于feature score对于feature position的偏导数无法计算,因而我们需要构造一种position->score的映射,且该映射具有可导的性质,从而满足反向传播的条件。


 


通道域

通道域[2]的注意力机制原理很简单,我们可以从基本的信号变换的角度去理解。信号系统分析里面,任何一个信号其实都可以写成正弦波的线性组合,经过时频变换之后,时域上连续的正弦波信号就可以用一个频率信号数值代替了。

首先最左边是原始输入图片特征X,然后经过变换,比如卷积变换F_{tr}

其中:

X input,U 经过卷积后的output,v_c

  •  激励

 

其中:

\delta

 这一步其实就是一个放缩的过程,不同通道的值乘上不同的权重,从而可以增强对关键通道域的注意力。


 


混合域

了解前两种注意力域的设计思路后,简单对比一下。首先,空间域的注意力是忽略了通道域中的信息,将每个通道中的图片特征同等处理,这种做法会将空间域变换方法局限在原始图片特征提取阶段,应用在神经网络层其他层的可解释性不强。

而通道域的注意力是对一个通道内的信息直接全局平均池化,而忽略每一个通道内的局部信息,这种做法其实也是比较暴力的行为。所以结合两种思路,就可以设计出混合域的注意力机制模型[3]。

设计思路:

[3]这篇文章中提出的注意力机制是与深度残差网络(Deep Residual Network)相关的方法,基本思路是能够将注意力机制应用到ResNet中,并且使网络能够训练的比较深。

文章中注意力的机制是软注意力基本的加掩码(mask)机制,但是不同的是,这种注意力机制的mask借鉴了残差网络的想法,不只根据当前网络层的信息加上mask,还把上一层的信息传递下来,这样就防止mask之后的信息量过少引起的网络层数不能堆叠很深的问题。

正如之前说的,[3]中提出的注意力mask,不仅仅只是对空间域或者通道域注意,这种mask可以看作是每一个特征元素(element)的权重。通过给每个特征元素都找到其对应的注意力权重,就可以同时形成了空间域和通道域的注意力机制。

很多人看到这里就会有疑问,这种做法应该是从空间域或者通道域非常自然的一个过渡,怎么做单一域注意力的人都没有想到呢?原因有:

  • 如果你给每一个特征元素都赋予一个mask权重的话,mask之后的信息就会非常少,可能直接就破坏了网络深层的特征信息;

  • 另外,如果你可以加上注意力机制之后,残差单元(Residual Unit)的恒等映射(identical mapping)特性会被破坏,从而很难训练。

所以该文章的注意力机制的创新点在于提出了残差注意力学习(residual attention learning),不仅只把mask之后的特征张量作为下一层的输入,同时也将mask之前的特征张量作为下一层的输入,这时候可以得到的特征更为丰富,从而能够更好的注意关键特征。

模型结构:

文章中模型结构是非常清晰的,整体结构上,是三阶注意力模块(3-stage attention module)。每一个注意力模块可以分成两个分支(看stage2),上面的分支叫主分支(trunk branch),是基本的残差网络(ResNet)的结构。而下面的分支是软掩码分支(soft mask branch),而软掩码分支中包含的主要部分就是残差注意力学习机制。通过下采样(down sampling)和上采样(up sampling),以及残差模块(residual unit),组成了注意力的机制。

模型结构中比较创新的残差注意力机制是:

三重注意力【7】待更新

 


 


时间域注意力

这个概念其实比较大,因为计算机视觉只是单一识别图片的话,并没有时间域这个概念,但是[4]这篇文章中,提出了一种基于递归神经网络(Recurrent Neural Network,RNN)的注意力机制识别模型。

RNN模型比较适合的场景是数据具有时序特征,比如使用RNN产生注意力机制做的比较好的是在自然语言处理的问题上。因为自然语言处理的是文本分析,而文本产生的背后其实是有一个时序上的关联性,比如一个词之后还会跟着另外一个词,这就是一个时序上的依赖关联性。

而图片数据本身,并不具有天然的时序特征,一张图片往往是一个时间点下的采样。但是在视频数据中,RNN就是一个比较好的数据模型,从而能够使用RNN来产生识别注意力。

特意将RNN的模型称之为时间域的注意力,是因为这种模型在前面介绍的空间域,通道域,以及混合域之上,又新增加了一个时间的维度。这个维度的产生,其实是基于采样点的时序特征。

Recurrent Attention Model [4]中将注意力机制看成对一张图片上的一个区域点的采样,这个采样点就是需要注意的点。而这个模型中的注意力因为不再是一个可以微分的注意力信息,因此这也是一个强注意力(hard attention)模型。这个模型的训练是需要使用增强学习(reinforcementlearning)来训练的,训练的时间更长。

这个模型更需要了解的并不是RNN注意力模型,因为这个模型其实在自然语言处理中介绍的更详细,更需要了解的是这个模型的如何将图片信息转换成时序上的采样信号的:

这个是模型中的关键点,叫Glimpse Sensor,我翻译为视器,这个sensor的关键点在于先确定好图片中需要关注的点(像素),这时候这个sensor开始采集三种信息,信息量是相同的,一个是非常细节(最内层框)的信息,一个是中等的局部信息,一个是粗略的略缩图信息。 

这三个采样的信息是在l_{t-1}

结构:

 


 


通道注意力

SKnet[6] 待更新

 


 


基数维度注意力(待更新)

ResNeSt[8],号称ResNet的强化版,是由李沐团队张航博士所提出来的,作者从基数维度出发,将注意力的思想融入到多分支卷积结构当中,来解决传统CNN感受野受限以及却反跨通道信息交互的问题。ResNeSt整体延续了“Split-Transfore-Merge”结构,有点SK的味道,综合SENet、SKNet与ResNeXt三者的思想。ResNeSt所呈现的效果确实非常惊艳的,在ADE20K、MS-COCO等数据集上屠榜,碾压其他的手动网络架构,没有额外的计算开销,代码也不是很复杂。



重识别(待更新)

Relation-Aware Global Attention是中科大&微软亚洲研究院发表于CVPR 2020上针对行人重识别任务所提出的一种注意力方法。本文提倡的观点是,要直观地判断一个特征节点是否重要,就应该知道全局范围的特性,这样便可以通过得到进行决策所需要的关系信息,来更好地探索每个特征节点各自的全局关系,从而更好地学习注意力。



Reference:

[1] Kelvin Xu,Jimmy Lei Ba ,Ryan Kiros ,Kyunghyun Cho ,Aaron Courville ,"Show, Attend and Tell: Neural Image Caption Generation with Visual Attention".2016

[2] Hu, Jie, Li Shen, and Gang Sun."Squeeze-and-excitation networks." arXiv preprintarXiv:1709.01507 .2017

[3] Wang, Fei, et al. "Residual attentionnetwork for image classification." arXiv preprint arXiv:1704.06904 .2017

[4] Mnih, Volodymyr, Nicolas Heess, and AlexGraves. "Recurrent models of visual attention." Advances inneural information processing systems. 2014.

[5] Zequn Qin1 , Pengyi Zhang1 , Fei Wu1,2, Xi Li1,2."FcaNet: Frequency Channel Attention Networks".2020

[6] Xiang Li, Wenhai Wang, Xiaolin Hu and Jian Yang "Selective Kernel Networks".2019

[7] Diganta Misra,Trikay Nalamada,Ajay Uppili Arasanipalai,Qibin Hou  "Rotate to Attend: Convolutional Triplet Attention Module".2020

[8] Hang Zhang, Chongruo Wu? , Zhongyue Zhang, Yi Zhu, Haibin Lin, Zhi Zhang, Yue Sun, Tong He, Jonas Mueller, R. Manmatha, Mu Li, and Alexander Smola "ResNeSt: Split-Attention Networks ".2020

 

Deep Learning Paper Implementations: Spatial Transformer Networks

 

 


推荐阅读
author-avatar
手机用户2502935633
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有