【综述——深度学习中的视觉注意方法】

2023-05-16

2022-Visual Attention Methods in Deep Learning: An In-Depth Survey

基本信息

作者: Mohammed Hassanin, Saeed Anwar, Ibrahim Radwan, Fahad S Khan and Ajmal Mian
期刊: arXiv
引用: *
摘要: 受人类认知系统的启发,注意力是一种模仿人类对特定信息的认知意识的机制,放大关键细节以更加关注数据的本质方面。深度学习利用注意力来提高许多应用程序的性能。有趣的是,相同的注意力设计可以适合处理不同的数据模式,并且可以很容易地融入大型网络。此外,多个互补的注意机制可以合并到一个网络中。因此,注意力技术变得极具吸引力。然而,文献缺乏针对注意力技术的全面调查来指导研究人员在他们的深度模型中使用注意力。请注意,除了在训练数据和计算资源方面的要求外,transformers 仅涵盖许多可用类别中的自我注意类别。我们填补了这一空白,并对 50 种注意力技术进行了深入调查,并按其最突出的特征对其进行了分类。我们通过介绍注意力机制成功背后的基本概念来开始我们的讨论。接下来,我们提供了一些基本要素,例如每个注意力类别的优势和局限性,描述了它们的基本构建块、具有主要用途的基本公式以及专门用于计算机视觉的应用程序。我们还讨论了与一般注意力机制相关的挑战和未解决的问题。最后,我们推荐深度关注未来可能的研究方向。

1.简介

  • 文章框架图
    在这里插入图片描述
  • 注意力类型及其分类、应用、优势和局限性的总结
    在这里插入图片描述

2.视觉领域中的注意力机制

2.1.软注意力(确定性注意力)

本节回顾软注意方法,如通道注意、空间注意和自我注意。在通道注意力中,分数是按通道计算的,因为每个特征图(通道)都关注输入的特定部分。在空间注意力中,主要思想是关注图像中的关键区域。关注感兴趣区域有助于对象检测、语义分割和人员重新识别。与通道注意力相反,空间注意力关注空间地图中的重要部分(以宽度和高度为界)。它可以独立使用,也可以作为引导注意力的补充机制。另一方面,自注意力被提议通过提取输入序列标记之间的关系来编码高阶交互和上下文信息。它与通道注意力的不同之处在于它如何生成注意力分数,因为它主要计算同一输入的两个图(K,Q)之间的相似性,而通道注意力从单个图生成分数。然而,自注意力和通道注意力 都是在通道上运行的。软注意力方法将注意力分数计算为所有输入实体的加权和,主要使用软函数,如 softmax 和 sigmoid。由于这些方法是可微分的,因此可以通过反向传播技术对它们进行训练。然而,它们还存在其他问题,例如高计算复杂性和为无人值守的对象分配权重。
在这里插入图片描述

2.1.1.通道注意力

  • Squeeze & Excitation Attention(SE-Net):通道挤压后进行对特征进行特征提取,通过激活函数提取各通道注意力,并赋值给各通道(与RCAN中的CA很像)
  • Efficient Channel Attention (ECA):基于SE-Net,旨在通过消除降维来提高效率并降低模型复杂性。
  • Split-Attention Networks(RESNest):一种特殊的SE-Net,它使用平均池化和分割通道的求和来挤压通道。
  • Channel Attention in CBAM(CBAM):SE-Net的进阶,使用Maxpool与AvePool共同提取注意力
  • Second-order Attention Network(SOCA):SE-Net的拓展,使用GCPpool。通过二阶特征统计来学习特征相互依赖性,在超分领域提出。
  • High-Order Attention(HA):计算出每个像素的注意力图,使用图形转换来形成最终的特征图。该特征表示用于通过使用上下文信息的加权和来更新每个像素位置。
  • Harmonious attention:结合硬注意力和软注意力,其中软注意力结合空间注意力和通道注意力。
  • Auto Learning Attention:HOGA和DARTS,核心思想和之前提到的一致。
  • Double Attention Networks(A2-Net):特征聚合+特征分配,效果比SE与None-Local效果好
  • Dual Attention Network(DAN):位置注意力 and 通道注意力,位置注意的目的是将背景特征编码在局部特征中。
  • Frequency Channel Attention:将离散余弦变换视为带有余弦部分的加权输入和。

2.1.2.空间注意力

