SqueezeNet 翻译

论文地址:SqueezeNet
论文翻译:木凌
时间:2016年11月。
文章连接:http://blog.csdn.net/u014540717

1 引言和动机

最近对深卷积神经网络(CNN)的研究集中在提高计算机视觉数据集的准确性。 对于给定的精度水平,通常存在实现该精度水平的多个CNN架构。给定等效精度,具有较少参数的CNN架构具有几个优点:
1. 更高效的分布式训练。服务器之间的通信是分布式CNN训练的可扩展性的限制因素。对于分布式数据并行训练,通信开销与模型中的参数数量成正比(Iandola等,2016)。总之,小模型训练更快,因为需要较少的沟通。
2. 将新模型导出到客户端时减少开销。 对于自动驾驶,特斯拉等公司定期将新型号从其服务器复制到客户的汽车。 这种做法通常被称为空中更新(译者注:OTA,刷过机的同学估计都知道)。 消费者报告发现,特斯拉自动驾驶仪半自动驾驶功能的安全性随着最近的空中更新(消费者报告,2016)而逐渐改善。然而,当今典型的CNN/DNN模型的空中更新可能需要大量的数据传输。 使用AlexNet,这将需要240MB的从服务器到汽车的通信。较小的模型需要较少的通信,使频繁更新更可行。
3. 可行的FPGA和嵌入式部署。 FPGA通常具有小于10MB的片上存储器并且没有片外存储器。对于推理,足够小的模型可以直接存储在FPGA上,而不是让存储带宽变成它的瓶颈(Qiu等人,2016),从而使得FPGA可以实时地处理视频流。此外,当在专用集成电路(ASIC)上部署CNN时,足够小的模型可以直接存储在芯片上,并且较小的模型可以使ASIC适合更小的管芯。

正如您所看到的,较小的CNN架构有几个优点。考虑到这一点,我们直接关注与众所周知的模型相比,识别具有较少参数但等效精度的CNN架构的问题。我们发现了一个这样的架构,我们称之为SqueezeNet。 此外,我们提出了一个更严谨的方法来搜索设计空间的新的CNN架构。

本文的其余部分组织如下。 在第2节中,我们回顾了相关工作。然后,在第3节和第4节中,我们描述和评估SqueezeNet架构。之后,我们将注意力转向理解CNN架构设计选择如何影响模型大小和精度。 我们通过探索SqueezeNet样架构的设计空间获得这种理解。在第5节中,我们在CNN微体系结构上设计空间探索,我们将其定义为各个层和模块的组织和维度。在第6节中,我们在CNN宏结构上设计空间探索,我们将其定义为CNN中的层的高级组织。最后,我们在第7节总结。总之,第3节和第4节对于CNN研究人员以及只想将SqueezeNet应用于新应用程序的从业者非常有用。其余部分针对打算设计自己的CNN架构的高级研究人员。

2 相关工作

2.1 模型压缩

我们工作的首要目标是确定一个具有很少参数,同时保持精度的模型。为了解决这个问题,一种明智的方法是采用现有的CNN模型并以有损的方式压缩它。事实上,围绕模型压缩的主题出现了一个研究社区,并且已经报道了几种方法。Denton等人的一个相当直接的方法是对预训练的CNN模型应用奇异值分解(SVD)(Denton等人,2014)。Han等人开发了网络修剪,其从预训练模型开始,然后用零替换低于某个阈值的参数以形成稀疏矩阵,并且最后对稀疏CNN执行几次迭代训练(Han等人,2015b)。最近,Han等人通过将网络修剪与量化(至8位或更少)和huffman编码相结合,创建了一种称为深度压缩的方法(Han等人,2015a),并进一步设计了一种称为EIE的硬件加速器(Han等人,2016a ),直接对压缩模型操作,实现大幅加速和节能。

2.2 CNN微观结构

