SqueezeNet论文翻译

SqueezeNet

原文链接🔗:https://arxiv.org/abs/1602.07360

摘要

最近的深度卷积神经网络(CNNs)都把主要精力放在提高精度上。对于一个给定的精度水平,通常可以采用多种CNN结构来达到该精度级别。对于同等级别的精度,较小的CNN结构至少具备三种优势:

  1. 在分布式训练中,越小的CNNs意味着越少的跨服务器通信
  2. 在自动驾驶中,从云服务器导出模型时,越小的CNNs对带宽的需求量越低
  3. 小型的CNNs在FPGA或其他存储容量有限的设备中部署更加灵活

为了证明上述观点,我们提出了SqueezeNet,一种轻量级CNN结构。SqueezeNet在ImageNet达到了AlexNet级别的精度而参数量只有AlexNet的1/50。此外,利用模型压缩技术,我们能够把SqueezeNet压缩至小于0.5MB(比AlexNet小510倍)

SqueezeNet可以在此处下载:https://github.com/DeepScale/SqueezeNet

1 介绍和动机

最近对深度卷积神经网络(CNNs)的大部分研究都致力于提高准确率。对于给定的精度级别,通常有多个CNN结构适合。同样的精度,一个较小参数量的CNN结构有以下多种优势:

  • 更有效率的分布式训练。服务器之间的通信是限制分布式训练可扩展性的一个重要因素。对于分布式数据并行训练,通信的开销与模型中的参数量成正比(Iandola等,2016)简而言之,小模型由于所需的通讯量较少,模型训练得更快。
  • 向客户端导出新模型时的开销更小。对于自动驾驶,比如特斯拉公司会定期将新模型从服务器复制到客户的车上。这样的做法称作“远程更新”。《消费者报告》指出特斯拉半自动驾驶的安全性随着远程更新而不断提高。然而,远程更新现今多数的CNN/DNN模型需要巨大的数据传输量。比如AlexNet,从服务器下载到小车需要240MB流量。越小的模型则需要越少的通讯,使得频繁更新的可行性更大。
  • FPGA和嵌入式部署可行性更高。FPGA通常只有低于10MB的内存,且没有片外存储。当FPGA实时处理视频帧时,一个足够小的模型可以直接部署在FPGA上而不用受到内存带宽的限制(Qiu等,2016)。此外,当CNN部署在基础电路(ASICs)时,小模型可以直接存储在芯片里, 并使ASIC适配上更小的管芯。

如你所见,小型的CNN有太多优点了。基于此,我们直接专注于如何设计一个参数量较少但与知名模型相比有同等精度的CNN架构。最终我们发现了这样的网络结构,并称之为SqueezeNet。而且,我们还提出了一个更规范的方法,用于搜索新型CNN架构的设计空间。

论文剩余的部分编排如下。第2节,我们回顾了轻量化神经网络的相关工作。第3第4节,我们描述并评估了SqueezeNet架构。之后,我们将注意力转向理解CNN架构的设计是如何影响模型的大小和准确率的。我们将在探索类似SqueezeNet的架构的设计空间过程中理解。在第5节,将各个层和各个模块的组织和维度定义为CNN微架构,并在CNN微架构上探索设计空间。在第6节,我们将CNN层的高级组织定义为CNN的宏架构,并在CNN宏架构上探索设计空间。最后,我们在第7节得出结论。一句话概括,第3和第4节对于研究CNN的学者或者只想应用SqueezeNet的从业者是很有用的,剩余的部分则是针对打算设计自己的CNN架构的高级研究人员。

2 相关工作

2.1 模型压缩

我们工作的首要目标是确定一个参数量非常小而准确率保持很高的模型。为了解决这个问题,一个合理的做法是对现有的CNN模型以一种有损的方式进行压缩。事实上,一些研究团队对模型压缩已经提出过很多方法。Denton等人提出了相当简单的方法,将奇异值分解(SVD)应用于预训练CNN模型(Denton等,2014)。Han等人提出了网络剪枝,即从一个预训练模型开始,然后将低于一定阈值的参数替换为零组成一个稀疏矩阵,最后在稀疏CNN上训练迭代几轮(Han等,2015b)。最近,Han等人扩展了他们的工作,通过剪枝、量化(8bit或更少)和哈夫曼编码结合,创建了一种叫深度压缩(Deep Compression)的方法(Han等,2015a),还进一步设计了名为EIE的硬件加速器,它直接运行在压缩模型上,实现了提高运算速度又节约资源的效果。

