SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND <0.5MB MODEL SIZE

摘要

近期关于深度卷积网络(CNNs)的研究主要集中于提高准确率。对于一个给定的准确率,通常可能找到多个可以实现这个准确率的 CNN 结构。相等的准确率下,更小的 CNN 结构会带来至少三个好处:(1)更小的 CNNs 在分布式训练中需要更少的服务器之间的交流。(2)更小的 CNNs 在从云端传输一个新模型到一辆自动驾驶的汽车上时需要更少的带宽。(3)更小的 CNNs 使得在 FPGAs 和其他限制内存的硬件上部署神经网络更为可行。为了实现所有这些好处,我们提出了一个叫做 SqueezeNet 的小型 CNN 结构。它在ImageNet 上实现了AlexNet 级别的准确率但比 AlexNet 的参数量小了五十倍。除此以外,在利用现有模型压缩技术后,我们能将 SqueezeNet 压缩到小于 0.5MB(比 AlexNet 小了 510 倍)
SqueezeNet 下载地址:https://github.com/DeepScale/SqueezeNet

1. 介绍与动机

近来在卷积神经网络上的研究主要聚焦于提升在计算机视觉数据集上的准确率。对于一个给定的准确率水准,通常存在多个 CNN 结构可以实现。给定相等的准确率,一个有着更少参数的 CNNs 结构有以下几个优点:

  • 更高效的分布式训练。服务器之间的交流对分布式 CNN 训练的可扩展性而言是一个限制因素。对于分布式数据并行训练,交流支出直接与模型中的参数量成比例。简而言之,小的模型由于需要少的交流而训练更快。
  • 传输新模型到客户端时支出更少。对于自动驾驶,像特斯拉这样的公司会阶段性地从他们的服务器复制新模型到顾客的汽车。这个过程通常被称作“无线”更新。消费者报告显示,特斯拉的自动驾驶仪半自动驾驶功能的安全性随着最近的“无线”更新在逐渐提高。然而,如今典型的 CNN/DNN 模型的无线更新需要大的数据传输。AlexNet 在从服务器到汽车时需要240MB 的交流。更小的模型需要更少的交流,这使得频繁的更新具有可行性。
  • 可行的 FPGA 和嵌入式部署。FPGA 芯片通常只有小于 10MB 的片内内存,并且没有片外内存。推理可得,一个足够小的模型在视频帧流实时地流过 FPGA 时可以直接存储在FPGA 上而不是成为存储带宽的瓶颈。更进一步地说,当在特定用途集成电路(ASIC)上部署 CNNs 时,一个足够小的模型可以直接片内存储,同时一个更小的模型可以使特定用途集成电路能适合一个模具。

正如你所见,更小的 CNN 结构有好几个优点。出于这种考虑,我们直接关注有着更少的参数量但与某个著名模型准确率相等的 CNN 结构的定义。我们已经发现了这样一个结构,我们称之为 SqueezeNet。除此以外,我们提出了在探索新的 CNN 结构设计空间的更为严谨的方法。

这篇论文的剩余部分组织如下。在第 2 节我们回顾了相关的工作。然后,在第 3 和第 4节我们描述和评估了 SqueezeNet 结构。随后,我们将注意力放在理解 CNN 结构设计选择如何影响模型大小和准确率。我们通过探索类似 SqueezeNet 结构的设计空间得到了相关理解。在第 5 节我们进行了 CNN 微观结构的设计空间探索,我们将其定义为单个层和模块的组织和维度。在第 6 节,我们进行了 CNN 宏观结构的设计空间探索,我们将其定义为 CNN层间高级组织。最后,我们在第 7 节进行了总结。简而言之,第 3 和第 4 节对于那些只是简单想要将 SqueezeNet 应用于新的应用中的 CNN 研究者和开发者有用。剩余部分主要针对于致力于设计他们自己的 CNN 结构的高级研究者。

2. 相关工作

2.1 模型压缩

