点上方计算机视觉联盟获取更多干货

仅作学术分享,不代表本公众号立场,侵权联系删除

转载于:作者丨Branislav Holländer

来源丨CV技术指南     编辑丨极市平台

AI博士笔记系列推荐

周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接

自从引入














网络以来,深度学习中的注意力机制在机器翻译和 






社区中广受欢迎。然而,在计算机视觉中,卷积神经网络 (CNN) 仍然是常态,自注意力才刚刚开始慢慢渗透到研究的主体中,要么补充现有的






架构,要么完全取代它们。

在这篇文章中,我将尝试阐明视觉自注意力的最新发展,并强调其可能带来的好处。对于这项任务,我将展示三篇不同的论文,在我看来,它们很好地说明了计算机视觉中自我注意的最新技术。

我将介绍的第一篇论文是Guan等人










来自医学影像分析社区,这让我有宾至如归的感觉。与自然图像(照片)不同,医学图像的外观通常非常相似。它们是使用来自标准化位置的类似采集参数获得的。对于放射科医生来说,阅读图像的经验主要来自于知道确切的位置以找到某种病理。因此,即使在其他研究领域之前,注意力在医学图像分析中也发挥了重要作用也就不足为奇了。

有问题的论文试图提高胸部




射线图像自动胸部疾病分类的性能。以前,已经提出了仅通过查看全局图像来检测和分类胸部 X 射线病理的网络。因此,多标签分类是通过使用二进制交叉熵








作为损失函数或其他一些标记机制(例如,使用







作为解码器来捕获标签之间的相互依赖关系的编码器-解码器框架










来执行的。

使用整个




射线图像进行分类的问题在于,在医学图像中,病变区域与整个图像相比可能非常小,甚至可能位于边界某处,这会给分类器和分类器带来大量噪声。降低检测精度。此外,胸部




射线图像经常出现错位(例如图1,第二行中的示例)。这种错位会导致图像周围的边界不规则,也可能对分类产生负面影响。

在论文中,作者使用递归硬注意力(即硬自注意力)通过裁剪出图像的判别部分并将全局图像和裁剪部分一起分类来提高检测精度(见图1)左侧的整个图像和右侧的裁剪部分)。

图1:来自[1]的两个训练图像,包括从网络中特定卷积层提取的热图以及由此产生的裁剪图像。全局图像和裁剪图像都用于分类。

该网络由三个分支组成:

  • 全局分支处理整个图像并确定裁剪ROI;

  • 局部分支展示注意力机制并处理裁剪后的图像;











  • 分支连接全局和局部分支的池化输出,并使用密集层执行最终分类。

所有分支都是分类网络,在最后执行多类分类(如图2所示)以预测病理的存在。除了分类之外,全局分支还用于生成确定裁剪区域的热图。热图是通过计算某个高级层沿通道的最大值来生成的。然后生成与热图大小相同的掩码。如果某个位置








的每通道最大化热图的值大于某个阈值,则在该位置为掩码分配1。否则,掩码的值为0。之后裁剪区域被确定,以便所有掩码值为1的点都在裁剪范围内。然后图像的裁剪部分通过本地分支运行。此外,两个分支的输出在融合分支中融合以执行额外的分类。

网络训练分三步:

  • ImageNet 预训练的全局分支的微调;

  • 掩码推理以获得裁剪图像并执行局部分支的微调。因此,全局分支中的权重是固定的;

  • 连接全局和局部分支输出并微调融合分支,同时冻结其他分支的权重。

融合分支用于产生模型的最终分类结果,正如预期的那样,它比其他两个分支表现得更好。

图2:[1]中介绍的 AG-CNN 架构,以 ResNet 骨干网为例。局部病变补丁是使用热图(注意力)层从全局图像中裁剪出来的。BCE表示二元交叉熵损失。

为了从注意力的角度理解模型在做什么,我们必须首先了解软注意力和硬注意力之间的区别。本质上,注意力根据一些外部或内部(自注意力)提供的权重重新权衡网络的某些特征。因此,软注意力允许这些权重是连续的,而硬注意力要求它们是二进制的,即0或1。这个模型是硬注意力的一个例子,因为它裁剪了图像的某个部分,因此本质上是对原始图像重新加权,以便裁剪部分的权重为1,其余为0。

