点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

作者丨AdamLau@知乎

来源丨https://zhuanlan.zhihu.com/p/288758894

编辑丨极市平台

导读

本文配合相关的论文,讲述了多种CV注意力机制(Non-local Neural Networks、Squeeze-and-Excitation Networks、CBAM、DANet)的概念、特点以及相关实验。

CV注意力机制

Non-local ~ SE ~ CcNet ~ GC-Net ~ Gate ~ CBAM ~ Dual Attention ~ Spatial Attention ~ Channel Attention ~ ...

【只要你能熟练的掌握加法、乘法、并行、串行四大法则,外加知道一点基本矩阵运算规则(如:HW * WH = HH)和sigmoid/softmax操作,那么你就能随意的生成很多种注意力机制】

  • 空间注意力模块 (look where) 对特征图每个位置进行attention调整,(x,y)二维调整,使模型关注到值得更多关注的区域上。

  • 通道注意力模块 (look what) 分配各个卷积通道上的资源,z轴的单维度调整。

Non-local Neural Networks

论文:https://arxiv.org/abs/1711.07971v1

计算机视觉领域注意力机制的开篇之作。提出了non-local operations,使用自注意力机制建立远程依赖。- local operations: 卷积(对局部领域)、recurrent(对当前/前一时刻)等操作。- non-local operations用于捕获长距离依赖(long-range dependencies),即如何建立图像上两个有一定距离的像素之间的联系,如何建立视频里两帧的联系,如何建立一段话中不同词的联系等。Non-local operations 在计算某个位置的响应时,是考虑所有位置 features 的加权——所有位置可以是空间的,时间的,时空的。

1. Non-local 定义

其中x表示输入信号(图片,序列,视频等,也可能是它们的features),y表示输出信号,其size和x相同。f(xi,xj)用来计算i和所有可能关联的位置j之间pairwise的关系,这个关系可以是比如i和j的位置距离越远,f值越小,表示j位置对i影响越小。g(xj)用于计算输入信号在j位置的特征值。C(x)是归一化参数。理解: i 代表的是当前位置的响应,j 代表全局响应,通过加权得到一个非局部的响应值。

Non-Local的优点是什么?

  • 提出的non-local operations通过计算任意两个位置之间的交互直接捕捉远程依赖,而不用局限于相邻点,其相当于构造了一个和特征图谱尺寸一样大的卷积核, 从而可以维持更多信息。

  • non-local可以作为一个组件,和其它网络结构结合,经过作者实验,证明了其可以应用于图像分类、目标检测、目标分割、姿态识别等视觉任务中,并且效果有不同程度的提升。

  • Non-local在视频分类上效果很好,在视频分类的任务中效果可观。

论文中给了通用公式,然后分别介绍f函数和g函数的实例化表示:

  • g函数:可以看做一个线性转化(Linear Embedding)公式如下:



























是需要学习的权重矩阵,可以通过空间上的1×1卷积实现(实现起来比较简单)。

  • f函数:这是一个用于计算i和j相似度的函数,作者提出了四个具体的函数可以用作f函数。

1.Gaussian function 2. Embedded Gaussian 3. Dot product 4. Concatenation

2. Non-local block
























实际上是一个卷积操作,它的输出channel数跟x一致。这样以来,non-local操作就可以作为一个组件,组装到任意卷积神经网络中。

3. 实验

  • 文中提出了四个计算相似度的模型,实验对四个方法都进行了实验,发现了这四个模型效果相差并不大,于是有一个结论:使用non-local对baseline结果是有提升的,但是不同相似度计算方法之间差距并不大,所以可以采用其中一个做实验即可,文中用embedding gaussian作为默认的相似度计算方法。

  • 作者做了一系列消融实验来证明non local NN的有效性:

  • 对比四个计算相似度模型,并无太大差异;

  • 以Resnet50为例:对比non-local模块加在不同stage下的结果,在2,3,4stage处提高较大,可能由于第五层空间信息较少;

  • 对比加入non-local模块数量的结果,越多性能越好,但速度越慢;作者认为这是因为更多的non-local block能够捕获长距离多次转接的依赖。信息可以在时空域上距离较远的位置上进行来回传递,这是通过local models无法实现的;

  • 时间、空间及时空域上做non-local,效果均有提升;

  • non-local VS 3D卷积,non-local更有效率,且性能更好;

  • non-local和3D conv是可以相互补充的;

  • 更长的输入序列,所有模型在长序列上都表现得更好。

Squeeze-and-Excitation Networks

论文:https://arxiv.org/abs/1709.01507

很多前面的工作都提出了以空间维度提升网络的性能,比如inception结构获取不同感受野信息、inside-outside结构更多考虑上下文信息、空间注意力机制等。是否有其他层面去提升性能??

SENet是首个提出从channel-wise层面提出Squeeze-and-Excitation模块的通道注意力机制,可以自适应调整各通道的特征响应值。

网络应用于分类,如何应用到分割上?

1. SE模块