2.2 CNN微结构

在20世纪80年代末,自LeCun等人普及CNN到数字识别应用以来(LeCun等,1989),卷积在人工神经网络中的应用已经有至少25年的历史了。在神经网络中,第一层的卷积滤波器通常是3个维度(即RGB),并在随后每一层L(i),滤波器的通道数个数都与L(i-1)相同。LeCun等人早期的工作使用5x5x通道数的卷积滤波器,最近的VGG体系结构广泛使用3x3的卷积(Simonyan & Zisserman, 2014)。又如Network-in-Network(Lin等,2013)和GoogLeNet系列架构在某些层使用1x1的卷积。

在当前设计得越来越深的CNN的趋势下,手动为每一层选择卷积滤波器的尺寸变得十分麻烦。为此,各种更高级的模块应运而生,它们由多个具有特殊且固定结构的卷积层组成。例如GoogLeNet一文提出的Inception模块,它有多个不同尺寸的滤波器,通常包括1x1和3x3,加上有时是5x5(Szegedy等,2014)和有时是1x3和3x1(Szegedy等,2015)。很多这样的模块组合在一起,可能再加上ad-hoc层,就形成了一个完整的网络。我们用CNN微结构这样的术语来描述不同模块特定的组织和维度。

2.3 CNN宏结构

CNN微结构指代的是各层和各模块,那么我们定义CNN宏结构是系统级的多个模块组合成一个端到端的CNN架构。

在最近的文献中,也许最广泛的研究CNN宏架构的主题就是网络深度(也就是层数)的影响。Simoyan和Zisserman提出了VGG系列,层数由12到19层不等,并指出更深的网络在ImageNet-1k(Deng等,2009)数据集中具有更高的精度。K.He等人提出多达30层更深的CNN,在ImageNet上验证获得了更高的精度。

怎么连接各层和各模块是CNN宏结构的新兴研究领域。残差网络(ResNet)(He等,2015b)和Highway Networks(Srivastava等,2015)都提出用跨多层的连接,例如第3层的激活层和第6层的激活层相加连接,我们称为旁路连接(bypass connections)。ResNet的作者提出了一个使用旁路连接的34层CNN和一个不使用旁路连接的34层CNN作对比,发现具有旁路连接的网络在ImageNet的Top-5准确率提升了2%

2.4 神经网络设计空间探索

神经网络(包括深度卷积神经网络)具有巨大的设计空间,你可以选择不同的微架构,宏架构,解算器,和其他超参数。人们自然而然会想知道这些因素是如何影响神经网络的准确率(例如设计空间的形状)。多数神经网络的设计空间探索(DSE)的工作集中在自动化寻找准确率更高的CNN架构。这种自动化DSE方法包括了贝叶斯优化(Snoek等,2012),模拟退火法(Ludermir等,2006),随机搜索(Bergstra & Bengio,2012),和遗传算法(Stanley & Miikkulainen,2002)。值得赞扬的是,每篇论文的DSE方法都提供了一个神经网络架构,每个架构对比代表基线都有了准确率的提升。然而,这些论文都没有尝试提供对神经网络设计空间的形状的一种直观认知。在本文后面,我们摒弃了自动化搜索方法,转而重构CNN的方式,使得我们可以通过A/B模型的原理性对比,认识CNN架构决策如何影响模型大小和准确率。

在下一节,我们打算先提出SqueezeNet架构,再评估对比有压缩和无压缩的SqueezeNet。之后,我们探寻类似SqueezeNet的CNN结构中微架构和宏架构的设计策略对模型的影响。

3 SqueezeNet:保持精度而参数很少

在本节,我们先概述参数量低的CNN结构的设计策略。再介绍用于构建我们CNN结构的基本模块——Fire模块。最终,我们利用这些设计策略,构成SqueezeNet。

3.1 结构设计策略

我们论文的总体目标是确定具有参数少而保持竞争性精度的CNN结构。为了达到这个目的,我们采用三种主要策略来设计CNN结构:

策略1. 用1x1卷积滤波器代替3x3滤波器。给定卷积滤波器的数量预算,我们尽可能选择1x1滤波器,因为1x1滤波器比3x3参数少9倍。

策略2. 减少进入3x3滤波器的通道数。假设一个完全由3x3滤波器组成的卷积滤波器。这一层的所有参数量为:(输入通道数)x(滤波器数量)x(3x3)。因此,为了维持CNN总体参数量最少,不仅要减少3x3卷积滤波器的数量(参考策略1),也要减少3x3滤波器的输入通道。我们将在下节描述利用squeeze层减少了3x3滤波器的输入通道。

