Squeezenet论文翻译

Squeezenet:

精确度达到AlexNet级别,参数少50倍及大小0.5MB的模型

以下翻译大部分源自于谷歌翻译后觉得通顺就没有改动,核心内容在第三节。

第五节和第六节主要是网络的设计探索,以后有时间翻译解读再补上
仅作为个人学习笔记记录

摘要

在深度卷积神经网络的研究主要的关注点是提升其准确度。在给定准确度水平的条件下,通常可以识别多个达到该精度级别的CNN体系架构。在同等精度条件下,较小的CNN架构至少有三个优点:
(1) 在分布式训练中小模型在服务器中的通信量更少,分布式训练更加高效,因为在服务器间的通信是分布式CNN训练的可扩展性的限制因素。
(2) 便于模型的更新,在从云端导入到客户端(例如车辆)时需求带宽更少
(3) 小模型部署在FPGA硬件上更灵活,因为这些硬件内存有限。因为FPGA通常来讲片上存储器少于10MB,并且不具有片外存储器或储存器。
作者提出具备以上优点的小型模型:SqueezeNet。SqueezeNet在ImageNet数据集上实现了和AlexNet相当的准确度,但是少了50倍的参数。而且,SqueezeNet也采用了模型压缩的方法,这样就可以把SqueezeNet压缩至0.5MB以下,这比AlexNet小了510倍

模型下载地址:https://github.com/DeepScale/SqueezeNet

一. 介绍和动机

深度卷积神经网络(CNN)的最新研究大多集中在提高计算机视觉数据集的准确性上。对于给定的精度级别,通常存在多个达到该精度级别的CNN架构。给定同等的准确性,具有较少参数的CNN架构具有以下优点:
· 更高效的分布式训练:服务器之间的通信是分布式 CNN 训练的可扩展性的重要限制因素。对于分布式数据并行训练, 通信开销与模型中的参数数目成正比 (Iandola 等, 2016)。简而言之, 小模型由于需要较少的通信量而得以快速地训练。

· 向客户端导出新模型时的开销更小:为了优化自主驾驶技术, 特斯拉等公司定期将新的训练模型从服务器复制到客户的车上。此做法通常称为远程更新。消费者报告发现, 特斯拉的自动驾驶仪半自主驱动功能的安全性随着最近的更新而逐步提高 (消费者报告, 2016)。然而, 今天典型的 CNN/DNN 模型频繁的远程更新可能需要大量的数据传输。与 AlexNet相比, 这将需要从云服务器传输240MB的数据量到汽车上。较小的模型只需要传输较少的数据量, 这使得频繁更新变得更加可行。

· 可行的 FPGA 和嵌入式部署: fpga 通常有小于 10MB的 片上存储器, 并且不存在外部存储。因此, 一个足够小的模型可以直接存储在 fpga 上, 而不是被内存带宽所限制 (Qiuetal, 2016), 而视频帧流通过 FPGA 实时。此外, 当在特定于应用程序的集成电路 (ASICs) 上部署 CNNs 时, 一个足够小的模型可以直接存储在芯片上, 而较小的模型可以使 ASIC 适合于较小的模型。例如, Xilinx Vertex-7 FPGA 的芯片内存最大为 8.5 mb (即 68 Mbits), 不提供外部存储空间。

正如所见,较小的CNN架构具有多个优点。考虑到这一点,我们直接关注识别CNN体系结构的问题,而与已知模型相比,该模型具有更少的参数达到等效精度。我们发现了这样的架构,我们称之为SqueezeNet。此外,我们提出了一种尝试以更严格的方法来搜索新颖的CNN架构的设计空间的尝试。
本文的其余部分安排如下。在第二部分中,我们回顾了相关工作。然后,在第3和第4节中,我们描述和评估SqueezeNet体系结构。之后,我们将注意力转向了解CNN架构设计选择如何影响模型的大小和准确性。通过探索类似SqueezeNet的体系结构的设计空间,我们获得了这种理解。在第5节中,我们在CNN微观体系结构上进行空间探索设计,我们将其定义为各个层和模块的结构和尺寸。在第6节中,我们在CNN宏观体系结构上进行了空间探索设计,我们将其定义为一个CNN中的高级结构。最后,我们总结了第7节。简而言之,第3节和第4节对于仅希望将SqueezeNet应用于新应用程序的CNN研究人员以及从业人员都非常有用。其余部分针对打算设计自己的CNN架构的高级研究人员。

二. 相关工作(主要是一些知识普及)

