通俗易懂理解通道注意力机制(CAM)与空间注意力机制(SAM)

重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。

一、参考资料

通道注意力,空间注意力,像素注意力

通道注意力机制和空间注意力机制

视觉 注意力机制——通道注意力、空间注意力、自注意力

二、通道注意力与空间注意力机制

1. 通道注意力机制(CAM)

通道注意力机制(Channel Attention Mechanism, CAM),通过特征内部之间的关系来通道注意力机制。特征图的每个通道都被视作一个特征检测器,所以通道特征聚焦的是图像中有用的信息是"什么"(what)。

1.1 通道注意力的结构

通道注意力模块的结构,如下图所示:

1.2 通道注意力流程

通道注意力的思路流程是:

  1. 首先,对一个尺寸为 H×W×C的输入特征图F进行空间维度的全局最大池化和全局平均池化,得到两个 1×1×C 的特征图;(在空间维度进行池化,压缩空间尺寸,便于后面学习通道的特征)
  2. 然后,将全局最大池化和全局平均池化的结果,分别送入一个共享的多层感知机(MLP)中学习,得到两个 1×1×C 的特征图。MLP的第一层神经元个数为 C/r,激活函数为 Relu,第二层神经元个数为 C;(基于MLP学习通道维度的特征,和各个通道的重要性)
  3. 最后,将MLP输出的结果进行Add操作,接着经过Sigmoid激活函数的映射处理,最终得到通道注意力权重矩阵 M c M_c Mc

1.3 通道注意力的计算公式

空间注意力权重矩阵 M c M_c Mc,可以表示为:
M c ∈ R C × 1 × 1 M_{c}\in R^{C\times1\times1} McRC×1×1
为了降低计算参数,在MLP中采用一个降维系数r, M c ∈ R C / r × 1 × 1 M_{c}\in R^{C/r\times1\times1} McRC/r×1×1

综上,通道注意力计算公式如下:
M c ( F ) = σ ( M L P ( A v g P o o l ( F ) ) + M L P ( M a x P o o l ( F ) ) ) = σ ( W 1 ( W 0 ( F a v g c ) ) + W 1 ( W 0 ( F m a x c ) ) ) \begin{gathered} M_{c}(F) =\sigma(MLP(AvgPool(F))+MLP(MaxPool(F))) \\ =\sigma(W_{1}(W_{0}(F_{avg}^{c}))+W_{1}(W_{0}(F_{max}^{c}))) \end{gathered} Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))=σ(W1(W0(Favgc))+W1(W0(Fmaxc)))
上式中, F a v g c F_{avg}^{c} Favgc F m a x c F_{max}^{c} Fmaxc 分别表示全局平均池化特征和最大池化特征。

2. 空间注意力(SAM)

通过对特征图空间内部的关系来产生空间注意力特征图。不同于通道注意力,空间注意力(Spatial Attention Mechanism, SAM)聚焦于特征图上的有效信息在"哪里"(where)

2.1 空间注意力的结构

2.2 空间注意力流程

空间注意力的思路流程是:

  1. 首先,对一个尺寸为 H×W×C的输入特征图F进行通道维度的全局最大池化和全局平均池化,得到两个 H×W×1 的特征图;(在通道维度进行池化,压缩通道大小,便于后面学习空间的特征)
  2. 然后,将全局最大池化和全局平均池化的结果,按照通道拼接(concat),得到特征图尺寸为HxWx2,
  3. 最后,对拼接的结果进行7x7的卷积操作,得到特征图尺寸为 HxWx1,接着通过Sigmoid激活函数 ,得到空间注意力权重矩阵 M s M_s Ms

2.3 空间注意力的计算公式

空间注意力权重矩阵 M s M_s Ms,可以表示为:
M s ( F ) ∈ R H , W M_{s}(F)\in R^{H,W} Ms(F)RH,W
同上,在通道维度使用两种池化方法产生2D特征图:
F a v g s ∈ R 1 × H × W F m a x s ∈ R 1 × H × W F_{avg}^s\in R^{1\times H\times W}\\F_{max}^s\in R^{1\times H\times W} FavgsR1×H×WFmaxsR1×H×W
综上,空间注意力的计算公式如下:
M s ( F ) = σ ( f 7 × 7 ( [ A v g P o o l ( F ) ; M a x P o o l ( F ) ] ) ) = σ ( f 7 × 7 [ F a v g s ; F m a x s ] ) \begin{aligned} M_{s}(F)& =\sigma(f^{7\times7}([AvgPool(F);MaxPool(F)])) \\ &=\sigma(f^{7\times7}[F_{avg}^{s};F_{max}^{s}]) \end{aligned} Ms(F)=σ(f7×7([AvgPool(F);MaxPool(F)]))=σ(f7×7[Favgs;Fmaxs])

3. 混合注意力机制

在混合注意力机制中,通道注意力和空间注意力可以通过串联、或者并联的方式进行组合。关于混合注意力机制的介绍,请参考下文的CBAM网络模型。

三、SENet:通道注意力

SENet:[1]

深入理解SENet:自适应特征提取的注意力机制

