轻量化模型之SqueezeNet
自 2012 年 AlexNet 以来,卷积神经网络在图像分类、目标检测、语义分割等领域获得广泛应用。随着性能要求越来越高,AlexNet 已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的 CNN 网络,如 VGG、GoogLeNet、ResNet、DenseNet 等。由于神经网络的性质,为了获得更好的性能,网络层数不断增加,从 7 层 AlexNet 到 16 层 VGG,再从 16 层 VGG 到 GoogLeNet 的 22 层,再到 152 层 ResNet,更有上千层的 ResNet 和 DenseNet。虽然网络性能得到了提高,但随之而来的就是效率问题。
效率问题主要是模型的存储问题和模型进行预测的速度问题。
1、存储问题。数百层网络有着大量的权值参数,保存大量权值参数对设备的内存要求很高;
2、速度问题。在实际应用中,往往是毫秒级别,为了达到实际应用标准,要么提高处理器性能(很难),要么就减少计算量。
只有解决 CNN 效率问题,才能让 CNN 走出实验室,更广泛的应用于移动端。
对于效率问题,通常的方法是进行模型压缩(Model Compression),即在已经训练好的模型上进行压缩,使得网络携带更少的网络参数,从而解决内存问题,同时可以解决速度问题。
相比于在已经训练好的模型上进行处理,轻量化模型模型设计则是另辟蹊径。轻量化模型设计主要思想在于设计更高效的「网络计算方式」(主要针对主干网卷积),从而使网络参数减少的同时,不损失网络性能。
2017年,SqueezeNet发表于ICLR,《SqueezeNet:AlexNet-level accuracy with 50x fewer parameters and 0.5MB》,原文链接:https://arxiv.org/abs/1602.07360
主要创新点:
采用不同于传统的卷积方式,提出 fire module;fire module 包含两部分:squeeze 层+expand 层。首先 squeeze 层(压缩层),就是 1*1 卷积,其卷积核数要少于上一层 feature map 数。然后,Expand 层分别用 1*1 和 3*3 卷积,然后 concat。SqueezeNet 的核心在于 Fire module,Fire module 由两层构成,分别是 squeeze 层+expand 层,如下图 1 所示,squeeze 层是一个 1*1 卷积核的卷积层,expand 层是 1*1 和 3*3 卷积核的卷积层,expand 层中,把 1*1 和 3*3 得到的 feature map 进行 concat。
卷积图如下:
具体情况如下图所示:

Fire module 输入的 feature map 为 H*W*M 的,输出的 feature map 为 H*W*(e1+e3),可以看到 feature map 的分辨率是不变的,变的仅是维数,也就是通道数
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 的网络结构,如下图:
也可以加入ResNet中的Shortcut连接来提升性能,如下图(中,右)

SqueezeNet的各层参数详细表:

Squezeenet 的参数数量以及性能:
SqueezeNet 小结:
1 Fire module 与 GoogLeNet 思想类似,采用 1*1 卷积对 feature map 的维数进行「压缩」,从而达到减少权值参数的目的;
2 采用与 VGG 类似的思想(堆叠)的使用卷积,这里堆叠的使用 Fire module。
轻量化模型之SqueezeNet的更多相关文章
- CNN结构演变总结(二)轻量化模型
CNN结构演变总结(一)经典模型 导言: 上一篇介绍了经典模型中的结构演变,介绍了设计原理,作用,效果等.在本文,将对轻量化模型进行总结分析. 轻量化模型主要围绕减少计算量,减少参数,降低实际运行时间 ...
- 深度学习与CV教程(10) | 轻量化CNN架构 (SqueezeNet,ShuffleNet,MobileNet等)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- 轻量化模型之MobileNet系列
自 2012 年 AlexNet 以来,卷积神经网络在图像分类.目标检测.语义分割等领域获得广泛应用.随着性能要求越来越高,AlexNet 已经无法满足大家的需求,于是乎各路大牛纷纷提出性能更优越的 ...
- 轻量化模型:MobileNet v2
MobileNet v2 论文链接:https://arxiv.org/abs/1801.04381 MobileNet v2是对MobileNet v1的改进,也是一个轻量化模型. 关于Mobile ...
- 轻量化模型训练加速的思考(Pytorch实现)
0. 引子 在训练轻量化模型时,经常发生的情况就是,明明 GPU 很闲,可速度就是上不去,用了多张卡并行也没有太大改善. 如果什么优化都不做,仅仅是使用nn.DataParallel这个模块,那么实测 ...
- 轻量化模型系列--GhostNet:廉价操作生成更多特征
前言 由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络 (CNN) 很困难.特征图中的冗余是那些成功的 CNN 的一个重要特征,但在神经架构设计中很少被研究. 论文提出了一种新颖的 Gh ...
- 纵览轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
近年提出的四个轻量化模型进行学习和对比,四个模型分别是:SqueezeNet.MobileNet.ShuffleNet.Xception. SqueezeNet https://arxiv.org/p ...
- 基于WebGL/Threejs技术的BIM模型轻量化之图元合并
伴随着互联网的发展,从桌面端走向Web端.移动端必然的趋势.互联网技术的兴起极大地改变了我们的娱乐.生活和生产方式.尤其是HTML5/WebGL技术的发展更是在各个行业内引起颠覆性的变化.随着WebG ...
- MobileNet——一种模型轻量化方法
导言 新的CNN网络的提出,提高了模型的学习能力但同时也带来了学习效率的降低的问题(主要体现在模型的存储问题和模型进行预测的速度问题),这使得模型的轻量化逐渐得到重视.轻量化模型设计主要思想在于设计更 ...
随机推荐
- JAVA 基础编程练习题42 【程序 42 求数字】
42 [程序 42 求数字] 题目:809*??=800*??+9*??+1 其中??代表的两位数,8*??的结果为两位数,9*??的结果为 3 位数.求??代表的两位数,及 809*??后的结 果. ...
- unity 读取灰度图生成三维地形并贴图卫星影像
从 https://earthexplorer.usgs.gov/ 下载高程数据 从谷歌地球上保存对应地区卫星图像 从灰度图创建地形模型,并将卫星影像作为贴图 using System.Collect ...
- Quartz任务调度系统,克隆表达式
Quartz任务调度系统,克隆表达式 (1).克隆表达式可以包括7个字段:秒.分.小时.月内日期.月.周内日期.年(可选字段) (2).特殊字符: 一.反斜线(/)字符表示增量."5/15& ...
- java面试考点-HashTable/HashMap/ConcurrentHashMap
HashTable 内部数据结构是数组+链表,键值对不允许为null,线程安全,但是锁是整表锁,性能较差/效率低 HashMap 结构同HashTable,键值对允许为null,线程不安全, 默认初始 ...
- C\C++中的 struct 关键字详解
struct关键字是用来定义一个新的类型,这个新类型里面可以包含各种其他类型,称为结构体. 1. 什么是结构体 结构体(struct)是一种自定义的数据类型,就是把一组需要在一起使用的数据元素组合成一 ...
- mac必装软件
1.IINA: https://iina.io/ 2.keka: https://www.keka.io/zh-cn/ 3.欧陆词典: https://www.eudic.net/v4/en/app/ ...
- Docker 安装 Tomcat
查找Docker Hub上的tomcat镜像 docker search tomcat 取官方的镜像 docker pull tomcat 使用tomcat镜像 创建目录tomcat,用于存放后面的相 ...
- CentOS7.0 测试环境准备过程
1. 公司最近开始走向国产化和开源路线,因为绝大多数国产化都是采取的linux路线, 所以为了保证兼容性, 测试环境大部分从windows迁移到了linux环境. 测试采取逐步推进的模式, 先测试兼容 ...
- 【Python】【demo实验36】【基础实验】【求3*3矩阵的主对角线之和】
题目: 求一个3*3矩阵主对角线元素之和. 主对角线:从左上多右下的书归为主对角线 副对角线:从左下至右上的数归为副对角线. 我的源码: #!/usr/bin/python # encoding=ut ...
- 我学会了正确的dinic
以前写Isap的时候,总是被卡,然后学了一发Isap的当前弧优化,好像可以水过很多题 但是一直没明白为啥Isap会走一个环??? 然后写dinic了,听说不容易被卡(来自去年九省联考的指导) 然而-- ...