论文阅读笔记—senet

论文阅读笔记—senetSqueeze-and-ExcitationNetworks论文翻译——中英文对照SENet(Squeeze-and-ExcitationNetworks)算法笔记SENet学习笔记概要论文的动机是从特征通道之间的关系入手,希望显式地建模特征通道之间的相互依赖关系。另外,没有引入一个新的空间维度来进行特征通道间的融合,而是采用了一种全新的“特征重标定”策略。SENet的核心思想在于通…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Squeeze-and-Excitation Networks论文翻译——中英文对照
SENet(Squeeze-and-Excitation Networks)算法笔记
SENet学习笔记

概要

论文的动机是从特征通道之间的关系入手,希望显式地建模特征通道之间的相互依赖关系。另外,没有引入一个新的空间维度来进行特征通道间的融合,而是采用了一种全新的“特征重标定”策略。

SENet的核心思想在于通过网络根据loss去学习特征权重,使得有效的feature map权重大,无效或效果小的feature map权重小的方式训练模型达到更好的结果。具体来说,就是通过学习的方式来自动获取到每个特征通道的重要程度,然后依照这个重要程度去增强有用的特征并抑制对当前任务用处不大的特征,通俗来讲,就是让网络利用全局信息有选择的增强有益feature通道并抑制无用feature通道,从而能实现feature通道自适应校准
也许通过给某一层特征配备权重的想法很多人都有,那为什么只有SENet成功了?个人认为主要原因在于权重具体怎么训练得到。就像有些是直接根据feature map的数值分布来判断;有些可能也利用了loss来指导权重的训练,不过全局信息该怎么获取和利用也是因人而异。
当然,SE block嵌在原有的一些分类网络中不可避免地增加了一些参数和计算量,但是在效果面前还是可以接受的。

Sequeeze-and-Excitation(SE) block并不是一个完整的网络结构,而是一个子结构,可以嵌到其他分类或检测模型中
作者在文中将SENet block插入到现有的多种分类网络中,都取得了不错的效果。作者采用SENet block和ResNeXt结合在ILSVRC 2017的分类项目中拿到第一,在ImageNet数据集上将top-5 error降低到2.251%,原先的最好成绩是2.991%。

核心机制

我们提出了一种机制,使网络能够执行特征重新校准,通过这种机制可以学习使用全局信息来选择性地强调信息特征并抑制不太有用的特征。
通过引入新的架构单元(“Squeeze-and-Excitation” (SE)块),我们研究了通道关系,设计了SE block如图1所示。论文的核心就是Squeeze和Excitation(论文牛的地方)两个操作。下面先介绍一下这两个操作是怎么实现的并介绍其主要的作用,论文中给出了几个公式很清晰的表示出了其原理,我将结合这几个公式阐述Squeeze和Excitation的原理。
在这里插入图片描述


图1 SE block结构图

Ftr操作

首先Ftr这一步是转换操作(严格讲并不属于SENet,而是属于原网络,可以看后面SENet和Inception及ResNet网络的结合),在文中就是一个标准的卷积操作而已,输入输出的定义如下表示。
F t r : X → U , X ∈ R W ′ × H ′ × C ′ , U ∈ R W × H × C \mathbf{F}_{t r} : \mathbf{X} \rightarrow \mathbf{U}, \mathbf{X} \in \mathbb{R}^{W^{\prime} \times H^{\prime} \times C^{\prime}}, \mathbf{U} \in \mathbb{R}^{W \times H \times C} Ftr:XU,XRW×H×C,URW×H×C
那么这个Ftr的公式就是下面的公式1(卷积操作,vc表示第c个卷积核,xs表示第s个输入)
u c = v c ∗ X = ∑ s = 1 C v c s ∗ x s u_{c}=v_{c} * X=\sum_{s=1}^{C} v_{c}^{s *} x^{s} uc=vcX=s=1Cvcsxs
Ftr得到的U就是Figure1中的左边第二个三维矩阵,也叫tensor,或者叫C个大小为H*W的feature map。而Uc表示U中第c个二维矩阵,下标c表示channel。

Squeeze(挤压/Fsq操作)

