[Deep Learning] 计算机视觉中的注意力机制 Attention mechanism

最近想要往网络里面加一些注意力机制的模块,从网上整理了一些资料,了解一下attention mechanism.

什么是Attention机制?
没有找到attention的准确定义,但是我理解的注意力机制是这样的:
当我们在看一个东西时,我们会把我们的注意力集中在某些部位,忽略其他部位,比如我们看见一个人的脸的时候,我们最关注的可能是他的眼睛,其次是他的鼻子。所以说,我们对于目标物体不同的部分分配的注意力是不同的,而计算机视觉(computer vision)中的注意力机制(attention)的主要是想让系统学会把注意力放在感兴趣的地方。
另外一种理解就是,当我有很多任务的时候,我会根据任务的重要程度去决定我在这个任务上分配多少精力。
所以在计算机视觉相关的应用主要包括:
1)学习权重分布:就是学出一个权重分布,再拿这个权重分布施加在原来的特征之上。
2)任务聚焦:通过将任务分解,设计不同的网络结构(或分支)专注于不同的子任务,重新分配网络的学习能力,从而降低原始任务的难度,使网络更加容易训练。

Attention机制的分类
1).就注意力的可微性来分:

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

Hard-attention,就是0/1问题,哪些区域是被 attentioned,哪些区域不关注.
硬注意力(强注意力)与软注意力不同点在于,首先强注意力是更加关注点,也就是图像中的每个点都有可能延伸出注意力,同时强注意力是一个随机的预测过程,更强调动态变化。当然,最关键是强注意力是一个不可微的注意力,训练过程往往是通过增强学习(reinforcement learning)来完成的。
(参考文章:Mnih, Volodymyr, Nicolas Heess, and AlexGraves. “Recurrent models of visual attention.” Advances inneural information processing systems. 2014.)

2).就注意力关注的域来分:

空间域(spatial domain)
通道域(channel domain)
层域(layer domain)
混合域(mixed domain)
时间域(time domain):还有另一种比较特殊的强注意力实现的注意力域,时间域(time domain),但是因为强注意力是使用reinforcement learning来实现的,训练起来有所不同。

软注意力的注意力域
为了更清楚地介绍计算机视觉中的注意力机制,这篇文章将从软注意力的注意力域(attention domain)的角度来分析几种注意力的实现方法。其中主要是三种注意力域,空间域(spatial domain),通道域(channel domain),混合域(mixed domain)。

空间域(Spatial Domain):

空间域将原始图片中的空间信息变换到另一个空间中并保留了关键信息。
普通的卷积神经网络中的池化层(pooling layer)直接用一些max pooling 或者average pooling 的方法,将图片信息压缩,减少运算量提升准确率。

发明者认为之前pooling的方法太过于暴力,直接将信息合并会导致关键信息无法识别出来,所以提出了一个叫空间转换器(spatial transformer)的模块,将图片中的的空间域信息做对应的空间变换,从而能将关键的信息提取出来。
Spatial Transformer 模块
这里把论文和代码贴出来:
Spatial Transformer Networks paper code

通道域(Channel Domain):

通道域的注意力机制原理很简单,学过信号处理就会很容易理解,信号系统分析里面,任何一个信号其实都可以写成正弦波的线性组合,经过时频变换之后(一般是使用傅里叶变换,也是卷积变化),时域上连续的正弦波信号就可以用一个频率信号数值代替了。
在卷积神经网络中,每一张图片初始会由(R,G,B)三通道表示出来,之后经过不同的卷积核之后,每一个通道又会生成新的信号,比如图片特征的每个通道使用64核卷积,就会产生64个新通道的矩阵(H,W,64),H,W分别表示图片特征的高度和宽度
每个通道的特征其实就表示该图片在不同卷积核上的分量,类似于时频变换,而这里面用卷积核的卷积类似于信号做了傅里叶变换,从而能够将这个特征一个通道的信息给分解成64个卷积核上的信号分量。
既然每个信号都可以被分解成核函数上的分量,产生的新的64个通道对于关键信息的贡献肯定有多有少,如果我们给每个通道上的信号都增加一个权重,来代表该通道与关键信息的相关度的话,这个权重越大,则表示相关度越高,也就是我们越需要去注意的通道了。

Squeeze-and-Excitation Networks [paper][code]
这篇文章中的 Squeeze-and-Excitation block就是这样一个注意力机制模块,这个注意力机制分成三个部分:挤压(squeeze),激励(excitation),以及scale(attention)。
流程:

1.将输入特征进行 Global AVE pooling,得到 11 Channel
2.然后bottleneck特征交互一下,先压缩 channel数,再重构回channel数
3.最后接个 sigmoid,生成channel 间0~1的 attention weights,最后 scale 乘回原输入特征
在这里插入图片描述
混合域(Mixed Domain):

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

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

CBAM: Convolutional Block Attention Module(通道域+空间域) [paper][code]
也是基于 SE-Net 中的 Squeeze-and-Excitation module 来进行进一步拓展
在这里插入图片描述
在这里插入图片描述
DANet:Dual Attention Network for Scene Segmentation(空间域+通道域) [paper][code]

主要思想也是上述文章 CBAM 和 non-local 的融合变形:
把deep feature map进行spatial-wise self-attention,同时也进行channel-wise self-attetnion,最后将两个结果进行 element-wise sum 融合。

在这里插入图片描述
CCNet: Criss-Cross Attention for Semantic Segmentation [paper][code]
本文采用了criss-cross思想,只计算每个像素与其同行同列即十字上的像素的相似性,通过进行循环(两次相同操作),间接计算到每个像素与每个像素的相似性,将空间复杂度降为(HxW)x(H+W-1),以图为例为下:
在这里插入图片描述
整个网络的架构与DANet相同,只不过attention模块有所不同,如下图:在计算矩阵相乘时每个像素只抽取特征图中对应十字位置的像素进行点乘,计算相似度。
在这里插入图片描述

参考:
https://www.zhihu.com/question/68482809/answer/264070398
https://blog.csdn.net/xys430381_1/article/details/89323444
https://blog.csdn.net/zfnice/article/details/94998471
https://zhuanlan.zhihu.com/p/61440116

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值