论文笔记- SQUEEZENET

论文题目:SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
论文作者:ForrestN.Iandola1,SongHan2,MatthewW.Moskewicz1,KhalidAshraf1, WilliamJ.Dally2,KurtKeutzer1
摘要:
更小的CNN的好处:(1)分布式训练时服务器之间的交互更少。(2)需要更小的带宽。(3)在FPGA和其他内存有限的硬件上更灵活。
贡献:参数规模在ImageNet上比AlexNet少50倍。将SqueezeNet压缩到小于0.5MB。

结构设计策略:

  1. 使用1x1卷积核代替3x3的。 参数少9倍。
  2. 减少到3x3卷积核的输入通道数。 考虑一个完全由 3x3卷积核组成的卷积层。参数的总量是(输入通道数)x卷积核数)x(3x3)。所以不仅减少卷积核的数目,同时减少输入通道数都很重要。这一工作在squeeze layers实现。
  3. 将降采样操作延后,可以使卷积层有更大的激活映射。 在卷积网络里,每一个卷积层产生至少空间解析率1x1(通常远大于1x1的激活映射。这些激活映射的高度和宽度由以下决定:(1)输入数据的大小(2)CNN结构中降采样的层的选择。如果前面的层的stride比较大,那后面的多数层的激活映射会比较小。如果网络前边的层都有1的stride,超过1的stride集中在网络后面,则许多层的激活映射会比较大。其他不变的情况下,大的激活映射会让结果更加准确。
    1和2是关于在尽可能保持模型准确度地情况下减少 CNN 的参数数量,。策略3是关于在有限的参数数量下最大化精度。接下来, 我们描述的Fire模块, 将使我们能够成功地使用战略 1, 2 和3。

Fire 模块

Fire模块是由以下组成:1x1卷积核的squeeze卷积层, 输入到1x1和3x3卷积核混合的扩展层(expand layer)。
1x1的卷积核的使用是策略1的应用。Fire模块中有3个超参数:s1x1,e1x1,e3x3。其中s1x1是squeeze layer中卷积核的数目,e1x1是expand layer中1x1卷积核的数目,e3x3是expand layer中3x3卷积核的数目。当s1x1<(e1x1+e3x3)时,squeeze layer限制了输入到3x3卷积核的输入通道的数目,这是策略2的应用。
如下:在这例子中,s1x1=3, e1x1=4,e3x3=4,没有表现激活映射
论文笔记- SQUEEZENET_第1张图片

SqueezeNet 结构

图2为1个第一层为1个单独卷积层,接着8个Fire模块(fire2-9),再以一层卷积层结束。作者逐渐的增加每个Fire模块中卷积核的数目。在conv1, fire4, fire8, conv10后面进行步长为2的极大池化。这些相对较晚的池化操作是在执行3.1节的策略3.完整的SqueezeNet如下:左图是SqueezeNet,中图是简单的bypass的SN,右图是复杂bypass
论文笔记- SQUEEZENET_第2张图片额外细节:

  • 为了让1x1和3x3卷积核的输出的激活映射拥有同样的宽高,作者给expand layer的3x3的卷积核加了1像素的边缘(zero-padding)
  • 对squeeze 和 expand 层的激活映射使用了ReLU
  • fire9层后dropout率为0.5
  • 受NiN结构的启发,SqueezeNet没有使用全连接层。
  • learning rate为0.04,并在训练过程中线性的减少学习率。
  • 由于Caffee中不支持使用两个不同尺寸的filter,在expand layer中实际上是使用了两个单独的卷积层(1∗1 filter 和 3∗3filter),最后将这两层的输出连接在一起,这在数值上等价于使用单层但是包含两个不同尺寸的filter。
    *在github上还有SqueezeNet在其他框架下的实现:MXNet、Chainer、Keras、Torch。*大部分的库都是用同一套计算后端,比如cuDNN和MKL-DNN。

你可能感兴趣的:(DeepLearning,论文)