接下来就是Squeeze操作(对应SE block结构图中的Fsq操作),公式非常简单,就是一个global average pooling

z c = F s q ( u c ) = 1 W × H ∑ i = 1 W ∑ j = 1 H u c ( i , j ) z_{c}=F_{s q}\left(u_{c}\right)=\frac{1}{W \times H} \sum_{i=1}^{W} \sum_{j=1}^{H} u_{c}(i, j) zc=Fsq(uc)=W×H1i=1Wj=1Huc(i,j)

为什么会有这一步呢?这一步的结果相当于表明该层C个feature map的数值分布情况,或者叫全局信息
Squeeze操作就是在得到U(多个feature map)之后采用全局平均池化操作对其每个feature map进行压缩,使其C个feature map最后变成1x1xC的实数数列,下图中红色框标记的区域就是Squeeze操作。
在这里插入图片描述
一般CNN中的每个通道学习到的滤波器都对局部感受野进行操作,因此U中每个feature map都无法利用其它feature map的上下文信息,而且网络较低的层次上其感受野尺寸都是很小的,这样情况就会更严重。
  U(多个feature map)可以被解释为局部描述子的集合,这些描述子的统计信息对于整个图像来说是有表现力的。论文选择最简单的全局平均池化操作,从而使其具有全局的感受野,使得网络低层也能利用全局信息

Excitation(激励/Fex操作)

论文通过Excitation操作(如图2紫色框标注)来全面捕获通道依赖性(相互之间的重要性),论文提出需要满足两个标准:
    (1) 它必须是灵活的(特别是它必须能够学习通道之间的非线性交互);
    (2) 它必须学习一个非互斥的关系,因为独热激活相反,这里允许强调多个通道。
为了满足这些要求,论文选择采用一个简单的gating mechanism,使用了sigmoid激活函数

s = F e x ( z , W ) = σ ( g ( z , W ) ) = σ ( W 2 δ ( W 1 z ) ) s=F_{e x}(z, W)=\sigma(g(z, W))=\sigma\left(W_{2} \delta\left(W_{1} z\right)\right) s=Fex(z,W)=σ(g(z,W))=σ(W2δ(W1z))

W 1 ∈ R C r × C ∓ l W 2 ∈ R C × C r W_{1} \in R^{\frac{C}{r} \times C} \mp \mathbb{l} W_{2} \in R^{C \times \frac{C}{r}} W1RrC×ClW2RC×rC

δ=ReLU(), σ \sigma σ=sigmoid()

1)前面squeeze得到的结果是z,
2)这里先用W1乘以z,就是一个全连接层操作,W1的维度是C/r * C,这个r是一个缩放参数,在文中取的是16,这个参数的目的是为了减少channel个数从而降低计算量。又因为z的维度是1x1xC,所以W1z的结果就是1x1xC/r;然后再经过一个δ函数(其中δ是指ReLU函数),输出的维度不变;
3)然后再和W2相乘,和W2相乘也是一个全连接层的过程,W2的维度是C*C/r,因此输出的维度就是1x1xC;
4)最后再经过sigmoid函数(门函数),得到s。

这个s其实是本文的核心,它是用来刻画tensor U中C个feature map的权重。前面的squeeze都只是在某个channel的feature map里面操作,这两个全连接层的作用就是融合各通道的feature map信息。
而且这个权重是通过前面这些全连接层和非线性层学习得到的,因此可以end-to-end训练。
下图的粉色框就是Excitation操作:
在这里插入图片描述

Fscale

对应Figure1中的Fscale。在得到s之后,就可以对原来的tensor U操作了,就是下面的公式4。也很简单,就是channel-wise multiplication,什么意思呢?Uc表示U中第c个二维矩阵,下标c表示channel。Uc是一个二维矩阵,Sc是上一步的输出S(向量)中的一个数值,也就是权重,因此相当于把Uc矩阵中的每个值都乘以Sc

x ~ c = F s c a l e ( u c , s c ) = s c ⋅ u c \tilde{x}_{c}=F_{s c a l e}\left(u_{c}, s_{c}\right)=s_{c} \cdot u_{c} x~c=Fscale(uc,sc)=scuc