我们工作的首要目标是定义一个在保留准确率时拥有很少参数的模型。为解决这个问题,一个明智的方法是将一个现有的 CNN 模型进行有损压缩。事实上一个围绕着模型压缩主题的研究社区已经出现,并且已经发表了一些方法。Denton 提出一个了相当直接的方法是在一个预训练模型上应用奇异值分解(SVD)。Han 等人发展了网络剪枝,从一个预训练 CNN模型开始,然后用 0 替换低于确定阈值的参数生成一个稀疏矩阵,然后在稀疏 CNN 上进行几次迭代训练。最近 Han 等人扩展了他们的工作,将量化网络剪枝和霍夫曼编码结合生成深度压缩(Deep Compression)的方法,进一步设计了 EIE 的硬件加速器,可以直接在压缩模型上进行处理,实现随后的加速和资源节约。

2.2 CNN微观结构

卷积已经被应用在人工神经网络至少 25 年。19 世纪 80 年代末,LeCun 等人推动了CNNs 在数字识别应用的风靡。在神经网络中,卷积核通常是 3D 的,有高度,宽度和通道作为关键维度。当应用到图像上时,CNN 核的在网络第一层主要有三个通道(比如 RGB),在随后的每一层 L i L_i Li,卷积核通道数等于 L i − 1 L_{i-1} Li1的卷积核数量。早期 LeCun 的工作使用5×5×channels 的卷积核。近期的 VGG 结构广泛使用 3×3 卷积核。像 Network-in-Network和 GoogleNet 家族的结构在一些层使用 1×1 卷积核。

在设计非常深的 CNNs 趋势下,手动选择每一层的卷积核维度变得笨重。为了解决这个问题,提出了一些更高级的由多层卷积层组成、使用特定的固定的结构块和模块。比如,GoogleNet 论文提出 Inception 模块,由大量不同维度的卷积核组成,通常包括 1×1 和 3×3,有时会加上 5×5 还有 1×3 和 3×1。许多这样的模块被结合起来,大概还会有一些附加的专门的层来组成整个网络。我们使用术语 CNN 微观结构提及单个模块特定的组织和维度。

2.3 CNN宏观结构

当 CNN 的微观结构涉及到单独的层和模块,我们定义 CNN 的宏观结构为端对端 CNN结构系统级别的多模块组织。近期文献中主要广泛地研究 CNN 宏观结构的话题是网络深度对于网络的影响。Simoyan 和 Zisserman 提出了 12 到 19 层的 VGG 家族 CNNs,并且提出更深的网络在 ImageNet-1k 数据集上产生更高的准确率。K.He 等人提出更深的甚至深达 30层的 CNNs 会在 ImageNet 上带来更高的准确率。

跨多层或模块连接的选择是 CNN 宏观结构研究的新兴领域。残差网络(ResNet)和高速公路网络(Highway Network)每个都提出了跨多层连接的使用,比如,累积连接第三层的激活层到第六层激活层。我们称这些连接为旁路连接。ResNet 的作者提供了 A/B 对比,34 层的 CNN 有旁路连接和没有旁路连接,添加旁路连接在 ImageNet Top-5 准确率上带来2 个百分点的提高。

2.4 神经网络设计空间探索

神经网络(包括深度卷积网络)有着很大的设计空间和大量的对于微观结构、宏观结构、求解器以及其他超参数的选择。似乎自然而然社区想要清楚这些因素如何影响一个神经网络准确率。很多针对于神经网络设计空间探索(DSE)的工作聚焦于发展寻找带来更高准确率神经网络结构的自动方法。这些自动的 DSE 方法包括贝叶斯优化、模拟退火、随即搜索和遗传算法。值得赞扬的是,这些方法的每篇论文都提供了一个例子,基于这些方法提出一个神经网络结构实现相对于代表性网络结构的更高的准确率。然而这些论文都没有尝试去提供一个神经网络设计空间形式的理论依据。在本篇论文的后面,我们避免使用自动的方法,取而代之,我们重构 CNNs,做严谨的 A/B 对比来调查 CNN 结构的决定如何影响模型的大小
和准确率。

在后续的章节,我们首先提出和评估在有模型压缩和没有模型压缩下的 SqueezeNet 结构。然后,我们探索对类SqueezeNet 的 CNN 结构的微观和宏观设计选择的影响。

3. SqueezeNet:保留准确率,降低参数量

在这一章节,我们首先概述对于参数量很少的 CNN 结构的设计策略,然后我们介绍了Fire 模块——用于搭建 CNN 结构的建筑块。最后我们利用设计策略搭建主要由 Fire 模块组
成的 SqueezeNet。

3.1 结构设计策略