在这里插入图片描述
空间注意力侧重于从特征图的空间块而不是通道生成注意力分数,但产生注意力的操作顺序是相似的。

  • Spatial Attention in CBAM:特征图通道信息通过平均池化特征和最大池化特征聚合,然后连接和卷积以生成二维空间注意力图
  • Co-attention & Co-excitation: squeeze 使用全局平均池来重新加权空间位置,co-excite 充当查询和目标特征之间的桥梁。用于检测
  • Spatial Pyramid Attention Network(SPAN):特征提取+金字塔注意力+决策尾
  • Spatial-Spectral Self-Attention:空间-光谱自注意力
  • Pixel-wise Contextual Attention(PiCANet):像素化语境关注
  • Pyramid Feature Attention:从VGG低层提取的低级特征被提供给空间注意机制,从高层获得的高级特征被提供给通道注意机制
  • Spatial Attention Pyramid:不同大小的平均池层中获取特征,并在特征图上操作。这些特征被转发到空间注意,然后是通道注意。
  • Region Attention Network:(RANet):用于语义分割

2.1.3.自注意力

在这里插入图片描述
自注意力一种编码所有输入实体之间关系的注意机制。它是一个使输入序列相互作用并汇总注意力分数的过程,它说明了它们的相似程度。其主要思想是将特征图复制成三个副本,然后测量它们之间的相似度。除了使用物理特征图的通道和空间注意外,自我注意还复制特征图副本来测量长距离的依赖性。自我注意的方法使用通道来计算注意的分数。经典的有LSTM、RNN等。

  • Transformers:主要由编码器-解码器层组成,其中编码器包括自我注意模块,然后是位置前馈层,解码器与编码器相同,只是中间有一个编码器-解码器注意层。
  • Standalone self-attention:用自我注意力模块取代空间卷积,但编码位置方面存在缺陷
  • Clustered Attention:解决了计算效率地下的问题,使用具有固定中心的K-means算法将类似的查询分组在一起。为集群的中心计算查询。
  • Slot Attention:将图像分解为一系列槽。使用softmax的时隙竞争,然后使用等式根据时隙维度进行归一化;具有加权平均值的参与表示的聚合过程。
  • Efficient Attention:提出了对称的局部敏感哈希(LSH)聚类,以减少注意力图的大小。
  • Random Feature Attention(RFA):RFA近似取代softmax,降低空间时间复杂度,提升执行速度
  • Non-local Networks:用上下文信息来增强卷积特征的每个像素,以长程方式对图像中的相关补丁进行编码。
  • Non-Local Sparse Attention (NLSA):以结合非局部模块的优点,对长程依赖性和稀疏表示进行编码,以提高鲁棒性。
  • X-Linear Attention:提出了一种新的注意力机制,与Transformer中的二次型相比,它能够在没有位置编码的情况下仅以线性复杂度对输入token之间的关系进行编码。
  • Axial-Attention:它将2D自注意分解为1D自注意的两个轴(宽度和高度),轴向注意力以不可知的方式使用位置信息来包括上下文信息。可以降低计算复杂度。
  • Efficient Attention Mechanism:不使用点击,而使用有效的顺序处理,softmax执行两次,降低了时间和空间复杂度

2.1.4.算法注意力

在这里插入图片描述
这些方法主要是通过简单的算术方程产生最终的注意力分数。

  • Attention-based Dropout Layer:通过隐藏最具鉴别力的部分使整个物体的位置均匀,并在整个区域内进行关注,以提高识别性能,从而使用丢弃层来提高定位的准确性。
  • Mirror Attention:将特征图在候选线周围翻转,然后将特征图串联起来。在线条不对齐的情况下,应用零填充。
  • Reverse Attention:使用消极语境(如与类无关的东西)来学习语义特征。语义分割常用

2.1.5.多模态注意力

在这里插入图片描述

  • Cross Attention Network:该设计适用于少数的分类,但并不普遍。
  • Criss-Cross Attention:纵横交错的注意力提出了对图像中每个像素的上下文在纵横交错的路径上进行编码。通过建立纵横交错注意力的递归模块,对每个像素的整个上下文进行编码,提高了运行速度。
  • Perceiver Traditional:反复利用这些模式之间的关系。perceiver背后的主要概念是形成一个由一组潜在单元组成的注意力瓶颈。这解决了传统转化器中的二次处理的规模,并鼓励模型通过迭代处理集中于重要特征
  • Stacked Cross Attention:给定一个图像和句子,它学习句子中每个区域对图像的注意,然后通过比较每个区域和句子来对图像区域进行评分。这种处理方式使叠加的交叉注意力能够发现文本和图像之间所有可能的排列
  • Boosted Attention:将视觉和文字结合在一个方法中,关注来自语言的自上而下的信号,并独立关注来自刺激的突出区域。

