论文阅读笔记—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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python自动化测试面试题及答案(持续更新中)

    1、自动化代码中,用到了哪些设计模式?单例设计模式工厂模式PO设计模式数据驱动模式面向接口编程设计模式2、什么是断言(Assert)?断言Assert用于在代码中验证实际结果是不是符合预期结果,如果测试用例执行失败会抛出异常并提供断言日志3、什么是web自动化测试Web自动化测试是从UI(用户界面)层面进行的自动化测试测试人员通过编程自动化程序(测试用例脚本)来打开浏览器测试网站的业务逻辑4、什么是seleniumSelenium是一个开源的web自动化测试框架,支持

    2022年4月8日
    130
  • Navicat for MySQL 使用SSH方式链接远程数据库(二)

    Navicat for MySQL 使用SSH方式链接远程数据库(二)

    2021年10月19日
    34
  • 二分法 matlab应用,MATLAB算法の二分法[通俗易懂]

    从今起准备连续多期介绍一些常用的算法,通过不断实践“算法到程序”这一过程来学习matlab编程,久而久之就可做到熟能生巧。今天要介绍的是二分法,它是一种古老且经典的、蕴含深刻哲理的算法。我们知道现实物理世界是有限的,而抛开物理意义却又是无限可分的,而二分法就是基于这种无限可分思想,可以说它是连接有限与无限的纽带。今天主要介绍二分法在数学寻根中的应用,毕竟为的是将算法程序化。要求单调函数f(x)在区…

    2022年4月11日
    65
  • asp.net中Session小例子

    asp.net中Session小例子登录界面aspx代码如下:functionisempty(){vartxt_id=document.getElementById(“txt_userID”);if(txt_id.value==””){alert(“请输入用户名!”);

    2022年7月25日
    5
  • 软件架构 设计模式_几种常见软件架构

    软件架构 设计模式_几种常见软件架构什么是架构?  软件体系结构通常被称为架构,指可以预制和可重构的软件框架结构。架构尚处在发展期,对于其定义,学术界尚未形成一个统一的意见,而不同角度的视点也会造成软件体系结构的不同理解,以下是一些主流的标准观点。  ANSI/IEEE610.12-1990软件工程标准词汇对于体系结构定义是:“体系架构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构以及知道上述内容设计与演化的原理(principle)”。  MaryShaw和DavidGarlan认为软件体系结构是软件设

    2022年10月18日
    0
  • Logtail从入门到精通(二):开启日志采集之旅

    Logtail从入门到精通(二):开启日志采集之旅

    2021年5月26日
    156

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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