SENet网络分析

文章目录

  • 注意力机制:Attention
    • Biased Competition Theory
    • bottom-up和top-down注意力
  • SE Block
    • Squeeze操作
    • Excitation操作
    • scale操作
    • 与原结构合并
    • 计算复杂度评估
  • 实验
    • 与其他网络对比
    • 数据集实验
    • 内部参数对比实验
    • 进一步评估
      • Squeeze
      • excitation

Squuze-and-Excitation网络是针对表达能力的改造,和前面两篇不一样,提出的是一个叫SE block的结构。这个结构可以灵活的集成到之前的网络结构中去,比如VGG,RESNet等,也可以自己组成一个自己的SENet。
更关键的是,这个SE block提到了深度学习中一个很重要的词:注意力机制。

我们先简单说说注意力机制。

注意力机制:Attention

在人感知周围世界的时候,其实是有注意力机制存在的,比如一副错综复杂的图像中,你会很主要关注其中的一些内容,而这些内容和你想看到,想感知到的东西有关,这个东西叫做"goal",目标。
你的注意力就会被这个目标来牵引着走,简单来说就是每个人从一幅图像中的关注点都会有不一样,在于你想通图像中看到什么。
在其他的领域也一样,比如NLP。

研究这个注意力机制也有很多,在论文中看到了比如DBN,RNN,LSTM等。这些后续有时间再细读,其中有一篇我觉得挺有启发性,在这里简单说一说:
论文:Look and think twice- Capturing top-down visual attention with feedback convolutional neural networks

Biased Competition Theory

论文中提到的一个叫做偏向竞争理论的东东。
基本逻辑是引入一个语义层面的标签,其实也就是为这个图像确定一个目标:“goal”。那么在进行反向传播的时候,对前面隐藏层的相应神经元节点进行权重的判断,如果和这个goal无关的神经元则进行抑制。突出目标相关的神经元,提高这些神经元的权重。

方式呢就是通过在卷积核的激活层后面再增加一个feedback layer,这个层的每个神经元节点取值在[0, 1]之间:

feedback layer的位置与传播过程

在传播的过程中,通过一个函数来计算哪些神经元需要被抑制。
基本逻辑是在语义标签的指导下,尽量让这个语义的那个class类得到高分,而且feedback layer中的神经元关闭的比较多。也就是这些神经元的权重值总和最低。

bottom-up和top-down注意力

  • top-down的注意力机制可以理解先发现楼房,然后再看每一层,最后看每一间的细节特征。而这篇文章中提到的语义标签就是告诉你整幅图像最重要的特征,也就是最高,最top的东西,这个就是top-down的逻辑。
  • 一般卷积网络,是从最大的感受野开始(整幅图像),用一些固定的卷积核慢慢的去卷积,逐渐减少感受野,也就是图像的H和W在变小。可以理解为首先获取图像的每个底层的特征,慢慢的对特征进行高层抽象,提取高层特征。这种方式就是bottom-up。

SE Block

上面提到了比较好理解的注意力机制,而SE block引入的是一种叫做通道注意力机制的东东,和上面提到的注意力机制不太一样。
大致意思呢是想提取每个卷积核通道中的特征,然后总和这些特征来获得一些通道之间的联系,可能这个就叫做通道注意力机制吧。
原文描述为:The channel relationships modelled by convolution are inherently implicit and local (except the ones at top-most layers).
We expect the learning of convolutional features to be enhanced by explicitly modelling channel interdependencies

这一篇就重点来说说这个东西。

SE block也是提出了一个branch,也就是一个分支结构,这个分支结构包含两个部分:

  • Squeeze,压缩通道特征。
  • Excitation,激励部分通道特征,我理解可能是激活某种特征吧。

整体结构如下:

图1 SE基本结构

这两个结构是做了个什么事情呢?论文有这么一段描述:Consequently, we would like to provide it with access to global information and recalibrate filter responses in two steps,squeeze and excitation, before they are fed into the next transformation.
大意是说呢,在进入下一步之前,通过两个步骤:squeeze和excitatoin来重新校准filter response,我理解filter就是卷积核,request就是卷积核的输入,response就是卷积核的输出。
也就是说,通过squeeze和excitation两个操作提取通道之间的关系,然后用这个关系去重新校准卷积的输入。
也就是提取通道之间的卷积特征,然后用这个通道特征去修正原有网络输出的特征图。

  • X为输入
  • U为通过函数变换 F t r F_{tr} Ftr得到的特征图,也就是通过卷积得到的结果,在GoogleNet中就是Inception,在残差网络中就是Residual blcok。

