A.为什么需要轻量化网络?
- 小模型有更高效的分布式训练效率。通信开销一直是分布式CNN训练的制约因素,在数据并行训练中,通信开销与模型参数是成比例的,模型越小,通信开销就越小。
- 推送一个新模型到客户端,开销更小。例如自动驾驶领域,汽车辅助驾驶系统中的CNN模型在更新的时候需要更大的数据传输,以AlexNet为例,从服务器到客户端至少需要240MB 通信开销,更小的模型需要更少的开销,日常更新更容易。
- 更容易在FPGA或嵌入式设备上部署。由于嵌入式设备经常是片内存储,不能外挂存储器件,同时存储空间越大,价格越高,更小的模型可以使模型部署变得简单。
SqueezeNet 取得了AlexNet级别的精度,但是参数量却少50倍。
B.CONCLUSIONS(paper凑字数)
在这篇论文中,提出了一种更严格的方法来探索卷积神经网络的设计空间,还将SqueezeNet压缩到小于0.5MB,比没有压缩的AlexNet小510倍。自2016年以技术报告的形式发布这篇论文以来,研究人员模型压缩进行了进一步的实验,使用了一种称为密集稀疏密集(DSD)的新方法。
本文以ImageNet作为目标数据集,当前使用ImageNet预训练的CNN模型用于各个应用已经是一种流行做法,例如图像中的logo识别、自动驾驶、道路形状分割等众多领域,对于各种应用,小模型将会越来越重要。
1.相关工作
首要目标是识别一个参数很少的模型,同时保持准确性。为了解决这个问题,一个明智的方法是采用现有的CNN模型,并以有损的方式对其进行压缩。事实上,围绕模型压缩这一主题,已经出现了一个研究社区,并且已经报告了几种方法。
- Denton等人的一个相当简单的方法是将奇异值分解(SVD)应用于预训练CNN模型(
- Han等人开发了网络剪枝,从预训练模型开始,然后用零替换低于某个阈值的参数,形成稀疏矩阵,最后在稀疏CNN上进行几次迭代训练。
- Han等人将网络剪枝与量化(8位或更少)和huffman编码相结合,扩展了他们的工作,创建了一种称为深度压缩的方法,并进一步设计了一种称为EIE的硬件加速器,该加速器直接在压缩模型上运行,实现了显著的加速和节能。
2.CNN MicroArchitecture(微观)
神经网络中,卷积通常是3维的,高度、宽度以及通道。随着技术发展,5X5卷积、3X3卷积、1X1卷积陆续被提出使用,同时设计更深层的CNN也变得更流行,手动选择每一层的滤波器越发复杂。这种情况下,各种高阶building block或者modules被提出,这些模块包含多个特定顺序的卷积层,例如在GooleNet中提出的Inception modules,包含一些不同维度的滤波器,1X1和3X3,(如下图),再添加一些分类层就构成一个完整的神经网络,论文中使用术语CNN microarchitecture指代各个模块的具体组织和维度。
3.CNN MacroArchitecture(宏观)
作者将CNN宏体系结构定义为将多个模块的系统级结构组成端到端的CNN体系结构。研究较多的是增加网络深度,如VGG,ResNet、Highway Networks。
4.NEURAL NETWORK DESIGN SPACE EXPLORATION
神经网络(包括深度神经网络和卷积神经网络)有很大的设计空间,拥有大量选择性如微体系结构、宏体系结构、solver和其他超参数。人们希望知道这些因素如何影响NN精度(例如:设计空间的形状)的直觉。大量在神经网络设计空间探索(DSE)方面的工作都集中在开发自动方法,以找到精度更高的NN体系结构。这些自动DSE方法包括贝叶斯优化(Snoek等人,2012年)、模拟退火(Ludermir等人,2006年)、随机搜索(Bergstra&Bengio,2012年)和遗传算法(Stanley&Miikkulainen,2002年)。值得赞扬的是,每一篇论文都提供了一个案例,在这个案例中,提出的DSE方法产生了一个NN体系结构,与代表性baseline相比,该体系结构实现了更高的精度。然而,这些论文并没尝试提供关于神经网络(NN)设计空间形状的直觉。在本文后面,避开了自动化方法–相反,作者重构CNN的方式是,进行原则性的A/B比较,以调查CNN结构如何影响模型尺寸大小和准确性。
5.SQUEEZENET: PRESERVING ACCURACY WITH FEW PARAMETERS
构建了一个新的building block: Fire module ,用来构建CNN结构,使用该模块搭建了SqueezeNet。
5.1 结构设计策略
减少参数量的同时,保证模型精度,为此作者采用了3个策略:
- 使用1X1卷积替代3X3卷积,因为前者比后者参数量少9倍。
- 减少输入channel的数量到3X3 filters。考虑一个完全由3x3滤波器组成的卷积层。该层中的参数总数为(输入通道数)(滤波器数)(3*3)。因此,为了在CNN中保持较少的参数总数,不仅要减少3x3滤波器的数量(参见1),而且要减少3x3卷积的输入通道数量。使用squeeze layer将输入通道的数量减少到3x3个滤波器。
- 在神经网络中延迟下采样(到末端再进行下采样),这样卷积层拥有较大的activation maps。在一个卷积网络中,每一个卷积层输出一个空间分辨率至少是1X1的activation map(通常远大于1X1)。这些激活映射的高度和宽度被以下因素控制:
- 输入数据的尺寸(如256X256 images)
- CNN结构中下采样卷积层的选择
大多数情况下,下采样被集成到CNN结构中的卷积层或池化层(stride>1),早期的网络中stride比较大,因此大部分卷积层拥有较小的激活映射。相反,如果网络中的大多数层的stride为1,且大于1的stride集中在网络的末端,则网络中的大部分layer将具有较大的激活映射。我们的直觉是,在所有其他条件不变的情况下,大的activation maps(由于延迟下采样)可以得到更高的分类精度。事实上,K.He和H.Sun对四种不同的CNN结构应用了延迟下采样,并且在每种情况下延迟下采样都会得到更高的分类精度(He&Sun,2015)。
策略1和2 是在保持模型精度的条件下减少参数数量,策略3是在有限的参数量情况下最大化模型精度。
5.2 Fire module
一个Fire模块由以下部分组成:一个squeeze卷积层(只由1X1卷积构成),然后输入到由1X1卷积与3X3卷积混合构成的扩展layer。如图1所示。使用1X1卷积正是策略1的应用,作者在Fire moudle中暴露了3个可调维度(超参数):
s
1
x
1
s_{1x1}
s1x1?、
e
1
x
1
e_{1x1}
e1x1?、
e
3
x
3
e_{3x3}
e3x3?,在Fire module中
s
1
x
1
s_{1x1}
s1x1?是squeeze layer(全部1X1)的滤波器数目,
e
1
x
1
e_{1x1}
e1x1?是在扩展layer中1X1滤波器的数目,
e
3
x
3
e_{3x3}
e3x3?是在扩展layer中3X3卷积的数目。 当使用Fire module时,作者设置
s
1
x
1
s_{1x1}
s1x1?小于
(
e
1
x
1
+
e
3
x
3
)
(e_{1x1}+e_{3x3})
(e1x1?+e3x3?),这样squeeze layer有助于限制输入channel的数目到3X3 filters,正对应策略2。
5.3 THE SQUEEZENET ARCHITECTURE
squeeze网络结构有以下特点:
- 网络开始是一个单独的卷积层(conv1),然后接着8个Fire module(fire2-9),最后以一个卷积层(conv10)结束;
- 在网络结构从开始到结束的每个Fire module中逐渐增加filters的数量;
- SqueezeNet 在conv1、fire4、fire8、conv10之后都使用一个stride为2 的最大池化层处理;
这些延后使用的pooling对应策略3.
网络设计的一些细节:
- 1X1和3X3卷积之后的激活输出映射拥有同样的高度和宽度,作者在输入数据上使用0 padding 增加一个1个像素的边界,然后到扩展module的3X3 filters。
- ReLU 应用于来自squeeze和扩展layer的activation。
- Dropout ratio 在fire9之后的module为0.5
- 注意到SqueezeNet中没有使用全连接层,这是来自NIN 结构的灵感。
- 训练开始学习率为0.04,然后线性减少,具体超参数细节见代码。
- 作者是使用caffee实现的网络,当然其它框架也可以。
5.4 模型评估
以AlexNet模型为比较基准。 下图为模型细节和参数,仿照inception表格。
比较SqueezeNet 与各种模型压缩方法
从表格中可以发现不经过任何处理的SqueezeNet,也就是32bit 网络实现了50倍 的压缩,Top5与原始的AlexNet相当,Top1甚至超越了0.3%,对SqueezeNet使用深度压缩,可以再次减小模型尺寸同时保持精度不变。【这里对应了标题】这也说明深度压缩技术不仅仅适用于具有很多参数的CNN结构,并且能够压缩已经足够紧凑、缩减过的SqueezeNet模型。
6. CNN MICROARCHITECTURE DESIGN SPACE EXPLORATION
CNN微体系结构设计空间探索,虽然经过开头提出的3中小模型设计策略,提出了SqueezeNet模型,但SqueezeNet模型和其它模型还处于结构设计空间探索阶段,本文将这种结构探索其分为微观探索(per-module layer dimensions and configuration)和宏观探索(high-level end to end organization and other layers)
作者为此设计了一个实验,观察CNN结构的选择对于模型尺寸和精度的影响
- 微观探索
(图a):Squeeze Ratio(SR)是Squeeze layer中的filters数量与扩展层中的filters数量之间的比率。
(图b):虽然本文开始就说明要使用1X1卷积来代替3X3卷积,在GooleNet和NIN等网络中1X1卷积也被广泛使用,但并没有进一步分析,作者试图通过实验阐明1x1和3x3滤波器的比例如何影响模型大小和精度。
- 宏观探索
结合5.3网络结构图,在原始SqueezeNet增加bypass。
|