初识attention

  近年来,attention机制在机器视觉和机器翻译领域受到了广泛的关注,有很多文章都是融合attention来提高性能。attention受启发于人类的视觉系统,最先应用于序列化的机器翻译(NLP)后又推广到计算机视觉中,本篇文章就来简单学习一下attention机制吧~
注意:attention在视觉和NLP领域均有所应用,虽然底层原理相同,但在应用上还是有所不同,结合笔者的研究领域,本篇文章主要介绍视觉中的attention。主要内容如下所示:
  一、 attention的主要思想
  二、 什么是视觉中的attention机制?
  三、 视觉attention的分类
    3.1 channel attention(通道attention)
    3.2 spatial attention(空间attention)
    3.3 channel and spatial attention(通道和空间混合attention)
  四、attention机制的优缺点
  五、attention的应用领域
  六、attention结合语义通信

一、 Attention的主要思想

  其实attention的思想很简单:从大量信息中筛选出有用的信息,就能够称为注意力机制,就是把关注点聚焦于局部信息,随着任务变化,聚焦的内容也发生变化。从数学思想角度说,attention就是把输入X每个部分赋予不同权重,对关键的信息赋予高权重,使模型做出更加准确的判断。这个输入X也叫做特征图,attention就是特征图的权重分布,有用特征权重增大,无用特征权重减少,再用学到的权重再次应用到特征图上,最终得到最优权重分布。
  在视觉上,输入的往往是一张图像,这里的特征也就是图像特征啦,视觉attention就是确定图像权重啦~
注意attention是一个机制,也就是一个模块,可以加到任何一个视觉网络中来帮助特征提取。

二、 什么是视觉中的attention机制?

  attention机制伴生:显著目标检测(salient object detection),输入是一张图,输出是一张概率图,概率越大的地方,代表是图像中重要目标的概率越大,即人眼关注的重点。
  前面说到attention机制的本质就是利用相关特征图学习权重分布,再用学出来的权重施加在原特征图之上最后进行加权计算。落实到视觉中即结合深度学习技术,大多数是集中于使用掩码(mask)来形成注意力机制。掩码原理在于通过另一层新的权重(每轮利用特征图计算的权重),将图片数据中关键的特征标识出来,通过学习训练,让深度神经网络学到每一张图片中需要关注的区域。
  在权重的计算方式上略有差别,大致总结为如下四点:
  1) 可以是保留所有分量平均做加权(即soft attention);
  2) 可以是在分布中以某种采样策略选取部分分量(即hard attention),通常使用RL
  3)可以作用在空间尺度上,给不同空间区域加权;
  4)可以作用在Channel尺度上,给不同通道特征加权;

三、 视觉attention的分类

  在分类上,可以从两个角度上分:强弱和attention关注的对象。本文主要介绍后者,但对于强弱的区分做一个简要的描述。
  强弱上的区分也就是:一种是软注意力(soft attention),另一种则是强注意力(hard attention)。其不同之处有以下几点:
  1) 软注意力更关注区域或者通道,而且软注意力是确定性的注意力,学习完成后直接可以通过网络生成。
  2) 软注意力是可微的,可通过神经网络算出梯度并且前向传播和后向反馈来学习得到注意力的权重。
  3) 强注意力更加关注点,也就是图像中的每个点都有可能延伸出注意力
  4) 强注意力是一个随机的预测过程,更强调动态变化。
  5) 强注意力是一个不可微的注意力,训练过程往往是通过强化学习(reinforcement learning) 来完成的。
  在计算机视觉中,很多领域的相关工作(例如,分类、检测、分割、生成模型、视频处理等)都在使用Soft Attention,典型代表:SENet、SKNet。
  总体来说使用soft比使用hard更为普遍(可微是巨大的优势),以下介绍的几类都可以算作soft。
  下面结合具体的例子介绍下不同分类:通道attention,空间attention,通道空间融合attention。
  其实本质上不同分类就代表不同的权重计算方式,通道attention是按照图片的RGB通道计算,空间attention就是不论通道以位置计算,混合就是两者都有。下面来结合例子具体说说。
  预备知识:一张图片是由RGB三个通道组成,每个通道上具有相同空间,尺寸为H x W

  3.1 通道attention

  通道attention就是对每个Channel(通道),在channel维度上学习到不同的权重,平面维度上权重相同。基于通道域的attention通常是对一个通道内的信息直接全局平均池化,而忽略每一个通道内的局部信息。也就是建模各个特征通道的重要程度,然后针对不同的任务增强或者抑制不同的通道。这样通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去提升有用的通道并抑制对当前任务用处不大的通道。
  实例:Squeeze-and-Excitation Networks(SENet)
  论文地址:https://arxiv.org/abs/1709.01507
  官方代码地址:https://github.com/hujie-frank/SENet
  Pytorch实现代码:https://github.com/moskomule/senet.pytorch
  SENet的系统结构如下:
在这里插入图片描述
  SENet里面主要就是这个SE模块,主要三个阶段:提取通道数据、通道数据权重确定、通道数据权重反馈
在这里插入图片描述
  目前大多数的主流网络都是以repeat方式叠加来构造的。因此SE模块可以嵌入到现在几乎所有的网络结构中。通过在原始网络结构的building block 单元中嵌入SE模块,可以获得不同种类的SENet
参考:https://blog.csdn.net/xjz18298268521/article/details/79078551

  3.2 空间attention:

  空间attention是对H x W尺寸的特征图学习到一个权重,即每个像素都会学习到一个权重。可以理解成一个像素是C维的一个向量,深度是C,在C个维度上,权重都是一样的,但是在平面上,也就是不同像素之间,权重不一样。空间attention可以提高网络的对图像变形、旋转等几何变换的鲁棒性。
  实例:Spatial Transformer Networks(2D图像定位感兴趣区域,STN网络)
  STN论文原文:https://arxiv.org/abs/1506.02025
  Pytorch版Github代码:https://github.com/fxia22/stn.pytorch
  STN是学习对输入数据进行空间变换,从而增强网络的对图像变形、旋转等几何变换的鲁棒性。原文中提到是面向CNN的,STN 可以在端到端的训练过程中自适应地学习变换参数,无需人为设置变换方式和参数。
  STN 的基本结构如下图所示,包括三个部分:定位网络(Localization Network)、网格生成器(Grid Generator)和采样器(Sampler)。
在这里插入图片描述
  因为STN主要面向的问题是图片的一些平移空间变换,也就是建立变换前后坐标之前的映射关系就好了(上图的UV就是两个坐标)。三个模块各自对应的功能如下:
在这里插入图片描述
参考:https://blog.csdn.net/qq_45122568/article/details/124293622

  3.3 通道空间融合attention

  融合的attention就是即考虑通道维度也考虑空间维度
  实例:Convolutional Block Attention Module(CBAM网络)
  论文原文网址:https://arxiv.org/pdf/1807.06521.pdf
  Pytorch源码:https://github.com/Jongchan/attention-module
  CBAM结合了使用了通道与空间注意力机制。作者认为通道注意力决定了“what is important",空间注意力决定了"where is important"。
  CBAM的网络架构如下图所示,其中分别包含了Channel attention module和spatial attention module,并且两者是线性关系,简单来说就是先计算一轮通道再计算一轮空间,这样最后计算得到的就包含两部分了:
在这里插入图片描述
在这里插入图片描述
  Channel attention module原理
  1)特征聚合: 对输入的特征图(通常是前一层卷积层的输出)执行全局平均池化和全局最大池化,这两种池化操作均沿着空间维度(宽度和高度)进行,以生成两个不同的通道描述符。每个描述符是一维的,并且其长度等于输入特征图的通道数。
  2)多层感知机(MLP):获取到的两个通道描述符分别通过共享权重的多层感知机(MLP,具有一个隐藏层),这个过程相当于在通道空间中进行特征编码。
  3)融合:使用元素级别的加法将两个通道描述符合并起来,得到通道注意力的权重。这种方式能够同时考虑到不同通道间最大值和平均值的信息,使得模型能够捕捉到更全面的通道级特征信息。
  4)激活和再缩放:对合并后的通道权重进行激活函数处理,如Sigmoid或者Softmax,然后将这个激活后的权重与原始输入特征图按通道相乘(即特征重标定),这个步骤实现了对输入特征图通道的重加权。
  通过这个模块,网络便能够凸显那些对当前任务最有帮助的通道中的特征,并关注于这些重要的特征。CBAM中的Channel Attention Module可以有效提升网络表征特征的能力,给出更具区分性的特征表示,通常可以帮助改善许多视觉任务的性能。
在这里插入图片描述
  Spatial attention module原理
  1)特征聚合:首先,对特征图执行通道维度上的聚合操作。模型通常使用最大池化和平均池化来凸显不同类型的信息:最大池化能够帮助模型捕捉到最显著的特征,而平均池化能够帮助捕捉到全局的统计特征。这两种池化操作均沿着通道轴执行,生成两个二维特征图(每个的尺寸等于输入特征图的空间维度)。
  2)特征融合:然后,通过将最大池化和平均池化之后产生的两个特征图在通道维度上堆叠起来,形成一个两通道的特征图。
  3)卷积:接着,通过一个具有单个滤波器的7x7卷积层来处理这个两通道特征图。该卷积层有效地对空间位置的特征进行编码,产生一个二维的空间注意力图。通过该操作,模型学习到了输入特征图的哪些空间位置最为重要。
  4)激活和再缩放:利用激活函数(如Sigmoid函数)对得到的空间注意力图进行激活,使得每个空间位置的像素值范围在0和1之间。将激活后的空间注意力图与原始输入特征图进行逐元素相乘,从而在空间维度上重新调整原始特征图的权重。
  经过Spatial Attention Module处理后,网络的注意力被引导到重要的空间区域上,忽略了那些不太重要的区域,从而使网络能更有效地进行特征学习。空间注意力与通道注意力的结合应用,共同增强了CNN在处理视觉任务时的性能。