策略3. 延后网络的下采样,以便卷积层获得足够大的激活图。在一个卷积网络中,每个卷积层都会输出一个空间分辨率至少是1x1或通常大于1x1的激活图。这些激活图的高宽的决定因素是:(1)输入数据的尺寸(例如256x256的图片)和(2)选择在哪些层下采样。最常见的下采样是在CNN上设置某些卷积或池化层(步长>1)。如果网络前面的层有很大的步长,那么大部分的层只输出很小的激活图。在其他条件不变的情况下,我们直觉地认为那些较大的激活图(由于延时下采样)会有更高的分类准确率。事实上,K.He和H.Sun对四种不同的CNN结构网络采用延后下采样测试,无一例外都提高了分类准确率。

策略1和2是关于如何在CNN里试图在保持准确率下明智的减少模型参数量。策略3是关于在有限参数量预算中最大化准确率。然后描述了构建我们CNN架构的基本模块——Fire模块,使我们能够成功运用策略1,2和3。

3.2 Fire模块

Fire模块的组成如下:一个挤压(squeeze)卷积层(只有1x1滤波器),一个扩展(expand)层(1x1和3x3卷积滤波器)。我们在图1阐述了这一点。在Fire模块中自由使用1x1滤波器是3.1节策略1的应用。我们在Fire模块公布了三个可调维度(超参):s1x1,e1x1和e3x3。在Fire模块,s1x1是挤压层的滤波器个数(全是1x1),e1x1是在扩展层的1x1滤波器个数,e3x3是在扩展层的3x3滤波器个数。当我们使用Fire模块,设置s1x1小于(e1x1+e3x3),所以挤压层限制了3x3卷积滤波器的输入通道数,实现了3.1节的策略2。

image-20200804220505292

图1:微结构示图:Fire模块中组织滤波器。例如,s1x1=3,e1x1=4,e3x3=4。我们这里展示的是卷积滤波器而非激活。

3.3 SqueezeNet结构

现在,我们描述SqueezeNet的CNN体系结构。我们在图2说明了SqueezeNet是由一个独立的卷积层(conv1),接着8个Fire模块(fire2-9),最后以一个卷积层结束(conv10)。从网络的开始到末尾,我们逐渐提升了每个Fire模块的滤波器数量。SqueezeNet在层conv1、fire4、fire8、conv10之后都接一个步长为2的最大池化层。这些相对较晚的池化体现了3.1节的策略3。我们将完整的SqueezeNet体系结构放在了表1。

image-20200804223431601

图2:SqueezeNet宏结构示图。左边:SqueezeNet(3.3节);中间:带有简单旁路连接的SqueezeNet(6节);右边:带有复杂旁路连接的SqueezeNet(6节)

3.3.1 SqueezeNet的其他细节

为了简洁,我们在表1和图2省略了一些关于SqueezeNet的细节和设计选择。在下面我们会说设计选择。这些选择背后的思想可以在下面引用的论文中找到。

  • 为了使1x1和3x3滤波器的输出激活具有相同的高度和宽度,我们给输入到扩展模块的3x3滤波器的数据,添加用零填充1个像素的边界。
  • ReLU(Nair & Hinton,2010)被用于挤压层和扩展层的激活层。
  • fire9模块之后接上50%的Dropout(Srivastava等,2014)
  • 当训练SqueezeNet,我们以0.04的学习率开始,然后在整个训练过程中线性降低学习率(Mishkin等,2016)。关于模型训练的详细信息(批次大小,学习率,参数初始化),请参阅我们的Caffe兼容配置文件:https://github.com/DeepScale/SqueezeNet.
  • Caffe框架本身并不支持包含多个分辨率的卷积滤波器(如1x1和3x3)(Jia等,2014)。为此,我们的扩展层由两个分开的卷积层实现:一层是1x1卷积,一层是3x3卷积。然后再把这些层的输出在通道维度拼接到一起。这样数学上等同于一个卷积层同时包含1x1和3x3卷积。