卷积已经在人工神经网络中使用了至少25年; LeCun等人在20世纪80年代后期帮助推广用于数字识别应用的CNN(LeCun等人,1989)。在神经网络中,卷积滤波器通常是3D,具有作为关键尺寸的高度,宽度和通道。当应用于图像时,CNN滤波器通常在其第一层(即RGB)中具有3个通道,并且在每个后续层Li中,滤波器具有与Li-1具有滤波器相同数量的通道。LeCun等人的早期工作(LeCun等人,1989)使用5x5x通道2滤波器,并且最近的VGG(Simonyan&Zisserman,2014)架构广泛地使用3x3滤波器。包括Network-in-Network(Lin等人,2013)和GoogLeNet系列架构(Szegedy等人,2014; Ioffe&Szegedy,2015; Szegedy等人,2015; 2016)等模型在一些层使用1x1滤波器。

随着设计非常深的CNN的趋势,手动选择每层的滤波器尺寸变得麻烦。为了解决这个问题,已经提出了由具有特定固定组织的多个卷积层组成的各种更高级别的构建块或模块。例如,GoogLeNet论文提出了Inception模块,其包括多个不同维度的滤波器,通常包括1x1和3x3,有时5x5(Szegedy等人,2014),有时1x3和3x1(Szegedy等人,2015)。然后,许多这样的模块可能与附加的自组织层组合以形成完整的网络。我们使用术语CNN微架构来指代各个模块的特定组织和尺寸。

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:保留精度并具有较少的参数

在本节中,我们首先概述了几个参数的CNN架构的设计策略。然后,我们介绍Fire模块,我们的新构建块,用于构建CNN架构。最后,我们使用我们的设计策略构建SqueezeNet,它主要由Fire模块组成。

3.1 结构设计策略

我们在本文的总体目标是确定具有很少参数的CNN架构,同时保持竞争的准确性。为了实现这一点,我们在设计CNN架构时采用三个主要策略:

策略1.使用1x1过滤器替换3x3过滤器。给定一定数量的卷积滤波器的预算,我们将选择使这些滤波器中的大多数是1x1,因为1x1滤波器具有比3x3滤波器少9倍的参数。

策略2.将输入到3x3过滤器的通道的数量减少。考虑一个完全由3x3滤波器组成的卷积层。该层中的参数的总量是(输入通道的数量)(3 * 3)。 因此,为了在CNN中保持小的参数总数,不仅要减少3×3滤波器的数量(见上面的策略1),而且要减少3×3滤波器的输入通道的数量。我们使用挤压层将输入到3x3个过滤器的通道数量减少,我们将在下一节中进行描述。

策略3.在网络后期降采样,以使卷积层具有大的激活图。在卷积网络中,每个卷积层产生至少1x1并且经常比1x1大得多的空间分辨率的输出激活图。这些激活图的高度和宽度由以下控制:(1)输入数据的大小(例如256×256图像)和(2)在CNN架构中对其进行下采样的层的选择。最常见的是,通过在一些卷积或池化层中设置(stride> 1),将下采样设计到CNN架构中(例如(Szegedy等人,2014;Simonyan&Zisserman,2014;Krizhevsky等人,2012))。 如果网络中早期的层具有较大的步幅,则大多数层将具有小的激活图。相反,如果网络中的大多数层具有1的步幅,并且大于1的步幅集中朝向网络的尾部,则网络中的许多层将具有大的激活图。 我们的直觉是,在其他保持不变的情况下,大的激活图(由于延迟下采样)可以导致更高的分类精度。 实际上,K.He和H.Sun对4种不同的CNN结构应用了延迟下采样,并且在每种情况下延迟下采样导致更高的分类精度(He&Sun,2015)。


Alt text
图1:微观结构视图:在Fire模块中组织卷积过滤器。 在这个例子中,s1x1s1x1= 4。我们展示的是卷积滤波器不是激活器。


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

3.2 Fire模块

我们定义Fire模块如下。Fire模块包括:挤压卷积层(其仅具有1x1滤波器),馈送到具有1x1和3x3卷积滤波器的混合的扩展层; 我们在图1中说明了这一点。在fire模块中自由使用1x1过滤器是第3.1节中策略1的一个应用。我们在Fire模块中公开了三个可调整维度(超级参数):s1X1s1X1),因此挤压层有助于将输入通道的数量限制为3x3过滤器,如第3.1节中的策略2所示。

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架构。


这里写图片描述