在这篇论文中我们的首要目标是定义一个有着较少的参数量并且保持有竞争性准确率的 CNN 结构。为了实现这个目标,我们在设计 CNN 结构时使用三个主要策略:

  • 策略 1.用 1×1 卷积核替换 3×3 卷积核。给定一个确定数量的卷积核的预算,我们选择使卷积核的大多数都是 1×1,这是因为 1×1 的卷积核参数量比 3×3 的少 9 倍。
  • 策略 2.减少 3×3 卷积核的输入通道数量。考虑一个完全由 3×3 卷积核组成的卷积层。这层的参数总量是 ( 输 入 通 道 数 ) ∗ ( 卷 积 核 数 ) ∗ ( 3 ∗ 3 ) (输入通道数)*(卷积核数)*(3*3) 33。因此,为了在一个 CNN 中保持一个人较小的参数总量,不仅仅要减少 3×3 卷积核的数量,减少3×3卷积核的通道数也是很重要的。我们用 Squeeze Layer 减少了 3×3 输入通道数,这部分我们将在下一章节阐述。
  • 策略 3.在网络后期下采样使卷积层具有较大的激活图。在一个卷积网络中,每一个卷积层都会产生一个激活图,其空间分辨率至少是 1×1,通常大于 1×1。激活图的高和宽取决于:(1)输入数据的尺寸和(2)在 CNN 结构中下采样位置的选择。通常在一些卷积或池化层中通过设置(步幅大于 1)来在 CNN 结构中实现下采样。如果网络前期有着大的步幅,那么大多数层都将会有小的激活图。相反地,如果大多数层步幅为 1,步幅大于 1 主要集中在网络后期,那么网络中许多层都将会有较大的激活图。我们的直觉是在其他条件都保持一致时,大的激活图(由于延迟下采样)会带来更高的分类准确率。的确,K.He 和 H.Sun 在四个不同的 CNN 结构上应用延迟下采样,在每一个延迟下采样的例子中都表现出更高的分类准确率。
    在这里插入图片描述

策略 1 和策略 2 在保留准确率的情况下明智地减少了 CNN 的参数总量。策略 3 在一个限制的参数预算下最大化准确率。接下来,我们将阐述 Fire 模块,可以使我们在 CNN 结构上成功使用策略 1、2 和 3 的建筑块。

3.2 Fire 模块

我们将 Fire 模块定义如下。Fire 模块组成:一个 Squeeze 卷积层(仅有 1×1 卷积核)传送信息到一个扩展层(expand layer),扩展层包含 1×1 和 3×3 卷积核。我们将 Fire 模块阐述如图 1 所示。Fire 模块中 1×1 卷积核的自由使用是 3.1 中策略 1 的应用。我们在一个Fire 模块中提出三个可调节的维度(超参数): s 1 × 1 , e 1 × 1 , e 3 × 3 s_{1×1}, e_{1×1}, e_{3×3} s1×1,e1×1,e3×3 。在一个 Fire 模块中 s 1 × 1 s_{1×1} s1×1 是squeeze 层(均为 1×1)的卷积核数量, e 1 × 1 e_{1×1} e1×1是扩展层中 1×1卷积核的数量, e 3 × 3 e_{3×3} e3×3 是扩展层中 3×3 卷积核的数量。当使用 Fire 模块时,设置 s 1 × 1 s_{1×1} s1×1 小于( e 1 × 1 + e 3 × 3 e_{1×1} + e_{3×3} e1×1+e3×3)。所以正如 3.1 中策略 2 所述,squeeze 层有助于限制 3×3 卷积核的输入通道数。

3.3 SqueezeNet 结构

我们现在描述 SqueezeNet CNN 结构。我们在图 2 中对 SqueezeNet 进行了阐述,以一个独立运行的卷积层(conv1)作为开始,后面跟着 8 个 Fire 模块(Fire2-Fire9),以一个最后的卷积层(conv10)结束。我们逐渐提升从网络开始到结束的每一个 Fire 模块中卷积核的数量。SqueezeNet 在 conv1、fire4、fire8 和 conv10 层后执行步幅为 2 的最大池化(maxpooling)。按照 3.1 的策略 3 放置这些相对较晚的池化层。表 1 展示了 SqueezeNet 的全部结构。
在这里插入图片描述
在这里插入图片描述