我们发布的SqueezeNet配置文件是以Caffe CNN框架格式定义的。但是除了Caffe,还有其他CNN框架,包括MXNet(Chen等,2015a),Chainer(Tokui等,2015),Keras(Chollet,2016),Torch(Collobert等,2011)。每个框架都有它原生的格式表示一个CNN结构。也就是说,大部分这样的库都用着同样的底层计算后端,例如cuDNN(Chetlur等,2014)和MKL-DNN(Das等,2016)。为了和其他CNN软件框架兼容,已有研究团队移植了SqueezeNet。

  • MXNet (Chen等, 2015a) 的SequeezeNet接口: (Haria, 2016)

  • Chainer(Tokui等, 2015) 的SequeezeNet接口:(Bell, 2016)

  • Keras(Chollet, 2016)的SequeezeNet接口:(DT42, 2016)

  • Torch(Collobert等, 2011) 的SequeezeNet fire模型接口:(Waghmare, 2016)

4 评估SqueezeNet

我们现在将注意力放到评估SqueezeNet模型。回顾2.1节每篇CNN模型压缩的论文,其目标都是压缩用于在ImageNet(Deng等,2009)(ILSVRC 2012)数据集训练进行图像分类的AlexNet(Krizhevsky等,2012)。因此,我们用AlexNet和与之相关的模型压缩结果作为比较的基础。

a

表1:SqueezeNet架构尺寸。(这张表的格式受到Inception2论文(Ioffe&Szegedy,2015)的启发)

在表2,我们回顾了SqueezeNet最近的模型压缩结果。基于SVD方法能够将AlexNet预训练模型压缩5倍,但Top-1精度降至56.0%(Denton等,2014)。网络剪枝,模型减少了9倍,同时在ImageNet(Han等,2015a)上保持在Top-1精度57.2%和Top-5精度80.3%的基准。深度压缩(Deep Compression)能实现模型大小减少35倍,仍然保持基准的精度水平(Han等,2015a)。现在,SqueezeNet模型大小比ALexNet小50倍,却达到甚至超过AlexNet的Top-1和Top-5准确率。我们将全部结果总结在了表2。

image-20200804233508576

表2:比较SqueezeNet和模型压缩方法。这里的模型大小指存储训练模型总参数所需的字节数。

这样看来,我们已经超过最先进的模型压缩研究成果:甚至使用未压缩的32位数存储的模型,SqueezeNet还是比已经压缩到极致的AlexNet还要小1.4倍,且仍能保持或超过基准精度。直到现在,一个悬而未决的问题是:小模型适合和压缩,还是小模型需要大量的浮点数才能完全发挥模型的表示能力?为了寻找问题的答案,我们对SqueezeNet采用了33%的稀疏度和8位量化的深度压缩(Han等,2015a)。得到了具有AlexNet同等精度的0.66MB模型(比32位的AlexNet小363倍)。或者更进一步,使用6位量化和33%稀疏度的深度压缩,得到了具有AlexNet同等精度的0.47MB模型(比32位的AlexNet小510倍)。证实了我们的小模型确实可以压缩

这些结果说明深度压缩(Han等,2015a)不仅在参数量大的CNN(例如AlexNet和VGG)表现良好,也能够压缩已经十分紧凑的SqueezeNet。深度压缩在SqueezeNet基线精度保持不变的情况下模型大小减少了10倍。总的来说,将最先进的模型压缩计算与创新性的CNN架构(SqueezeNet)结合,我们可以在精度不降的情况下得到比AlexNet小510倍的模型。

最后,注意深度压缩(Han等,2015b)使用了codebook把CNN的参数量化为6位或8位精度。因此在大多数商用处理器,使用8位量化32/8=4x或是6位量化32/6=5.3x的深度压缩达到的加速效果并非鸡肋。然而,Han等人开发的定制硬件——高效推理引擎(EIE),可以更高效的用codebook量化CNN。另外,在我们发布SqueezeNet后的数月,P.Gysel推出了Ristretto方法,一种将SqueezeNet线性量化8-bit的策略(Gysel,2016)。具体的说,Ristretto确实是8位计算,并且参数以8-bit格式储存。在使用Ristretto的8-bit策略进行SqueezeNet计算推理时,Gysel发现8-bit要比32-bit的准确率低1%。

5 CNN宏结构设计空间探索

到目前为止,我们推出了小模型的设计策略,并遵循这些准则创建了SqueezeNet,发现同等精度下SqueezeNet比AlexNet小50倍。SqueezeNet和其他模型都处于一个广阔的、基本未被探索的CNN设计空间中。现在,在第5和6节,我们探寻了设计空间的几个方面。我们将这种架构探索分成两大主题:微架构探索(每个模块层的维度和配置)和宏架构探索(由模块和其他层组成的高级端到端组织)。

