深度学习基础学习-注意力机制(计算机视觉中)

在网上看到很多关于注意力机制的说明,下面自己总结一下。大佬绕道
下面放几个文章的链接
添深度学习中的注意力模型
计算机视觉中的注意力机制
图像处理注意力机制Attention汇总
注意力机制详述
注意力机制总结
空间注意力机制和通道注意力机制详解
(很全面)综述—图像处理中的注意力机制

注意力机制是在计算能力有限的情况下,把计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案,一般在神经网络中,训练的模型参数越多,所存储的信息量则越大,会带来信息过载的问题,我们通过引入注意力机制,可以让我们聚焦更多“注意”在关键的信息上,降低对其他信息的关注度,或者过滤掉无关的信息,这样一来可以解决之前提到的过载问题,也提高了任务处理的效率和准确性。
注意力机制,其本质是一种通过网络自主学习出的一组权重系数,并以“动态加权”的方式来强调我们所感兴趣的区域同时抑制不相关背景区域的机制。这几年来,在是图像处理、语音识别还是自然语言处理等方面都有注意力机制应用。本文主要了解注意力机制在图像中的应用。

1、通俗理解注意力机制

注意力机制这个取名方式其实是利用了人类的注意力的命名方式。

1.1 图像例1

在这里插入图片描述
如图所示,图中红色部分是人们习惯性会放入更多注意力的部分,比如人的脸、文章标题以及段落最开始的部分。
人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。
深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。

1.2 图像例2

在这里插入图片描述
注意力(attention)其实是一个非常常见,但是又会被忽略的事实。比如天空一只鸟飞过去的时候,往往你的注意力会追随着鸟儿,天空在你的视觉系统中,自然成为了一个背景(background)信息。
在这里插入图片描述
对于神经网络,经过神经网络提取到的特征,对网络本身而言是没有任何差异的,它不会特别“注意”具体某一个特征,就像在这张图当中你不告诉它你想关注鸟儿,那么整张图片的信息其实还是天空占的比例更大,所以它会认为这是一张有关天空的照片,而不是鸟儿。

1.3 计算机视觉中的注意力机制

计算机视觉(computer vision)中的注意力机制(attention)的基本思想就是想让系统学会注意力——能够忽略无关信息而关注重点信息。
举个例子,生活中我们坐在咖啡店玩手机,如果注意力放在自己的手机上,基本上完全不知道外界在说什么东西,但是如果你恰好想听一个人说话,你眼睛离开手机,开始将注意力集中在那个人的声音上,你就能听清楚谈话的内容了。

视觉也是类似,你一扫而过,几乎很难注意到一些信息,但是如果你集中注意力看过去,事物的细节会在你的脑海里形成印象。

神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案。在神经网络学习中,一般而言模型的参数越多则模型的表达能力越强,模型所存储的信息量也越大,但这会带来信息过载的问题。那么通过引入注意力机制,在众多的输入信息中聚焦于对当前任务更为关键的信息,降低对其他信息的关注度,甚至过滤掉无关信息,就可以解决信息过载问题,并提高任务处理的效率和准确性。

这就类似于人类的视觉注意力机制,通过扫描全局图像,获取需要重点关注的目标区域,而后对这一区域投入更多的注意力资源,获取更多与目标有关的细节信息,而忽视其他无关信息。通过这种机制可以利用有限的注意力资源从大量信息中快速筛选出高价值的信息。

在深度学习发展的今天,搭建能够具备注意力机制的神经网络则开始显得更加重要,一方面是这种神经网络能够自主学习注意力机制,另一方面则是注意力机制能够反过来帮助我们去理解神经网络看到的世界

2、注意力机制的分类

这里简单介绍一下关于注意力机制的基础分类。
近几年来,深度学习与视觉注意力机制结合的研究工作,大多数是集中于使用掩码(mask)来形成注意力机制。掩码的原理在于通过另一层新的权重,将图片数据中关键的特征标识出来,通过学习训练,让深度神经网络学到每一张新图片中需要关注的区域,也就形成了注意力。