3.3.1 其他 SqueezeNet 细节

简而言之,表 1 和图 2 中省略了一些有关 SqueezeNet 的细节和设计选择。我们在下文中对此说明。做这些选择的直觉可以在这篇论文后面的引文中发现。

  • 为了使从 1×1 和 3×3 输出的激活图有相同的高和宽,我们对扩展层(expand)3×3卷积核的输入数据进行了一个像素的边缘 0 填充(zero-padding)。
  • squeeze 和 expand 层的激活函数均使用 Relu。
  • 在模块 fire9 之后使用比例为 50%的 Dropout。
  • 注意 SqueezeNet 缺全连接层,这个设计选择受 NiN 结构启发。
  • 在训练 SqueezeNet 时,开始使用 0.04 的学习率,正如 Mishkin 等人所述,随着训练的进行,线性降低学习率。至于训练协议的细节(如,batch size、learning rate、参数初始化)请参考我们兼容 Caffe 配置的文件:http://github.com/DeepScale/SqueezeNet。
  • Caffe 框架本不能支持一个卷积层包含多个分辨率的卷积核。为了解决这个问题,我们用两个分开的卷积层执行扩展层(expand layer):一个层使用 1×1 卷积核,另一个层使用 3×3 卷积核。然后将这两个层的输出在通道维度上连接起来。

这在数量上与执行一个包含 1×1 和 3×3 卷积核的层效果相当。

我们公开了 SqueezeNet 的配置文件,该文件基于 Caffe 的 CNN 框架。然而,除了 Caffe,几个其他的 CNN 框架已经出现,包括 MXNet、Chainer、Keras 和 Torch。这些每个都有它们自己本来表现 CNN 结构的格式。也就是说,他们大多数库使用像 cuDNN 和 MKL-DNN相同的基础计算后端。这些研究社区已经发布了兼容其他一些 CNN 软件框架的 SqueezeNet结构:
• MXNet
• Chainer
• Keras
• Torch

4. SqueezeNet 的评估

现在我们将注意力放在评估 SqueezeNet 上。2.1 中提到的每一个 CNN 模型压缩的论文,目标都是压缩已经用 ImageNet 数据进行分类训练的 AlexNet 模型。因此,我们我们使用 AlexNet 和相关的模型压缩结果作为在评估 SqueezeNet 时的对照基础。

在表 2 中,我们在近来模型压缩结果的背景下回顾 SqueezeNet。基于 SVD 的方法可以将一个预训练的 AlexNet 压缩 5 倍,然而 top-1 的准确率却减小到 56.0%。网络剪枝实现了模型大小 9 倍的压缩同时保持 ImageNet 数据集上 top-1 准确率 57.2%和 top-5 准确率 80.3%的基线。深度压缩实现了保持准确率基线的同时将模型大小压缩 35 倍。现在在满足甚至超过 AlexNet 的 top-1 和 top-5 准确率的同时,SqueezeNet 实现了与 AlexNet 相比压缩 50倍。表 2 总结了所有上述的结果。
在这里插入图片描述

似乎我们已经超过了模型压缩社区最先进的结果,甚至当使用未压缩的 32 位值去表现模型,SqueezeNet 仍旧比模型压缩社区最好的结果小 1.4 倍,同时保持甚至超过基线准确率。至此,一个问题出现:小模型是否易于压缩?小模型是否“需要”所有的表现力都是由密集浮点数支持。为了解决这个问题,我们在 SqueezeNet 上应用深度压缩,使用 33%的稀疏和 8 位量化。这产出了与 AlexNet 准确率相等的 0.66MB 的模型(比 32位 AlexNet 小了 363倍)。更进一步,在 SqueezeNet 上应用 6 位量化和 33%稀疏的深度压缩,产生了准确率相当的0.47MB 的模型(比 32 位 ALexNet 小了 510 倍)。我们的小模型确实更易于压缩。

除此以外,结果表明深度压缩不仅只在有很多参数的 CNN 结构中表现好,而且能压缩早已紧密且全卷积的 SqueezeNet 结构。深度压缩在保持基线准确率的同时将 SqueezeNet压缩 10 倍。总结一下:将 CNN 结构的创新和最先进的压缩技术结合,在与基线对比的情况下不降低准确率,我们实现了模型大小 510 倍的压缩。