参考:https://blog.csdn.net/qq_34554039/article/details/122892781

四、Attention机制的优缺点?

  4.1 优点

  1)目标关注:注意力机制能够帮助模型更加集中地关注图像中的重要区域,从而提高目标检测、图像分类等任务的性能。通过给予不同区域不同的注意力权重,模型可以更好地聚焦于关键信息。
  2)视觉解释性:注意力机制能够提供一定程度的视觉解释性,即指示模型注重哪些区域用于决策。这使得注意力机制在解释模型决策的可解释性任务中有所帮助。

  4. 2缺点

  1)计算复杂度:与其他基础模型相比,引入注意力机制会增加计算复杂度。在处理大规模图像数据时,这可能导致显著的计算开销,影响模型的实时性能。
  2)受限的区域范围:某些注意力机制设计可能限制了模型只能在有限的局部区域上进行注意力调整,而无法对整个图像进行全局处理。这可能导致模型错过一些全局上的关键信息。
  3)迁移性问题:由于注意力机制的设计依赖于具体任务和数据集,因此在不同任务和数据集上迁移时,注意力机制的性能可能会下降。这可能需要额外的调整和训练来适应新的任务。

五、Attention的应用领域

  1)目标检测(Object Detection):应用注意力机制来集中识别图像中的特定对象,从而提高检测性能和准确度。
  2)场景理解(Scene Understanding):注意力模型帮助算法关注图像中的关键要素来更好地理解场景的内容。
  3)图像分类(Image Classification):通过突出重要区域和抑制不重要的部分,注意力驱动的方法提高了图像分类的准确性。
  4)图像和视频字幕(Image and Video Captioning):视觉注意力机制可以用于挑选出与生成描述最相关的图像或视频区域。
  5)医学影像分析(Medical Image Analysis):在诸如肿瘤检测或器官分割的任务中,注意力机制让模型集中在预期区域,从而提高了分析的准确性。
  6)人机交互(Human-Computer Interaction):利用注意力机制,可以创建出更自然的交云接口,如通过跟踪用户的视线来判断他们的注意焦点。
  7)机器人导航和控制(Robotics Navigation and Control):机器人可以使用注意力驱动模型来识别并关注在其环境中最重要的对象或障碍。
  8)增强现实(Augmented Reality):在 AR 应用中,视觉注意力可以帮助强调重要信息或融合现实与增强内容。
  9)自然语言处理(Natural Language Processing, NLP):尽管这是一个非视觉任务,注意力机制也被用于模型中的非结构化数据,使模型能够识别和关注在文本中最具信息量的部分。
  10)艺术创作(Artistic Creation):自动化艺术和设计软件可以利用注意力模型来创建吸引人的视觉元素。

六、attention结合语义通信

  因为笔者自己是处于语义通信领域的,这里介绍下和本领域的结合。
  目前看到一种结合方法是:因为现在语义通信里比较常用的DeepJSCC结构,也就是channel本身是参与网络训练的。导致训练出来的模型和训练channel是强相关的,在SNR稍微低一点儿的信道上通信效率大幅下降。所以融合attention就是把信道也作为编解码模型训练的考虑标准之一,attention会对不同信道进行特征提取,这样训练出来的模型在不同信道上的鲁棒性比较好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/358998.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[GN] 设计模式——面向对象设计原则概述

文章目录 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 总结 提示:以下是本篇文章正文内容,下面案例可供参考 面向对象设计原则概述 单一职责原则 一个类只负责一个功能领域中的相应职责 类…

JavaScript DOM属性和方法之attribute属性对象

在HTML的DOM中,attribute对象表示HTML属性。HTML属性始终属于HTML元素,它在DOM节点中被称为属性节点。在DOM中,NamedNodeMap对象表示元素属性节点的无序集合,我们可以通过指定的索引访问指定的属性。通过element对象的attribute属…

【Leetcode】两数之和

目录 题目: 解法1:暴力双for 1.想到的第一种方法两for循环解 复杂度分析 解法2:hash表 总结: 笔记: 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标…

实现扫码登录

