目录
SqueezeNet(2016.11)
SqueezeNet(2016.11)
作者认为模型的参数量是影响模型大小以及训练速度的主要因素,因此本篇文章的设计思想就在于如何减少模型的参数量。本篇文章共有6节,其中第1、2节为介绍及相关工作部分;第3节描述了SqueezeNet的网络架构。
作者使用3个策略来减少模型参数并保证模型精度:
- 将部分3x3的卷积核替换为1x1的卷积核:因为3x3的卷积核的参数量是1x1的卷积核的9倍;
- 减少输入到3x3的卷积核的通道数:参数量计算公式为
,减少输入通道数能够有效减少参数量,该部分的实现由Squeeze层来实现;
- 延迟降采样的使用:在网络的早期保持特征图的大小有助于提高模型精度。
Fire Module
该模块由squeeze layer(只有1x1的卷积核)和expand layer(1x1的卷积核和3x3的卷积核)组成,其中1x1的卷积核的使用是为了减少模型的参数,对应于第1个策略;该模块设置了3个超参数,
,
来控制该模块的通道数,第1个参数代表在squeeze layer中所有1x1的卷积核的个数,第2个参数代表在expand layer中1x1的卷积核的个数,第3个参数代表在expand layer中3x3的卷积核的个数,注意
,这对应了第2个策略,限制了输入3x3的卷积核的通道数。
SqueezeNet Architecture
SqueezeNet网络如图的最左侧,首先从1个标准卷积层开始,后续为连续的8个Fire Module,最后以1个标准卷积层结束,并逐渐增加通道数;在conv1、Fire4、Fire8和conv10处使用步长为2的Maxpooling进行降采样,这对应了第3个策略,将降采样应用于网络后半部分,提升网络性能。
SqueezeNet architectural dimensions
网络框架设置的细节
- 为保证expand layer中1x1和3x3的卷积输出的特征长和宽一样,对输入到3x3的卷积的特征图做1个像素的padding操作;
- 在queeze 和 expand layers中使用ReLU激活;
- 对Fire9之后的模块采用50%的dropout;
- SqueezeNet中不使用全连接层;
- 采用0.04的学习率对网络进行初始训练,并逐渐对学习率进行线性衰减;
- 由于Caffe还没有实现同时进行多个卷积的设计,所以在实现expand layer时使用1x1和3x3的卷积层,载对其输出进行通道维度上的拼接。
Evaluation of SqueezeNet
该实验将提出的SqueezeNet与AlexNet,以及经过不同压缩方法的AlexNet进行相比,实验证明使用SVD的方法对AlexNet进行压缩,能够减少5倍的参数,使用Network Pruning方法,能够减少9倍的参数,且保持精度不变;使用Deep Compression的方法能够减少35倍的参数,并保证模型精度;与AlexNet相比,提出的SqueezeNet的参数减少了50倍,并且有一定的精度提升;与压缩后效果最好的AlexNet相比,依然减少了1.4倍的参数。
需要注意的是,对于已经设计好的小参数量模型是否还能够继续进行压缩,作者在本篇文章中做了相关实验。作者采用Deep Compression对SqueezeNet进行压缩,首先使用33%的稀疏和8-bit的量化,使参数量减少了AlexNet的363倍,但是模型性能与AlexNet相等;其次,使用33%的稀疏和6-bit的量化,使参数量减少了AlexNet的510倍,但是模型性能与AlexNet相等。实验证明,小模型依旧可以压缩。压缩后的SqueezeNet与SqueezeNet相比,精度一样,参数量减少10倍。
CNN microarchitecture design space exploration
- squeeze layerd的挤压率对模型影响的分析。
- 1x1和3x3的卷积的多少对模型影响的分析。作者认为卷积核的大小对模型的性能有很大的影响,如在VGG中统一使用3x3的卷积。
CNN macroarchitecture design space exploration
该部分的实验是为了探索在宏观的框架层面上,对Fire模块进行不同的残差连接对模型的影响。
- 首先设计了具有简单连接的SqueezeNet网络。在第3、5、7、9个Fire模块上添加残差连接。存在的局限性:输入和输出的通道必须相同。
- 其次设计了具有复杂连接的SqueezeNet网络。在第2,、4、6、8个Fire模块上添加残差连接,为保证输入通道和输出通道数一致,在残差连接上添加了1x1的卷积操作来改变卷积通道。残差连接可以减少因为通道缩减带来的影响。