硬注意力的主要缺点是它不可微,不能进行端到端的训练。相反,作者使用某个层的激活来确定






并在复杂的多阶段过程中训练网络。为了训练注意力门,我们必须使用软注意力(例如使用





















)。接下来我们将看看一些软注意力模型。

Squeeze-And-Excitation-Networks

Hu等人没有使用严格的注意力并在特征图的裁剪方面重新校准权重










。通过使用软自注意力对卷积特征通道之间的相互依赖性进行建模,研究了在CNN的某个层中重新加权通道响应。为此,作者介绍了构建块(见图3)。

模块的工作原理如下:对于特征










从X到U的任何变换(例如卷积),有一个变换










聚合跨空间范围








的全局特征响应。这就是挤压操作。挤压操作之后是激励操作










,这是一个














(自控门)操作,它构建了一个通道方式的权重响应。










的输出随后与激励结果逐通道相乘(这在图3中被描绘为













)。

挤压操作的数学描述是:

因此







 是操作










 的输出。挤压操作通过使用全局平均池化来创建全局嵌入。也可以使用全局最大池化,尽管作者指出平均池化会略微提高整体性能。

另一方面,激励块由下式描述:

因此,激励将挤压块的输出乘以学习的权重W1,将输出传递给ReLU函数 




δ



,将输出乘以另一组权重W2,并在最后使用










函数以确保产生的通道权重为正。因此,W1将维度减少了因子




(可以视为超参数),而W2再次将其增加到原始通道数。最后,










的通道特征响应乘以从激励块获得的权重。这可以被视为使用全局信息的通道上的自我注意功能。

模块背后的主要思想是在网络的决策过程中包含全局信息;卷积仅查看特定半径内的局部空间信息,而模块聚合来自整个感受野的信息。

作者的一个有趣观察是,在网络的早期阶段,不同类别的激励权重相对相似,并在后期变得更加具体。这与通常的假设相关,即较低层学习输入的更多一般特征,而较高层则越来越具有辨别力。此外,模块在网络的最后阶段没有多大意义,其中大多数激励变为 1。

这可以解释为,网络的最后阶段已经包含大部分全局信息和 操作没有带来新的信息内容。

方法的主要优势在于它非常灵活:作者提到了在广泛使用的架构中的集成,例如









(见图 4)、  























。实际上,该块可以添加到网络的每个阶段,也可以仅添加到特定阶段。此外,它在可学习参数的数量方面只引入了轻微的开销。例如,与已包含2500万个参数的原始 ResNet 相比,使用模块的














仅使用了约250万个额外参数。因此,这仅使复杂性增加了10%。

图4:原始ResNet块(左)和Squeez—And—Excitation块(右)[3]中所示。

在论文中,作者展示了大量由模块增强的训练架构示例。特别是,他们能够在









2017挑战中实现最先进的分类性能,前5名错误率仅为2.251%。

Stand-Alone Self-Attention

我将介绍的最后一篇文章










 2019通过使用独立的自注意力块,而不是仅通过自注意力来增强卷积层,进一步阐述了






中自注意力的想法。事实上,作者提出了一个自注意力层,可以用来代替卷积,同时减少参数的数量。

让我们回顾一下卷积操作来激发替换。卷积操作包括将特定大小(例如3x3)的权重矩阵与位置








处的每个邻域相乘,并对结果进行空间求和。这实现了不同空间位置之间的权重共享。此外,权重的数量与输入大小无关。

与卷积类似,论文提出的自注意力层也适用于








周围的一个小邻域,称为记忆块。对于每个内存块,单头注意力计算如下:

因此,






















是查询,




















 是键,






















是根据位置 








 及其邻域处的特征计算为线性变换的值。矩阵




是学习到的变换。

从公式中可以看出,转换后的中心像素










用作查询,键和值在邻域内求和。










 函数也应用于









以获得权重,然后将其与值相乘。

作者在本文中使用了多头注意力,这只是意味着将像素特征深度拆分为




个相同大小的组,使用不同的矩阵 




分别对每个组计算注意力,并将结果连接起来。图6提供了视觉自注意块的图形描述。

图6:[4]中空间范围k=3的局部注意层

