论文笔记-SqueezeNet: Alexnet-level accuracy whith 50x Fewer Parameters And < 0.5MB Model Size
来源:互联网 发布:欧阳娜娜的琴 知乎 编辑:程序博客网 时间:2024/05/22 08:01
关于Dense→Sparse→Dense (DSD) 训练法
不得不说一下原作的这个小发现,使用裁剪之后的模型为初始值,再次进行训练调优所有参数,正确率能够提升4.3%。 稀疏相当于一种正则化,有机会把解从局部极小中解放出来。这种方法称为DSD (Dense→Sparse→Dense)。
这个和我们人类学习知识的过程是多么相似!人类每隔一段时间重新温习一下学过的知识,会增加对所学知识的印象。我们可以把“隔一段时间”理解为“裁剪”,即忘却那些不怎么重要的参数,“再学习”理解为从新训练,即强化之前的参数,使其识别精度更高!
摘要:
1.简介和动机:
更小的CNN架构至少有三个优点:
1.分布式训练更高效。服务器之间的通信是分布式CNN训练可扩展性的限制因素。对于分布式数据并行训练,通信开销与模型中的参数数量成正比(Iandola等,2016)。总之,小模型训练更快,因为需要较少的通信。
2. 新模型导出到客户端开销小。对于自动驾驶,特斯拉等公司定期将新型号从其服务器复制到客户的汽车。 这种做法通常被称为空中更新。 消费者报告发现,特斯拉自动驾驶仪半自动驾驶功能的安全性随着最近的空中更新(消费者报告,2016)而逐渐改善。然而,当今典型的CNN/DNN模型的空中更新可能需要大量的数据传输。 使用AlexNet,这将需要240MB的从服务器到汽车的通信。较小的模型需要较少的通信,使频繁更新更可行。
3. 灵活的FPGA和嵌入式部署。 FPGA通常具有小于10MB的片上存储器并且没有片外存储器。对于推理,足够小的模型可以直接存储在FPGA上,而不是让存储带宽变成它的瓶颈(Qiu等人,2016),从而使得FPGA可以实时地处理视频流。此外,当在专用集成电路(ASIC)上部署CNN时,足够小的模型可以直接存储在芯片上,并且较小的模型可以使ASIC适合更小的管芯。
考虑到较小CNN架构的这几个优点,我们直接关注和大众所知模型有一样精度,但具有较少参数的CNN架构的问题。我们发现了一个这样的架构,我们称之为SqueezeNet。此外,我们提出了一个更严谨的方法来搜索设计空间中的新CNN架构。
2.相关工作:
2.1模型压缩
2.2CNN微观结构
2.3 CNN宏结构
虽然CNN微体系结构涉及单个层和模块,但是我们将CNN宏体系结构定义为多个模块到端到端CNN体系结构的系统级组织。
也许在最近的文献中最广泛研究的CNN宏观架构主题是网络中深度(即层数)的影响。Simoyan和Zisserman提出了具有12到19层的的VGG(Simonyan&Zisserman,2014)族,并且说明了更深的网络在ImageNet-1k数据集上产生更高的精度(Deng等人,2009)。K.He等人提出了最多30层的更深的CNNs,提供更高的ImageNet精度(He等人,2015a)。
选择跨越多个层或模块的连接是CNN宏观结构研究的新兴领域。残差网络(ResNet)(He等人。,2015b)和Highway Networks(Srivastava等人,2015)分别提出了跨越多层的连接的使用,例如将来自层3的激活与来自层6的激活相加连接,我们将这些连接称为旁路连接。ResNet的作者提供了一个具有和不具有旁路连接的34层CNN的A/B比较; 添加旁路连接可在ImageNet Top-5的精度上提高2个百分点。
2.4 神经网络设计空间探索
神经网络(包括深度卷积神经网络)具有大的设计空间,具有用于微架构,宏架构,解算器和其它超参数的众多选项。社区似乎希望获得关于这些因素如何影响神经网络的准确性(例如设计空间的形状)。神经网络的设计空间探索(DSE)的许多工作集中在开发自动化方法以发现提供更高精度的神经网络架构。这些自动化DSE方法包括贝叶斯优化(Snoek等人,2012),模拟退火(Ludermir等人,2006),随机搜索(Bergstra&Bengio,2012)和遗传算法(Stanley和Miikkulainen,2002)。他们认为,这些论文中的每一篇提供了一种情况,其中所提出的DSE方法产生了与具有代表性的基线相比精度更高的神经网络架构。然而,这些论文没有试图提供关于神经网络设计空间的直观形状。在本文的后面,我们避开了自动化方法,相反,我们以这样一种方式重构CNN,以便我们可以进行原理性的A/B比较来研究CNN架构决策如何影响模型大小和准确性。
在以下部分,我们首先提出和评估使用和不使用模型压缩的SqueezeNet架构。然后,我们探讨微型架构和宏构架的设计选择对SqueezeNet类CNN架构的影响。
3.SqueezeNet:用较少的参数保留精度
3.1 结构设计策略
图1:微观结构视图:在Fire模块中组织卷积滤波器。 在这个例子中,s1x1= 3,e1x1= 4,e3x3= 4。我们展示的是卷积滤波器不是激活器。
3.2 Fire模块
我们定义Fire模块如下。Fire模块包括:挤压卷积层(仅有1x1滤波器),送到混合了1x1和3x3卷积滤波器的扩展层;我们在图1中说明了这一点。在fire模块中自由使用1x1过滤器是第3.1节中策略1的一个应用。我们在Fire模块中公开了三个可调整维度(超参):
3.3 SqueezeNet结构
我们现在描述SqueezeNet CNN架构。我们在图2中说明SqueezeNet开始于一个独立的卷积层(conv1),然后是8个fire模块(fire2-9),最后是一个最终的转换层(conv10)。 我们从网络的开始到结束逐渐增加每个fire模块的过滤器数量。 SqueezeNet在层conv1,fire4,fire8和conv10之后以步长为2来执行max-pooling; 这些相对较晚的polling安排是根据3.1节中的策略3。我们在表1中给出了完整的SqueezeNet架构。
3.3.1 其他SequenceNet细节
为简洁起见,我们在表1和图2中省略了一些关于SqueezeNet的细节和设计选择。我们在下面提供这些设计选择。这些选择背后的直觉可以在下面引用的论文中找到。
- 为了使1x1和3x3滤波器的输出激活值具有相同的高度和宽度,我们在扩展模块的3x3滤波器的输入数据中添加零填充的1像素边界。
- ReLU(Nair&Hinton,2010)用于挤压和膨胀层的激活。
- 在fire9模块之后应用50%的dropout(Srivastava等人,2014)。
- 注意SqueezeNet中缺少全连接层; 这个设计选择是受到NiN(Lin et al。,2013)架构的启发。
- 在训练SqueezeNet时,我们从0.04的学习率开始,在训练过程中线性减少学习率,如(Mishkin et al。,2016)所述。 有关训练协议(例如批量大小,学习速率,参数初始化)的详细信息,请参阅我们的Caffe兼容配置文件,位于这里:https://github.com/DeepScale/SqueezeNet。
- Caffe框架本身不支持包含多个滤波器分辨率的卷积层(例如1x1和3x3)(Jia等人,2014)。为了解决这个问题,我们使用两个独立的卷积层来实现我们的扩展层:一个带1x1滤波器的层和一个带有3x3滤波器的层。然后,我们在通道维中将这些层的输出连接在一起。这在数值上等同于实现包含1x1和3x3滤波器的一个层。
4 SqueezeNet评估
在表2中,我们在近期模型压缩结果中检查SqueezeNet。 基于SVD的方法能够将预训练的AlexNet模型压缩5倍,同时将top-1精度降低到56.0%(Denton等人,2014)。网络修剪实现模型大小减少9倍,同时在ImageNet上保持了57.2%的top-1和80.3%的top-5准确率的基线(Han et al。,2015b)。深度压缩使模型大小减少35倍,同时仍然保持了基线精度水平(Han 等人,2015a)。现在,使用SqueezeNet,与AlexNet相比实现了模型大小减少50倍,同时满足或超过了AlexNet的top-1和前top-5的精度。 我们在表2中总结了所有上述结果。
这表明我们已经超过了模型压缩社区的最先进结果:即使使用未压缩的32位值来表示模型,SqueezeNet比模型压缩社区的最好结果的模型小1.4倍,同时保持或超过基线准确率。直到现在,一个悬而未决的问题是:是小模型适合被压缩,还是小模型“需要”由密集浮点值提供的强大的表达能力? 为了找出原因,我们使用33%稀疏度和8-bits量化对SqueezeNet应用深度压缩(Han等,2015a)。 这产生了和AlexNet相同精度的0.66MB的模型(比32位AlexNet小363倍)。此外,在SqueezeNet上应用6-bits量化和33%稀疏性的深度压缩,我们产生具有相同精度的0.47MB的模型(比32位AlexNet小510倍)。我们的小模型的确适合压缩。
表2:比较SqueezeNet和模型压缩方法。模型大小指的是在训练好的模型中存储所有参数所需的字节数。
此外,这些结果表明,深压缩(Han等人,2015a)不仅在具有许多参数(例如AlexNet和VGG)的CNN架构上工作良好,而且还能够压缩已经紧凑,完全卷积的SqueezeNet架构。深度压缩将SqueezeNet压缩10倍,同时保持基线精度。 总之:通过将CNN架构创新(SqueezeNet)与最先进的压缩技术(深度压缩)相结合,我们实现了模型尺寸减少510×,与基准相比精度没有降低。
5.CNN微结构设计空间探索
到目前为止,我们已经为小型模型提出了结构设计策略,遵循这些原则来创建SqueezeNet,发现SqueezeNet比AlexNet小50倍,具有同等的精度。 然而,SqueezeNet和其他模型仍然是一个广泛并且大部分设计空间未被开发的CNN架构。 现在,在第5和第6节,我们探讨了设计空间的几个方面。 我们将这个架构探索分为两个主要主题:微架构探索(每个模块层的维度和配置)和宏架构探索(模块和其他层的高级的端到端组织)。
在本节中,我们设计和执行实验,目的是提供关于微结构设计空间的形状相对于我们在第3.1节中提出的设计策略的直观表现。 请注意,我们的目标不是最大化每个实验的准确性,而是理解CNN架构选择对模型大小和精度的影响。
5.1 CNN微架构元参数
6.CNN宏观结构设计空间探索
- Vanilla SqueezeNet(按照前面的章节)。
- SqueezeNet一些Fire模块之间的简单旁路连接。 (受(Srivastava等人,2015; He等人,2015b)的启发。)
- SqueezeNet其余的Fire模块之间的复杂旁路连接。
我们在图2中说明了SqueezeNet的三个变体。
我们简单的旁路架构是在3、5、7、9 Fire 模块周五增加旁路连接,让这些模块学习输入和输出之间的残差函数。 在ResNet中,为了在Fire3周围实现旁路连接,我们设置Fire4的输入和(Fire2的输出+Fire3的输出)相等,+操作是按元素加。这改变了应用于这些Fire模块参数的正则化,和ResNet一样,可以提高训练完整模型的准确率和能力。
一个限制是,在简单的情况下,输入通道的数量和输出通道的数量必须相同; 因此,只有一半的Fire模块可以具有简单的旁路连接,如图2的中间图所示。当不能满足“相同数量的通道”要求时,我们使用复杂的旁路连接,如图所示在图2的右侧。虽然简单的旁路“仅仅是线“,但是我们定义复杂旁路为包含滤波器的数量等于所需的输出通道的数量的1*1卷积层。请注意,复杂的旁路连接会为模型添加额外的参数,而简单的旁路连接则不会。
除了改变正则化之外,对我们来说直观的是,添加旁路连接将有助于减轻挤压层引入的表达瓶颈。 在SqueezeNet中,挤压比(SR)为0.125,意味着每个挤压层比相应的膨胀层有8倍少的输出通道。 由于这种严重的维度减小,可以通过挤压层的信息有限。 然而,通过添加旁路连接到SqueezeNet,我们打开了信息围绕挤压层流动的途径。
我们使用图2中的三个宏结构训练SqueezeNet,并在表3中比较精度和模型大小。如表1所述,在整个宏结构探索中,我们固定了微结构以匹配SqueezeNet。 复杂和简单的旁路连接都比vanilla SqueezeNet架构提高了精度。有趣的是,简单的旁路实现了比复杂旁路更高的精度。 添加简单的旁路连接使得在不增加模型尺寸的情况下在top-1准确率增加2.9个百分点,top-5准确率增加2.2个百分点。
7.结论
在本文中,我们提出了一个更严格的方法来探索卷积神经网络的设计空间。 实现这个目标的过程中,我们提出了SqueezeNet,这是一种CNN架构,比AlexNet少50倍的参数,并在ImageNet上维持了AlexNet级别的精度。我们还将SqueezeNet压缩到小于0.5MB,或者说比没有压缩的AlexNet小510倍。 自从我们在2016年发布本文作为技术报告以来,Song Han和他的合作者进一步实验了SqueezeNet和模型压缩。使用一种称为密集稀疏密集(DSD)的新方法(Han等人,2016b),Han等人在训练期间使用模型压缩作为正则化器,以进一步提高精度,产生SqueezeNet参数的压缩集,在ImageNet-1k上更准确1.2百分点,并且还生成SqueezeNet参数的未压缩集,更准确4.3个百分点(与我们在表2中的结果相比)。
我们在本文开头提到,小型模型更适合FPGA上的片上实现。 自从我们发布了SqueezeNet模型,Gschwend开发了一个SqueezeNet的变种并在FPGA上实现(Gschwend,2016)。 正如我们的预期,Gschwend能够将一个类似SqueezeNet的模型的参数完全存储在FPGA中,并且无需对负载模型参数进行片外存储访问。
SqueezeNet是我们在广泛探索CNN架构设计空间时发现的几个新的CNN之一。 我们希望SqueezeNet将激励读者考虑和探索在CNN架构的设计空间的广泛的可能性,并以更系统的方式进行探索。- 论文笔记-SqueezeNet: Alexnet-level accuracy whith 50x Fewer Parameters And < 0.5MB Model Size
- SqueezeNet: Alexnet-level accuracy whith 50x Fewer Parameters And < 0.5MB Model Size
- 【SqueezeNet】SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
- 笔记:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size
- SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size阅读笔记
- SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size阅读笔记
- SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
- 论文笔记:SqueezeNet
- SqueezeNet论文笔记
- AlexNet论文学习笔记
- 论文学习笔记-Alexnet
- 论文笔记:AlexNet模型
- 从AlexNet到squeezenet
- 论文笔记之---Speed and accuracy trade-offs for modern convolutional object detectors
- 论文笔记:Two-level attention model for fine-grained Image classification
- Language Model 论文阅读笔记
- AlexNet学习笔记-论文翻译和理解(一)
- AlexNet学习笔记-论文翻译和理解(二)
- 自编码器推导
- 前端面试题总结
- spring boot 多数据源配置
- 小程序wx.request通过post方式提交数据给服务器-小程序支付开发教程
- Linux 用户与组的概念
- 论文笔记-SqueezeNet: Alexnet-level accuracy whith 50x Fewer Parameters And < 0.5MB Model Size
- android 监听屏幕是否锁屏
- Xcode9 beta试用体验
- 有返回值的多线程示例
- 字符串数组中所有字符串组成一个字典序最小的字符串
- LINQ查询基础
- C语言实现常见的矩阵运算函数
- js中数组增删查改unshift、push、pop、shift、slice、indexOf、concat、join
- Linux、Window下INI文件的读写操作C++类