模型压缩: 奇异值分解(SVD)、网络修剪方法、网络修剪+量化+霍夫曼编码

2.1 模型压缩

我们工作的首要目标是确定一个模型, 它的参数很少, 同时保持精度。为了解决这个问题, 可行的做法是采取现有的 CNN 模型, 并以有损的方式压缩它。事实上, 在一些研究团体已经开始围绕着这个思路进行了探索,并发表了几种方法。一个由Denton et al提出的相当简单的方法,是将奇异值分解 (SVD) 应用于预训练CNN模型 (2014)。Han et发名了一种网络修剪方法,即从一个预训练模型开始, 然后用零替换低于某个阈值的参数, 形成一个稀疏矩阵, 最后在稀疏 CNN 上执行一些训练迭代 (han等, 2015b)。最近, han et通过将网络修剪与量化 (8 比特或更少) 和霍夫曼编码结合在一起, 以创建一种称为深压缩的方法 (EIE, 2015a), 并进一步设计了一个名为EIE的硬件加速器,它直接运行在压缩的模型之上, 实现了提高模型运行速度和节省大量运算资源的效果。

2.2 CNN微观结构
2.3 CNN宏观结构

三. SQUEEZENET:保留少量参数的准确性

在本节中,我们首先概述很少参数的CNN架构设计策略。 然后,我们介绍Fire modules(Fire模块),该模块是我们的新构建块,可用于构建CNN架构。 最后,我们使用设计策略来构建SqueezeNet,该网络主要由Fire模块组成。

3.1 设计策略

本文的总体目标是确定具有少量参数的CNN架构,同时保持竞争优势。为此,在设计CNN架构时,我们采用了三种主要策略:
策略1:用1x1过滤器替换3x3过滤器。给定一定卷积核数目的限制下,我们大量选择这种过滤器,因为1x1过滤器的参数比3x3过滤器少9倍。
策略2:减少3*3卷积核的输入通道数目。 如果考虑一个完全由3x3滤波器组成的卷积层,该层中的参数总数为(输入通道数)x(卷积核数目)x(3 * 3)。 因此,要在CNN中保持少量参数,不仅重要的是减少3x3过滤器的数量(请参见上面的策略1),而且还要减少3x3过滤器的输入通道的数量。 我们使用squeeze layers(挤压层)将输入通道的数量减少到3x3过滤器,这将在下一节中介绍。
策略3: 在网络中后期进行下采样,以使卷积层具有较大的激活图。在卷积网络中,每个卷积层都会生成一个输出激活图,其空间分辨率至少为1x1,并且通常比1x1大得多。这些激活图的高度和宽度由以下因素控制:(1)输入数据的大小(例如256x256图像)和(2)在CNN架构中选择要下采样的层。最常见的是,通过在某些卷积或池化层中设置(步长> 1)将下采样设计到CNN体系结构中(例如(Szegedy等人,2014; Simonyan&Zisserman,2014; Krizhevsky等人,2012))。如果网络中的早期3层跨度较大,则大多数层将具有较小的激活图。相反,如果网络中的大多数层的步长为1,且步长大于1的步长都集中到网络的末端4,则网络中的许多层将具有较大的激活图。我们的直觉是,大的激活图(由于延迟的下采样)可以导致更高的分类精度,而其他所有条件都保持不变。的确,K.He和H. Sun将延迟下采样应用于四种不同的CNN架构,并且在每种情况下,延迟下采样都会导致更高的分类精度(He&Sun,2015)。

策略1和策略2是在尝试保持准确性的同时,明智地减少CNN中的参数数量。策略3是关于在有限的参数预算上最大化准确性。接下来,我们介绍Fire模块,这是CNN架构的构建模块,使我们能够成功采用策略1、2和3。

3.2 Fire Module

我们定义Fire Modules如下,一个Fire Module由以下组成:一个squeeze 卷积层(压缩卷积层)(只有1x1卷积核),一个expand layer(扩展层)(由1x1和3x3卷积核组合而成)。图1中所示,在Fire Modules中自由使用1x1卷积核是3.1节中策略1的应用。我们在Fire Modules中使用三个可调维度(超参数):s1x1,e1x1,e3x3 . 在Fire模块中,s1x1是压缩层(全部1x1)中的过滤器数量,e1x1是扩展层中1x1过滤器的数量,e3x3是扩展层中3x3过滤器的数量。当我们使用Fire模块时,当我们将s1x1设置为小于(e1x1+e3x3)时候,正如第3.1节中的策略2,压缩层将有助于限制3x3卷积核的输入通道数量。