最后,注意深度压缩使用 codebook 作为它量化 CNN 参数为 6 或 8 位精度主题的一部分。因此,大多数商用处理器不够精密来实现深度压缩主题中 32/8=4 倍的 8 位量化或32/6=5.3 倍的 6 位量化。然而 Han 等人发展了定制硬件——高效推理引擎 Eifficent Inference Engine(EIE),可以更有效地计算codebook 量化的 CNN。除此以外,在我们发表 SqueezeNet的几个月后,P.Gysel 发展了一个名为 Ristretto 的策略,用于线性量化 SqueezeNet 到 8 位。特别地,在使用 Ristretto 策略对 SqueezeNet 推理进行 8 位计算时,Gysel 观察到当用 8 位替代 32 位数据类型时仅有小于 1 个百分点的准确率的下降。

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

截止目前,我们已经提出了小模型结构设计策略,根据这些原则去创造 SqueezeNet,发现 SqueezeNet 比同等准确率的 AlexNet 小 50 倍。然而,SqueezeNet 和其他模型都属于一个广泛的并且很大程度上未被探索的 CNN 结构设计空间。接下来,在第 5 和第 6 节我们将探索设计空间的方方面面。我们将空间探索分为两个主要的主题:微观探索(单模块层维度和配置)和宏观探索(模块间或层间高等端对端组织)。

在这一小节中,我们基于对 3.1 中提到的策略的尊重,以提供有关微观设计空间形状的直觉为目标,设计并执行了一组实验,实验的目的不是为了最大化每次实验过程中的准确率,而是理解 CNN 结构的选择对模型大小和准确率的影响。

5.1 CNN 微观结构元参数

在 3.2 中我们定义了 SqueezeNet 每个 Fire 模块三个维度的超参数: s 1 × 1 , e 1 × 1 s_{1×1}, e_{1×1} s1×1,e1×1,和 e 3 × 3 e_{3×3} e3×3。SqueezeNet 有 8 个 Fire 模块共计 24 个超参数。为了对类似 SqueezeNet 的结构做更广泛的设计空间的探索,我们定义了下面一组可以控制一个 CNN 中所有Fire 模块维度的高级元参数。我们定义 b a s e e base_e basee为第一个 Fire 模块中 expand 层的卷积核的数量。在每𝑓𝑟𝑒𝑞个 Fire 模块后,expand 层卷积核增加 i n c r e incr_e incre。换句话说,对于 Fire 模块 i,该模块内 expand 层所拥有的卷积核数目为 e i = b a s e e + ( i n c r e ∗ ⌊ i / f r e q ⌋ ) e_i = base_e + (incr_e ∗ ⌊i/freq⌋) ei=basee+(increi/freq)。在一个 Fire 模块的 expand 层中,一些卷积核是 1×1 的,一些是 3×3 的;定义 e i = e i , 1 × 1 + e i , 3 × 3 e_i = e_{i,1×1} + e_{i,3×3} ei=ei,1×1+ei,3×3,设 p c t 3 × 3 pct_{3×3} pct3×3(在 0 到 1 之间,为所有 Fire模块共用)为 expand 层中 3×3 卷积核的百分比。换句话说, e i , 3 × 3 = e i ∗ p c t 3 × 3 e_{i,3×3} = e_i ∗ pct_{3×3} ei,3×3=eipct3×3 并且 e i , 1 × 1 = e i ∗ ( 1 − p c t 3 × 3 ) e_{i,1×1} =e_i∗ (1 − pct_{3×3}) ei,1×1=ei(1pct3×3)。最后我们用一个叫做 squeeze ratio(SR)(0 到 1 之间的随机数,为所有Fire 模块共用)的超参数定义一个 Fire 模块中 squeeze 层中卷积核的数量: s i , 1 × 1 = S R ∗ e i s_{i,1×1} = SR ∗ e_i si,1×1=SRei 等效于 s i , 1 × 1 = S R ∗ ( e i , 1 × 1 + e i , 3 × 3 ) s_{i,1×1} = SR ∗ (e_{i,1×1} + e_{i,3×3}) si,1×1=SR(ei,1×1+ei,3×3)。表 1 中的 SqueezeNet 是一个利用上述元参数创建的实例结构。特别地,使用元参数如下: b a s e e = 128 , i n c r e = 128 , p c t 3 × 3 = 0.5 , f r e q = 2 , S R = 0.125 base_e = 128,incr_e = 128, pct_{3×3} = 0.5, freq = 2, SR=0.125 basee=128,incre=128,pct3×3=0.5,freq=2,SR=0.125

