Abstract
最近关于深度卷积神经网络的研究主要集中于提升正确率。对于相同的正确率水平,往往能够确定出多种CNN模型。在同等正确率条件下,更小规模的CNN架构可以提供如下的三个优势:
1)在分布式训练中,与服务器通信需求更小;
2)在云端向自动驾驶汽车输出一个新模型时,更小模型需要的带宽更小(参数更少,从云端下载模型的数据量小);
3)在FPGA和有内存限制的其他硬件设备上更加方便部署更小的模型(更适合在FPGA等内存受限的设备上部署)。
为了达到上述优点(基于以上优点),本文提出SqueezeNet。SqueezeNet在ImageNet数据集上达到与AlexNet相同水平的准确率的情况下,仅仅用了小于其50倍的参数。此外,结合模型压缩技术,我们能够压缩SqueezeNet模型到0.5MB(比AlexNet模型小510倍)。(它在ImageNet上实现了与AlexNet相同的正确率,但是只使用了1/50的参数。更进一步,使用模型压缩技术,可以将SqueezeNet压缩到0.5MB,这是AlexNet参数的1/510)。
1 Introduction and Motivation
对于一个给定的正确率,通常可以找到多种模型可以达到相应的正确率水平。使用更小参数的CNN模型能够提供以下几个优势:
1) 更高效的分布式训练
服务器之间的通信是分布式CNN训练的重要限制因素,对于分布式数据并行训练,通信需求和模型参数数量成正相关。所以小模型对通信需求更低而训练更快。
2)减小下载模型到客户端的额外开销
比如自动驾驶特斯拉公司,经常需要更新客户端模型。更小的模型可以减少通信的额外开销,使得更新更加通畅。
3)便于FPGA和嵌入式硬件上的部署。
FPGA通常只有不到10MB的片内储存空间,没有片外存储器。
2 Related work
2.1 Model Compression
常用的模型压缩技术有:
(1)奇异值分解;
(2)网络剪枝:使用网络剪枝和稀疏矩阵
(3)深度压缩:使用网络剪枝、量化(quantization)和霍夫曼编码
(4)硬件加速(EIE)
2.2 CNN Microarchitecture
在设计深度网络架构的过程中,如果手动选择每一层的卷积核维度显得过于繁复。通常先构建由几个卷积层组成的小模块,再将模块堆叠形成完整的网络。定义这种模块的网络为CNN Microarchitecture。
2.3 CNN Macroarchitecture
与模块相对,定义整个网络架构为CNN Macroarchitecture。在整个完整的网络架构中,深度是一个重要的参数。
2.4 Neural Network Design Space Exploration
由于超参数繁多,深度神经网络具有很大的设计空间(Design Space)。通常进行设计空间探索的方法有:
(1)贝叶斯优化(bayesian optimization)
(2)模拟退火(simulated annealing)
(3)随机搜索(randomized search)
(4)遗传算法(genetic algorithms)
3 SqueezeNet:在更少的参数情况下保持模型的精度
这篇文章主要目的是寻找保持高精度同时参数更少的网络结构,因此使用以下三个主要策略来减少SqueezeNet设计参数:
(1)使用1x1的卷积代替3x3的卷积:参数量减少为原来的1/9
(2)减少3x3卷积的输入通道数
(3)将下采样操作延后,以获得更大的激活图:更大的激活特征图能够保留更多的信息,可以提供更高的分类准确率。
(1)和(2)可以显著减少模型的参数量,(3)可以在参数量一定时提高正确率。
3.2 The Fire Module
Fire Module时构建SqueezeNet的基本模块,以下定义Fire Module
1)squeeze convolution layer:只使用1x1卷积,即使用了策略(1);
2)expand layer:使用1x1和3x3的卷积核组合;
3)Fire Module中使用了三个可以调节的超参数:(squeeze convolution layer中1x1卷积核的个数)、(expand layer中1x1卷积核的个数)、(expand layer中3x3卷积核的个数)。
4)使用Fire Module的过程中,令<+,这样suueeze layer可以限制3x3卷积核输入的通道数量,即使用了策略(2)。
3.3 The squeeze architecture
SqueezeNet 以卷积层(conv1)开始,接着使用了8个Fire Modules,最后以卷积层(conv10)结束。每个Fire module中的卷积数量逐渐增加,并且在conv1,fire4,fire8和conv10这几层后使用步长为2的max-pooling,即将池化层放在相对靠后的位置,这是使用了以上的策略(3)。
如上图,左边是原始的SqueezeNet,中间是包含simple bypass的改进版本,右边是使用了complex bypass的改进版本。
3.3.1 Other SqueezeNet Details
以下是网络设计的要点和理念:
1)为了使和卷积核输出的特征图有相同的尺寸,在expand module中,给中的原始输入添加一个像素的边界(zero padding)。
2)squeeze 和 expand layers两者都使用RELU作为激活函数。
3)在fire 9 module之后,使用Dropout,随即丢弃的概率设置为50%。
4)在训练过程中,初始学习率设置为0.04,在训练过程中线性降低学习率。更多的训练协议的细节请参考GitHub的配置文件。
5)由于Caffe框架中不支持使用两个不同尺寸的卷积核,在expand layer中实际是使用了两个单独的卷积层(和),最后将这两层的输出连接起来,这在数值上等价于使用单层但是包含不同尺寸的卷积核。
在Github上还有SqueezeNet在其他框架下的实现:Mxnet、Chainer、Keras、Torch。
4 Evaluation of SqueezeNet
在表2中,以AlexNet为标准来比较不同压缩方法的效果。
SVD方法能够将预训练的AlexNet模型压缩为原先的1/5,top1正确率略微降低。网络剪枝方法能够将模型压缩为原来的1/9,top1和top5的正确率几乎保持不变。深度压缩能将模型压缩为原来的1/35,正确率基本不变。SqueezeNet的压缩倍率可以达到50,并且正确率还能有略微提升。注意到即使使用未进行压缩的32位数值精度来表示模型,SqueezeNet也比压缩率最高的模型更小,同时模型的表现也更好。
如果使用深度压缩(Deep Compression)的方法用在SqueezeNet上,使用33%的稀疏表示和8位数值精度,会得到一个仅有0.66MB的模型。更进一步,如果使用6位数值精度,会得到仅有0.47MB的模型,同时精度保持不变。因此,结果表明深度压缩不仅对包含庞大参数数量的CNN网络有作用,对于较小的网络,比如SqueezeNet,也是有用的。将SqueezeNet的网络架构创新和深度压缩方法结合起来可以将模型压缩为原来的1/510,并且保持精度不变。
5 CNN Microarchitecture design space exploration
在SqueezeNet中,每一个Fire Module有3个维度的超参数,即(squeeze convolution layer中1x1卷积核的个数)、(expand layer中1x1卷积核的个数)、(expand layer中3x3卷积核的个数)。SqueezeNet一共有8个Fire Module即一共24个超参数。下面讨论其中一些重要超参数的影响。为方便研究,定义一些元参数:
- :Fire Module中Expand layer中卷积核的数目;
- : fire module的个数;
- :在没个fire module之后增加的expand layer卷积核的个数;
- :第个module中,expand layer的卷积核个数。
- :压缩比,即the squeeze ratio,为squeeze layer中卷积核个数除以Fire module中expand layer的卷积核个数得到的比例;
- :在expand layer中卷积核个数所占比例。
下图为实验结果:
6 CNN Macroarchitecture design space exploration
受ResNet启发,以下探究旁路连接(bypass connection)的影响。在图2展示了三种不同的网络架构。下表给出了实验结果。
simple bypass方式的旁路连接正确率提升最多。
7 Conclusion
在SqueezeNet提出不久,Dense-Sparse-Dense(DSD)使用了新的方法对网络模型进行压缩同时提升了精度。