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


相关推荐

  • CUDA编程(机械编程)

    CUDA编程——简介参考了很多大神的内容,并非完全原创,只是为了查漏补缺,记录自己的学习过程。个人水平有限,错误难免,欢迎讨论。

  • es6字符串的方法_es6模板字符串

    es6字符串的方法_es6模板字符串       模板字符串(templatestring)也就是模板字面量,是增强版的字符串,用反引号(`)来表示。它既可以当作普通字符串来使用,也可以在字符串中嵌套变量。注意:在模板字符串中嵌入变量的时候,需要将变量名写在${}中。       传统…

  • 模糊PID算法及其MATLAB仿真(2)

    模糊PID算法及其MATLAB仿真(2)上一篇写了模糊自整定PID的理论,这篇来做MATLAB仿真。目录补充内容:如何计算临界稳定下的开环增益Ku和震荡周期TuMATLAB进行模糊PID仿真1、准备工作2、模糊控制器的设计补充内容:如何计算临界稳定下的开环增益Ku和震荡周期Tu学过控制工程或者相关理论的同学应该比较了解,判断系统稳定性的条件一般用到劳斯表(劳斯判据)。而PID控制和模糊PI…

  • Java 枚举(enum) 详解7种常见的用法

    Java 枚举(enum) 详解7种常见的用法JDK1.5引入了新的类型——枚举。在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。大师兄我【大师兄】又加上自己的理解,来帮助各位理解一下。用法一:常量在JDK1.5之前,我们定义常量都是:publicstaticfinal….。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。Java代码publ…

  • presentation里的reference_preference的用法

    presentation里的reference_preference的用法Perference也就是我们常说的偏好设置,首选项设置,能够自己主动保存一些数据,比如我们在上一次使用的时候的一些内容,则在下一次启动后依旧生效,而不须要再进行配置。当用户改变设置时,系统就会更新SharedPreference文件里相应的值。perference使用键值对的方式来处理,在android3.0之前,我们一般去继承Preference这个基类,去给用户呈现一个…

  • 戴尔g3数字键盘失灵的情况解决

    戴尔g3数字键盘失灵的情况解决

发表回复

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

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