欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
技术交流QQ群:433250724,欢迎对算法、技术感兴趣的同窗加入。算法
继续前面关于深度学习CNN经典模型的整理,以前介绍了CNN网络Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning(点击查看)的网络结构。markdown
本文讲一下最新由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。.net
(3)减小pooling
这个观点在不少其余工做中都已经有体现了,好比GoogleNet以及Deep Residual Learning。设计
Fire Module是本文的核心构件,思想很是简单,就是将原来简单的一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,数量分别记为E11和E33,要求S11 < input map number即知足上面的设计原则(2)。expand层以后将1x1和3x3的卷积output feature maps在channel维度拼接起来。blog
直接上图说(左边的狗狗很忧伤啊):
图片
看图就很明朗了,总共有9层fire module,中间穿插一些max pooling,最后是global avg pooling代替了fc层(参数大大减小)。在开始和最后还有两层最简单的单层conv层,保证输入输出大小可掌握。get
下图是更详细的说明:很是清楚,就再也不啰嗦了。
主要在imagenet数据上比较了alexnet,能够看到准确率差很少的状况下,squeezeNet模型参数数量显著下降了(下表倒数第三行),参数减小50X;若是再加上deep compression技术,压缩比能够达到461X!仍是不错的结果。不过有一点,用deep compression[2]是有解压的代价的,因此计算上会增长一些开销。
SqueezeNet以前我就在研究若是下降网络规模,SqueezeNet印证了小得多的网络也能够到达很好的CNN识别精度。相信之后会出现更多小网络,作到state-of-the-art的精度。好,本篇就介绍到这里,但愿对你们有启发,有的话请支持一下我博客哈!~谢谢!
[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