轻量级网络SqueezeNet学习笔记
目录
论文
介绍
详解
SqueezeNet的压缩策略
Fire模块
SqueezeNet的网络架构
SqueezeNet性能
论文
SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
https://arxiv.org/abs/1602.07360 2016
介绍
从LeNet5到DenseNet,反应卷积网络的一个发展方向:提高精度。这里我们开始另外一个方向的介绍:在不大幅降低模型精度的前提下,最大程度的提高运算速度。
提高运算所读有两个可以调整的方向:
- 减少可学习参数的数量;
- 减少整个网络的计算量。
SqueezeNet正是诞生在这个环境下的一个精度的网络,它能够在ImageNet数据集上达到AlexNet近似的效果,但是参数比AlexNet少50倍
结合他们的模型压缩技术 Deep Compression,模型文件可比AlexNet小510倍。Deep Compression的论文地址:https://arxiv.org/abs/1510.00149
详解
SqueezeNet的压缩策略
1. 将 3*3 卷积替换成 1*1 卷积:通过这一步,一个卷积操作的参数数量减少了9倍;
2.减少 3*3 卷积的通道数:一个 3*3 卷积的计算量是 3*3*M*N(其中 M , N 分别是输入Feature Map和输出Feature Map的通道数),作者任务这样一个计算量过于庞大,因此希望将 M , N 减小以减少参数数量;
3. 将降采样后置:作者认为较大的Feature Map含有更多的信息,因此将降采样往分类层移动。注意这样的操作虽然会提升网络的精度,但是它有一个非常严重的缺点:即会增加网络的计算量。
Fire模块
Fire module输入的feature map为H*W*M的,输出的feature map为H*M*(e1+e3),可以看到feature map的分辨率是不变的,变的仅是维数,也就是通道数,这一点和VGG的思想一致。
首先,H*W*M的feature map经过Squeeze层,得到S1个feature map,这里的S1均是小于M的,以达到“压缩”的目的,详细思想可参考Google的Inception系列。
其次,H*W*S1的特征图输入到Expand层,分别经过1*1卷积层和3*3卷积层进行卷积,再将结果进行concat,得到Fire module的输出,为 H*M*(e1+e3)的feature map。
fire模块有三个可调参数:S1,e1,e3,分别代表卷积核的个数,同时也表示对应输出feature map的维数,在本文提出的SqueezeNet结构中,e1=e3=4s1 。
SqueezeNet的网络架构
网络结构设计思想,同样与VGG的类似,堆叠的使用卷积操作,只不过这里堆叠的使用本文提出的Fire module
SqueezeNet的几个实现,左侧是不加short-cut的SqueezeNet,中间是加了short-cut的,右侧是short-cut跨有不同Feature Map个数的卷积的。还有一些细节图3中并没有体现出来:
- 激活函数默认都使用ReLU;
- fire9之后接了一个rate为0.5的dropout;
- 使用same卷积。
SqueezeNet性能
从网络结构来看,SqueezeNet也算是设计精良了,但是最终性能还是要实验说话。论文作者将SqueezeNet与AlexNet在ImageNet上做了对比,值得注意的是,不仅对比了基础模型之间的差异,还对比了模型压缩的性能,其中模型压缩主要采用的技术有SVD,网络剪枝(network pruning)和量化(quantization)等。
具体的对比结果如下图所示。首先看一下基准模型的性能对比,SqueezeNet的Top-1优于AlexNet,Top-5性能一样,但是最重要的模型大小降低了50倍,从240MB->4.8MB,这个提升是非常有价值的,因为这个大小意味着有可能部署在移动端。
作者并没有止于此,而是继续进行了模型压缩。其中SVD就是奇异值分解,而所谓的网络剪枝就是在weight中设置一个阈值,低于这个阈值就设为0,从而将weight变成系数矩阵,可以采用比较高效的稀疏存储方式,进而降低模型大小。值得一提的Deep Compression技术,这个也是Han等提出的深度模型压缩技术,其包括网络剪枝,权重共享以及Huffman编码技术。
这里简单说一下权重共享,其实就是对一个weight进行聚类,比如采用k-means分为256类,那么对这个weight只需要存储256个值就可以了,然后可以采用8 bit存储类别索引,其中用到了codebook来实现。关于Deep Compression详细技术可以参考上文中给出的Deep Compression论文。从下图中可以看到采用6 bit的压缩,SqueezeNet模型大小降到了0.47MB,这已经降低了510倍,而性能还保持不变。为了实现硬件加速,Han等还设计了特定的硬件来高效实现这种压缩后的模型,具体参考论文(https://arxiv.org/abs/1602.01528)。顺便说过题外话就是模型压缩还可以采用量化(quantization),说白了就是对参数降低位数,比如从float32变成int8,这样是有道理,因为训练时采用高位浮点是为了梯度计算,而真正做inference时也许并不需要这么高位的浮点,TensorFlow中是提供了量化工具的,采用更低位的存储不仅降低模型大小,还可以结合特定硬件做inference加速。
和AlexNet对比的结果:
除了上面的工作,作者还探索了网络的设计空间,包括微观结构和宏观结构,微观结构包括各个卷积层的维度等设置,宏观结构比如引入ResNet的短路连接机制
参考:SqueezeNet详解 - 知乎
CNN模型之SqueezeNet - 知乎
轻量级网络SqueezeNet学习笔记相关推荐
- 旷世轻量化网络ShuffulNetV2学习笔记
旷世轻量化网络ShuffulNetV2学习笔记 ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design Ab ...
- (*长期更新)软考网络工程师学习笔记——Section 6 网络层上篇
目录 一.网络层的定义 二.IPv4数据报 三.IPv4 (一)分类依据 (二)IP地址分类 (三)网络.主机号位数 (四)特殊IP地址 四.划分子网 五.子网掩码 (一)默认子网掩码 (二)VLSM ...
- java 网络编程学习笔记
java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...
- 软考网络工程师学习笔记6-无线通信网
软考网络工程师学习笔记6-无线通信网 1.无线移动通信 各种移动通信标准: 1G:第一代模拟蜂窝:频分双工FDD 2G: 第二代数字蜂窝 (1)GSM 全球移动通信 采用TDMA (2)CDMA 码分 ...
- 软考网络工程师学习笔记4-局域网与城域网
软考网络工程师学习笔记4-局域网与城域网 1.局域网体系和标准 局域网就是单一机构所拥有的专用计算机网络,中等规模地理范围,实现多种设备互联.信息交换和资源共享. 局域网体系结构在OSI模型中的数据链 ...
- 软考网络工程师学习笔记3-广域通信网
软考网络工程师学习笔记3-广域通信网 1.广域网概念和分类 广域网是指长距离跨地区的各种局域网.计算机.终端互联在一起,组成一个资源共享的通信网络. 传统的广域网有: (1)公共交换电话网PSTN ( ...
- [Linux网络编程学习笔记]索引
一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...
- Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)
Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...
- 编程开发:Linux网络编程学习笔记
非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...
最新文章
- python 标签树的遍历
- Android中几种常用的定时器和延时方法
- jQuery学习笔记(简介,选择器)
- 微信如何解绑小程序_微信小程序该如何运营推广
- 判断存储过程是否存在某个参数名
- Python super() 函数的用法及实例
- IE和FireFox中的event事件
- HTML 5.1 的 14 个新特性(含使用案例)
- LINUX:解压问题tar: Child returned status 1
- Maven 插件开发
- Raid Level,该如何为Oracle存储选择才好?
- 分发服务器linux,Linux-LVS分发服务器
- 20世纪50年代电子计算机的功能元件,第1章 计算机基础知识习题答案
- 07-图4 哈利·波特的考试(25 分)
- Webx系列之文件下载
- 新兴职业背后的认知逻辑
- 惯性室内导航入门到精通(3)-计步算法
- 判断2-100之间有多少个素数,并输出所有素数
- Python爬取猫眼「碟中谍」全部评论
- 六个计算机硬件商标名称,10nm显卡可能有名字了,Intel悄悄申请全新商标!
热门文章
- 【面试题记录】在mysql中查询10万条数据找到第50000到51000条数据,你会怎么做?
- Java中的二进制,八进制,十六进制
- [附源码]Nodejs计算机毕业设计怦然心动网上服装商城Express(程序+LW)
- 冷月虐哭数一之高等数学(1)-递归数列极限的求法和证明
- 即时定位与地图构建(SLAM)的相关研究
- 什么是免费ARP-看这篇就够了
- 产品和运营如何利用MLSQL完成excel处理
- exe4j 压缩java代码到无JRE环境的电脑上运行
- 状态机的Verilog写法
- 某叶C语言学习上重大的一步——一元三次方程求解