F scale ( u c , s c ) F_{\text {scale}}\left(u_{c}, s_{c}\right) Fscale(uc,sc)指的是 u c ∈ R W × H u_{c} \in R^{W \times H} ucRW×H和标量 S c S_{c} Sc之间的对应通道乘积。

实际网络中怎样添加SE block

SE块的灵活性意味着它可以直接应用于标准卷积之外的变换。为了说明这一点,我们通过将SE块集成到两个流行的网络架构系列Inception和ResNet中来开发SENets。

SE-Inception网络

通过将变换Ftr看作一个整体的Inception模块(参见图2),为Inception网络构建SE块。通过对架构中的每个模块进行更改,我们构建了一个SE-Inception网络。
Figure2是在Inception中加入SE block的情况,这里的Inception部分就对应Figure1中的Ftr操作
在这里插入图片描述
图2 最初的Inception模块架构(左)和SE-Inception模块架构(右)。

SE-ResNet模块

残留网络及其变种已经证明在学习深度表示方面非常有效。我们开发了一系列的SE块,分别与ResNet[9],ResNeXt[43]和Inception-ResNet[38]集成。图3描述了SE-ResNet模块的架构。在这里,SE块变换Ftr被认为是残差模块的非恒等分支。压缩和激励都在恒等分支相加之前起作用。
在这里插入图片描述
图3 最初的Residual模块架构(左)和SE-ResNet模块架构(右)。

模型复杂度分析

看完结构,再来看添加了SE block后,模型的参数到底增加了多少。其实从前面的介绍可以看出增加的参数主要来自两个全连接层,两个全连接层的维度都是C/r * C,那么这两个全连接层的参数量就是2*C^2/r。以ResNet为例,假设ResNet一共包含S个stage,每个Stage包含N个重复的residual block,那么整个添加了SE block的ResNet增加的参数量就是下面的公式:
2 r ∑ s = 1 S N s ⋅ C s 2 \frac{2}{r} \sum_{s=1}^{S} N_{s} \cdot C_{s}^{2} r2s=1SNsCs2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/206849.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • python自动炒股软件下载_python自动股票交易软件

    python自动炒股软件下载_python自动股票交易软件获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。一、网页源码的获取很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。imp…

  • 总结——01背包问题 (动态规划算法)

    总结——01背包问题 (动态规划算法)0-1背包问题:给定n种物品和一个容量为C的背包,物品i的重量是wi,其价值为vi。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?

  • java populate_BeanUtils 以及BeanUtils.populate使用[通俗易懂]

    java populate_BeanUtils 以及BeanUtils.populate使用[通俗易懂]ApacheJakartaCommons项目非常有用。我曾在许多不同的项目上或直接或间接地使用各种流行的commons组件。其中的一个强大的组件就是BeanUtils。我将说明如何使用BeanUtils将local实体bean转换为对应的value对象:BeanUtils.copyProperties(aValue,aLocal)上面的代码从aLocal对象复制属性到aValue对象。它相…

  • AssertValid函数学习

    AssertValid函数学习转自http://tsitao.blog.163.com/blog/static/29795822006914105840496/VC的调试中,AssertValid和Dump函数的应用CObject

  • but六种用法_比较级的用法和句型

    but六种用法_比较级的用法和句型1.EXPLAIN简介使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。➤通过EXPLAIN,我们可以分析出以下结果:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之间的引用每张表有多少行被优化器查询➤使用方式如下:EXPLAIN+SQL语…

    2022年10月18日
  • 工程伦理复习笔记(全)

    工程伦理复习笔记(全)工程伦理第1-5章以及第10章笔记,附前五章问答题研究生考试系列—攻城伦理复习笔记—-弗兰大学参考教材:《工程伦理》清华大学第一章攻城与伦理第一章通过怒江水电开发的案例引出了工程伦理这一说法并且阐释了何为工程伦理。人类的工程实践不仅仅是一种改造自然的技术活动,也是一种关涉人丶自然与社会的伦理活动。第一章重点探讨了工程与伦理的概念,分析了工程实践中可能出现的各种伦理问题,提出处理工程实…

    2022年10月16日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号