在这些实验中,我们使用 SqueezeNet(图 2)作为起点。使用元参数为: b a s e e = 128 , i n c r e = 128 , p c t 3 × 3 = 0.5 , f r e q = 2 base_e = 128,incr_e = 128, pct_{3×3} = 0.5, freq = 2 basee=128,incre=128,pct3×3=0.5,freq=2,我们训练多个squeeze ration 值不同的模型,其中squeeze ratio 处于[0.125,1.0]区间内。图 3(a)中展示了实验结果,图中每个点是一个独立模型。从图中我们了解到SR 值的增加超过 0.125 可以进一步增加 ImageNet 的 top-5 准确率,从准确率为 80.3%的 4.8MB 模型到准确率为 86.0%的 19MB 模型。准确率在 SR=0.75 时稳定在 86.0%(一个 19MB 的模型),继续设置 SR=1.0 只会进一步增加模型大小而不能提高准确率。
在这里插入图片描述

5.3 权衡 1×1 和 3×3 卷积核

3.1中,我们提出通过用 1×1 卷积核替换 3×3 卷积核来减少一个 CNN 的参数量。一个开放性的问题:一个 CNN 卷积核的空间分辨率有多重要。VGG 结构许多层卷积核是 3×3 的空间分辨率;GoogleNet 和 Network-in-Networ(NiN)的一些层是 1×1 卷积核。在 GoogleNet 和 Network-in-Network 中作者简单提出了一个 1×1和 3×3 卷积核的特定的量,并未做进一步的分析。在此,我们尝试去弄清楚 1×1 和 3×3 卷积核的比例如何影响模型大小和准确率。

在此实验中,我们使用以下元参数 b a s e e = 128 , i n c r e = 128 , f r e q = 2 , S R = 0.500 base_e = 128,incr_e = 128, freq = 2,SR=0.500 basee=128,incre=128,freq=2,SR=0.500,设置 p c t 3 × 3 pct_{3×3} pct3×3从 1%到 99%变化。换句话说,每个 Fire 块的 expand 层有一个预先设定的 1×1 和3×3 卷积核数量的比例,这里我们将选择卷积核是“以 1×1 为主”或“以 3×3 为主”。正如前面的实验,这些模型有 8 个 Fire 模块,随后的组织与图 2 相同。图 3(b)说明了实验结果。注意图 3(a)中和图 3(b)中是相同的结构,均为 13MB:SR=0.500,$pct_{3×3} = 50%。可以看到当使用 50%的 3×3 卷积核时 top-5 准确率在 85.6%达到稳定,进一步增加 3×3 卷积核的百分比导致模型体积更大同时在 ImageNet 上的准确率并无提升。

6. CNN 宏观结构设计空间探索

目前我们已经在微观结构级别探索了 CNN 单个模块内容的设计空间。现在我们要考虑Fire 模块间的高级连接在宏观结构级别探索设计决策。受 ResNet 的启发,我们探索出三种不同的结构:

  • Vanilla SqueezeNet(与前面的部分相同)。
  • 在 Fire 模块间有简单旁路的 SqueezeNet。
  • 在 Fire 模块间有复杂旁路的 SqueezeNet。

我们在图 2 中对这三种变体进行了阐述。

简单旁路结构在 Fire 模块 3、5、7 和 9 添加旁路连接,需要这些模块去学习输入输出间的残差函数。正如 ResNet 中,围绕 Fire3 执行一个旁路连接,设置 Fire4 的输入等于 Fire2的输出+Fire3 的输出,其中+处理器是按元素进行的添加。这改变了应用于这些 Fire 模块参数的正则化,可以提升完整模型最终的准确率和性能。

有一个限制是,在这个直接的例子中,输入通道数和输出通道数必须相等。结果只有一半的 Fire 模块可以使用简单旁路连接,正如图 2 中间的图所示。当相等的通道数不能满足时,我们使用复杂旁路连接,正如图 2 右图所示。简单旁路仅是一根导线,我们定义一个复杂旁路是一个包含 1×1卷积层的旁路,其卷积核数目使得输出通道的数目是我们所需要的。需要注意的是复杂旁路给模型带来了额外的参数,但是简单旁路则不会。