扫码登录是如何实现的? 二维码信息里主要包括唯一的二维码ID,过期的时间,还有扫描状态:未扫描、已扫描、已失效。 扫码登录流程 用户打开网站登录页面的时候,浏览器会向二维码服务器发送一个获取登录二维码的请求。二维码服务器收…

让Elasticsearch飞起来!百亿级实时查询优化实战

让Elasticsearch飞起来!百亿级实时查询优化实战 - 简书 最近的一个项目是风控过程数据实时统计分析和聚合的一个 OLAP 分析监控平台,日流量峰值在 10 到 12 亿上下,每年数据约 4000 亿条,占用空间大概 200T。 面对这样一个数据量…

【Java】内存溢出和内存泄露的区别

目录 概念 内存溢出分类 内存泄漏分类 发生场景以及解决方法 内存溢出 内存泄漏 解决方法 这道题是面试常考的,一定要区分好区别,我之前就是直接认为内存溢出就是内存泄漏了 概念 内存溢出:是指程序在申请内存时,没有足够…

国考省考行测:分析推理,形式逻辑,集合推理,真假推理

国考省考行测:分析推理,形式逻辑 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和…

基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

git diff查看比对两次不同时间点提交的异同

git diff查看比对两次不同时间点提交的异同 用 git diff命令: git diff commit-id-1 commit-id-2 不同commit-id在不同的时间点提交产生,因为也可以认为git diff是比对两个不同时间点的代码异同。 git diff比较不同commit版本的代码文件异同_git diff c…

顺序表的奥秘:高效数据存储与检索

🍿顺序表 🧀1、顺序表的实现🍥1.1 创建顺序表类🍥1.2 插入操作🍥1.3 查找操作🍥1.4 删除操作🍥1.5 清空操作 🧀2、ArrayList的说明🧀3、ArrayList使用🍥3.1 A…

Focaler-IoU:更聚焦的IoU损失

摘要 边界框回归在目标检测领域中起着至关重要的作用,而目标检测的定位精度在很大程度上取决于边界框回归的损失函数。现有的研究通过利用边界框之间的几何关系来提高回归性能,而忽略了难易样本分布对边界框回归的影响。本文分析了难易样本分布对回归结…

在linux上进行编译调试

1.相关疑问 1. 为什么在代码里使用了一个未定义过的函数(如add()),在编译阶段不会报错,在链接阶段会报错呢? 答:先说几个代码编译的结论: 单个\.c源文件文件被编译成机器码文件时&#xff0c…

DC-Windows备份(23国赛真题)

2023全国职业院校技能大赛网络系统管理赛项–模块B:服务部署(WindowServer2022) 文章目录 题目配置步骤在DC1上备份系统状态到D:\共享文件夹所有用户具有读/写权限验证查看DC1备份成功的截图在InsideCli上查看备份文件(查看文件夹安全属性)题目 在DC1上备份系统状态到D:\,…

Linux实验记录:使用firewalld

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: RHEL8系统中集成了多款防火墙管理工具&#xf…

Qt之QLabel介绍

概述 QLabel是QT界面中的标签类,它从QFrame下继承,QLabel 类代表标签,它是一个用于显示文本或图像的窗口部件。我们主要介绍一下QLabel的一些简单的使用。 设置颜色背景色和字体的颜色大小 字体及颜色 设置文字使用的是setText函数。 QStri…

一文彻底搞懂redis数据结构及应用

文章目录 1. Redis介绍2.五种基本类型2.1 String字符串2.2 List列表2.3 Set集合2.4 Zset有序集合2.5 Hash散列 3. 三种基本类型3.1 Bitmap (位存储)3.2 HyperLogLogs(基数统计)3.3 geospatial (地理位置) 4. Stream详解4.1 Stream…

小土堆pytorch学习笔记002

目录 1、TensorBoard的使用 (1)显示坐标: (2)显示图片: 2、Transform的使用 3、常见的Transforms (1)#ToTensor() (2)# Normalize() (3&…

Java基础—面向对象—19static关键字详解、抽象类、接口、N种内部类

1、static关键字 匿名代码块、静态代码块、构造方法 静态代码块是在类加载的时候执行,仅执行一次 匿名代码块在调用构造函数之前 验证如下图: 2、静态导入包(可能很多人听都没听过) 3、Math是用final关键字的,fina…

Mybatis-Plus扩展

7 MybatisX插件[扩展] 7.1 MybatisX插件介绍 MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。 安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。 功…

【Midjourney】如何自定义一套参数

使用Midjourney有时候会遇到需要调整某些参数的时候,例如宽高之类的: --hd --ar 7:4 而Midjourney中提供了一条指令用于自定义一套参数方便重复使用。 以下指令创建一个名为“mine”的选项,翻译过来就是 --hd --ar 7:4: 创建成功后会有类似…