图2:我们的SqueezeNet架构的宏体系结构视图。 左:SqueezeNet(3.3节); 中间:SqueezeNet与简单的旁路(第6节); 右:具有复杂旁路的SqueezeNet(第6节)。

3.3.1 其他SequenceNet细节

为简洁起见,我们从表1和图2中省略了关于SqueezeNet的细节和设计选择的数量。我们在下面提供这些设计选择。这些选择背后的直觉可以在下面引用的论文中找到。

1、为了使来自1x1和3x3滤波器的输出激活具有相同的高度和宽度,我们在输入数据中向扩展模块的3x3滤波器添加零填充的1像素边界。

2、ReLU(Nair&Hinton,2010)应用于挤压和膨胀层的激活。

3、 在fire9模块之后应用比率为50%的dropout(Srivastava等人,2014)。

4、注意SqueezeNet中缺少全连接层; 这个设计选择是受到NiN(Lin et al。,2013)架构的启发。

5、当训练SqueezeNet时,我们从0.04的学习率开始,我们线性减少整个训练的学习率,如(Mishkin et al。,2016)所述。 有关训练协议(例如批量大小,学习速率,参数初始化)的详细信息,请参阅我们的Caffe兼容配置文件,位于这里:https://github.com/DeepScale/SqueezeNet

6、Caffe框架本身不支持包含多个滤波器分辨率的卷积层(例如1x1和3x3)(Jia等人,2014)。为了解决这个问题,我们使用两个独立的卷积层来实现我们的扩展层:一个带1x1滤波器的层和一个带有3x3滤波器的层。然后,我们在通道维中将这些层的输出连接在一起。这在数值上等同于实现包含1x1和3x3滤波器的一个层。

我们以Caffe CNN框架定义的格式发布了SqueezeNet配置文件。 然而,除了Caffe之外,还出现了其他一些CNN框架,包括MXNet(Chen等,2015a),Chainer(Tokui等,2015),Keras(Chollet,2016)和Torch(Collobert等, 2011)。它们中的每一个具有其自己的用于表示CNN架构的本地格式。也就是说,大多数这些库使用相同的底层计算后端,如cuDNN(Chetlur等,2014)和MKL-DNN(Das等,2016)。研究团体已经移植了SqueezeNet CNN架构,以便与许多其他CNN软件框架兼容:

SequeezeNet的MXNet (Chen et al., 2015a) 接口: (Haria, 2016)
SequeezeNet的Chainer(Tokui et al., 2015) 接口:(Bell, 2016)
SequeezeNet的Keras(Chollet, 2016) 接口:(DT42, 2016)
SequeezeNet fire模型的Torch(Collobert et al., 2011) 接口:(Waghmare, 2016)

4 SqueezeNet评估

我们现在将注意力转向评估SqueezeNet。 在第2.1节中回顾的每一个CNN模型压缩论文中,目标是压缩AlexNet(Krizhevsky等人,2012)模型,该模型被训练使用ImageNet(Deng等人,2009)(ILSVRC 2012) 数据集。因此,在评估SqueezeNet时,我们使用AlexNet 5和相关的模型压缩结果作为比较的基础。


表1:SqueezeNet体系结构尺寸。(此表格的格式受到Inception2文章(Ioffe&Szegedy,2015)的启发。)
这里写图片描述


在表2中,我们在最近的模型压缩结果的上下文中检查SqueezeNet。 基于SVD的方法能够将预训练的AlexNet模型压缩5倍,同时将顶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模型(363×小于32位AlexNet)。此外,在SqueezeNet上应用具有6-bits和33%稀疏性的深度压缩,我们产生具有等效精度的0.47MB型号(510x小于32位AlexNet)。 我们的小模型确实适合压缩。


表2:比较SqueezeNet和模型压缩方法。根据模型大小,我们是指在训练模型中存储所有参数所需的字节数。
这里写图片描述


此外,这些结果表明,深压缩(Han等人,2015a)不仅在具有许多参数(例如AlexNet和VGG)的CNN架构上工作良好,而且还能够压缩已经紧凑,完全卷积的SqueezeNet架构。深度压缩将SqueezeNet压缩10倍,同时保持基线精度。 总之:通过将CNN架构创新(SqueezeNet)与最先进的压缩技术(深度压缩)相结合,我们实现了模型尺寸减少510×,与基准相比精度没有降低。