网络结构如下所示:

  • Squeeze 使用全局平均池化(也可用其他方式)生成通道信息统计,实现通道描述;

将全局空间信息压缩为一个通道描述符;

  • Excitation 实现方式要灵活,且必须能学习一个非互斥的关系

使用了sigmoid激活函数的门限机制来实现,使权重在(0,1)上

最后通过一个scale的操作将所求的权重乘上原来每个通道的二维特征上

训练全连接网络学习到每个特征通道的权重,权重可以显示地建模特征通道的相关性。

2. 实验

SE模块可以应用到inception、resblock等多种结构,非常灵活。

消融实验非常完备,实验结果也是当时的STOA,夺得了ILSVRC2017的冠军。(较为简略,具体看论文)

3. 结论

SE模块能够动态自适应完成在通道维度上对原始特征进行重标定,首次关注了模型通道层面的依赖关系。另外,由SE块产生的特征重要性值是否能用于网络剪枝(模型压缩)

CBAM: Convolutional Block Attention Module

论文:https://arxiv.org/pdf/1807.06521.pdf

代码:https://github.com/luuuyi/CBAM.PyTorch

论文Introduction部分提出了影响卷积神经网络模型性能的三个因素:深度、宽度、基数。并且列举了一些代表新的网络结构,比如和深度相关的VGG和ResNet系列,和宽度相关的GoogLeNet和wide-ResNet系列,和基数相关的Xception和ResNeXt。

除了这三个因素之外,还有一个模块,也能影响网络的性能,这就是attention——注意力机制。

动机:所以文章提出了两个注意力机制的模块,分别是channel attention module和spatial attention module。通过级联方式连接起来。模块较为灵活,可以嵌入到ResBlock等。

1. Channnel attetion module(通道注意力模块)

通道注意力模块主要是探索不同通道之间的feature map的关系。每一个通道的feature map本身作为一个特征检测出器(feature detetor),通过这个通道注意力模块来告诉模型,我们更应该注意哪一部分特征。

同时使用average-pooling和max-pooling聚合空间维度特征,产生两个空间维度描述符。随后经MLP(fc+Relu+fc)+sigmoid层(和SE-Net相同,只是squeeze操作多了一步max pooling),为每个通道产生权重,最后将权重与原始未经channel attention相乘。

2. Spatial attention module(空间注意力模块)

利用空间注意力模块来生成一个spatial attention map,用来利用不同特征图之间的空间关系,以此来使模型注意特征图的哪些特征空间位置。

网络应用于分类,如何应用到分割上?

  1. 这一次是在轴的方向上对不同特征图上相同位置的像素值进行全局的MaxPooling和AvgPooling操作,分别得到两个spatial attention map并将其concatenate,shape为[2, H, W]。

  2. 再利用一个7*7的卷积对这个feature map进行卷积。后接一个sigmoid函数。得到一个语言特征图维数相同的加上空间注意力权重的空间矩阵。

  3. 最后把得到的空间注意力矩阵对应相乘的原特征图上,得到的新的特征图。

3. 实验

  • Comparison of different channel attention methods:

用maxpooling与avgpooling一起比SENet(仅用avgpooling)效果更好。

  • Comparison of different spatial attention methods:

使用7x7卷积核的原因是具有更大的感受野,还有个人认为小卷积核可能会造成一些特征图的confusion。

  • Combining methods of channel and spatial attention:

整体的消融实验。

Dual Attention Network for Scene Segmentation

论文:https://arxiv.org/pdf/1809.02983.pdf

虽然上下文融合有助于捕获不同比例的对象,但却无法利用全局视图中对象之间的关系。容易忽略不显眼的对象,或是没有综合考虑各个位置的联系和相关性,致使分割的类内不一致性,产生误分割。对于语义分割,每个通道的map相当于是对每一类的响应,因此对于通道间的相关性也应着重考虑。

为解决这一问题,提出了双注意力网络(DANet),基于自注意力机制来分别捕获空间维度和通道维度中的特征依赖关系。具体而言,本文在dilated FCN上附加了2种注意力模块,分别对空间维度和通道维度上的语义依赖关系进行建模。

应用于分割的注意力网络,空间注意力模块与通道注意力模块并联连接,最终将两个模块的结果进行elementwise操作。在特征提取处,作者对ResNet做出以下改动,将最后的downsampling取消,采用空洞卷积来达到即扩大感受野又保持较高空间分辨率的目的,最终的特征图扩大到了原图的1/8。

1. Position Attention Module(PAM)

位置注意力模块旨在利用任意两点特征之间的关联,来相互增强各自特征的表达。

2. Channel Attention Module(CAM)

每个high level特征的通道图都可以看作是一个特定于类的响应,通过挖掘通道图之间的相互依赖关系,可以突出相互依赖的特征图,提高特定语义的特征表示。

为了进一步获得全局依赖关系的特征,将两个模块的输出结果进行相加融合,获得最终的特征用于像素点的分类。

3. 总结