U后面的上面那根线就是表示的SE block的操作,最后再和原输出U相结合。

Squeeze操作

这个操作对应上图中的函数 F s q F_{sq} Fsq
在图1中:

  • 输入X的通道数是 C ′ C^{'} C
  • 输出特征图U的通道数是C

上面提到了,要找到通道之间的关系,那就是要用到所有通道的信息。论文中简单起见,把每个通道都压缩成一个点,直接求平均,相当于就是这个通道的特征值。
这个求平均的过程就是所谓的Squeeze。

原文为:To mitigate this problem, we propose to squeeze global spatial information into a channel descriptor. This is achieved by using global average pooling to generate channel-wise statistics。

表达为公式就是:
z c = F s q ( u c ) = 1 H ∗ W ∑ i = 1 H   s u m j = 1 W u c ( i , j ) z_c = F_{sq}(u_c) = \frac{1}{H * W} \sum_{i=1}^H \ sum_{j=1}^W u_c(i,j) zc=Fsq(uc)=HW1i=1H sumj=1Wuc(i,j)

  • u c u_c uc表示特征图U中的某个通道
  • z c z_c zc表示经过压缩之后的向量Z

从公式中可以看出,每个尺寸为 H ∗ W H * W HW的featrue map通道,经过全局平均之后,就只剩一个像素点。
所以,一个 H ∗ W ∗ C H * W * C HWC的featrue map经过squeeze之后,就变成了一个 1 ∗ 1 ∗ C 1 * 1 * C 11C的vector,计作Z。

当然,这里是可以替换为各种更厉害的特征统计方法。这里是利用了一个最简单的,简单就是美。

Excitation操作

特征图经过压缩后,第二步就是综合这些通道的特征值。
论文提出,这个综合方法需要满足两个条件:

  1. 要可以表达非线性关系
  2. 要可以提取处非互斥的关系

所以,论文提出了一个计算方法:
s = F e x ( z , W ) = σ ( g ( z , W ) ) = σ ( W 2 δ ( W 1 z ) ) s=F_{ex}(z, W) = \sigma(g(z,W)) = \sigma(W_2\delta(W_1z)) s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))

  • δ \delta δ为ReLU。
  • W 1 , W 1 ∈ R C r ∗ C W_1, W_1 \in R^{\frac{C}{r} * C} W1W1RrCC为权重矩阵,
  • W 2 , W 2 ∈ R C ∗ C r W_2, W_2 \in R^{C * \frac{C}{r}} W2W2RCrC为权重矩阵
  • 从后面的图来看, σ \sigma σ为Sigmod。

从上面可以看出,这个Excitation就是两个全联接层:

  • 第一个连接层把 1 ∗ 1 ∗ C 1 * 1 * C 11C的vector Z变成一个 1 ∗ 1 ∗ C r 1 * 1 * \frac{C}{r} 11rC的向量。然后后面跟一个ReLU激活层。
  • 第二个连接层把 1 ∗ 1 ∗ C r 1 * 1 * \frac{C}{r} 11rC的vector重新恢复为一个 1 ∗ 1 ∗ C 1 * 1 * C 11C的向量。然后后面跟一个Sigmod的激活层。

scale操作

最后,根据图1,作为Squeeze和Excitation操作之后,还需要和原特征图U进行合并,也就是上面提到的“重新校准特征图”。这个合并方法也特别简单,就是把这个向量直接原特征图相乘。

x ^ c = F s c a l e ( u c , s c ) = s c u c \hat{x}_c=F_{scale}(u_c, s_c)=s_cu_c x^c=Fscale(uc,sc)=scuc

从上面的excitation可以得知, s s s是一个 1 ∗ 1 ∗ C 1 * 1 * C 11C的向量,与一个 H ∗ W ∗ C H * W * C HWC的特征图相乘的话,再从上面的公式可以看出,就是按通道数一个一个的去把 s s s中的每个元素拿出来与特征图的对应通道进行相乘,就是一个标量乘以矩阵,所以可以理解就是一个scale的操作,放大缩小而已。

讲到这里,感觉就是SE就是提取出了通道中某些特征,或者说某些注意力特征,通过这个 s s s,也就是表示通道的权重的向量,去把这个权重乘以对应的特征图通道,来放大或缩小这个通道的作用。从这个角度上来看,确实就叫做通道注意力机制。

与原结构合并

论文中提到了和两种经典结构合并的方式:

  • Inception:

  • ResNet

先把通道注意力的这个向量与残差结构中的U相乘之后再和恒等映射进行相加。

