论文阅读笔记—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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 对象转map,去掉null

    java 对象转map,去掉nullpublicstaticMap<String,Object>beanToMap(Objectobject){Map<String,Object>map=null;try{map=newHashMap<String,Object>();Bean…

    2022年5月7日
    258
  • 小明の魔法计划——最长上升子序列[通俗易懂]

    小明の魔法计划——最长上升子序列[通俗易懂]Think:1知识点:最长上升子序列2反思:知识体系需要加深拓展SDUT题目链接小明の魔法计划TimeLimit:1000MSMemoryLimit:65536KBProblemDescription在一个遥远的数学魔法国度,小明在学习一个魔法,这个魔法需要一些施法材料,所幸的是施法材料已经准备好了,下一步就是建立魔法阵了,每一个施法材料都有一个特性值,表示为一个大于1小

    2022年6月4日
    30
  • Java删除文件时总是返回false,删不掉,且无异常

    Java删除文件时总是返回false,删不掉,且无异常分享知识传递快乐今天在利用File类中的delete()方法删除文件时总是返回false。查看路径文件路径正确,文件也存在。测试可以正常,唯独在项目中那是一个删不掉啊。后来与测试用例仔细比对了一下,发现有个IO类在使用,因此得出:在删除文件是因为没关闭IO,导致文件无法删除,后来加上close()就可以删除文件了。总结下可能会出现删不掉文件的几种情况:没…

    2022年5月13日
    61
  • MyBatis Plus 实现多表分页查询

    MyBatis Plus 实现多表分页查询在MybatisPlus中,虽然IService<T>接口帮我们定义了很多常用的方法,但这些都是T对象有用,如果涉及到多表的查询,还是需要自定义Vo对象和自己编写sql语句,MybatisPlus提供了一个Page对象,查询是需要设置其中的size字段和current字段的值一、分页配置 可以直接使用selectPage这样的分页,但返回的数据确实…

    2022年5月1日
    147
  • 【C语言】输入两个正整数m和n,求其最大公约数和最小公倍数。(要求用while语句实现)[通俗易懂]

    【C语言】输入两个正整数m和n,求其最大公约数和最小公倍数。(要求用while语句实现)[通俗易懂]输入两个正整数m和n,求其最大公约数和最小公倍数。(要求用while语句实现)一、最大公约数求法(1)辗转相除法(2)相减法二、求最小公倍数算法一、最大公约数求法(1)辗转相除法设有两整数a和b:①a%b得余数c②若c==0,则b即为两数的最大公约数③若c!=0,则a=b,b=c,再回去执行①。例如求27和15的最大公约数过程为:27÷15余1215÷12余312÷3余0因此,3即为最大公约数。(2)相减法设有两整数a和b:①若a>b,则a=a-b②.

    2022年5月16日
    48
  • disk boot failure ,insert sysytem disk and press enter解决方法

    disk boot failure ,insert sysytem disk and press enter解决方法故障分析与处理从现象上看硬盘可能是损坏了,如果在无法启动前的最后一次关机是按照正常程序退出。将硬盘拆下来连接到另外一台机器上,开机启动后进入CMOS设置主菜单,选择“IDE HDD AUTO DETECTION”栏,检测到硬盘参数,能正常进入硬盘。将硬盘装回到原来的机器上,进入CMOS设置后能自动检测到硬盘的参数,恢复了正常启动。关机时按照正常程序退出,而下一次开机时无法用硬盘启动并且无

    2022年7月13日
    16

发表回复

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

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