使用上述方法的一个问题是注意力块中没有编码位置信息,因此该公式对于单个像素的排列是不变的。位置信息对于视觉任务很重要:例如,如果您想检测人脸,您将需要知道在哪里寻找嘴巴、鼻子、耳朵等。

在原始














论文






中,作者使用位置的正弦嵌入作为附加输入。然而,在






中,使用了相对





位置嵌入,因为它们在计算机视觉任务中具有更好的准确性。这些相对嵌入是通过计算位置








到每个邻域像素








的相对距离来获得的。这些距离分为行距离和列距离























。这些嵌入被连接到一个矩阵形式并乘以查询 










 如下:

这确保了由










函数计算的权重由键和查询的距离和内容调制。

从上面的描述我们可以看出,视觉自注意力是局部注意力的一种形式。注意层只关注内存块而不是整个特征图。这种方法的优点是参数的数量大大减少,不同空间位置之间的权重是共享的。作者提到他们的自注意力网络在训练和推理方面仍然比他们的






对手慢,但是他们将这归因于高度优化的卷积核以及注意力层缺乏优化的硬件。

作者还展示了他们在











上通过用自注意力块替换 









 中的 3x3 卷积获得的一些结果。请注意,它们保留了1x1卷积(基本上是按像素计算的全连接层)和卷积茎(网络中的前几个卷积层保持不变。有了这些变化,它们在以下方面的表现优于基线(标准









)所有经过测试的架构()同时使用的








减少了12%,参数减少了29%。

参考论文

[1] Guan, Qingji, et al. “Diagnose like a radiologist: Attention guided convolutional neural network for thorax disease classification.” arXiv preprint arXiv:1801.09927 (2018).

[2] Yao, Li, et al. “Learning to diagnose from scratch by exploiting dependencies among labels.” arXiv preprint arXiv:1710.10501 (2017).

[3] Hu, Jie, Li Shen, and Gang Sun. “Squeeze-and-excitation networks.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.

[4] Ramachandran, Prajit, et al. “Stand-Alone Self-Attention in Vision Models.” arXiv preprint arXiv:1906.05909 (2019).

[5] Vaswani, Ashish, et al. “Attention is all you need.” Advances in neural information processing systems. 2017.

原文链接:https://towardsdatascience.com/self-attention-in-computer-vision-2782727021f6

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

END

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

我是王博Kings,985AI博士,华为云专家、CSDN博客专家(人工智能领域优质作者)。单个AI开源项目现在已经获得了2100+标星。现在在做AI相关内容,欢迎一起交流学习、生活各方面的问题,一起加油进步!

我们微信交流群涵盖以下方向(但并不局限于以下内容):人工智能,计算机视觉,自然语言处理,目标检测,语义分割,自动驾驶,GAN,强化学习,SLAM,人脸检测,最新算法,最新论文,OpenCV,TensorFlow,PyTorch,开源框架,学习方法...

这是我的私人微信,位置有限,一起进步!

王博的公众号,欢迎关注,干货多多

王博Kings的系列手推笔记(附高清PDF下载):

博士笔记 | 周志华《机器学习》手推笔记第一章思维导图

博士笔记 | 周志华《机器学习》手推笔记第二章“模型评估与选择”

博士笔记 | 周志华《机器学习》手推笔记第三章“线性模型”

博士笔记 | 周志华《机器学习》手推笔记第四章“决策树”

博士笔记 | 周志华《机器学习》手推笔记第五章“神经网络”

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(上)

博士笔记 | 周志华《机器学习》手推笔记第六章支持向量机(下)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(上)

博士笔记 | 周志华《机器学习》手推笔记第七章贝叶斯分类(下)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(上)

博士笔记 | 周志华《机器学习》手推笔记第八章集成学习(下)

博士笔记 | 周志华《机器学习》手推笔记第九章聚类

博士笔记 | 周志华《机器学习》手推笔记第十章降维与度量学习

博士笔记 | 周志华《机器学习》手推笔记第十一章稀疏学习

博士笔记 | 周志华《机器学习》手推笔记第十二章计算学习理论

博士笔记 | 周志华《机器学习》手推笔记第十三章半监督学习

博士笔记 | 周志华《机器学习》手推笔记第十四章概率图模型

点分享

点收藏

点点赞

点在看

收藏 | 计算机视觉中的自注意力相关推荐

  1. 聊一聊计算机视觉中常用的注意力机制 附Pytorch代码实现

    聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现 注意力机制(Attention)是深度学习中常用的tricks,可以在模型原有的基础上直接插入,进一步增强你模型的性能.注意力机制起初是作 ...

  2. 计算机视觉中的自注意力

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨Branislav Holländer 来源丨CV技术指南 编 ...

  3. 【ICML2021】计算机视觉中的自注意力机制教程,谷歌伯克利出品

    本教程将介绍自注意力机制在计算机视觉中的应用.Self-Attention在NLP中被广泛采用,完全注意的Transformer模型已经在很大程度上取代了RNN,现在被用于最先进的语言理解模型,如GP ...

  4. 收藏 | 计算机视觉中的Transformer

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Ch ...

  5. 计算机视觉中的图像标注工具总结

    本文来自公众号CV技术指南资源分享系列 创建高质量的数据集是任何机器学习项目的关键部分.在实践中,这通常比实际训练和超参数优化花费的时间更长.因此,选择合适的标注工具至关重要.在这里,我们总结了一些用 ...

  6. 万字长文解读计算机视觉中的注意力机制(附论文和代码链接)

    文中论文和代码已经整理,如果需要,点击下方公号关注,领取,持续传达瓜货 所向披靡的张大刀 注意力机制是机器学习中嵌入的一个网络结构,主要用来学习输入数据对输出数据贡献:注意力机制在NLP和CV中均有使 ...

  7. 综述|计算机视觉中的注意力机制

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

  8. 收藏 | 理解卷积神经网络中的自注意力机制

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨Shuchen Du.ronghuaiyang(译) ...

  9. 自注意力机制_自注意力机制在计算机视觉中的应用【附PPT与视频资料】

    关注微信公众号:人工智能前沿讲习回复"蒋正锴"获取PPT与视频资料视频资料可点击下方阅读原文在线观看 导读 在神经网络中,我们知道卷积层通过卷积核和原始特征的线性结合得到输出特征, ...

最新文章

  1. Jupyter Notebook 远程访问设置方法
  2. 让程序常驻后台运行的原理和方法
  3. Agile PLM 9.3.1 安装 checklist
  4. oracle联机和脱机什么意思,Oracle 表空间联机(online)与脱机(offline)
  5. 【最详细】数据结构(C语言版 第2版)第四章课后习题答案 严蔚敏 等 编著
  6. 当你自定义view用的约束之后,放到其他空间算取frame的时候发现frame里的x,y都是0...
  7. LeetCode 2196. 根据描述创建二叉树(哈希)
  8. Git笔记(21) 分布式工作流程
  9. Python入门-前言
  10. python正则_python中正则匹配
  11. 华为会议电脑版_大家在用什么会议产品呢? 对企业的视频会议是如何规划的?...
  12. 使用maven将jar包下载到本地仓库
  13. Code-NFine:NFine介绍
  14. 用MATLAB计算常规矩阵函数 eAt sinA
  15. Python --- 输入、输出、运算符
  16. 成功的10000小时定律
  17. 遇到一点难题,请大拿帮忙看一下 万分感谢
  18. python 通过腾讯地图API获取全国关键词(楼盘/商场)位置信息
  19. 国内“孩子青春期”图书中的iPhone:正写书的程序员爸爸点评《拆解青春期女孩的小心事》
  20. java box类定义三变量_01.类的成员变量:\n设计一个立方体类Box,定义三个属性,分别是长,宽,高。定义二个方法,分别计...

热门文章

  1. java爬去赶集,爬取赶集网二手物品下所有物品的信息
  2. python运维开发_Python自动化运维开发----基础(一)
  3. 计算机辅助功能包括什么,CAD软件是什么?有什么功能?
  4. 共享的网络如何让自己比别人快_如何用网络推广打造属于自己的网络品牌?
  5. android异步加载视频缩略图,swift-如何将视频URL的缩略图异步加载到tableview列表中...
  6. vue radio双向绑定_Vue 双向绑定
  7. java nio 系列教程 四_Java NIO系列教程(四) Scatter/Gather
  8. linux图形驱动安装失败,红旗Linux 下NVIDIA的驱动安装问题
  9. Jupyter Notebook命令行启动报错: DLL load failed
  10. stm32——modbus例程网址收藏