2.1.6.逻辑注意力

在这里插入图片描述
类似于人类如何对关键特征给予更多的关注,一些方法已经被提出来,使用复现来编码更好的关系。这些方法依靠使用RNNs或任何类型的顺序网络来计算注意力。我们将其命名为逻辑方法,因为它们使用类似于逻辑门的架构。

  • Sequential Attention Models:在顺序过程的每一步,该模型查询输入并以自上而下的方式根据空间信息完善总分
  • Permutation invariant Attention:以集合的形式处理深度网络,而不是有序的元素列表
  • Show, Attend and Tell:关注特定的图像区域,以使用LSTM[161]生成与图像对齐的标题序列。
  • Kalman Filtering Attention:卡尔曼滤波注意力
  • Prophet Attention:以一种类似自我监督的方式,他们根据未来产生的词来计算注意力向量。

2.1.7.基于类别的注意力

在这里插入图片描述
上述方法从特征中产生注意分数,而不考虑类的存在。另一方面,一些方法使用类的注释来强迫网络在特定的区域上进行关注。

  • Guided Attention Inference Network:由标签引导的类意识注意,即引导注意推理网络
  • Curriculum Enhanced Supervised Attention Network:利用卷积层,他们将最后一层的输出定义为等同于类的数量。因此,使用全局平均集合来执行注意力,可以为每个类别产生一个权重。
  • Attentional Class Feature Network:一个利用上下文信息来改善语义分割的新想法,基于分类。

2.2.硬注意力(随机性注意力)

硬注意不是使用隐藏状态的加权平均,而是选择其中一个状态作为注意分数。提出硬注意取决于回答两个问题:
(1)如何对问题进行建模
(2)如何在不使梯度消失的情况下对其进行训练。
在这里插入图片描述

2.2.1.基于统计的注意力

  • Bayesian Attention Modules (BAM):贝叶斯注意模块
  • Variational Attention:变量注意

2.2.2.基于强化的注意力

  • Self-Critic Attention:自我批评的注意
  • Reinforced Self-Attention Network:强化自我关注网络

2.2.3.基于高斯的注意力

  • Self Supervised Gaussian-Attention:自我监督的高斯注意力
  • Uncertainty-Aware Attention:不确定性意识的注意

2.2.4.分类归并注意力

  • Expectation Maximization attention:期望最大化的关注

3.未解决的问题和挑战

  • 泛化性
  • 效率
  • 多模型数据
  • 训练数据的数量
  • 性能比较