扫描二维码关注公众号,回复: 15147647 查看本文章

这种思想,进而演化成两种不同类型的注意力,一种是软注意力(Soft-attention),另一种则是硬注意力(Hard-attention)
在这里插入图片描述
如果就注意力关注的域进行分类,按照不同维度(如通道、空间、时间、类别等)出发,可以分为以下几种
在这里插入图片描述

其中
软注意力的注意力域:空间域(spatial domain),通道域(channel domain),混合域(mixed domain),自注意力(self attention)
硬注意力实现的注意力域:时间域(time domain)

以下每个分类具体来讲其实都是很大的一块,我这里只是从最浅的层面进行一个基础的理解

3、硬注意力及其对应的注意力域

硬注意力说白了就是0/1问题,哪些区域是被 attentioned,哪些区域不关注,硬注意力在图像中的应用已经被人们熟知多年:图像裁剪(image cropping)
硬注意力(强注意力)与软注意力不同点在于,首先强注意力是更加关注点,也就是图像中的每个点都有可能延伸出注意力,同时强注意力是一个随机的预测过程,更强调动态变化。当然,最关键是强注意力是一个不可微的注意力,训练过程往往是通过增强学习(reinforcement learning)来完成的。

简单来说,硬注意力机制具有不可微性,通常用强化学习来实现,通过收益函数的激励,使模型更关注某些部分的细节。

3.1 时间注意力(time attention)

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

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

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

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

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

4、软注意力及其对应的注意力域

软注意力机制简单来说就是[0,1]间连续分布问题,每个区域被关注的程度高低,用0~1的score表示。
软注意力的关键点在于,这种注意力更关注区域或者通道,而且软注意力是确定性的注意力,学习完成后直接可以通过网络生成,最关键的地方是软注意力是可微的,这是一个非常重要的地方。可以微分的注意力就可以通过神经网络算出梯度并且前向传播和后向反馈来学习得到注意力的权重。

简单来说,软注意力机制是通过梯度下降实现的,具有可微性和连续性。在神经网络中,软注意力的权重可通过前向传播和反向传播来进行学习调整。

4.1 通道注意力(channel attention)

通道注意力旨在显示的建模出不同通道(特征图)之间的相关性,通过网络学习的方式来自动获取到每个特征通道的重要程度,最后再为每个通道赋予不同的权重系数,从而来强化重要的特征抑制非重要的特征。

通道域的注意力机制原理很简单,我们可以从基本的信号变换的角度去理解。信号系统分析里面,任何一个信号其实都可以写成正弦波的线性组合,经过时频变换之后,时域上连续的正弦波信号就可以用一个频率信号数值代替了。
在这里插入图片描述
在卷积神经网络中,每一张图片初始会由(R,G,B)三通道表示出来,之后经过不同的卷积核之后,每一个通道又会生成新的信号,比如图片特征的每个通道使用64核卷积,就会产生64个新通道的矩阵(H,W,64),H,W分别表示图片特征的高度和宽度。

每个通道的特征其实就表示该图片在不同卷积核上的分量,类似于时频变换,而这里面用卷积核的卷积类似于信号做了傅里叶变换,从而能够将这个特征一个通道的信息给分解成64个卷积核上的信号分量。

在这里插入图片描述
既然每个信号都可以被分解成核函数上的分量,产生的新的64个通道对于关键信息的贡献肯定有多有少,如果我们给每个通道上的信号都增加一个权重,来代表该通道与关键信息的相关度的话,这个权重越大,则表示相关度越高,也就是我们越需要去注意的通道了。

