系统学习深度学习(二十三)--SqueezeNet
本文讲一下最新由UC Berkeley和Stanford研究人员一起完成的SqueezeNet[1]网络结构和设计思想。SqueezeNet设计目标不是为了得到最佳的CNN识别精度,而是希望简化网络复杂度,同时达到public网络的识别精度。所以SqueezeNet主要是为了降低CNN模型参数数量而设计的。OK,下面直奔主题了。
设计原则
(1)替换3x3的卷积kernel为1x1的卷积kernel
卷积模板的选择,从12年的AlexNet模型一路发展到2015年底Deep Residual Learning模型,基本上卷积大小都选择在3x3了,因为其有效性,以及设计简洁性。本文替换3x3的卷积kernel为1x1的卷积kernel可以让参数缩小9X。但是为了不影响识别精度,并不是全部替换,而是一部分用3x3,一部分用1x1。具体可以看后面的模块结构图。
(2)减少输入3x3卷积的input feature map数量
如果是conv1-conv2这样的直连,那么实际上是没有办法减少conv2的input feature map数量的。所以作者巧妙地把原本一层conv分解为两层,并且封装为一个Fire Module。
(3)减少pooling
这个观点在很多其他工作中都已经有体现了,比如GoogleNet以及Deep Residual Learning。
Fire Module
Fire Module是本文的核心构件,思想非常简单,就是将原来简单的一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,数量分别记为E11和E33,要求S11 < (E11+E33)即满足上面的设计原则(2)。expand层之后将1x1和3x3的卷积output feature maps在channel维度拼接起来。
总体网络架构
直接上图说(左边的狗狗很忧伤啊):
看图就很明朗了,总共有9层fire module,中间穿插一些max pooling,最后是global avg pooling代替了fc层(参数大大减少)。在开始和最后还有两层最简单的单层conv层,保证输入输出大小可掌握。
下图是更详细的说明:非常清楚,就不再啰嗦了。
实验结果
主要在imagenet数据上比较了alexnet,可以看到准确率差不多的情况下,squeezeNet模型参数数量显著降低了(下表倒数第三行),参数减少50X;如果再加上deep compression技术,压缩比可以达到461X!还是不错的结果。不过有一点,用deep compression[2]是有解压的代价的,所以计算上会增加一些开销。
思考
SqueezeNet之前我就在研究如果降低网络规模,SqueezeNet印证了小得多的网络也可以到达很好的CNN识别精度。相信以后会出现更多小网络,做到state-of-the-art的精度。好。
本质上,它其实就是在AlexNet基础上,用1×1(升维,非线性),3*3,以及网络深度上的扩展,达到了这个效果。
参考资料
[1] SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size,2016
[2] Deep compression: Compressing DNNs with pruning, trained quantization and huffman coding, 2015
系统学习深度学习(二十三)--SqueezeNet相关推荐
- 系统学习深度学习(博客转载地址)
转载深度学习学习系列的一些文章 1. 系统学习深度学习(一) --深度学习与神经网络关系 https://blog.csdn.net/app_12062011/article/details/5431 ...
- 近期活动盘点:心电数据标注系统和深度学习诊断算法研究、2019年第六届清华大学大数据社会科学讲习班...
想知道近期有什么最新活动?大数点为你整理的近期活动信息在此: 第四期医工结合研讨会:心电数据标注系统和深度学习诊断算法研究 2019年7月11日 7月11日,"医工结合系列研讨会第四期会议: ...
- 结束处理程序——Windows核心编程学习手札之二十三
结束处理程序 --Windows核心编程学习手札之二十三 使用SEH可以只关注程序要完成任务,而运行中发生的错误,系统将会发现并通知.Windows引入SHE是为了便于操作系统的开发,使用SHE所造成 ...
- OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十
OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...
- 人工机器:作为归纳系统的深度学习
深度学习为深度神经网络机器学习.07年最先引起注目的是DNN,在语音识别上有突出的表现:深度CNN在机器视觉领域的超常表现引领模式识别领域科学界和工业界的潮流,基于图像数据本身的二维结构天然适合CNN ...
- 系统学习深度学习(四十一)--AlphaGo Zero强化学习原理
转自:https://www.cnblogs.com/pinard/p/10609228.html 本篇主要参考了AlphaGo Zero的论文, AlphaGo Zero综述和AlphaGo Zer ...
- 系统学习深度学习(三十八)--深度确定性策略梯度(DDPG)
转自:https://www.cnblogs.com/pinard/p/10345762.html 1. 从随机策略到确定性策略 从DDPG这个名字看,它是由D(Deep)+D(Determinist ...
- 系统学习深度学习(一) --深度学习与神经网络关系
参考:http://blog.csdn.net/zouxy09/article/details/8775518 最近开始学习深度学习,基本上都是zouxy09博主的文章,写的蛮好,很全面,也会根据自己 ...
- win10系统的深度学习环境搭建以win10+rtx2060+tensorflow为例/K210的win10系统的深度学习环境搭建/有无显卡均可安装
win10系统的深度学习环境搭建以win10+rtx2060+tensorflow为例 K210的win10系统的深度学习环境搭建 有无显卡均可安装 一 软件准备 1.Anaconda3 软件介绍:A ...
- 如何系统型地学习深度学习?| 文末送书
链接:https://www.zhihu.com/question/305745486 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 如何系统型的学习深度学习? 不知小伙伴们遇到没遇到这样的情 ...
最新文章
- 数字证书采用公钥体制进行加密和解密。每个用户有一个私钥,用它进行 (46)。。。
- python3.7.2下载-Python 3.7.2和3.6.8版本发布下载,附更新说明
- 面试官:谈谈Redis缓存和MySQL数据一致性问题
- 天天象棋 残局闯关 第12关
- 网络基本功系列:细说网络那些事儿
- python语言基础项目报告书_25个Python学习项目,值得推荐
- Suse 12 安装VMware tool
- java apt怎么用_java – APT和AOP在同一个项目中,使用Maven
- python全栈面试题_python面试题大全(一)
- revit API 实现可停靠窗口
- 菜鸟学SQLServer--恢复模式
- Bailian2685 打印水仙花数【入门】
- 业余草 2018 技术文章合集整理,适合入门、中级、高级、架构师进阶
- 带宽与响应速度的关系
- 推荐3个开源的快速开发平台,前后端都有,项目经验又有着落了!
- JAVA:实现Blowfish区块加密算法(附完整源码)
- 自然语言14_Stemming words with NLTK
- java制作坦克大战
- 桥梁主动防撞预警系统平台介绍
- Golang map
热门文章
- 段错误原理:Segmentation fault: 11
- git报错:no matching key exchange method found
- Mac使用NDK编译FFmpeg4.0.2单独so库(验证可用)
- Audio bringup I2C调试(三十一)
- Android系统信息获取 之五:系统语言信息(续)-语言地区和简写对照表
- xcode与androidstudio 设置自定义主题
- TypeError: 'module' object is not callable (pytorch在进行MNIST数据集预览时出现的错误)
- Android移动应用基础教程【Android事件处理】
- 怎么在gitLab代码拉到本地
- windows安装python