计算复杂度评估

通过上面的描述,很容易知道这个SE结构没有增加什么复杂的结构,所以论文中拿出来和ResNet-50做了个对比,ResNet-50的运算量为3.86 GFLOPs,增加了这个结构后的SE-ResNet-50大概为3.87 GFLOPs。

也就是增加了大约0.26%的运算量,但是可以达到ResNet-101的准确度。

时间上:

  • GPU上,256的一个batch,从190ms增加到了209ms。
  • CPU(嵌入式设备)上的运行时间从164ms增加到了167ms,忽略不计

参数增加量:增加了 2 r ∑ s = 1 S N s C s 2 \frac{2}{r} \sum_{s=1}^SN_sC_s^2 r2s=1SNsCs2

  • S为stage的个数
  • N为每个stage中Residual block的个数
  • C为通道数

大约是增加了2.5 million的参数,也就是大约增加了10%。

实验

这篇论文里有一句话,应该说适用于各种深度网络的论文:
A rigorous theoretical analysis of the representations learned by deep neural networks remains challenging, we therefore take an empirical approach to examining the role played by the SE block with the goal of attaining at least a primitive understanding of its practical function。

大意呢是一个严格理论证明有效性的网络是不太现实的,也就是深度网络一直说的黑盒子理论,只能从实验上去证明有效,经验主义着,或者说实践主义者。所以所有的深度学习论文都包含大量的对比实验,和其他的网络对比,不同数据集之间的对比,自己内部参数变化的对比等等。
这篇论文也是,主要是两部分,和其他网络的对比和自身参数变化的对比。

与其他网络对比

与其他网络对比主要挑选了VGG,Inception,ResNet及其各种变体,移动设备网络,具体的网络设置,训练方法,数据预处理等论文里写的很详细,这里不一一列举。
基本逻辑就是在这些经典结构里引入SE Block,引入方法上面有提到。
比较的双方就是引入了结构的和没引入结构的对比。
总结在了一张表里:

VGG,Inception,ResNet

MobileNet,ShuffleNet

大致的结论如下:

  • 在Network depth部分,也就是se block在网络深度这个维度上的比较。和resnet对比,resnet-50增加了se block后,准确率提高到6.62%,和resnet-101(6.52)差不多了,增加的计算量只有一点点,是101的一半
  • 在101和152的对比更加,在101上增加se block后, 准确率比152还高,比152的还高出0.27个百分点。
  • 还与VGG和Inception网络结构上进行了对比,基本上也是这个结论
  • 与最新,最牛逼的网络:Inception resnet和resnet-Xnet两种结构进行对比,引入SE block也是有很好的效果。
  • 给出了在各个结构中,在训练过程中,各个epoch的训练误差与验证误差走势图,整个走势稳得很,整个训练和验证集的过程,都是有提升的,而且每种结构都是这样,牛逼的很。

  • 与移动网络,也就是相对较少的网络层数,较少的参数量,也是有效的。

数据集实验

使用了ImageNet,CIFAR-10,CIFAR-100,Places365-Challenge dataset场景识别的数据集,COCO目标检测数据集(增加Faster R-CNN模块)。
结果为:

CIFAR

Places365

COCO

ImageNet

简单来说,SE block对不同的数据集也是同样有效。

内部参数对比实验

其实我理解就是对调整这个注意力机制的方式提供了一些tricks,也就是一些小技巧,可以从这些方面去调整。

  • 第一个就是前面提到的参数 r r r,这个参数越大,中间的参数就越小,就是两个卷积层中间的那一层。文中给出了不同 r r r取值下,对准确率的影响:
      

      通过上图可以看出,r的大小和性能没有正比关系,在r=8的时候效果最好,r=16可以认为是一个平衡点。
      值得关注的就是,每个residual block都可以用不同的r。

  • 对比了Squeeze是最大池化和平均池化的效果,global max pooling和 avg pooling差别不大
      

  • excitation那里的激活层,对比了tanh,ReLU,Sigmond。Sigmond效果较好,所以之前介绍的结构里,excitation用的就是Sigmond
      

  • 标准的ResNet-50总共是5个stage,也就是5个部分,论文还比较了单独在某个部分增加SE block的情况:


  结论就是在ResNet中的每个stage中增加这个block,随便增加在哪个stage都有用,加在一起可以起到叠加的作用。

  • 对于ResNet来说,这个SE Block增加在残差结构的哪个位置也是一个值得考量的变量:

与标准的集成方法不一样,另外又提出了三种不同的集成方法,SE-PRE,SE-POST,SE-Identity。
  结论是,标准的挺好,出了放后面不太好,不要放到残差的叠加动作之后:
  

  
  甚至还提出了集成到Residual Block中间去,为了节省一些参数量。
  

进一步评估

论文还进一步的评估了Squeeze和Excitation这两个步骤在SE block中的重要程度。

Squeeze

论文中做了一个实验,替换掉SE中的Squeeue,也就是max pooling,换成两个FC,都使用1 * 1的卷积层进行降维,从H和W两个方向上全部降成1。

从结果看:
  - 全局信息对网络结果有帮助,就算是两个1 * 1的卷积层也是起到了这个作用,也能有效降低错误率。
  - global max pooling的方式更有效

excitation

这一部分操作本质上是提取通道特征,把注意力放在有效的通道信息上,不重要的特征就会被忽略掉,通过激活层屏蔽。
所以论文这里提出了验证这个激活层有效性的实验,这个实验分成两部分:

  1. 第一部分是从整个数据集中抽样了4个类别的数据。然后输出通道的平均激活率(50个通道为一个样本求平均,compute the average activations for fifty uniformly sampled channels in the last SE block of each stage)。不同的stage要分开统计:

结论如下:

  • 图的命名规则是SE+stageID+blockID
  • 网络中靠前的层,每个类别的激活率差别基本不大。这个的解释是:前面的都是底层,一般性的特征,比如颜色,线条之类,后面的才会有高层特征,比如最后的语义特征这些(namely that earlier layer features are typically more general (e.g. class agnostic in the context of the classification task) while later layer features exhibit greater levels of specificity)。所以不管是什么类,提取到的东西很类似,所以激活率也没啥区别。
  • SE-4-6和SE-5-1这两个图说明到了网络的中层,不同类别的激活率趋势就不一样了,呼应了上一条。也说明了这个激活是有效的,因为类别不一样,注意力是不一样的。
  • 在SE-5-2这个位置,excitatioin基本退化成了一个恒等映射,所有的基本都是被激活的。而且SE-5-3这里,所有的类别基本上趋势是相同的,从这两个图可以看出,到了网络的后面,这个激活的作用基本不大了,所以才说到了网络的后面,这个参数 r r r可以设置的大一点。反正各个类别之间区别不大。
  1. 上面是对类别的注意力的实验,接下来测试了每个类别中,这个excitation对每张图像的作用。数据是用的两个类别,计算的是激活数的平均值和标准差。

结论是:

  • 不管是类别还是实例(instance,也就是image),注意力机制都是有效的。
  • 类别和实例的趋势基本类似。

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

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

相关文章

大数据课程I3——Kafka的消息流与索引机制

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的消息流处理; ⚪ 掌握Kafka的索引机制; ⚪ 掌握Kafka的消息系统语义; 一、Kafka消息流处理 1. Producer 写入消息 流程说明: 1. producer 要向Kafka生产消息,需要先通过…

修改el-table行悬停状态的背景颜色