在本节,我们以先前3.1节的设计策略来设计并进行实验,为微结构设计空间的形状提供直观认识。请注意,我们的目的不是在每一次实验都使准确率最大化,而是了解CNN架构对模型的大小和精度的影响。

5.1 CNN微结构元参数

在SqueezeNet,每个Fire模块都有我们在3.2节定义的三个维度的超参:s1x1,e1x1,e3x3。SqueezeNet包含8个Fire模块,一共24个超参。为了广泛探寻SqueezeNet类似架构的设计空间,我们定义了下一组更高级的用于控制所有Fire模块尺寸的元参数(metaparameters)。我们定义\(base_e\)为扩展滤波器的数量。在之后每隔\(freq\)个fire模块,用\(incr_e\)表示增加的扩展层数。也就是说,对于第\(i\)个Fire模块,扩展层的滤波器的数量是\(e_i=base_e+(incr_e*\lfloor{\frac{i}{freq}}\rfloor{})\)。在Fire模块的扩展层,有些滤波器是1x1,有些是3x3。我们定义\(e_i=e_{i,1x1}+e_{i,3x3}\)\(pct_{3x3}\)(范围是[0,1],所有Fire模块共享)为3x3扩展滤波器的百分比。也就是说\(e_{i,3x3}=e_i*pct_{3x3}\)\(e_{i,1x1}=e_i*(1-pct_{3x3})\)。最后,定义元参数挤压比(SR),用于表示Fire模块挤压层滤波器数量:(同上,范围是[0,1],所有Fire模块共享):\(s_{i,1x1}=SR*e_i\),同样的\(s_{i,1x1}=SR*(e_{i,1x1}+e_{i,3x3})\)。SqueezeNet是我们用上述元参数生产的示例CNN体系结构。更具体来说,SqueezeNet的元参数如下:\(base_e=128\)\(incr_e=128\)\(pct_{3x3}=0.5\)\(freq=2\)\(SR=0.125\)

5.2 挤压比

在3.1节,我们提出了通过使用挤压层来减少参数量,以降低3x3滤波器的输入通道数。我们用挤压比(SR)表示了挤压层的滤波器数量和扩展层的滤波器数量之比。现在,我们通过实验研究挤压比对模型的大小和精度的影响。

在这次实验,我们用SqueezeNet(图2)作为起点。对于SqueezeNet,其元参数是:\(base_e=128\)\(incr_e=128\)\(pct_{3x3}=0.5\)\(freq=2\)。我们在SR=[0.125, 1.0]范围训练了多个模型。在图3(a),我们展示了这次实验结果,其中每个点都代表一个模型。SqueezeNet就是图中SR=0.125的点。从图中可以看出,我们得知SR从0.125开始增加,ImageNet的Top-5精度从80.3%(AlexNet精度级别)提升到86.0%。模型大小从4.8MB增加到了19MB。在SR=0.75(大小为19MB)是,准确率到达了86.0%的平衡状态,而SR=1.0时,模型的大小增加了,精度却没有提升。

image-20200805221530586

​ 图3:宏结构设计空间探索

5.3 关闭1x1和3x3滤波器

在第3.1节,我们建议通过替换3x3的滤波器为1x1的滤波器来减少CNN中的参数量。不禁让人疑惑:空间分辨率在CNN滤波器有多重要呢?

VGG(Simonyan & Zisserman)架构在大多数层的滤波器分辨率都是3x3;而GoogLeNet和Network-in-Network(NiN)则在某些层用了1x1滤波器。其作者也只是简单的提出特定数量的1x1和3x3滤波器,没有进一步分析。这里,我们试着阐明1x1和3x3滤波器的比例如何影响模型的大小和精度。

我们在这次实验使用了以下元参数:\(base_e=incr_e=128\)\(freq=2\)\(SR=0.500\)。我们将\(pct_{3x3}\)从1%变化到99%。也就是说,每个Fire模块的扩展层都有一个预设的1x1和3x3滤波器数量的比例。现在,我们用“旋钮”,将扩展层的滤波器数量从“大部分是1x1”旋到“大部分是3x3”。和先前的实验一样,每个模型有8个Fire模块,遵循图2一样的层级组织。我们将结果展示在了图3(b)。注意,图3(a)和图3(b)中的13MB模型的完全相同的:\(SR=0.125\)\(pct_{3x3}=50%\)。我们在图3(b)可以看到,Top-5精度平衡在85.6%,使用50%的3x3滤波器,增加3x3滤波器比例导致了更大的模型,而精度却没有上升。

