大家好,这是专栏《AI不惑境》的第八篇文章,讲述计算机视觉中的注意力(attention)机制。
进入到不惑境界,就是向高手迈进的开始了,在这个境界需要自己独立思考。如果说学习是一个从模仿,到追随,到创造的过程,那么到这个阶段,应该跃过了模仿和追随的阶段,进入了创造的阶段。从这个境界开始,讲述的问题可能不再有答案,更多的是激发大家一起来思考。
作者&编辑 | 言有三
首发于有三AI公众号
【AI不惑境】计算机视觉中注意力机制原理及其模型发展和应用mp.weixin.qq.comAttention机制在近几年来在图像,自然语言处理等领域中都取得了重要的突破,被证明有益于提高模型的性能。Attention机制本身也是符合人脑和人眼的感知机制,这里我们主要以计算机视觉领域为例,讲述Attention机制的原理,应用以及模型的发展。
1 Attention机制与显著图
1.1 何为Attention机制
所谓Attention机制,便是聚焦于局部信息的机制,比如图像中的某一个图像区域。随着任务的变化,注意力区域往往会发生变化。
![88d11604376404072b2d53f9a3e1ab6d.png](https://i-blog.csdnimg.cn/blog_migrate/7419019a5f7196881445dfcb36846e23.jpeg)
面对上面这样的一张图,如果你只是从整体来看,只看到了很多人头,但是你拉近一个一个仔细看就了不得了,都是天才科学家。
图中除了人脸之外的信息其实都是无用的,也做不了什么任务,Attention机制便是要找到这些最有用的信息,可以想见最简单的场景就是从照片中检测人脸了。
1.2 基于Attention的显著目标检测
和注意力机制相伴而生的一个任务便是显著目标检测,即salient object detection。它的输入是一张图,输出是一张概率图,概率越大的地方,代表是图像中重要目标的概率越大,即人眼关注的重点,一个典型的显著图如下:
![00a2213f92a6fda7eec2608a33738639.png](https://i-blog.csdnimg.cn/blog_migrate/0619b8a597c4700cfddb8e98856e3d14.jpeg)
右图就是左图的显著图,在头部位置概率最大,另外腿部,尾巴也有较大概率,这就是图中真正有用的信息。
显著目标检测需要一个数据集,而这样的数据集的收集便是通过追踪多个实验者的眼球在一定时间内的注意力方向进行平均得到,典型的步骤如下:
(1) 让被测试者观察图。
(2) 用eye tracker记录眼睛的注意力位置。
(3) 对所有测试者的注意力位置使用高斯滤波进行综合。
(4) 结果以0~1的概率进行记录。
于是就能得到下面这样的图,第二行是眼球追踪结果,第三行就是显著目标概率图。
![a15efd17f8abfd5e1dd17bd7a12e62e5.png](https://i-blog.csdnimg.cn/blog_migrate/3102d6879b196b1bd70de6872bfec94a.jpeg)
上面讲述的都是空间上的注意力机制,即关注的是不同空间位置,而在CNN结构中,还有不同的特征通道,因此不同特征通道也有类似的原理,下面一起讲述。
2 Attention模型架构
注意力机制的本质就是定位到感兴趣的信息,抑制无用信息,结果通常都是以概率图或者概率特征向量的形式展示,从原理上来说,主要分为空间注意力模型,通道注意力模型,空间和通道混合注意力模型三种,这里不区分soft和hard attention。
2.1 空间注意力模型(spatial attention)
不是图像中所有的区域对任务的贡献都是同样重要的,只有任务相关的区域才是需要关心的,比如分类任务的主体,空间注意力模型就是寻找网络中最重要的部位进行处理。
我们在这里给大家介绍两个具有代表性的模型,第一个就是Google DeepMind提出的STN网络(Spatial Transformer Network[1])。它通过学习输入的形变,从而完成适合任务的预处理操作,是一种基于空间的Attention模型,网络结构如下:
![a4fbef6b2910221ab2d6a01ab1faff21.png](https://i-blog.csdnimg.cn/blog_migrate/26a0aee4e28c9f3ae9de99a8489b8d3c.jpeg)
这里的Localization Net用于生成仿射变换系数,输入是C×H×W维的图像,输出是一个空间变换系数,它的大小根据要学习的变换类型而定,如果是仿射变换,则是一个6维向量。
这样的一个网络要完成的效果如下图:
![6cd1fcbf0fab5bc4349f34dd9b65e784.png](https://i-blog.csdnimg.cn/blog_migrate/0a09550c50d76f9f5c473963822a53a7.jpeg)
即定位到目标的位置,然后进行旋转等操作,使得输入样本更加容易学习。这是一种一步调整的解决方案,当然还有很多迭代调整的方案,感兴趣可以去有三知识星球星球中阅读。
相比于Spatial Transformer Networks 一步完成目标的定位和仿射变换调整,Dynamic Capacity Networks[2]则采用了两个子网络,分别是低性能的子网络(coarse model)和高性能的子网络(fine model)。低性能的子网络(coarse model)用于对全图进行处理,定位感兴趣区域,如下图中的操作fc。高性能的子网络(fine model)则对感兴趣区域进行精细化处理,如下图的操作ff。两者共同使用,可以获得更低的计算代价和更高的精度。
![93cf6d58cf9db8f4b06f5b014f743ce8.png](https://i-blog.csdnimg.cn/blog_migrate/76d203289a639bd72a7d43cd1c92e2aa.jpeg)
由于在大部分情况下我们感兴趣的区域只是图像中的一小部分,因此空间注意力的本质就是定位目标并进行一些变换或者获取权重。
2.2 通道注意力机制
对于输入2维图像的CNN来说,一个维度是图像的尺度空间,即长宽,另一个维度就是通道,因此基于通道的Attention也是很常用的机制。
SENet(Sequeeze and Excitation Net)[3]是2017届ImageNet分类比赛的冠军网络,本质上是一个基于通道的Attention模型,它通过建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道,原理图如下。
![6441f30885187b642c756a879c5d9b00.png](https://i-blog.csdnimg.cn/blog_migrate/8c5d1a96b713cb9ae5a0cce7efe72f9e.jpeg)
在正常的卷积操作后分出了一个旁路分支,首先进行Squeeze操作(即图中Fsq(·)),它将空间维度进行特征压缩,即每个二维的特征图变成一个实数,相当于具有全局感受野的池化操作,特征通道数不变。
然后是Excitation操作(即图中的Fex(·)),它通过参数w为每个特征通道生成权重,w被学习用来显式地建模特征通道间的相关性。在文章中,使用了一个2层bottleneck结构(先降维再升维)的全连接层+Sigmoid函数来实现。
得到了每一个特征通道的权重之后,就将该权重应用于原来的每个特征通道,基于特定的任务,就可以学习到不同通道的重要性。
将其机制应用于若干基准模型,在增加少量计算量的情况下,获得了更明显的性能提升。作为一种通用的设计思想,它可以被用于任何现有网络,具有较强的实践意义。而后SKNet[4]等方法将这样的通道加权的思想和Inception中的多分支网络结构进行结合,也实现了性能的提升。
通道注意力机制的本质,在于建模了各个特征之间的重要性,对于不同的任务可以根据输入进行特征分配,简单而有效。
2.3 空间和通道注意力机制的融合
前述的Dynamic Capacity Network是从空间维度进行Attention,SENet是从通道维度进行Attention,自然也可以同时使用空间Attention和通道Attention机制。
CBAM(Convolutional Block Attention Module)[5]是其中的代表性网络,结构如下:
![b7adaefbd7da8dc45bc3f72c4a0bd5ba.png](https://i-blog.csdnimg.cn/blog_migrate/eb2d540e83a93b4bb2cbcfc538cc2cee.jpeg)
通道方向的Attention建模的是特征的重要性,结构如下:
![7c32ca503fb293cb6d1092277793ac09.png](https://i-blog.csdnimg.cn/blog_migrate/894578ae2ec194ba7ca5f78e7fd088d8.jpeg)
同时使用最大pooling和均值pooling算法,然后经过几个MLP层获得变换结果,最后分别应用于两个通道,使用sigmoid函数得到通道的attention结果。
空间方向的Attention建模的是空间位置的重要性,结构如下:
![34a474deaa0869ae95a21046dd5efe5e.png](https://i-blog.csdnimg.cn/blog_migrate/2a7e8e7c07d0022209a940b3efbf217b.jpeg)
首先将通道本身进行降维,分别获取最大池化和均值池化结果,然后拼接成一个特征图,再使用一个卷积层进行学习。
这两种机制,分别学习了通道的重要性和空间的重要性,还可以很容易地嵌入到任何已知的框架中。
除此之外,还有很多的注意力机制相关的研究,比如残差注意力机制,多尺度注意力机制,递归注意力机制等。
感兴趣的同学可以去我们知识星球中阅读相关的网络结构主题。
【知识星球】超3万字的网络结构解读,学习必备
![b7459b94f045f7ac33ddcc2b68f07d77.png](https://i-blog.csdnimg.cn/blog_migrate/1d8b970e4754973318967c3d22176068.jpeg)
![f44d591361109b75a8e669626e2d8a0d.png](https://i-blog.csdnimg.cn/blog_migrate/cdd655b2822d72bd76d9207e14572736.jpeg)
3 Attention机制典型应用场景
从原理上来说,注意力机制在所有的计算机视觉任务中都能提升模型性能,但是有两类场景尤其受益。
3.1 细粒度分类
关于细粒度分类的基础内容,可以参考。
【图像分类】细粒度图像分类是什么,有什么方法,发展的怎么样
![551e9fc1f04ac27af1d1a9ba2dfe0eb1.png](https://i-blog.csdnimg.cn/blog_migrate/51e0f7ed54d4ad0d8d27617b0869808e.jpeg)
我们知道细粒度分类任务中真正的难题在于如何定位到真正对任务有用的局部区域,如上示意图中的鸟的头部。Attention机制恰巧原理上非常合适,文[1],[6]中都使用了注意力机制,对模型的提升效果很明显。
3.2 显著目标检测/缩略图生成/自动构图
我们又回到了开头,没错,Attention的本质就是重要/显著区域定位,所以在目标检测领域是非常有用的。
![cf888c3e10ca2f3ec1b6363f807310a2.png](https://i-blog.csdnimg.cn/blog_migrate/db41818bfa50df62496aa399feb70ac9.jpeg)
![a035038561bbfb8e7891fd12c68d16fe.png](https://i-blog.csdnimg.cn/blog_migrate/dc658c9a23cc452595345a85298e6024.jpeg)
上图展示了几个显著目标检测的结果,可以看出对于有显著目标的图,概率图非常聚焦于目标主体,在网络中添加注意力机制模块,可以进一步提升这一类任务的模型。
除此之外,在视频分析,看图说话等任务中也比较重要,相关内容将在有三AI知识星球中每日更新。
[1] Jaderberg M, Simonyan K, Zisserman A. Spatial transformer networks[C]//Advances in neural information processing systems. 2015: 2017-2025.
[2] Almahairi A, Ballas N, Cooijmans T, et al. Dynamic capacity networks[C]//International Conference on Machine Learning. 2016: 2549-2558.
[3] Hu J, Shen L, Sun G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7132-7141.
[4] Li X, Wang W, Hu X, et al. Selective Kernel Networks[J]. 2019.
[5] Woo S, Park J, Lee J Y, et al. Cbam: Convolutional block attention module[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 3-19.
[6] Fu J, Zheng H, Mei T. Look closer to see better: Recurrent attention convolutional neural network for fine-grained image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4438-4446.
总结
注意力机制是一个原理简单而有效的机制,符合人眼的视觉感知原理,在实现上也容易嵌入当前的主流模型架构,是值得采用和学习的技术。
下期预告:模型剪枝技术的发展
AI白身境系列完整阅读:
第一期:【AI白身境】深度学习从弃用windows开始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】学AI必备的python基础
第四期:【AI白身境】深度学习必备图像基础
第五期:【AI白身境】搞计算机视觉必备的OpenCV入门基础
第六期:【AI白身境】只会用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】学深度学习你不得不知的爬虫基础
第八期: 【AI白身境】深度学习中的数据可视化
第九期:【AI白身境】入行AI需要什么数学基础:左手矩阵论,右手微积分
第十期:【AI白身境】一文览尽计算机视觉研究方向
第十一期:【AI白身境】AI+,都加在哪些应用领域了
第十二期:【AI白身境】究竟谁是paper之王,全球前10的计算机科学家
AI初识境系列完整阅读
第一期:【AI初识境】从3次人工智能潮起潮落说起
第二期:【AI初识境】从头理解神经网络-内行与外行的分水岭
第三期:【AI初识境】近20年深度学习在图像领域的重要进展节点
第四期:【AI初识境】激活函数:从人工设计到自动搜索
第五期:【AI初识境】什么是深度学习成功的开始?参数初始化
第六期:【AI初识境】深度学习模型中的Normalization,你懂了多少?
第七期:【AI初识境】为了围剿SGD大家这些年想过的那十几招
第八期:【AI初识境】被Hinton,DeepMind和斯坦福嫌弃的池化,到底是什么?
第九期:【AI初识境】如何增加深度学习模型的泛化能力
第十期:【AI初识境】深度学习模型评估,从图像分类到生成模型
第十一期:【AI初识境】深度学习中常用的损失函数有哪些?
第十二期:【AI初识境】给深度学习新手开始项目时的10条建议
AI不惑境系列完整阅读:
第一期:【AI不惑境】数据压榨有多狠,人工智能就有多成功
第二期:【AI不惑境】网络深度对深度学习模型性能有什么影响?
第三期:【AI不惑境】网络的宽度如何影响深度学习模型的性能?
第四期:【AI不惑境】学习率和batchsize如何影响模型的性能?
第五期:【AI不惑境】残差网络的前世今生与原理
第六期:【AI不惑境】移动端高效网络,卷积拆分和分组的精髓
第七期:【AI不惑境】深度学习中的多尺度模型设计
第八期:【AI不惑境】计算机视觉中注意力机制原理及其模型发展和应用
第九期:【AI不惑境】模型剪枝技术原理及其发展现状和展望
第十期:【AI不惑境】模型量化技术原理及其发展现状和展望
第十一期:【AI不惑境】模型压缩中知识蒸馏技术原理及其发展现状和展望
第十二期:【AI不惑境】AutoML在深度学习模型设计和优化中有哪些用处?
----------------------------更多相关内容,请阅读以下资料----------------------------
模型解读系列目录:
【模型解读】从LeNet到VGG,看卷积+池化串联的网络结构
【模型解读】network in network中的1*1卷积,你懂了吗
【模型解读】GoogLeNet中的inception结构,你看懂了吗
【模型解读】说说移动端基准模型MobileNets
【模型解读】pooling去哪儿了?
【模型解读】resnet中的残差连接,你确定真的看懂了?
【模型解读】“不正经”的卷积神经网络
【模型解读】“全连接”的卷积网络,有什么好?
【模型解读】从“局部连接”回到“全连接”的神经网络
【模型解读】深度学习网络只能有一个输入吗
【模型解读】从2D卷积到3D卷积,都有什么不一样
【模型解读】浅析RNN到LSTM
【模型解读】历数GAN的5大基本结构
阿里天池模型结构设计与优化直播:
![fd0cdd3bf17491d67a26a92d5e1d3d01.png](https://i-blog.csdnimg.cn/blog_migrate/f0b11a4d8fe94f54f21231fc7876b3df.jpeg)
![41084a3ccb9853fc423eb679efa10fec.png](https://i-blog.csdnimg.cn/blog_migrate/0da6a924021d70618b238d9be287181d.jpeg)
有三AI知识星球中网络结构1000变,每日更新【杂谈】有三AI知识星球一周年了!为什么公众号+星球才是完整的?mp.weixin.qq.com
![8024a0dcc81b8064df156e1e8edd165c.png](https://i-blog.csdnimg.cn/blog_migrate/bb3c2731844d00d732c19e956f69e9bb.jpeg)
![a7f2a27f5978cb2475c8c45a437267db.png](https://i-blog.csdnimg.cn/blog_migrate/e915d369d413d2d2bee8225762e61043.jpeg)
![5b284b2148f595e93bc6ed917ad367e8.png](https://i-blog.csdnimg.cn/blog_migrate/c62b89dec1fd18f94c5914f4fa6388d9.jpeg)
![edce3cd7c4fbeaa3d65c0ec41ea475da.png](https://i-blog.csdnimg.cn/blog_migrate/539b5f1b6344486b964aeaacbfe3646c.jpeg)
![85199540d79013e9b71dbc7c3670a507.png](https://i-blog.csdnimg.cn/blog_migrate/44d09373f4eeee16185a437f611f3166.png)
有三AI秋季划模型优化组【通知】如何让你的2020年秋招CV项目经历更加硬核,可深入学习有三秋季划4大领域32个方向mp.weixin.qq.com
![04421ba02c4ca3698f6e1f4d4226d3f3.png](https://i-blog.csdnimg.cn/blog_migrate/5c9858b06a622172feb5db57aa75cd4e.jpeg)
![825039ace9c33be22e10e0c1ce156323.png](https://i-blog.csdnimg.cn/blog_migrate/aa73808b4be2180a3d760b02cb04f2f1.jpeg)