这方面的代表作有SE-Net,通过特征重标定的方式来自适应地调整通道之间的特征响应。此外,还有比较出名的SK-Net,则是受Inception-block和SE-block共同启发,从多尺度特征表征的角度考虑,通过引入多个卷积核分支来学习出不同尺度下的特征图注意力,让网络能够更加侧重于重要的尺度特征。另外还有ECA-Net,利用1维的稀疏卷积操作来优化SE模块中涉及到的全连接层操作来大幅降低参数量并保持相当的性能。为了压缩参数量和提高计算效率,SE-Net采用的是“先降维-再升维”的策略,利用两个多层感知机来学习不同通道之间的相关性,即当前的每一个特征图都与其它特征图进行交互,是一种密集型的连接。ECA-Net则简化了这种连接方式,令当前通道只与它的k个领域通道进行信息交互。
在这里插入图片描述

4.1.1 SENet

其中SENet(Sequeeze and Excitation Net)是2017届ImageNet分类比赛的冠军网络,本质上是一个基于通道的Attention模型,它通过建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道,原理图如下。
在这里插入图片描述

首先最左边是原始输入图片特征X,然后经过变换,比如卷积变换图片,产生了新的特征信号U。U有C个通道,我们希望通过注意力模块来学习出每个通道的权重,从而产生通道域的注意力。

中间的模块就是SENet的创新部分,也就是注意力机制模块。这个注意力机制分成三个部分:挤压(squeeze),激励(excitation),以及注意(attention)。

  1. 挤压(squeeze)
    在这里插入图片描述
    很明显这个函数做了一个全局平均值,把每个通道内所有的特征值相加再平均,也是全局平均池化(global average pooling)的数学表达式。

  2. 激励(excitation)
    在这里插入图片描述
    δ函数是ReLU,而σ是一个sigmoid激活函数。W1和W2的维度分别是
    图片
    图片
    通过训练学习这两个权重,得到一个一维的激励权重来激活每一层通道。

  3. 尺度函数
    在这里插入图片描述
    这一步其实就是一个放缩的过程,不同通道的值乘上不同的权重,从而可以增强对关键通道域的注意力。

4.2 空间注意力(spatial attention)

空间注意力旨在提升关键区域的特征表达,本质上是将原始图片中的空间信息通过空间转换模块,变换到另一个空间中并保留关键信息,为每个位置生成权重掩膜(mask)并加权输出,从而增强感兴趣的特定目标区域同时弱化不相关的背景区域。

不是图像中所有的区域对任务的贡献都是同样重要的,只有任务相关的区域才是需要关心的,比如分类任务的主体,空间注意力模型就是寻找网络中最重要的部位进行处理。

这方面比较出色的工作有CBAM,它是在原有通道注意力的基础上,衔接了一个空间注意力模块(SAM)。SAM是基于通道进行全局平均池化以及全局最大池化操作,产生两个代表不同信息的特征图,合并后再通过一个感受野较大的7×7卷积进行特征融合,最后再通过Sigmoid操作来生成权重图叠加回原始的输入特征图,从而使得目标区域得以增强。总的来说,对于空间注意力来说,由于将每个通道中的特征都做同等处理,忽略了通道间的信息交互;而通道注意力则是将一个通道内的信息直接进行全局处理,容易忽略空间内的信息交互。作者最终通过实验验证先通道后空间的方式比先空间后通道或者通道空间并行的方式效果更佳。此外,类似的改进模块还有A2-Net所提出的Double Attention模块以及受SE-Net启发而提出的变体注意力模块scSE等等。
在这里插入图片描述

4.2.1 STN网络

Google DeepMind提出的STN网络(Spatial Transformer Network),它通过学习输入的形变,从而完成适合任务的预处理操作,是一种基于空间的Attention模型,网络结构如下:
在这里插入图片描述
这里的Localization Net用于生成仿射变换系数,输入是C×H×W维的图像,输出是一个空间变换系数,它的大小根据要学习的变换类型而定,如果是仿射变换,则是一个6维向量。