3.3 Squeezenet 体系结构

现在我们描述Squeezenet CNN体系结构。我们在图2中说明,Squeezenet从一个独立的卷积层(conv1)开始,然后是8个Fire Modules(fire2-9层),最后一层是一个卷积层(conv10)。从网络的开始到结束,我们逐渐增加每个过滤模块的过滤器数量。Squeezenet在conv1,fire4,fire8和conv10层后都执行了步长为2的最大池化。这些较后的池化分布是根据3.1节中的策略3进行的。我们在表1中介绍了完整的Squeezenet体系结构。

在这里插入图片描述
Figure2:微观结构中Squeezenet的结构。
左边:Squeezenet 中间:简单旁路的Squeezenet 右边:复杂旁路的Squeezenet

3.3.1其他Squeezenet细节

为了简洁起见,我们从表1和图2中省略了有关Squeezenet的许多细节和设计选择。我们在下面提供这些设计选择,这些选择背后的思想可以从下面的论文中找到:
• 为了使1x1和3x3过滤器的输出激活具有相同的高度和宽度,我们对3x3的过滤器扩展模块的输入中添加了一个像素的零填充边界
• ReLU应用于压缩层和扩展层的激活
• 在fire 9Module层后应用一个比率为50%的Dropout (神经元数量训练有效率)
• Squeezenet没有全连接层
• 训练Squeezenet时,我们的学习率一开始设置为0.04,并且在整个训练过程中线性降低学习率,关于训练的配置参数(例如,样本数量,学习率,参数初始化),参阅与Caffe兼容的配置文件:https://github.com/DeepScale/SqueezeNet
• Caffe框架本身不支持解决一个卷积层包含多个不同尺寸的卷积核(例如1x1和3x3)(Jia等,2014)。为了解决这个问题,我们用两个独立的卷积层实现扩展层:一个具有1x1过滤器的层和一个具有3x3过滤器的层。然后,我们在通道维度上将这些层的输出连接在一起。从数值上讲,这等效于实现包含1x1和3x3过滤器的一层。
目前Squeezenet CNN架构已经移植在许多其他的CNN软件框架上
例如:MXNet、Chainer、Keras、Torch

4. SqueezeNet的评估

现在,我们将注意力转向评估SqueezeNet。 在第2.1节中回顾的CNN模型压缩文件中,目标是压缩经过训练的AlexNet模型(Krizhevsky等,2012),使用ImageNet(Deng等,2009)(ILSVRC 2012)数据集对图像进行分类。 因此,在评估SqueezeNet时,将AlexNet5及其相关的模型压缩结果作为比较的基础。
在这里插入图片描述
表2中是当时的一些模型压缩结果。从表中可以看出,SVD的方法能在把一个预训练的AlexNet模型压缩5倍的同时实现56.0%的top-1准确度。网络剪枝在ImageNet上实现了57.2%的top-1准确度和80.3%的top-5准确度,模型大小减小了9倍。深度压缩在保证基准的准确度水平的同时模型大小减小了35倍。而SqueezeNet与AlexNet模型相比缩小了50倍,top-1准确度较高(57.5%),top-5准确度相同(80.3%)。(此基准是以来自Caffe代码库的bvlc alexnet) DeepCompression在保持基准精度水平的同时,模型尺寸减小了35倍(Han等,2015a)。 现在,借助SqueezeNet,与AlexNet相比,我们的模型尺寸减少了50倍,同时达到或超过AlexNet的top-1和top-5精度。 我们在表2中总结了所有上述结果。
在这里插入图片描述
我们似乎已经从压缩模型结构中得到了超越了目前水平:即使使用未压缩的32位值表示模型,Squeezenet在保持基准精度的情况下也仅是1.4倍最小模型大小。 迄今为止,尚待解决的问题是:小型模型是否适合压缩,还是小型模型“需要”密集浮点值提供的所有表示能力? 为了找到答案,我们应用了深度压缩(Han等,2015a)到SqueezeNet,使用稀疏度为33%的6和8位量化。 这样就产生了一个0.66 MB的模型(比32位AlexNet小363倍),具有等效的准确度AlexNet。 此外,在SqueezeNet上应用具有6位量化和33%稀疏性的DeepCompression,我们产生了0.47MB的模型(比32位AlexNet小510倍),具有相同的精度。 我们的小型模型确实可以压缩。