//TODO

压缩和激励网络(Squeeze-and-Excitation Networks,SENet)是通道注意力机制的代表模型。SENet 分为压缩和激励两个部分,其中压缩部分的目的是对全局空间信息进行压缩,然后在通道维度进行特征学习,得到各个通道的权重,最后通过激励部分对各个通道进行分配不同权重

在这里插入图片描述

上图是SE模块的结构, 在压缩部分,输入特征图的尺寸为 H×W×C。压缩部分的功能是将维数从 H×W×C 压缩至1×1×C,即把 H×W 压缩为 1×1 维,这个过程由**全局平均池化(GAP)**实现。

激励部分,需要将压缩部分得到的 1×1×C 的维度融入全连接层,预测各个通道的重要程度,然后再激励到前面特征图对应通道上进行操作。采用简单的门控机制Sigmoid 激活函数

在通道注意力机制,学习各个通道的重要性时,是先对特征图的空间进行压缩,然后在通道维度进行学习,得到各个通道的重要性。

四、STN:空间注意力

原始论文:[2]

空间变形网络——STN

详细解读Spatial Transformer Networks(STN)-一篇文章让你完全理解STN了

通俗易懂的Spatial Transformer Networks(STN)(一)

通俗易懂的Spatial Transformer Networks(STN)(二)

从仿射变化到STN网络

1. STN网络简介

空间变换神经网络 (Spatial Transformer Networks,STN)是空间注意力机制的代表模型,STN 能够对各种形变数据在空间中进行转换并自动捕获重要区域特征。它能够保证图像在经过裁剪、平移或者旋转等操作后,依然可以获得和操作前的原始图像相同的结果。

举个例子,在MNIST 数字分类的中应用STN,该分类过程一共包含 4 个步骤:

  1. MNIST中的数字,是经过随机平移、缩放和旋转处理;把它们输入到STN网络中;
  2. 通过STN网络,预测前面输入数字的变换(是平移了?还是缩放了?或是旋转了?)
  3. STN网络预测出“变换前的数字”,即没经过变换的数字是怎样的
  4. 最终进行分类预测

在这里插入图片描述

上图中,a是输入图片,b 是 STN 中的 localisation 网络检测到的物体区域,c是 STN 对检测到的区域进行线性变换后输出,d 是有 STN 的分类网络的最终输出。

2. STN网络结构

STN更准确地说应该是 STL(spatial transformer layer),它就是网络中的一层,并且可以在任何两层之间添加一个或者多个。如下图所示,STL由三部分组成,分为是局部网络(localisation net)、网格生成器(grid generator, 参数化网络采样))和差分图像采样。

在这里插入图片描述

上图中,输入的特征图U被局部网络处理得到参数 θ \theta θ,然后经过网格生成器得到采样器,映射到原图U上,从而得到输出V。

2.1 局部网络

局部网络 用于预测输入数字的变换(是平移了?还是缩放了?或是旋转了?)

2.2 网格生成器

网格生成器获得输出特征图坐标点在输入特征图中坐标点的对应位置。

五、CBAM:混合注意力

BAM:[3]

CBAM:[4]

github代码:attention-module

注意力机制BAM和CBAM详细解析(附代码)

CBAM:通道注意力和空间注意力的集成者

CBAM网络简介

卷积注意力模块(Convolutional Block Attention Module,CBAM)是混合注意力机制的代表模型,它包括通道注意力模块、和空间注意力模块。

CBAM的模型结构如下,它对输入的特征图,首先进行通道注意力模块处理;得到的结果,再经过空间注意力模块处理,最后得到调整后特征。

在这里插入图片描述

六、参考文献

[1] 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.

[2] Jaderberg M, Simonyan K, Zisserman A. Spatial transformer networks[J]. Advances in neural information processing systems, 2015, 28.

[3] Park J, Woo S, Lee J Y, et al. Bam: Bottleneck attention module[J]. arxiv preprint arxiv:1807.06514, 2018.

[4] 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.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go语言WebSocket编程

1. webSocket介绍 WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创…

Linux:进程信号的概念与产生原理

文章目录 信号的概念实践信号关于前台和后台进程的操作 操作系统与外设信号的产生signal系统调用 前面的篇章结束了信号量的话题,那么接下来引入的是信号的话题,信号和信号量之间没有任何关系,只是名字比较像 信号的概念 在生活中存在各种各…

Java学习day24:线程的同步和锁(例题+知识点详解)

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!) 往期回顾 Java学习day23:线程构…

Matlab图像模拟加噪——高斯噪声、椒盐噪声、泊松噪声、乘性噪声、均匀噪声、指数噪声

1.高斯噪声 (1)通过均值和方差来产生 Jimnoise(I, gaussian, 0, 0.01);%高斯噪声,均值为0,方差为0.01(2)通过位置信息来产生 Iim2double(I); Vzeros(size(I)); %建立矩阵V for i1:size(V, 1)V(i,:)0.02*i/size(V,1); end Jimnoise(I, localvar, V); …

Linux安装aria2出现No package aria2 available.的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