4.结论

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【综述——深度学习中的视觉注意方法】 的相关文章

  • SpringBoot整合ElasticSearch

    原文链接 ElasticSearch是个开源分布式搜索引擎 xff0c 提供搜集 分析 存储数据三大功能 它的特点有 xff1a 分布式 xff0c 零配置 xff0c 自动发现 xff0c 索引自动分片 xff0c 索引副本机制 xff0
  • Python将二维数组输出为图片

    原文链接 使用Python读取二维数组 xff0c 将二维数组输出为图片 xff0c 并保存在本地 代码如下 xff1a span class token comment coding 61 utf8 span span class tok
  • 如何使用Tin快速搭建Gitlab-ce?(史上最简单方法)

    GitLab是Git代码版本管理平台 xff0c 相比于GitHub xff0c GitLab还免费支持私人仓库 GitLab ce是gitlab的开源版本 目前网上Gitlab ce的安装方法有很多 xff0c 但大同小异都需要安装各种依
  • 堆叠降噪自动编码器 Stacked Denoising Auto Encoder(SDAE)

    原文链接 自动编码器 xff08 Auto Encoder xff0c AE xff09 自动编码器 xff08 Auto Encoder xff0c AE xff09 自编码器 xff08 autoencoder xff09 是神经网络的
  • PyTorch中 nn.Conv2d与nn.ConvTranspose2d函数的用法

    原文链接 1 通道数问题 xff1a 描述一个像素点 xff0c 如果是灰度 xff0c 那么只需要一个数值来描述它 xff0c 就是单通道 如果有RGB三种颜色来描述它 xff0c 就是三通道 最初输入的图片样本的 channels xf
  • Python中LSTM回归神经网络的时间序列预测

    原文链接 这个问题是国际航空乘客预测问题 xff0c 数据是1949年1月到1960年12月国际航空公司每个月的乘客数量 xff08 单位 xff1a 千人 xff09 xff0c 共有12年144个月的数据 网盘链接 提取码 xff1a
  • pip安装时 fatal error C1083: 无法打开包括文件: “io.h”: No such file or directory

    原文链接 使用pip安装模块 xff0c 出现错误 xff1a c users anaconda3 include pyconfig h 68 fatal error C1083 无法打开包括文件 io h No such file or
  • linux 程序被Killed,查看原因

    原文链接 1 查看信息 xff1a 输入以下程序 xff1a dmesg egrep i B100 39 killed process 39 可以输出最近killed的信息 2 设定kill优先度 xff1a xff08 1 xff09 完
  • Kafka的幂等性与事务性理解

    最近在深入理解Flink的Exactly Once xff0c 发现Flink Checkpoint只能保障Flink程序内部的一致性 xff0c 无法保证Sink到外部系统的Exactly Once语义 但是Sink到外部如果实现了Two
  • 为什么不直接操作State,而是要额外定义一个变量

    最近浏览Flink文章的时候发现一个现象 xff0c 就是在操作State的时候 xff0c 很多文章里面并不会直接操作State xff0c 而是会定义一个相似的变量去操作 xff0c 在 snapshot 和 recover 的时候讲变
  • 了解下SparkSQL中的笛卡尔积

    虽然应该尽量避免使用笛卡尔积 xff0c 因为要全量匹配 xff0c 所以运算的效率十分低下 xff0c 但是有些业务有必须得用 xff0c 所以在此了解下SparkSQL中的笛卡尔积 SparkSQL中计算笛卡尔积时有两种Join方式 x
  • 在Redis集群模式下使用pipeline进行批量操作

    最近开始又接触到了Redis xff0c 之前在工作中使用Redis的时候 xff0c 由于QPS不高 xff0c 都是直接get set搞定了 这次遇到的业务数据量比较大 xff0c 更新也很频繁 xff0c Redis使用是集群模式 x
  • RDD计算时是把数据全部加载至内存么

    RDD的本质 RDD的本质是一个函数 而RDD的变换不过是函数的嵌套 RDD有两类 输入的RDD 典型如KafkaRDD JdbcRDD转换的RDD 如MapPartitionsRDD RDD的处理流程 以如下代码为例 sc textFil
  • mysql中limit用法详解

    Mysql中limit的用法详解 在我们使用查询语句的时候 xff0c 经常要返回前几条或者中间某几行数据 xff0c 这个时候怎么办呢 xff1f 不用担心 xff0c mysql 已经为我们提供了这样一个功能 xff0c 尽管语法逻辑很
  • 练习代码遇到的零碎知识

    一 xff0c c 43 43 中使用malloc 时 xff0c 出现error malloc was not declared in this scope 1 书写错误 2 没有引用相应的库 解决方法 xff1a 引入stdlib h库
  • ThreadLocal是干嘛用的?

    ThreadLocal是通过将变量设置成Thread的局部变量 xff0c 即使用该变量的线程提供一个独立的副本 xff0c 可以独立修改 xff0c 不会影响其他线程的副本 xff0c 这样来解决多线程的并发问题 ThreadLocal主
  • linux下命令清空回收站

    命令行强制清空回收站 回收站其实就是一个文件夹 xff0c 存放被删掉的文件 ubuntu 回收站的具体位置是 xff1a HOME local share Trash 进到这个目录下直接rm掉所有文件 xff1a sudo rm fr H
  • python语言print()用法应用详解 及格式化输出

    目录 一 print 函数概述 1 1print基本语法 xff1a 1 2 print参数的具体例子 1 2 1 objects基本语法 1 2 2 sep基本语法 1 2 3 end基本语法 1 2 4 file的基本语法 二 格式化输
  • 数据容器(序列)的切片

    目录 1 序列 2 序列的常用操作 切片 2 1 基本语法 2 2 例子 3 序列的切片实践 1 序列 序列是指 xff1a 内容连续 有序 xff0c 可使用下标索引的一类数据容器 列表 xff0c 元组 xff0c 字符串 xff0c

随机推荐