除改变正则化以外,增加旁路连接将直观地有助于缓解由 squeeze 层带来的表征瓶颈。在 SqueezeNet 中,squeeze ratio(SR)是 0.125,意味着每个squeeze 层输出通道比与之配合的 expand 层少 8 倍。由于严重的维度减少,受限的信息才能通过 squeeze 层。然而,通过给 Squeeze 增加旁路连接,给信息流过 squeeze 层开辟了小路。

表 3 为图 2 中三种宏观结构的 SqueezeNet 的模型大小和准确率对比。通过宏观结构探索按表 1 描述固定微观结构以匹配 SqueezeNet。复杂化和建立旁路连接都提升了准确率,均超过 Vanilla SqueezeNet 结构。有趣的是,简单旁路连接能得到一个高于复杂旁路连接的准确率。简单旁路连接在 top-1准确率上产生 2.9 个百分点的增长,在 top-5 准确率上产生2.2 个百分点的增长,并且未造成模型体积的增长。
在这里插入图片描述

7. 总结

在这篇论文里,我们提出了更为严谨的卷积神经网络设计空间探索的方法步骤。出于这个目标,我们提出了 SqueezeNet,一个在 ImageNet 上保持AlexNet 级别的准确率但参数比 AlexNet 少 50 倍的 CNN 结构。我们也将 SqueezeNet 压缩到小于 0.5MB,或比未压缩的AlexNet 小 510 倍。自 2016年发表这篇论文作为技术报告以来,SongHan 和他的同事利用SqueezeNet和模型压缩进一步实验。使用一个叫 Dense-Sparse-Dense(DSD)的新方法,Han等人使用模型压缩作为正则项来进一步提升准确率,产生了一个SqueezeNet 参数的压缩集和一个 SqueezeNet 参数的未压缩集,与我们表2 中的结果相比,压缩集在 ImageNet-1k 上准确率提升 1.2 个百分点,未压缩集准确率提升 4.3 个百分点。

在论文开始时提到小模型更易于在 FPGAs 片内执行,自发表 SqueezeNet模型以来,Gschwend 发展了一个 SqueezeNet 的变体并将其应用在一个FPGA 上。正如我们所预料的那样,Gschwend 可以完全在 FPAG 内存储类似 SqueezeNet 模型的参数来加载模型参数,消除了片外内存的需要。贯穿本文,我们将 ImageNet 看作标志数据集。然而,应用 ImageNet 训练的CNN 到许多像手势识别、图标识别和根据图像生成句子的应用中已经变得非常常见。ImageNet 训练的 CNN 同样可以被应用到很多有关于自动驾驶的应用中,包括图像中的行人和车辆检测和道路分割。我们认为 SqueezeNet 是大量应用好的候选 CNN 结构,尤其是那些小的模型体积很重要的应用。

SqueezeNet 是我们在广泛探索 CNN 结构设计空间时发现的几个新的 CNNs 之一。我们希望 SqueezeNet 能够启发读者去思考和探索 CNN 结构设计空间广阔的随机可能性并且在更为系统的人工实验下完成探索。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2021-03-26 20:54:33,596 - Model - INFO - Epoch 1 (1/200): 2021-03-26 20:57:40,380 - Model - INFO - Train Instance Accuracy: 0.571037 2021-03-26 20:58:16,623 - Model - INFO - Test Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Best Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Save model... 2021-03-26 20:58:16,623 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 20:58:16,698 - Model - INFO - Epoch 2 (2/200): 2021-03-26 21:01:26,685 - Model - INFO - Train Instance Accuracy: 0.727947 2021-03-26 21:02:03,642 - Model - INFO - Test Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Best Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Save model... 2021-03-26 21:02:03,643 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 21:02:03,746 - Model - INFO - Epoch 3 (3/200): 2021-03-26 21:05:15,349 - Model - INFO - Train Instance Accuracy: 0.781606 2021-03-26 21:05:51,538 - Model - INFO - Test Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,538 - Model - INFO - Best Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,539 - Model - INFO - Save model... 2021-03-26 21:05:51,539 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 我有类似于这样的一段txt文件,请你帮我写一段代码来可视化这些训练结果
02-06

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值