9.回文数

回文数 将整型转换为字符型反转前一半是否等于后一半将数字本身反转输入一个整数 x,如果 x是一个回文整数,返回 true;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。 将整型转换为字符型 反转…

牛客,OR36 链表的回文结构,快慢指针和反转链表的实践

链表的回文结构_牛客题霸_牛客网 (nowcoder.com) 还是比较简单的,主要分为三个步骤,两种需掌握的函数实现 目录 主要思路过程,1,找到中间结点,2,反转中间结点往后的结点,3,遍历比…

双非本科准备秋招(13.1)—— 力扣 栈、队列与堆

1、103. 二叉树的锯齿形层序遍历 昨天做的二叉树的层序遍历,把代码直接拿过来。 这个题要求的是一个Z型遍历,如下图。 用一个变量f记录正反顺序,然后使用LinkedList记录答案,下图可以看到LinkedList继承了Deque,所以…

Python算法题集_除自身以外数组的乘积

Python算法题集_除自身以外数组的乘积 题239:除自身以外数组的乘积1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【暴力求解】2) 改进版一【字典改进乘积计算】3) 改进版二【字典改进乘积计算预计算数字乘积】4) 改进版三【前缀乘积…

第二集《修道宗范》

请大家打开讲义第5页,我们讲到丙一、先修出离心。 身为一个有情众生,我们内心当中,有一个没办法改变的本性,我们就是希望生命能够离苦得乐,这是没办法改变的。换句话说,我们每一个人都喜欢安乐&#xff0c…

代码随想录算法训练营Day20|最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树

最大二叉树 题目: 最大二叉树定义: 二叉树的根是数组中的最大元素 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二叉树,并且输出这个树的节点…

【JavaScript】Generator

MDN-Generator Generator对象由生成器函数返回,并且它符合可迭代协议和迭代器协议。 Generator-核心语法 核心语法: 定义生成器函数获取generator对象yield表达式的使用通过for of获取每一个yield的值 // 1. 通过function* 创建生成器函数 function* foo() {//…

Unity DOTween插件常用方法(一)

文章目录 1.1 控制Api1.2 动画Api 1.1 控制Api DOKill DOKill表示停止该物体上所有的Tween动画。DOTween可以同时运行多个Tween,如果需要停止所有正在运行的Tween,可以使用这个方法; 还有一种使用场景,即反复打开某一视图,而该视…

Java技术栈 —— Hadoop入门(二)实战

Java技术栈 —— Hadoop入门(二) 一、用MapReduce对统计单词个数1.1 项目流程1.2 可能遇到的问题1.3 代码勘误1.4 总结 一、用MapReduce对统计单词个数 1.1 项目流程 (1) 上传jar包。 (2) 上传words.txt文件。 (3) 用hadoop执行jar包的代码,…

【C++】 C++入门 — auto关键字

C入门 auto 关键字1 介绍2 使用细则3 注意事项 Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! auto 关键字 1 介绍 编程时常常需要把表达式的值赋给变量,这就要求在声明变量时清楚地知道表达式的类…

56-主,回调函数,回调函数的参数传参,函数和变量的公私有,特权方法,立即执行函数,闭包(解除引用)

1.回调函数 定义了函数,没有调用函数,但最终执行了。 <script>//回调函数// 定时器setInterval(function(){console.log("a")},1000)// 延迟器setTimeout(function(){console.log("a")},3000)</script> 2.将实参变为函数,将person方法作为…

什么是多态?它和重载有什么区别?

前言 大家好&#xff0c;我是chowley&#xff0c;相信学过编程语言的你&#xff0c;肯定听说过多态和重载两个概念&#xff0c;可多数人对他们之间的区别还是不太清晰&#xff0c;导致同时听到两个词一起出现时会大脑空白&#xff0c;今天我就来详细的介绍一下二者的区别&…

指针的深入理解(四)

这节主要讨论sizeof和strlen的区别&#xff0c;以及一些理解题。 sizeof 求的是对象的大小&#xff0c;深入理解一点就是&#xff1a;这个对象&#xff0c;他一定有一块对应的内存空间。求的就是这一块内存空间。 strlen 只能用来求字符串&#xff0c; 求取的是字符串的长度。…

面试了字节大模型算法岗(实习),快被问哭了。。。。

最近技术群组织了一次算法面试讨论会&#xff0c;今天分享的是一位小伙子的痛苦面试经历&#xff0c;如果你想加入我们的讨论群&#xff0c;见文末。 本次分享的内容如下&#xff1a; 应聘岗位&#xff1a;字节大模型算法实习生 面试轮数&#xff1a;第一轮 整体面试感觉&…

python封装的.exe文件是如何在cmd中获取.xml路径的?

这段日子搞项目算法封装&#xff0c;愁死我。来回改了三遍&#xff0c;总算把相对路径、绝对路径&#xff0c;还有cmd给.exe传参的方式搞懂了。 主要是这个语句 workspace sys.argv[1] sys.argv[]的作用就是,在运行python文件的时候从外部输入参数往文件里面传递参数。 外部就…