6 CNN宏结构设计空间探索

目前为止,我们在微结构层面上探索了设计空间。现在,我们探讨一下宏结构的设计空间,即关于Fire模块之间的高级连接。受ResNet(He等,2015b)启发,我们研究了三种不同的架构:

  • 简单纯粹的SqueezeNet(和前面章节一样)。
  • 部分Fire模块间带有简单旁路连接的SqueezeNet。(受(Srivastava等,2015;He等2015b)启发)
  • 其余的Fire模块间建立了复杂旁路连接的SqueezeNet。

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

我们在Fire模块3,5,7和9增加了简单旁路连接,这些模型需要学习输入和输出之间的残差方程。和ResNet一样,在Fire3建立旁路连接,设置Fire4的输入等于Fire2+Fire3(前面的“+”表示逐个元素相加)。这些操作改变了Fire模块参数正则化,和ResNet一样,会提高模型的准确率或者改善整个模型的训练。

一个局限之处是,输入通道数和输出通道数必须保持一致。因此,只有一半的Fire模块能用简单旁路连接,如图2中间所示。当“相同通道数量”不满足要求时,我们就采用复杂的旁路连接,如图2右侧所示。因为简单的旁路“只是一条线”,所以我们将带有1x1卷积层的旁路定义为复杂旁路。其滤波器的数量设置为需要输出的通道数。要注意的是,复杂的旁路连接会给模型额外增加参数,而简单旁路连接则不会。

除了改变正则化外,我们增加旁路连接有助于缓解挤压层引入的表征瓶颈。在SqueezeNet,挤压比(SR)是0.125,意味着每个挤压层的输出通道比扩展层小8倍。由于这种严重的降维,使得通过挤压层的信息十分有限。但是,通过添加旁路连接,我们开辟了在挤压层之外的信息流动渠道。

我们按照图2中三种不同的宏结构训练了SqueezeNet,并在表3比较了他们的准确率和模型大小。我们修改了微结构以匹配 SqueezeNet,如表1在整个宏结构探索中所述。复杂和简单的旁路连接精度都会比纯粹的SqueezeNet要高。有趣的是,简单的旁路连接比复杂的旁路连接准确率更高。增加简单旁路连接的模型Top-1精度提升了2.9%,Top-5精度提升了2.2%,模型大小不变。

image-20200805233834410

​ 表3:使用不同宏结构配置的SqueezeNet准确率和模型大小

7 结论

在本文中,我们提出了卷积神经网络设计空间探索更规范的步骤。为了实现这个目标,我们提出了一个新的CNN架构——SqueezeNet,它比AlexNet参数量小50倍,并且在ImageNet数据集上保持AlexNet同等级别的精度。我们还将SqueezeNet压缩至0.5MB一下,比不压缩的AlexNet小510倍。自从我们在2016年以技术报告发表了本文之后,Song Han和他的同事对SqueezeNet和模型压缩做了更深入的研究。Han等人使用了一种称作Dense-Sparse-Dense(DSD)(Han等,2016b)的方法。他们在训练过程中,利用模型压缩作为正则化器,并进一步提升了准确率。和我们在表2的结果比较,一个经过参数压缩后的SqueezeNet在ImageNet-1k中准确率提高了1.2%,而未压缩的SqueezeNet准确率提高了4.3%。

我们在本文开头就提及,小模型更适合部署在FPGA。自从我们发布了SqueezeNet,Gschwend已经开发出了SqueezeNet的一个变种,并在FPGA上实现(Gschwend,2016)。正如我们所料,Gschwend能够将类似SqueezeNet模型完整的存储在FPGA上,无需通过访问片外存储芯片加载模型参数。

本文内容主要以ImageNet为数据集。然而,在ImageNet上训练好CNN模型并应用到各种场景十分常见,比如细粒度物体识别(Zhang等,2013;Donahue等,2013),图像中的标志辨认(Iandola等,2015),看图说话(Fang等,2015)。用ImageNet训练的CNN也被应用到了自动驾驶相关的应用中,包括形容和车辆检测(Chen等,2015b),道路的形状图像分割(Badrinarayanan等,2015)。我们认为SqueezeNet是一个很好的候选CNN架构,适用于各种场景,尤其是需要小模型的时候。

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

posted @ 2021-08-30 20:58  Lin-sudo  阅读(207)  评论(0编辑  收藏  举报