目录

论文

介绍

详解

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,反应卷积网络的一个发展方向:提高精度。这里我们开始另外一个方向的介绍:在不大幅降低模型精度的前提下,最大程度的提高运算速度

提高运算所读有两个可以调整的方向:

  1. 减少可学习参数的数量;
  2. 减少整个网络的计算量。

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中并没有体现出来:

  1. 激活函数默认都使用ReLU;
  2. fire9之后接了一个rate为0.5的dropout;
  3. 使用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学习笔记相关推荐

  1. 旷世轻量化网络ShuffulNetV2学习笔记

    旷世轻量化网络ShuffulNetV2学习笔记 ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design Ab ...

  2. (*长期更新)软考网络工程师学习笔记——Section 6 网络层上篇

    目录 一.网络层的定义 二.IPv4数据报 三.IPv4 (一)分类依据 (二)IP地址分类 (三)网络.主机号位数 (四)特殊IP地址 四.划分子网 五.子网掩码 (一)默认子网掩码 (二)VLSM ...

  3. java 网络编程学习笔记

    java 网络编程学习笔记 C/S模式:客户端和服务器 客户端创建流程 1 1.建立Socket端点 2 3 Socket s = new Socket(绑定地址, 绑定端口); 2.确认源数据方式和 ...

  4. 软考网络工程师学习笔记6-无线通信网

    软考网络工程师学习笔记6-无线通信网 1.无线移动通信 各种移动通信标准: 1G:第一代模拟蜂窝:频分双工FDD 2G: 第二代数字蜂窝 (1)GSM 全球移动通信 采用TDMA (2)CDMA 码分 ...

  5. 软考网络工程师学习笔记4-局域网与城域网

    软考网络工程师学习笔记4-局域网与城域网 1.局域网体系和标准 局域网就是单一机构所拥有的专用计算机网络,中等规模地理范围,实现多种设备互联.信息交换和资源共享. 局域网体系结构在OSI模型中的数据链 ...

  6. 软考网络工程师学习笔记3-广域通信网

    软考网络工程师学习笔记3-广域通信网 1.广域网概念和分类 广域网是指长距离跨地区的各种局域网.计算机.终端互联在一起,组成一个资源共享的通信网络. 传统的广域网有: (1)公共交换电话网PSTN ( ...

  7. [Linux网络编程学习笔记]索引

    一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...

  8. Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)

    Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...

  9. 编程开发:Linux网络编程学习笔记

    非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...

最新文章

  1. python 标签树的遍历
  2. Android中几种常用的定时器和延时方法
  3. jQuery学习笔记(简介,选择器)
  4. 微信如何解绑小程序_微信小程序该如何运营推广
  5. 判断存储过程是否存在某个参数名
  6. Python super() 函数的用法及实例
  7. IE和FireFox中的event事件
  8. HTML 5.1 的 14 个新特性(含使用案例)
  9. LINUX:解压问题tar: Child returned status 1
  10. Maven 插件开发
  11. Raid Level,该如何为Oracle存储选择才好?
  12. 分发服务器linux,Linux-LVS分发服务器
  13. 20世纪50年代电子计算机的功能元件,第1章 计算机基础知识习题答案
  14. 07-图4 哈利·波特的考试(25 分)
  15. Webx系列之文件下载
  16. 新兴职业背后的认知逻辑
  17. 惯性室内导航入门到精通(3)-计步算法
  18. 判断2-100之间有多少个素数,并输出所有素数
  19. Python爬取猫眼「碟中谍」全部评论
  20. 六个计算机硬件商标名称,10nm显卡可能有名字了,Intel悄悄申请全新商标!

热门文章

  1. 【面试题记录】在mysql中查询10万条数据找到第50000到51000条数据,你会怎么做?
  2. Java中的二进制,八进制,十六进制
  3. [附源码]Nodejs计算机毕业设计怦然心动网上服装商城Express(程序+LW)
  4. 冷月虐哭数一之高等数学(1)-递归数列极限的求法和证明
  5. 即时定位与地图构建(SLAM)的相关研究
  6. 什么是免费ARP-看这篇就够了
  7. 产品和运营如何利用MLSQL完成excel处理
  8. exe4j 压缩java代码到无JRE环境的电脑上运行
  9. 状态机的Verilog写法
  10. 某叶C语言学习上重大的一步——一元三次方程求解