这样的一个网络要完成的效果如下图:
在这里插入图片描述

即定位到目标的位置,然后进行旋转等操作,使得输入样本更加容易学习。这是一种一步调整的解决方案

相比于Spatial Transformer Networks 一步完成目标的定位和仿射变换调整,Dynamic Capacity Networks则采用了两个子网络,分别是低性能的子网络(coarse model)和高性能的子网络(fine model)。

低性能的子网络(coarse model)用于对全图进行处理,定位感兴趣区域,如下图中的操作fc。
高性能的子网络(fine model)则对感兴趣区域进行精细化处理,如下图的操作ff。
两者共同使用,可以获得更低的计算代价和更高的精度。
在这里插入图片描述

由于在大部分情况下我们感兴趣的区域只是图像中的一小部分,因此空间注意力的本质就是定位目标并进行一些变换或者获取权重。

具体解释可以参考计算机视觉中的注意力机制(Visual Attention)

空间转换器模型实验结果图
比如这个空间转换器模型实验结果图:

  • (a)列是原始的图片信息,其中第一个手写数字7没有做任何变换,第二个手写数字5,做了一定的旋转变化,而第三个手写数字6,加上了一些噪声信号;
  • (b)列中的彩色边框是学习到的spatial transformer的框盒(bounding
    box),每一个框盒其实就是对应图片学习出来的一个spatial transformer;
  • (c)列中是通过spatial
    transformer转换之后的特征图,可以看出7的关键区域被选择出来,5被旋转成为了正向的图片,6的噪声信息没有被识别进入。

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

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

4.3 混合注意力(mixed attention)

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

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

CBAM全称是Convolutional Block Attention Module, 是在ECCV2018上发表的注意力机制代表作之一。在该论文中,作者研究了网络架构中的注意力,注意力不仅要告诉我们重点关注哪里,还要提高关注点的表示。 目标是通过使用注意机制来增加表现力,关注重要特征并抑制不必要的特征。为了强调空间和通道这两个维度上的有意义特征,作者依次应用通道和空间注意模块,来分别在通道和空间维度上学习关注什么、在哪里关注。此外,通过了解要强调或抑制的信息也有助于网络内的信息流动。在减少参数量的情况下提升了性能。

主要网络架构也很简单,一个是通道注意力模块,另一个是空间注意力模块,CBAM就是先后集成了通道注意力模块和空间注意力模块。
在这里插入图片描述

4.4 自注意力(self attention)

自注意力机制是注意力机制的改进,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。

在神经网络中,我们知道卷积层通过卷积核和原始特征的线性结合得到输出特征,由于卷积核通常是局部的,为了增加感受野,往往采取堆叠卷积层的方式,实际上这种处理方式并不高效。同时,计算机视觉的很多任务都是由于语义信息不足从而影响最终的性能。自注意力机制通过捕捉全局的信息来获得更大的感受野和上下文信息。

自注意力机制 (self-attention) 在序列模型中取得了很大的进步;另外一方面,上下文信息(context information)对于很多视觉任务都很关键,如语义分割,目标检测。自注意力机制通过(key, query, value)的三元组提供了一种有效的捕捉全局上下文信息的建模方式。

自注意力机制作为一个有效的对上下文进行建模的方式,在很多视觉任务上都取得了不错的效果。同时,这种建模方式的缺点也是显而易见的,一是没有考虑channel上信息,二是计算复杂度仍然很大。相应的改进策,一方面是如何进行spatial和channel上信息的有效结合,另外一方面是如何进行捕捉信息的稀疏化,关于稀疏的好处是可以更加鲁棒的同时保持着更小的计算量和显存。最后,图卷积作为最近几年很火热的研究方向,如何联系自注意力机制和图卷积,以及自注意力机制的更加深层的理解都是未来的很重要的方向。

猜你喜欢

转载自blog.csdn.net/m0_47146037/article/details/126260922