SqueezeNet

简介

SqueezeNet 是UC Berkeley和Stanford研究人员一起完成的网络结构和设计思想。SqueezeNet设计目标不是为了得到最佳的CNN识别精度,而是希望简化网络复杂度,同时达到public网络的识别精度。所以SqueezeNet主要是为了降低CNN模型参数数量而设计的。
对于相同的正确率水平,更小的CNN架构可以提供如下的优势:

  • 在分布式训练中,与服务器通信需求更小
  • 参数更少,从云端下载模型的数据量小
  • 更适合在FPGA和嵌入式硬件等内存受限的设备上部署。
    SqeezeNet在ImageNet上实现了和AlexNet相同的正确率,但是只使用了1/50的参数。更进一步,使用模型压缩技术,可以将SqueezeNet压缩到0.5MB,这是AlexNet的1/510。

设计原则

  • Strategy 1:替换3x3的卷积kernel为1x1的卷积kernel

卷积模板的选择,从12年的AlexNet模型一路发展到2015年底 Deep Residual Learning 模型,基本上卷积大小都选择在3x3了,因为其有效性,以及设计简洁性。本文替换3x3的卷积kernel为1x1的卷积kernel可以让参数缩小9X。但是为了不影响识别精度,并不是全部替换,而是一部分用3x3,一部分用1x1。

  • Strategy 2:减少 3x3 filters 卷积的输入通道数

如果卷积层完全采用 3x3 卷积,则该卷积层的总参数量为:(输入通道数) X (filters 数) X (3x3).
因此,减少 CNN 的参数量,不仅可以采用减少 3x3 filters 卷积的数量(Strategy 1)的方法,还可以减少 3x3 卷积的输入通道数.
这里采用 squeeze layers 实现减少 3x3 卷积的输入通道数的目的.

  • Strategy 3:延迟网络的降采样操作,以使得卷积层具有更大的激活图

卷积网络中,每个卷积层输出激活图(activation map),激活图空间分辨率至少为 1x1,往往大于 1x1。
激活图的 height 和 width 主要被两个因素影响:
- 输入数据的尺寸,如 256x256 图片
- CNN 网络中的降采样层的作用

Strategy 1 和 Strategy 2 是在保持精度的前提下,减少 CNN 网络的参数量。
Strategy 3 是在有限的参数量的前提下,保持最大的精度。

Fire 模块

SqueezeNet 的核心在于Fire module,Fire module 由两层构成,分别是squeeze层+expand层,如下图所示

  • squeeze convolution layer:只使用1x1 卷积 filter
  • expand layer:使用1x1 和3x3 卷积 filter的组合
  • Fire module中使用3个可调的超参数:
    • \(\mathcal{s}_{1 x 1}\) :squeeze convolution layer中1x1 filter的个数
    • \(e_{1 x 1}\) :expand layer中1x1filter的个数
    • \(e_{3 x 3}\) :expand layer中3x3 filter的个数

使用Fire module的过程中,令 \(s_{1 x 1}<e_{1 x 1}+e_{3 x 3}\) ,这样squeeze layer可以限制输入通道数量,即以上提到的 Strategy 2。

SqueezeNet 网络结构

如上图,左边为原始的SqueezeNet,中间为包含simple bypass的改进版本,最右侧为使用complex bypass的改进版本。
SqueezeNet 以卷积层(conv1)开始,接着使用8个 Fire modules (fire2-9),最后以卷积层(conv10)结束。
每个 fire module 中的 filter 数量逐渐增加,并且在conv1, fire4, fire8, 和 conv10这几层之后使用步长为2的max-pooling,即将池化层放在相对靠后的位置,这使用了以上的 Strategy 3 。

详细参数

参数数量计算,以 **fire2模块 **为例:

  • 输入:maxpool1层的输出为 55x55x96
  • Squeeze层:(1x1x96+1)x16
  • expand层:(1x1x16+1)x64+(3x3x16+1)x64

所以总的参数数量为:(1x1x96+1)x16+(1x1x16+1)x64+(3x3x16+1)x64=(1552+1088+9280)=11920
对3x3的卷积输入进行尺寸为1的zero padding。expand层得到两个55x55x64的feature map,最终输出为55x55x128大小的feature map。

squeezenet 与 Alexnet 的对比:

主要在imagenet数据上比较了Alexnet,可以看到准确率差不多的情况下,squeezeNet模型参数数量显著降低。
SqeezeNet的压缩倍率可以达到50以上,并且正确率还能有略微的提升。注意到即使使用未进行压缩的32位数值精度来表示模型,SqeezeNet也比压缩率最高的模型更小,同时表现也更好。
如果将深度压缩(Deep Compression)的方法用在SqeezeNet上,使用33%的稀疏表示和8位精度,会得到一个仅有0.66MB的模型。
进一步,如果使用6位精度,会得到仅有0.47MB的模型,同时正确率不变。
此外,结果表明深度压缩不仅对包含庞大参数数量的CNN网络作用,对于较小的网络,比如SqueezeNet,也是有用的。将SqueezeNet的网络架构创新和深度压缩结合起来可以将原模型压缩到1/510。

其它细节

以下是网络设计中的一些要点:

  • 为了使 1x1 和 3x3 filter输出的结果又相同的尺寸,在expand modules中,给3x3 filter的原始输入添加一个像素的边界(zero-padding)。
  • squeeze 和 expand layers中都是用ReLU作为激活函数
  • 在fire9 module之后,使用Dropout,比例取50%
  • 注意到SqueezeNet中没有全连接层,这借鉴了Network in network的思想
posted @ 2019-05-01 10:16  youngliu91  阅读(416)  评论(0)    收藏  举报