此外,这些结果表明,深度压缩(Han等,2015a)不仅可以在具有许多参数的CNN架构(例如AlexNet和VGG)上很好地工作,而且还可以适用在压缩已经紧凑的,完全卷积的SqueezeNet架构。深度压缩将SqueezeNet压缩10倍,同时保持原有精度。总结:通过将CNN架构创新(SqueezeNet)与最新的压缩技术(Deep Compression)相结合,我们实现了模型尺寸的510倍减小,而与原始相比,精度没有降低。
最后,请注意,深度压缩(Han等人,2015b)使用codebook 作为其方案的一部分,以将CNN参数量化为6位或8位精度。因此,在大多数商用处理器上,使用深度压缩中开发的方案以8位量化实现32/ 8 = 4x或以6位量化实现32/6 = 5.3x的加速并非易事。然而,Han开发了自定义硬件–有效推理引擎(EIE)–可以更高效地计算代码本量化的CNN(Han等,2016a)。此外,自我们发布SqueezeNet以来的几个月中,P.Gysel开发了一种称为Ristretto的策略,用于将SqueezeNet线性量化为8位(Gysel,2016年)。具体来说,Ristretto以8位进行计算,并以8位数据类型存储参数和激活。在SqueezeNet推论中,使用Ristretto策略进行8位计算时,Gysel观察到,使用8位而不是32位数据类型时,精度下降不到1个百分点。

5. CNN微观结构设计空间探索

到目前为止,我们已经为小型模型提出了架构设计策略,并遵循这些原则创建了SqueezeNet,并发现SqueezeNet比AlexNet小50倍,并且具有同等的准确性。但是,SqueezeNet和其他模型驻留在CNN体系结构的广阔且尚未开发的设计空间中。
现在,在第5和第6节中,我们探索设计空间的几个方面。我们将此建筑探索分为两个主要主题:微观结构探索(每个模块层的尺寸和配置)和宏观结构探索(模块和其他层的高层端到端组织)。在本节中,我们设计和执行实验,其目的是相对于我们在3.1节中提出的设计策略,提供有关微体系结构设计空间形状的直觉。请注意,我们的目的不是要在每个实验中都最大化准确性,而是要了解CNN架构选择对模型大小和准确性的影响。
在这里插入图片描述

七. 总结

在本文中,我们提出了一些步骤,以寻求一种更规范的方法来进行卷积神经网络的设计空间探索。为了实现这一目标,我们提出了SqueezeNet,这是一种CNN架构,其参数比AlexNet少50倍,并在ImageNet上保持AlexNet级别的准确性。我们还将SqueezeNet压缩到小于0.5MB,比未压缩的AlexNet小510倍。自从我们在2016年以技术报告的形式发布该论文以来,宋涵和他的合作者就进一步尝试了SqueezeNet和模型压缩。 Han等人使用一种称为** Dense-Sparse-Dense(DSD)**的新方法(Han等,2016b)。在训练过程中使用模型压缩作为正则化器以进一步提高准确性,在ImageNet-1k上生成压缩的SqueezeNet参数集要高出1.2个百分点,还可以生成未压缩的SqueezeNet参数集要高出4.3个百分点与表2中的结果相比。我们在本文开始时提到,较小的模型更适合FPGA上的片上实现。自我们发布SqueezeNet模型以来,Gschwend开发了SqueezeNet的变体并将其实现在FPGA上(Gschwend,2016)。如我们所料,Gschwend能够完全在FPGA中存储类似SqueezeNet的模型的参数,并且无需片外存储器访问即可加载模型参数。在本文的上下文中,我们将ImageNet作为目标数据集。但是,将经过ImageNet训练的CNN表示应用于各种应用已成为普遍做法,例如细粒度的对象识别(Zhang等人,2013; Donahue等人,2013),图像中的徽标标识(Iandolaetal。, 2015),并生成有关图像的句子(Fangetal。,2015)。 ImageNet训练的CNN也已应用于与自动驾驶有关的许多应用,包括图像中的行人和车辆检测(Iandola等人,2014; Girshick等人,2015; Ashraf等人,2016)和视频(Chen等人,2015b),以及分割道路形状(Badrinarayananetal。,2015)。我们认为SqueezeNet将是适用于各种应用程序(尤其是那些小型模型非常重要的应用程序)的CNN架构的理想选择。 SqueezeNet是我们在广泛探索CNN架构的设计空间时发现的几个新CNN之一。我们希望SqueezeNet能够激发读者考虑并探索以更系统的方式在CNN架构的设计空间中拓宽可能性的范围并以这种方式探索。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值