对SE_ResNet的理解
最近在使用InsightFace_Pytorch-master pytorch工程,然后有使用到SE_ResNet50,所以想要分析相应的网络结构(包括网络层名和读取对应层相应参数)
了解什么叫做SE模块?
SE是Squeeze-and-Excitation(SE)的缩写,该模块的提出主要是考虑到模型通道之间的相互依赖性。SE网络的使用结构如下图所示:
上左图是将SE模块嵌入到Inception结构的一个示例。方框旁边的维度信息代表该层的输出。这里我们使用global average pooling作为Squeeze操作。紧接着两个Fully Connected 层组成一个Bottleneck结构去建模通道间的相关性,并输出和输入特征同样数目的权重。我们首先将特征维度降低到输入的1/16,然后经过ReLu激活后再通过一个Fully Connected 层升回到原来的维度。这样做比直接用一个Fully Connected层的好处在于:1)具有更多的非线性,可以更好地拟合通道间复杂的相关性;2)极大地减少了参数量和计算量。然后通过一个Sigmoid的门获得0~1之间归一化的权重,最后通过一个Scale的操作来将归一化后的权重加权到每个通道的特征上。
除此之外,SE模块还可以嵌入到含有skip-connections的模块中。上右图是将SE嵌入到 ResNet模块中的一个例子,操作过程基本和SE-Inception一样,只不过是在Addition前对分支上Residual的特征进行了特征重标定。如果对Addition后主支上的特征进行重标定,由于在主干上存在0~1的scale操作,在网络较深BP优化时就会在靠近输入层容易出现梯度消散的情况,导致模型难以优化。
目前大多数的主流网络都是基于这两种类似的单元通过repeat方式叠加来构造的。由此可见,SE模块可以嵌入到现在几乎所有的网络结构中。通过在原始网络结构的building block 单元中嵌入SE模块,我们可以获得不同种类的SENet 。如SE-BN-Inception、SE-ResNet 、SE-ReNeXt、SE-Inception-ResNet-v2等等。(摘录自:https://www.sohu.com/a/161793789_642762)
在工程中,打印出相应的网络结构,拿出其中bottleneck结构可以看到:
(4): bottleneck_IR_SE((shortcut_layer): MaxPool2d(kernel_size=1, stride=1, padding=0, dilation=1, ceil_mode=False)(res_layer): Sequential((0): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(2): PReLU(num_parameters=128)(3): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)(4): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)(5): SEModule((avg_pool): AdaptiveAvgPool2d(output_size=1)(fc1): Conv2d(128, 8, kernel_size=(1, 1), stride=(1, 1), bias=False)(relu): ReLU(inplace)(fc2): Conv2d(8, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(sigmoid): Sigmoid())))
其中:
SEModule((avg_pool): AdaptiveAvgPool2d(output_size=1)(fc1): Conv2d(128, 8, kernel_size=(1, 1), stride=(1, 1), bias=False)(relu): ReLU(inplace)(fc2): Conv2d(8, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)(sigmoid): Sigmoid())
就是在resnet中加入的se结构;
以上代码出自工程:InsightFace(https://github.com/TreB1eN/InsightFace_Pytorch)
文中部分内容转载出自下面链接,对于SE_Net的理解也可以参考以下链接:
https://www.sohu.com/a/161793789_642762
对SE_ResNet的理解相关推荐
- 通用解题法——回溯算法(理解+练习)
积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...
- stream流对象的理解及使用
我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...
- Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)
1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...
- java局部变量全局变量,实例变量的理解
java局部变量全局变量,实例变量的理解 局部变量 可以理解为写在方法中的变量. public class Variable {//类变量static String name = "小明&q ...
- 智能文档理解:通用文档预训练模型
预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...
- 熵,交叉熵,散度理解较为清晰
20210511 https://blog.csdn.net/qq_35455503/article/details/105714287 交叉熵和散度 自己给自己编码肯定是最小的 其他的编码都会比这个 ...
- mapreduce理解_大数据
map:对不同的数据进行同种操作 reduce:按keys 把数据规约到一起 看这篇文章请出去跑两圈,然后泡一壶茶,边喝茶,边看,看完你就对hadoop 与MapReduce的整体有所了解了. [前言 ...
- 文件句柄和文件描述符的区别和理解指针
句柄是Windows用来标识被应用程序所建立或使用的对象的唯一整数,Windows使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等.Windows句柄有点象C语言中的文件句柄. ...
- 通俗理解条件熵-数学
就是决策树里面选划分属性用到的计算 条件熵越小表示划分之后各个集合越纯净 前面我们总结了信息熵的概念通俗理解信息熵 - 知乎专栏,这次我们来理解一下条件熵. 我们首先知道信息熵是考虑该随机变量的所有可 ...
最新文章
- Spring Cloud应用开发(六:使用本地存储方式实现分布式配置管理 )
- C++模板声明与实现分开--由此想到的编译,链接原理
- JavaWeb 命名规则
- 【HDU - 4635】Strongly connected(缩点,新图性质,建图,Tarjan求强连通分量)
- 小程序switch内部加上文字_文字游戏大全:模拟游戏会长经营公会的小程序,你会管理公会吗?...
- 打开多网页用服务器系统好吗,如何在打开多个网页后,只需在一个网页上操作,其他网页都会同步操作?...
- 面向科研的推荐系统Benchmark诞生!
- 安装GPUtil包过程
- 51单片机原理知识点,复位时钟和时序(二)
- ToneBoosters Plugins Bundle for Mac(音频效果器插件包)
- 计算机上安装了新的ie版本,win7电脑自带的IE11浏览器如何降级到IE8
- pionner软件操作笔记
- IDM与其他下载器加速器优缺点介绍
- Web安全之:WebShell的获取与查杀
- Python基础教程:拼接字符串的7种方法
- 彻底搞懂数据库中的超码,候选码,主码,主属性,非主属性,全码的区别
- 硬件学习笔记(器件篇)—— 铝电解电容(二)
- 菜鸟看马云卸任以及未来的阿里巴巴
- 北京5万份数字人民币红包来袭,系“冬奥试点”首次面向公众测试!
- 树莓派PICO入门:电脑连接简易树莓派PICO单片机,烧录,使用python进行简单代码操作。
热门文章
- 你每天应该吃多少水果?
- 轻快的java_轻快的Java
- 使用pygame实现音乐播放器(一)
- day027 jQuery第二天
- 用来处理gwdac网站爬取的实验数据的python代码
- POJ3322解题报告
- 那些让我印象深刻的五个bug
- 【智能优化算法-正弦余弦算法】基于反向正弦余弦算法求解高维优化问题附matlab代码
- 计算机网络拓扑图的描述,计算机网络拓扑结构 以下关于星型网络拓扑结构的描述正确的是______。 (多选题 )...
- 从0-1搭建一个服务器(以前不懂事,现在只想搞钱)