.content:deep().el-table tr:hover>td {background-color: #f5f5f5 !important; /* 设置悬停时的背景颜色 */ }/*这一点很重要,否则可能会导致hover行时操作列还是原来的背景色*/ .content:deep().el-table__body tr.hover-row>td{background-color: #f5f5f5…

【Axure高保真原型】JS日期选择器筛选中继器表格

今天和大家分享JS日期选择器筛选中继器表格的原型模板,通过调用浏览器的日期选择器,所以可以获取真实的日历效果,具体包括哪一年二月份有29天,几号对应星期几,都是真实的,获取日期值后,通过交互…

GraphQL strawberry的使用回顾和体会

GraphQL vs RESTful 简单来说GraphQL 比起 RESTful 集成额外一些功能 出入参校验、序列化 (简化后端编程)自由可选的返回数据字段 (简化一些多余接口开发和沟通联调成本) 这些都是优点了。 开发效率在项目初期是很重要的,需要快速原型化。 但是后期稳定后&#…

使用维纳过滤器消除驾驶舱噪音(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【NepCTF2023】复现

文章目录 【NepCTF2023】复现MISC与AI共舞的哈夫曼codesc语言获取环境变量 小叮弹钢琴陌生的语言你也喜欢三月七么Ez_BASIC_IImisc参考 WEBez_java_checkinPost Crad For You独步天下配置环境独步天下-镜花水月环境变量提权 独步天下-破除虚妄总结 独步天下-破除试炼_加冕成王知…

TCP服务器实现—多进程版,多线程版,线程池版

目录 前言 1.存在的问题 2.多进程版 3.多线程版 4.线程池版 总结 前言 在上一篇文章中使用TCP协议实现了一个简单的服务器,可以用来服务端和客户端通信,但是之前的服务器存在一个问题,就是当有多个客户端连接服务器的时候,服…

微信开发者工具项目简单介绍和使用

主要目录简介: 页面文件的简介: 四个json文件的简介: 1.app.json 2.project.config.json 3.sitemap.json 4.页面中的json 简单操作 1.快速新建小程序页面,在app.json的pages下编写页面的路径,保存后微信开发者工具会自…

SpringjDBCTemplate_spring25

1、首先导入两个包,里面有模板 2、transtion事务 jDbc操作对象,底层默认的是事务: 3、我们java一般对实体类进行操作。 4、第一步写好坐标。 创建一个Account表 数据修改用update 数据进去了

LeetCode235. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 文章目录 [235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)一、题目二、题解方法一:递归方法二:迭代 一、题目 给定一个二叉搜索树, 找到该树中两个指定…

XSS 跨站脚本攻击

XSS(DOM) XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击,攻击者在网页中插入由JavaScript编写的恶意代码,当用户浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。 XSS攻击可分为三种:分别为反射型(Reflected…

VSCODE[配置ssh免密远程登录]

配置ssh免密远程登录 本文摘录于:https://blog.csdn.net/qq_44571245/article/details/123031276只是做学习备份之用,绝无抄袭之意,有疑惑请联系本人! 这里要注意如下几个地方: 1.要进入.ssh目录创建文件: 2.是拷贝带"ssh-…

模糊测试面面观 | 模糊测试工具知多少

自1988年威斯康星大学的Barton Miller首次提出模糊测试这一概念以来,模糊测试领域经历了持续长久发展。模糊测试作为一种软件测试方法,旨在通过向程序输入模糊、随机、异常的数据,探测和发现潜在的漏洞和错误。这种方法备受安全研究人员的青睐…

使用 Ansible Galaxy 安装角色

使用 Ansible Galaxy 安装角色 使用 Ansible Galaxy 和要求文件 /home/curtis/ansible/roles/requirements.yml 。从以下 URL 下载角色并安装到 /home/curtis/ansible/roles : http://rhgls.area12.example.com/materials/haproxy.tar 此角色的名称应当为 balancer …

【无监督】2、MAE | 自监督模型提取的图像特征也很能打!(CVPR2022 Oral)

文章目录 一、背景二、方法三、效果 论文:Masked Autoencoders Are Scalable Vision Learners 代码:https://github.com/facebookresearch/mae 出处:CVPR2022 Oral | 何凯明 | FAIR 一、背景 本文的标题突出了两个词: masked…

微信小程序前后端开发快速入门(完结篇)

这篇是微信小程序前后端快速入门完结篇了,今天利用之前学习过的所有知识做一个新的项目「群登记助手v1.0」小程序。 整体技术架构:小程序原生前端小程序云开发。 经历了前面教程的学习,大家有了一定的基础,所以本次分享重心主要是…

【C++】位图和布隆过滤器

位图和布隆过滤器 前言正式开始位图位图讲解模拟实现位图几道关于位图的题目 布隆过滤器概念实例布隆过滤器模拟实现误判率测试几道题 前言 本来本篇是和前面的两篇连着的,但是没写到一块,位图和布隆过滤器都是基于哈希的思想的,如果对于哈希…

2023年即将推出的CSS特性对你影响大不大?

Google开发者大会每年都会提出有关于 Web UI 和 CSS 方面的新特性,今年又上新了许多新功能,今天就从中找出了影响最大的几个功能给大家介绍一下 :has :has() 可以通过检查父元素是否包含特定子元素或这些子元素是否处于特定状态来改变样式,也…

【JavaEE进阶】MyBatis的创建及使用

文章目录 一. MyBatis简介二. MyBatis 使用1. 数据库和数据表的创建2. 创建Mybatis项目2.1 添加MyBatis框架支持2.2 设置MyBatis配置信息 3. MyBatis开发流程4. MyBatis查询数据库测试 三. MyBatis 流程1. MyBatis 查询数据库流程2. MyBatis 框架交互流程图 一. MyBatis简介 M…

Springboot 实践(8)springboot集成Oauth2.0授权包,对接spring security接口

此文之前,项目已经添加了数据库DAO服务接口、资源访问目录、以及数据访问的html页面,同时项目集成了spring security,并替换了登录授权页面;但是,系统用户存储代码之中,而且只注册了admin和user两个用户。在…