近年来,attention机制在机器视觉和机器翻译领域受到了广泛的关注,有很多文章都是融合attention来提高性能。attention受启发于人类的视觉系统,最先应用于序列化的机器翻译(NLP)后又推广到计算机视觉中,本篇文章就来简单学习一下attention机制吧~
注意:attention在视觉和NLP领域均有所应用,虽然底层原理相同,但在应用上还是有所不同,结合笔者的研究领域,本篇文章主要介绍视觉中的attention。主要内容如下所示:
一、 attention的主要思想
二、 什么是视觉中的attention机制?
三、 视觉attention的分类
3.1 channel attention(通道attention)
3.2 spatial attention(空间attention)
3.3 channel and spatial attention(通道和空间混合attention)
四、attention机制的优缺点
五、attention的应用领域
六、attention结合语义通信
一、 Attention的主要思想
其实attention的思想很简单:从大量信息中筛选出有用的信息,就能够称为注意力机制,就是把关注点聚焦于局部信息,随着任务变化,聚焦的内容也发生变化。从数学思想角度说,attention就是把输入X每个部分赋予不同权重,对关键的信息赋予高权重,使模型做出更加准确的判断。这个输入X也叫做特征图,attention就是特征图的权重分布,有用特征权重增大,无用特征权重减少,再用学到的权重再次应用到特征图上,最终得到最优权重分布。
在视觉上,输入的往往是一张图像,这里的特征也就是图像特征啦,视觉attention就是确定图像权重啦~
注意:attention是一个机制,也就是一个模块,可以加到任何一个视觉网络中来帮助特征提取。
二、 什么是视觉中的attention机制?
attention机制伴生:显著目标检测(salient object detection),输入是一张图,输出是一张概率图,概率越大的地方,代表是图像中重要目标的概率越大,即人眼关注的重点。
前面说到attention机制的本质就是利用相关特征图学习权重分布,再用学出来的权重施加在原特征图之上最后进行加权计算。落实到视觉中即结合深度学习技术,大多数是集中于使用掩码(mask)来形成注意力机制。掩码原理在于通过另一层新的权重(每轮利用特征图计算的权重),将图片数据中关键的特征标识出来,通过学习训练,让深度神经网络学到每一张图片中需要关注的区域。
在权重的计算方式上略有差别,大致总结为如下四点:
1) 可以是保留所有分量平均做加权(即soft attention);
2) 可以是在分布中以某种采样策略选取部分分量(即hard attention),通常使用RL
3)可以作用在空间尺度上,给不同空间区域加权;
4)可以作用在Channel尺度上,给不同通道特征加权;
三、 视觉attention的分类
在分类上,可以从两个角度上分:强弱和attention关注的对象。本文主要介绍后者,但对于强弱的区分做一个简要的描述。
强弱上的区分也就是:一种是软注意力(soft attention),另一种则是强注意力(hard attention)。其不同之处有以下几点:
1) 软注意力更关注区域或者通道,而且软注意力是确定性的注意力,学习完成后直接可以通过网络生成。
2) 软注意力是可微的,可通过神经网络算出梯度并且前向传播和后向反馈来学习得到注意力的权重。
3) 强注意力更加关注点,也就是图像中的每个点都有可能延伸出注意力
4) 强注意力是一个随机的预测过程,更强调动态变化。
5) 强注意力是一个不可微的注意力,训练过程往往是通过强化学习(reinforcement learning) 来完成的。
在计算机视觉中,很多领域的相关工作(例如,分类、检测、分割、生成模型、视频处理等)都在使用Soft Attention,典型代表:SENet、SKNet。
总体来说使用soft比使用hard更为普遍(可微是巨大的优势),以下介绍的几类都可以算作soft。
下面结合具体的例子介绍下不同分类:通道attention,空间attention,通道空间融合attention。
其实本质上不同分类就代表不同的权重计算方式,通道attention是按照图片的RGB通道计算,空间attention就是不论通道以位置计算,混合就是两者都有。下面来结合例子具体说说。
预备知识:一张图片是由RGB三个通道组成,每个通道上具有相同空间,尺寸为H x W
3.1 通道attention
通道attention就是对每个Channel(通道),在channel维度上学习到不同的权重,平面维度上权重相同。基于通道域的attention通常是对一个通道内的信息直接全局平均池化,而忽略每一个通道内的局部信息。也就是建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道。这样通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的通道并抑制对当前任务用处不大的通道。
实例:Squeeze-and-Excitation Networks(SENet)
论文地址:https://arxiv.org/abs/1709.01507
官方代码地址:https://github.com/hujie-frank/SENet
Pytorch实现代码:https://github.com/moskomule/senet.pytorch
SENet的系统结构如下:
SENet里面主要就是这个SE模块,主要三个阶段:提取通道数据、通道数据权重确定、通道数据权重反馈
目前大多数的主流网络都是以repeat方式叠加来构造的。因此SE模块可以嵌入到现在几乎所有的网络结构中。通过在原始网络结构的building block 单元中嵌入SE模块,可以获得不同种类的SENet
参考:https://blog.csdn.net/xjz18298268521/article/details/79078551
3.2 空间attention:
空间attention是对H x W尺寸的特征图学习到一个权重,即每个像素都会学习到一个权重。可以理解成一个像素是C维的一个向量,深度是C,在C个维度上,权重都是一样的,但是在平面上,也就是不同像素之间,权重不一样。空间attention可以提高网络的对图像变形、旋转等几何变换的鲁棒性。
实例:Spatial Transformer Networks(2D图像定位感兴趣区域,STN网络)
STN论文原文:https://arxiv.org/abs/1506.02025
Pytorch版Github代码:https://github.com/fxia22/stn.pytorch
STN是学习对输入数据进行空间变换,从而增强网络的对图像变形、旋转等几何变换的鲁棒性。原文中提到是面向CNN的,STN 可以在端到端的训练过程中自适应地学习变换参数,无需人为设置变换方式和参数。
STN 的基本结构如下图所示,包括三个部分:定位网络(Localization Network)、网格生成器(Grid Generator)和采样器(Sampler)。
因为STN主要面向的问题是图片的一些平移空间变换,也就是建立变换前后坐标之前的映射关系就好了(上图的UV就是两个坐标)。三个模块各自对应的功能如下:
参考:https://blog.csdn.net/qq_45122568/article/details/124293622
3.3 通道空间融合attention
融合的attention就是即考虑通道维度也考虑空间维度
实例:Convolutional Block Attention Module(CBAM网络)
论文原文网址:https://arxiv.org/pdf/1807.06521.pdf
Pytorch源码:https://github.com/Jongchan/attention-module
CBAM结合了使用了通道与空间注意力机制。作者认为通道注意力决定了“what is important",空间注意力决定了"where is important"。
CBAM的网络架构如下图所示,其中分别包含了Channel attention module和spatial attention module,并且两者是线性关系,简单来说就是先计算一轮通道再计算一轮空间,这样最后计算得到的就包含两部分了:
Channel attention module原理:
1)特征聚合: 对输入的特征图(通常是前一层卷积层的输出)执行全局平均池化和全局最大池化,这两种池化操作均沿着空间维度(宽度和高度)进行,以生成两个不同的通道描述符。每个描述符是一维的,并且其长度等于输入特征图的通道数。
2)多层感知机(MLP):获取到的两个通道描述符分别通过共享权重的多层感知机(MLP,具有一个隐藏层),这个过程相当于在通道空间中进行特征编码。
3)融合:使用元素级别的加法将两个通道描述符合并起来,得到通道注意力的权重。这种方式能够同时考虑到不同通道间最大值和平均值的信息,使得模型能够捕捉到更全面的通道级特征信息。
4)激活和再缩放:对合并后的通道权重进行激活函数处理,如Sigmoid或者Softmax,然后将这个激活后的权重与原始输入特征图按通道相乘(即特征重标定),这个步骤实现了对输入特征图通道的重加权。
通过这个模块,网络便能够凸显那些对当前任务最有帮助的通道中的特征,并关注于这些重要的特征。CBAM中的Channel Attention Module可以有效提升网络表征特征的能力,给出更具区分性的特征表示,通常可以帮助改善许多视觉任务的性能。
Spatial attention module原理:
1)特征聚合:首先,对特征图执行通道维度上的聚合操作。模型通常使用最大池化和平均池化来凸显不同类型的信息:最大池化能够帮助模型捕捉到最显著的特征,而平均池化能够帮助捕捉到全局的统计特征。这两种池化操作均沿着通道轴执行,生成两个二维特征图(每个的尺寸等于输入特征图的空间维度)。
2)特征融合:然后,通过将最大池化和平均池化之后产生的两个特征图在通道维度上堆叠起来,形成一个两通道的特征图。
3)卷积:接着,通过一个具有单个滤波器的7x7卷积层来处理这个两通道特征图。该卷积层有效地对空间位置的特征进行编码,产生一个二维的空间注意力图。通过该操作,模型学习到了输入特征图的哪些空间位置最为重要。
4)激活和再缩放:利用激活函数(如Sigmoid函数)对得到的空间注意力图进行激活,使得每个空间位置的像素值范围在0和1之间。将激活后的空间注意力图与原始输入特征图进行逐元素相乘,从而在空间维度上重新调整原始特征图的权重。
经过Spatial Attention Module处理后,网络的注意力被引导到重要的空间区域上,忽略了那些不太重要的区域,从而使网络能更有效地进行特征学习。空间注意力与通道注意力的结合应用,共同增强了CNN在处理视觉任务时的性能。
参考:https://blog.csdn.net/qq_34554039/article/details/122892781
四、Attention机制的优缺点?
4.1 优点
1)目标关注:注意力机制能够帮助模型更加集中地关注图像中的重要区域,从而提高目标检测、图像分类等任务的性能。通过给予不同区域不同的注意力权重,模型可以更好地聚焦于关键信息。
2)视觉解释性:注意力机制能够提供一定程度的视觉解释性,即指示模型注重哪些区域用于决策。这使得注意力机制在解释模型决策的可解释性任务中有所帮助。
4. 2缺点
1)计算复杂度:与其他基础模型相比,引入注意力机制会增加计算复杂度。在处理大规模图像数据时,这可能导致显著的计算开销,影响模型的实时性能。
2)受限的区域范围:某些注意力机制设计可能限制了模型只能在有限的局部区域上进行注意力调整,而无法对整个图像进行全局处理。这可能导致模型错过一些全局上的关键信息。
3)迁移性问题:由于注意力机制的设计依赖于具体任务和数据集,因此在不同任务和数据集上迁移时,注意力机制的性能可能会下降。这可能需要额外的调整和训练来适应新的任务。
五、Attention的应用领域
1)目标检测(Object Detection):应用注意力机制来集中识别图像中的特定对象,从而提高检测性能和准确度。
2)场景理解(Scene Understanding):注意力模型帮助算法关注图像中的关键要素来更好地理解场景的内容。
3)图像分类(Image Classification):通过突出重要区域和抑制不重要的部分,注意力驱动的方法提高了图像分类的准确性。
4)图像和视频字幕(Image and Video Captioning):视觉注意力机制可以用于挑选出与生成描述最相关的图像或视频区域。
5)医学影像分析(Medical Image Analysis):在诸如肿瘤检测或器官分割的任务中,注意力机制让模型集中在预期区域,从而提高了分析的准确性。
6)人机交互(Human-Computer Interaction):利用注意力机制,可以创建出更自然的交云接口,如通过跟踪用户的视线来判断他们的注意焦点。
7)机器人导航和控制(Robotics Navigation and Control):机器人可以使用注意力驱动模型来识别并关注在其环境中最重要的对象或障碍。
8)增强现实(Augmented Reality):在 AR 应用中,视觉注意力可以帮助强调重要信息或融合现实与增强内容。
9)自然语言处理(Natural Language Processing, NLP):尽管这是一个非视觉任务,注意力机制也被用于模型中的非结构化数据,使模型能够识别和关注在文本中最具信息量的部分。
10)艺术创作(Artistic Creation):自动化艺术和设计软件可以利用注意力模型来创建吸引人的视觉元素。
六、attention结合语义通信
因为笔者自己是处于语义通信领域的,这里介绍下和本领域的结合。
目前看到一种结合方法是:因为现在语义通信里比较常用的DeepJSCC结构,也就是channel本身是参与网络训练的。导致训练出来的模型和训练channel是强相关的,在SNR稍微低一点儿的信道上通信效率大幅下降。所以融合attention就是把信道也作为编解码模型训练的考虑标准之一,attention会对不同信道进行特征提取,这样训练出来的模型在不同信道上的鲁棒性比较好。