总的来说,DANet网络主要思想是 CBAM 和 non-local 的融合变形。把deep feature map进行spatial-wise self-attention,同时也进行channel-wise self-attetnion,最后将两个结果进行 element-wise sum 融合。

在 CBAM 分别进行空间和通道 self-attention的思想上,直接使用了 non-local 的自相关矩阵 Matmul 的形式进行运算,避免了 CBAM 手工设计 pooling,多层感知器等复杂操作。

参考:

  1. https://blog.csdn.net/elaine_bao/article/details/80821306

  2. https://zhuanlan.zhihu.com/p/102984842

  3. https://zhuanlan.zhihu.com/p/93228308

  4. https://zhuanlan.zhihu.com/p/106084464

  5. https://blog.csdn.net/wumenglu1018/article/details/95949039

  6. https://blog.csdn.net/xh_hit/article/details/88575853

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

一文看懂CV中的注意力机制相关推荐

  1. 一文读懂CV中的注意力机制

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨AdamLau@知乎 来源丨https://zhuanlan ...

  2. ​【Python基础】一文看懂 Pandas 中的透视表

    作者:来源于读者投稿 出品:Python数据之道 一文看懂 Pandas 中的透视表 透视表在一种功能很强大的图表,用户可以从中读取到很多的信息.利用excel可以生成简单的透视表.本文中讲解的是如何 ...

  3. 万字长文解析CV中的注意力机制(通道/空间/时域/分支注意力)

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[transformer综述]获取2022最新ViT综述论文! 注意 ...

  4. 一文读懂SpringBoot中的事件机制

    一文读懂SpringBoot中的事件机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法. 要"监听"事件,我们总是 ...

  5. 一文读懂Spring中的AOP机制

    一.前言 这一篇我们来说一下 Spring 中的 AOP 机制,为啥说完注解的原理然后又要说 AOP 机制呢? 1.标记日志打印的自定义注解 @Target({ElementType.METHOD}) ...

  6. 【CV中的注意力机制】史上最强ResNet变体--ResNeSt

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [前言]:我们前面已经详细介绍了Attention机制和视觉注意力机制在图像分类结 ...

  7. 一文看懂机器学习中的常用损失函数

    作者丨stephenDC 编辑丨zandy 来源 | 大数据与人工智能(ID: ai-big-data) 导语:损失函数虽然简单,却相当基础,可以看做是机器学习的一个组件.机器学习的其他组件,还包括激 ...

  8. 一文看懂 NLP 中的情感分析任务

    目前,情感分析在中文自然语言处理(Natural Language Processing)中比较火热,很多场景下,我们都需要用到情感分析.比如,做金融产品量化交易,需要根据爬取的舆论数据来分析政策和舆 ...

  9. 一文看懂神经网络中的梯度下降原理 图像说明

    本文是一篇关于深度学习优化方法--梯度下降的介绍性文章.作者通过长长的博文,简单介绍了梯度下降的概念.优势以及两大挑战.文中还配有大量生动形象的三维图像,有兴趣的亲了解一下? 从很大程度上来说,深度学 ...

最新文章

  1. 一文整理深度学习【调参小技巧】
  2. 计算机地址永无符号数表示,计算机如何区分 有符号 无符号数的区别???
  3. linux用冒泡排序程序,利用双向走动法改进冒泡排序算法C语言源代码[黑盟核心成员]...
  4. 台湾印象之八:海角七号
  5. 【学习笔记】我命由天不由我之随机化庇佑 —— 爬山法 和 模拟退火法
  6. java+springmvc+vo,springmvc+mybatis的实例详解
  7. android view stop,android – onDestroyView片段永远不会在onStop之后调用
  8. Netbeans 安装和配置 C/C++ 支持
  9. 《JavaScript权威指南》学习笔记 第三天 找个对象
  10. 计算机等级二级c语言考试真题,历年计算机等级考试二级C语言上机真题及答案..pdf...
  11. 工具类之十七 基于zxing的二维码生成工具类
  12. 安装小豚当家监控摄像头
  13. STM32开发 -- RTC详解
  14. ai芯片fpga_AI芯片技术趋势景观GPU TPU FPGA初创公司
  15. math_求和号@累乘号的性质(变界)@求和恒等式
  16. 大型机、小型机、x86服务器的区别
  17. 酷开科技打响新时代营销争夺战
  18. wildfly 21的domain配置
  19. (单细胞-SingleCell)拟时序分析-细胞轨迹追踪
  20. 基于WebGl的火车运行轨迹展示

热门文章

  1. 关于Mongodb索引创建的一些体会
  2. HBase结合MapReduce批量导入
  3. Linux命令行文本处理工具
  4. 怎样使一个Android应用不被杀死?
  5. 精华:软件架构模式的7种武器
  6. 我有点不喜欢分布式中的TCC模式了
  7. 如何解决MySQL order by limit语句的分页数据重复问题?
  8. 如何构建一个好的电商搜索引擎?
  9. 做管理必须避开的六个坑
  10. 程序员的幸福:上个月被裁拿赔偿,这个月找到涨薪50%的工作