几篇较新的计算机视觉Self-Attention

https://www.zhihu.com/search?q=Self-Attention&type=content

作者:Fisher Yu
链接:https://zhuanlan.zhihu.com/p/44031466
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

Attention注意力,起源于Human visual system(HVS),个人定义的话,应该类似于 外界给一个刺激Stimuli,然后HVS会第一时间产生对应的 saliency map,注意力对应的应该就是这个显著性区域。

这其中就涉及很多 bottom-up 及 top-down 的 physiological 原理~

-------------------------------

总的来说,就是 区域权值学习 问题:

  1. Hard-attention,就是0/1问题,哪些区域是被 attentioned,哪些区域不关注

2. Soft-attention,[0,1]间连续分布问题,每个区域被关注的程度高低,用0~1的score表示

Self-attention自注意力,就是 feature map 间的自主学习,分配权重(可以是 spatial,可以是 temporal,也可以是 channel间)


[1] Non-local NN, CVPR2018

FAIR的杰作,主要 inspired by 传统方法用non-local similarity来做图像 denoise

主要思想也很简单,CNN中的 convolution单元每次只关注邻域 kernel size 的区域,就算后期感受野越来越大,终究还是局部区域的运算,这样就忽略了全局其他片区(比如很远的像素)对当前区域的贡献。

所以 non-local blocks 要做的是,捕获这种 long-range 关系:对于2D图像,就是图像中任何像素对当前像素的关系权值;对于3D视频,就是所有帧中的所有像素,对当前帧的像素的关系权值。

网络框架图也是简单粗暴:

Non-local block

文中有谈及多种实现方式,在这里简单说说在DL框架中最好实现的 Matmul 方式:

  1. 首先对输入的 feature map X 进行线性映射(说白了就是 1*1*1 卷积,来压缩通道数),然后得到 \theta,\phi,g 特征
  2. 通过reshape操作,强行合并上述的三个特征除通道数外的维度,然后对 \theta和\phi 进行矩阵点乘操作,得到类似协方差矩阵的东西(这个过程很重要,计算出特征中的自相关性,即得到每帧中每个像素对其他所有帧所有像素的关系)
  3. 然后对自相关特征 以列or以行(具体看矩阵 g 的形式而定) 进行 Softmax 操作,得到0~1的weights,这里就是我们需要的 Self-attention 系数
  4. 最后将 attention系数,对应乘回特征矩阵 g 中,然后再上扩 channel 数,与原输入 feature map X 残差一下,完整的 bottleneck

嵌入在 action recognition 框架中的attention map 可视化效果:

attention visulization

图中的箭头表示,previous 若干帧中的某些像素 对最后图(当前帧)的脚关节像素的贡献关系。由于是soft-attention,其实每帧每个像素对对其有贡献关系,图中黄色箭头是把响应最大的关系描述出来。

总结

Pros:non-local blocks很通用的,容易嵌入在任何现有的 2D 和 3D 卷积网络里,来改善或者可视化理解相关的CV任务。比如前不久已有文章把 non-local 用在 Video ReID [2] 的任务里。

Cons:文中的结果建议把non-local 尽量放在靠前的层里,但是实际上做 3D 任务,靠前的层由于 temporal T 相对较大,构造 \theta,\phi 及点乘操作那步,超多的参数,需要耗费很大的GPU Memory~ 可后续改善


 

猜你喜欢

转载自blog.csdn.net/gaotihong/article/details/83899912