论文地址: SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
非官方代码: pytorch
介绍
这篇文章是DeepScal,加州大学伯克利分校,以及斯坦福大学在ICLR 2017发表的一篇文章。文章的主要目的是为了压缩模型,提高运行速度。这篇文章主要提出了SqueezeNet: 使用少量参数保持精度。
结构设计策略
这篇文章的首要目标是在保持准确率 的同时,有几个参数的CNN架构。这篇文章在设计CNN架构的时候采取了三个主要策略。这篇文章的主要模块 是Fire模块。
- 用1x1的卷积核代替3x3的卷积核,从而减少参数量。1x1 卷积的参数比3x3的卷积核少了 9X.
- 减少3x3 卷积输入通道的数量。假设有一个卷积层, 它完全由3x3 卷积组成。此层中参数的总数量为:(输入通道数) (过滤器数) (3 * 3)。要在squeeze层中将输入的通道数减少。
- 在网络中减少下采样(maxpooling)实现, 以便卷积层具有较大的特征图。
Fire Module
Fire Module是将原来一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,expand层之后将1x1和3x3的卷积output feature maps在channel维度cat。
自己手推的一张图,字比较丑,也没时间重现写一下。
fire moudle的pytorch代码
很奇怪的是论文中用的是3个1x1,以及expand用的是4个1x1的卷积核和4个 3x3的卷积核,但是pytroch版本的代码并没有体现出来。
|
|
SqueezeNet的具体网络结构
实验结果
imagenet数据上比较了alexnet,可以看到准确率差不多的情况下,squeezeNet模型参数数量显著降低了(下表倒数第三行),参数减少50X;如果再加上deep compression技术,压缩比可以达到461X!还是不错的结果。
参考文章:https://blog.csdn.net/xbinworld/article/details/50897870