最后,请注意,深度压缩(Han等人,2015b)使用codebook作为其用于将CNN参数量化为6-bits或8-bits精度的方案的一部分。 因此,在大多数商品处理器上,使用深度压缩中开发的方案实现具有8-bits量化的32/8 = 4x或使用6-bits量化的32/6 = 5.3x的加速并不是微不足道的。 然而,Han等人开发的定制硬件 - 高效推理机(EIE) - 可以更有效地计算码本量化的CNN(Han等人,2016a)。此外,在我们发布SqueezeNet后的几个月中,P. Gysel开发了一种称为Ristretto的策略,用于将SqueezeNet线性量化为8位(Gysel,2016)。具体来说,Ristretto以8位计算,并以8位数据类型存储参数和激活。 使用Ristretto策略在SqueezeNet推理中进行8位计算,当使用8位而不是32位数据类型时,Gysel的精度下降小于1个百分点。

5 CNN微结构设计空间探索

到目前为止,我们已经为小型模型提出了结构设计策略,遵循这些原则来创建SqueezeNet,发现SqueezeNet比AlexNet小50倍,具有同等的精度。 然而,SqueezeNet和其他模型仍然是一个广泛并且大部分设计空间未被开发的CNN架构。 现在,在第5和第6节,我们探讨了设计空间的几个方面。 我们将这个架构探索分为两个主要主题:微架构探索(每个模块层的维度和配置)和宏架构探索(模块和其他层的高级端到端组织)。

在本节中,我们设计和执行实验,目的是提供关于微结构设计空间的形状相对于我们在第3.1节中提出的设计策略的直观表现。 请注意,我们的目标不是最大化每个实验的准确性,而是理解CNN架构选择对模型大小和精度的影响。


这里写图片描述
(a)探讨挤压比(SR)对模型尺寸和精度的影响。(b)探索3x3滤波器在扩展层中的比率(pct3x3)对模型大小和精度的影响。
图3:微体系结构设计空间探索。


5.1 CNN微结构元参数

在SqueezeNet中,每个fire模块都有三维超参数,我们在3.2节定义:s1X1s1X1

5.2 挤压比

在3.1节中,我们建议通过使用挤压层来减少参数数量,以减少3X33X3滤波器看到的输入通道数。 我们将挤压比(SR)定义为挤压层中的过滤器数量与膨胀层中的过滤器数量之间的比率。 我们现在设计一个实验来研究挤压比对模型大小和精度的影响。

在这些实验中,我们使用SqueezeNet(图2)作为起点。 与SqueezeNet中一样,这些实验使用以下元参数:basee=128,incre=128,pct3X3=0.5,freq=2basee=128,incre=128,pct3X3=0.5,freq=2进一步增加模型尺寸,但是精度没有提高。

5.3 关闭1X1和3X3滤波器

在3.1节中,我们建议通过用1X11X1滤波器来减少CNN中的参数数量。一个开放的问题是,CNN过滤器的空间分辨率有多重要?

VGG(Simonyan&Zisserman,2014)架构在大多数层的滤波器中具有3×3的空间分辨率; GoogLeNet(Szegedy等人,2014)和Network in Network(NiN)(Lin等人,2013)在一些层中具有1X11X1滤波器的比例如何影响模型大小和精度。

我们在本实验中使用以下元参数:basee=incre=128freq=2SR=0.500basee=incre=128,freq=2,SR=0.500滤波器的百分比导致更大的模型尺寸,但是在ImageNet上的精度没有提高。

6 CNN宏观设计空间探索

到目前为止,我们已经探索了在微架构级别的设计空间,即CNN的单个模块的内容。 现在,我们在宏观架构层面探讨关于Fire模块的高级连接的设计决策。 受ResNet的启发(He等人,2015b),我们探索了三种不同的架构:

  1. Vanilla SqueezeNet(按照前面的章节)。

  2. SqueezeNet与一些Fire模块之间的简单旁路连接。 (受(Srivastava等人,2015; He等人,2015b)的启发。)

  3. SqueezeNet与其余的Fire模块之间的复杂旁路连接。

我们在图2中说明了SqueezeNet的这三个变体。

一个限制是,在简单的情况下,输入通道的数量和输出通道的数量必须相同; 因此,只有一半的Fire模块可以具有简单的旁路连接,如图2的中间图所示。当不能满足“相同数量的通道”要求时,我们使用复杂的旁路连接,如图所示 在图2的右侧。虽然简单的旁路是“仅有线”,但是我们将复杂旁路定义为包括1x11x1卷积层的旁路,滤波器的数量等于所需的输出通道的数量。 请注意,复杂的旁路连接会为模型添加额外的参数,而简单的旁路连接则不会。

除了改变正则化之外,对我们来说直观的是,添加旁路连接将有助于减轻挤压层引入的表示性瓶颈。 在SqueezeNet中,挤压比(SR)为0.125,意味着每个挤压层比相应的膨胀层具有8倍少的输出通道。 由于这种严重的维度减小,可以通过挤压层的信息有限。 然而,通过添加旁路连接到SqueezeNet,我们打开了信息绕挤压层流动的途径。

我们使用图2中的三个宏结构训练SqueezeNet,并比较表3中的精度和模型大小。在整个宏结构探索中,我们固定了微结构以匹配SqueezeNet,如表1所述。 复杂和简单的旁路连接都比vanilla SqueezeNet架构提高了精度。有趣的是,简单的旁路实现了比复杂旁路更高的精度。

添加简单的旁路连接使得在不增加模型尺寸的情况下在 精度top-1方面增加2.9个百分点,在top-5精度方面增加2.2个百分点。


表3:使用不同的宏架构配置的SqueezeNet精度和模型大小
这里写图片描述


7 结论

在本文中,我们提出了一个更严格的方法来设计空间探索卷积神经网络的步骤。 为了实现这一目标,我们提出了SqueezeNet,这是一种CNN架构,比AlexNet少50倍的参数,并在ImageNet上维护AlexNet级精度。 我们还将SqueezeNet压缩到小于0.5MB,或比没有压缩的AlexNet小510倍。 自从我们在2016年发布本文作为技术报告以来,宋汉和他的合作者进一步尝试了SqueezeNet和模型压缩。使用一种称为密集稀疏密度(DSD)的新方法(Han等人,2016b),Han等人在训练期间使用模型压缩作为正则化器,以进一步提高精度,生成SqueezeNet参数的压缩集,在ImageNet-1k上更准确1.2百分点,并且还生成SqueezeNet参数的未压缩集,更精确地为4.3个百分点 ,与我们在表2中的结果相比。

我们在本文开头提到,小型模型更适合FPGA上的片上实现。 自从我们发布了SqueezeNet模型,Gschwend开发了一个SqueezeNet的变种并在FPGA上实现(Gschwend,2016)。 正如我们的预期,Gschwend能够将一个类似SqueezeNet的模型的参数完全存储在FPGA中,并且无需对负载模型参数进行片外存储访问。

在本文的上下文中,我们将ImageNet作为目标数据集。 然而,将ImageNet训练的CNN模型应用于日常的很多方面已成为常见的做法,如细粒度物体识别(Zhang等人,2013;Donahue等人,2013),图像中的logo识别(Iandola等人 ,2015),给图像打标签(Fang等人,2015)等。ImageNet训练的CNN也被应用于许多与自主驾驶有关的应用,包括图像(Iandola等人,2014; Girshick等人,2015; Ashraf等人,2016)和视频(Chen等,2015b)中的行人和车辆检测,以及分割道路的形状(Badrinarayanan等,2015)。 我们认为SqueezeNet将是一个用于各个领域的CNN架构的很好候选,特别是在那些小的模型是重要的应用领域。

SqueezeNet是我们在广泛探索CNN架构设计空间时发现的几个新的CNN之一。 我们希望SqueezeNet将激励读者考虑和探索在CNN架构的设计空间的广泛的可能性,并以更系统的方式进行探索。

8 Fire模型的形状(译者注)

Fire model长什么样子呢?其实很简单的,如下图所示~
这里写图片描述

参考文献


(END)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值