【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)

SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

论文名称:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
论文下载:https://arxiv.org/abs/1704.04861
论文年份:ICLR 2016
论文被引:5476(2022/05/11)
论文代码:https://pytorch.org/hub/pytorch_vision_squeezenet/,https://github.com/DeepScale/SqueezeNet

论文总结

本文提出了一个 Fire module,其是一个两层的CNN,其中第一层全为 1×1 卷积,第二层是 1×1 和 3×3 卷积。然后基于此模块构建了 SqueezeNet,并将 Deep Compression (Han et al., 2015a) 应用到 SqueezeNet,使用 33% 的稀疏度 6 和 8 位量化。与 AlexNet 相比,将模型尺寸减小了 50 倍,同时达到或超过了 AlexNet 的 top-1 和 top-5 精度。

ABSTRACT

Recent research on deep convolutional neural networks (CNNs) has focused primarily on improving accuracy. For a given accuracy level, it is typically possible to identify multiple CNN architectures that achieve that accuracy level. With equivalent accuracy, smaller CNN architectures offer at least three advantages: (1) Smaller CNNs require less communication across servers during distributed training. (2) Smaller CNNs require less bandwidth to export a new model from the cloud to an autonomous car. (3) Smaller CNNs are more feasible to deploy on FPGAs and other hardware with limited memory. To provide all of these advantages, we propose a small CNN architecture called SqueezeNet. SqueezeNet achieves AlexNet-level accuracy on ImageNet with 50x fewer parameters. Additionally, with model compression techniques, we are able to compress SqueezeNet to less than 0.5MB (510× smaller than AlexNet).

最近对深度卷积神经网络 (CNN) 的研究主要集中在提高准确性上。对于给定的准确度级别,通常可以识别达到该准确度级别的多个 CNN 架构。在同等精度的情况下,较小的 CNN 架构至少具有三个优点

  • 1)较小的 CNN 在分布式训练期间需要较少的服务器间通信。
  • 2)较小的 CNN 需要较少的带宽来将新模型从云端导出到自动驾驶汽车。
  • 3)较小的 CNN 更适合部署在 FPGA 和其他内存有限的硬件上。

为了提供所有这些优势,我们提出了一种称为 SqueezeNet 的小型 CNN 架构。 SqueezeNet 在 ImageNet 上实现了 AlexNet 级别的精度,参数减少了 50 倍。此外,通过模型压缩技术,我们能够将 SqueezeNet 压缩到小于 0.5MB(比 AlexNet 小 510 倍)

1 INTRODUCTION AND MOTIVATION

最近关于深度卷积神经网络 (CNN) 的大部分研究都集中在提高计算机视觉数据集的准确性上。对于给定的准确度级别,通常存在多个达到该准确度级别的 CNN 架构。在同等精度的情况下,具有较少参数的 CNN 架构有几个优点

  • 更高效的分布式训练。服务器之间的通信是分布式 CNN 训练可扩展性的限制因素。对于分布式数据并行训练,通信开销与模型中的参数数量成正比(Iandola et al., 2016)。简而言之,小型模型由于需要较少的通信而训练得更快
  • 向客户导入新模型时开销更少。对于自动驾驶,特斯拉等公司会定期将新车型从其服务器复制到客户的汽车上。这种做法通常被称为无线更新。消费者报告发现,特斯拉 Autopilot 半自动驾驶功能的安全性随着最近的无线更新而逐渐提高(消费者报告,2016 年)。然而,当今典型 CNN/DNN 模型的无线更新可能需要大量数据传输。使用 AlexNet,这需要从服务器到汽车的 240MB 通信。较小的模型需要较少的通信,从而使频繁更新更可行。
  • 可行的FPGA 和嵌入式部署。 FPGA 通常具有小于 10MB 的片上存储器,并且没有片外存储器或存储。对于推理,一个足够小的模型可以直接存储在 FPGA 上,而不受内存带宽的限制(Qiu et al., 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 RELATED WORK

2.1 MODEL COMPRESSION

我们工作的首要目标是确定一个在保持准确性的同时参数很少的模型。为了解决这个问题,一种明智的方法是采用现有的 CNN 模型并以有损方式对其进行压缩。事实上,围绕模型压缩的主题已经出现了一个研究社区,并且已经报道了几种方法。

  • Denton 等人的一个相当简单的方法。是将奇异值分解 (SVD) 应用于预训练的 CNN 模型 (Denton et al., 2014)。
  • Han 等人开发了 Network Pruning,它从预训练模型开始,然后用零替换低于某个阈值的参数以形成稀疏矩阵,最后在稀疏 CNN 上进行几次迭代训练 (Han et al., 2015b)
  • 最近,Han 等人通过将网络修剪与量化(到 8 位或更少)和霍夫曼编码相结合来扩展他们的工作,以创建一种称为深度压缩的方法 (Han 等人,2015a),并进一步设计了一种称为 EIE 的硬件加速器 (Han 等人,2016a) 直接在压缩模型上运行,实现显著的加速和节能。

2.2 CNN MICROARCHITECTURE

卷积已在人工神经网络中使用至少 25 年; LeCun 等人帮助在 1980 年代后期普及用于数字识别应用的 CNN(LeCun 等,1989)。在神经网络中,卷积滤波器通常是 3D 的,以高度、宽度和通道为关键维度。当应用于图像时,CNN 滤波器通常在其第一层(即 RGB)中具有 3 个通道,并且在每个后续层 Li 中,滤波器具有与 Li-1 滤波器相同数量的通道。 LeCun 等人的早期工作使用 5x5xChannels 滤波器(从现在开始,简单地将 HxWxChannels 缩写为 HxW),

  • 最近的 VGG (Simonyan & Zisserman, 2014) 架构广泛使用 3×3 滤波器。

  • Network-in-Network (Lin et al., 2013) 和 GoogLeNet 系列架构 (Szegedy et al., 2014; Ioffe & Szegedy, 2015; Szegedy et al., 2015; 2016) 在某些模型中使用 1×1 滤波器层。

随着设计非常深的 CNN 的趋势,手动选择每一层的滤波器尺寸变得很麻烦。为了解决这个问题,已经提出了由具有特定固定组织的多个卷积层组成的各种更高级别的构建块或模块。例如,GoogLeNet 论文提出了 Inception 模块,它由许多不同维度的滤波器组成,通常包括 1×1 和 3×3,有时还有 5×5,有时还有 1×3 和 3×1。然后将许多这样的模块组合起来,也许还有额外的 ad-hoc 层,以形成一个完整的网络。我们使用术语 CNN 微观架构(microarchitecture)来指代各个模块的特定组织和维度

2.3 CNN MACROARCHITECTURE

虽然 CNN 微观架构指的是单个层和模块,但我们将 CNN 宏观架构定义为将多个模块组合成端到端 CNN 架构的系统级组织

也许最近文献中研究最广泛的 CNN 宏观架构主题是网络中深度(即层数)的影响。 Simoyan 和 Zisserman 提出了具有 12 到 19 层的 VGG (Simonyan & Zisserman, 2014) 系列 CNN,并报告说更深的网络在 ImageNet-1k 数据集上产生更高的准确度 (Deng et al., 2009)。 K. He 等人提出了具有多达 30 层的更深层次的 CNN,可提供更高的 ImageNet 精度(He et al., 2015a)。

跨多个层或模块的连接选择是 CNN 宏观架构研究的一个新兴领域Residual Networks (ResNet) 和 Highway Networks 都提出使用跳过多个层的连接,例如将第 3 层的激活连接到层的激活6。我们将这些连接称为旁路连接(bypass connections)。 ResNet 的作者提供了具有和不具有旁路连接的 34 层 CNN 的 A/B 比较;添加旁路连接可使 Top-5 ImageNet 准确度提高 2 个百分点

2.4 NEURAL NETWORK DESIGN SPACE EXPLORATION

神经网络(包括深度神经网络和卷积神经网络)具有很大的设计空间,有多种微观架构、宏观架构、求解器和其他超参数可供选择。社区想要了解这些因素如何影响 NN 的准确性(即设计空间的形状)似乎很自然。 NN 的设计空间探索 (DSE) 的大部分工作都集中在开发自动化方法来寻找可提供更高准确性的 NN 架构。这些自动化 DSE 方法包括

  • 贝叶斯优化 (Snoek et al., 2012)
  • 模拟退火 (Ludermir et al., 2006)
  • 随机搜索 (Bergstra & Bengio, 2012)
  • 遗传算法 (Stanley & Miikkulainen, 2002)

值得称赞的是,这些论文中的每一篇都提供了一个案例,其中提出的 DSE 方法产生了一个 NN 架构,与代表性基线相比,该架构实现了更高的准确性。然而,这些论文并没有试图提供关于 NN 设计空间形状的直觉。在本文后面,我们避开了自动化方法——相反,我们重构 CNN,以便我们可以进行有原则的 A/B 比较,以研究 CNN 架构决策如何影响模型大小和准确性

在以下部分中,我们首先提出和评估带有和不带有模型压缩的 SqueezeNet 架构。然后,我们探讨了设计选择对 SqueezeNet 类 CNN 架构的微观架构和宏架构的影响

3 SQUEEZENET: PRESERVING ACCURACY WITH FEW PARAMETERS

在本节中,我们首先概述了我们针对具有少量参数的 CNN 架构的设计策略。然后,我们介绍 Fire 模块,这是我们构建 CNN 架构的新构建块。最后,我们使用我们的设计策略来构建主要由 Fire 模块组成的 SqueezeNet。

3.1 ARCHITECTURAL DESIGN STRATEGIES

我们在本文中的首要目标是识别具有少量参数的 CNN 架构,同时保持具有竞争力的准确性。为了实现这一点,我们在设计 CNN 架构时采用了三种主要策略:

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

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

策略 3:在网络后期下采样,使卷积层具有大的激活图。在卷积网络中,每个卷积层都会产生一个输出激活图,其空间分辨率至少为 1×1,通常远大于 1×1。这些激活图的高度和宽度由以下因素控制

  • 1)输入数据的大小(例如 256×256 图像)

  • 2)在 CNN 架构中下采样的层的选择

最常见的是,通过在某些卷积或池化层中设置(步幅 > 1),例如 (Szegedy et al., 2014; Simonyan & Zisserman, 2014; Krizhevsky et al., 2012) ,将下采样设计到 CNN 架构中。如果网络中早期层的步幅较大,则大多数层的激活图都较小。相反,如果网络中的大多数层的步幅为 1,并且大于 1 的步幅集中在网络的末端,那么网络中的许多层都会有很大的激活图。我们的直觉是,大的激活图(由于延迟下采样)可以导致更高的分类准确度,而其他所有条件都保持不变。事实上,K. He 和 H. Sun 将延迟下采样(delayed downsampling)应用于四种不同的 CNN 架构,并且在每种情况下,延迟下采样都会导致更高的分类准确度(He & Sun,2015)。

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

3.2 THE FIRE MODULE


我们将 Fire 模块定义如下。如图 1 所示,Fire 模块由以下部分组成:

  • 一个挤压卷积层(只有 1×1 滤波器)
  • 输入到一个混合了 1×1 和 3×3 卷积滤波器的扩展层

在 Fire 模块中自由使用 1×1 滤波器是对第 3.1 节中策略 1 的应用。在 Fire 模块有三个可调维度(超参数):s1x1,e1x1 和 e3x3。在一个Fire模块中,

  • s1x1 是 squeeze 层的 filter 个数(都是1×1)

  • e1x1 是 expand 层的 1×1 个 filters

  • e3x3 是 expand 层的 3×3 个 filters

当我们使用 Fire 模块时,我们将 s1x1 设置为小于 (e1x1 + e3x3),因此根据 3.1 节中的策略 2,挤压层有助于限制 3×3 滤波器的输入通道数

3.3 THE SQUEEZENET ARCHITECTURE

在图 2 中描述 SqueezeNet CNN 架构。SqueezeNet 从一个独立的卷积层 (conv1) 开始,然后是 8 个 Fire 模块 (fire2-9),最后是一个最终的卷积层 (conv10)。从网络开始到结束逐渐增加每个 Fire 模块的滤波器数量。 SqueezeNet 在 conv1、fire4、fire8 和 conv10 层之后以 2 的步幅执行最大池化;这些相对较晚的池放置是根据第 3.1 节中的策略 3。表 1 中展示了完整的 SqueezeNet 架构。

3.3.1 OTHER SQUEEZENET DETAILS

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

  • 为了使 1×1 和 3×3 滤波器的输出激活具有相同的高度和宽度,我们在扩展模块的 3×3 滤波器的输入数据中添加了一个 1 像素的零填充边框。
  • ReLU (Nair & Hinton, 2010) 应用于来自挤压和扩展层的激活。
  • 在 fire9 模块之后应用 50% 的 Dropout (Srivastava et al., 2014)。
  • 注意 SqueezeNet 中缺少全连接层,这种设计选择的灵感来自 NiN (Lin et al., 2013) 架构
  • 在训练 SqueezeNet 时,学习率从 0.04 开始,然后在整个训练过程中线性降低学习率,如 (Mishkin et al., 2016) 中所述。有关训练协议的详细信息(例如批量大小、学习率、参数初始化),请参阅我们位于此处的 Caffe 兼容配置文件:https://github.com/DeepScale/SqueezeNet。
  • Caffe 框架本身不支持包含多个滤波器分辨率(例如 1×1 和 3×3)的卷积层(Jia et al., 2014)。为了解决这个问题,使用两个单独的卷积层来实现扩展层:一个具有 1×1 滤波器的层和一个具有 3×3 滤波器的层。然后,将这些层的输出在通道维度中连接在一起。这在数值上等同于实现一个包含 1×1 和 3×3 滤波器的层。

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

  • MXNet (Chen et al., 2015a) port of SqueezeNet: (Haria, 2016)
  • Chainer (Tokui et al., 2015) port of SqueezeNet: (Bell, 2016)
  • Keras (Chollet, 2016) port of SqueezeNet: (DT42, 2016)
  • Torch (Collobert et al., 2011) port of SqueezeNet’s Fire Modules: (Waghmare, 2016)

4 EVALUATION OF SQUEEZENET

我们现在将注意力转向评估 SqueezeNet。在第 2.1 节中回顾的每篇 CNN 模型压缩论文中,目标是压缩一个 AlexNet (Krizhevsky et al., 2012) 模型,该模型经过训练可以使用 ImageNet 对图像进行分类 (Deng et al., 2009) (ILSVRC 2012)数据集。因此,我们在评估 SqueezeNet 时使用 AlexNet 和相关的模型压缩结果作为比较的基础。

在表 2 中,我们在最近的模型压缩结果的背景下回顾了 SqueezeNet。

  • 基于 SVD 的方法能够将预训练的 AlexNet 模型压缩 5 倍,同时将 top-1 准确率降低到 56.0% (Denton et al., 2014)。
  • Network Pruning 在保持 ImageNet 上 57.2% 的 top-1 和 80.3% 的 top-5 准确率的基础上,将模型大小减少了 9 倍(Han et al., 2015b)。
  • 深度压缩实现了 35 倍的模型尺寸减小,同时仍保持基线准确度水平(Han 等人,2015a)。

现在,使用 SqueezeNet,与 AlexNet 相比,我们实现了 50 倍的模型尺寸减小,同时达到或超过了 AlexNet 的 top-1 和 top-5 精度。我们在表 2 中总结了所有上述结果。

看起来我们已经超越了模型压缩社区的最新成果:即使使用未压缩的 32 位值来表示模型,SqueezeNet 的模型大小也比已有研究中模型压缩的最佳结果小 1.4 倍,同时保持或超过基线准确性。到目前为止,一个悬而未决的问题是:小型模型是否适合压缩,或者小型模型是否“需要”密集浮点值提供的所有表示能力?为了找出答案,我们将 Deep Compression (Han et al., 2015a) 应用到 SqueezeNet,使用 33% 的稀疏度 6 和 8 位量化。这产生了一个 0.66 MB 的模型(比 32 位 AlexNet 小 363 倍),其精度与 AlexNet 相当。此外,在 SqueezeNet 上应用具有 6 位量化和 33% 稀疏度的深度压缩,我们生成了一个 0.47MB 的模型(比 32 位 AlexNet 小 510 倍),精度相当。我们的小模型确实可以压缩。

此外,这些结果表明,Deep Compression (Han et al., 2015a) 不仅适用于具有许多参数的 CNN 架构(例如 AlexNet 和 VGG),而且还能够压缩已经紧凑的全卷积 SqueezeNet 架构。 Deep Compression 将 SqueezeNet 压缩了 10 倍,同时保留了基线精度。总之:通过将 CNN 架构创新 (SqueezeNet) 与最先进的压缩技术 (Deep Compression) 相结合,与基线相比,我们实现了 510 倍的模型尺寸减小,而准确性没有降低。

最后,请注意,Deep Compression (Han et al., 2015b) 使用codebook作为其方案的一部分,将 CNN 参数量化为 6 位或 8 位精度。因此,在大多数商用处理器上,使用 Deep Compression 中开发的方案实现 32/8 = 4x 的 8 位量化或 32/6 = 5.3x 的 6 位量化并非易事。然而,韩等人开发了定制硬件 – 高效推理引擎 (EIE),可以更有效地计算codebook量化的 CNN (Han et al., 2016a)。此外,在我们发布 SqueezeNet 的几个月里,P. Gysel 开发了一种称为 Ristretto 的策略,用于将 SqueezeNet 线性量化为 8 位 (Gysel,2016)。具体来说,Ristretto 以 8 位进行计算,并将参数和激活存储在 8 位数据类型中。在 SqueezeNet 推理中使用 Ristretto 策略进行 8 位计算,Gysel 观察到在使用 8 位而不是 32 位数据类型时,准确度下降不到 1 个百分点

5 CNN MICROARCHITECTURE DESIGN SPACE EXPLORATION

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

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

5.1 CNN MICROARCHITECTURE METAPARAMETERS

在 SqueezeNet 中,每个 Fire 模块都有我们在第 3.2 节中定义的三个维度超参数:【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)SqueezeNet 有 8 个 Fire 模块,共有 24 维超参数。为了对类 SqueezeNet 架构的设计空间进行广泛扫描,我们定义了以下一组更高级别的元参数,这些元参数控制 CNN 中所有 Fire 模块的尺寸。我们将 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) 定义为 CNN 中第一个 Fire 模块中扩展滤波器的数量。在每个 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) Fire 模块之后,将扩展滤波器的数量增加 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)。换句话说,对于 Fire 模块 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB),扩展滤波器的数量是 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)。在 Fire 模块的扩展层中,有些滤波器是 1×1,有些是 3×3;我们【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) 定义为 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)(在 [0, 1] 范围内,在所有 Fire 模块中共享)作为 3×3 扩展滤波器的百分比。换句话说,【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB),并且 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)。最后,使用称为挤压比 (SR) 的元参数定义 Fire 模块的挤压层中的滤波器数量(同样,在 [0, 1] 范围内,由所有 Fire 模块共享): 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) 或等价于 【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB)。 SqueezeNet(表 1)是使用上述元参数集生成的示例架构。具体来说,SqueezeNet 具有以下元参数:【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) = 128、【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) = 128、【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) = 0.5、freq = 2 和 SR = 0.125

5.2 SQUEEZE RATIO

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

在这些实验中,我们使用 SqueezeNet(图 2)作为起点。与在 SqueezeNet 中一样,这些实验使用以下元参数:【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) = 128、【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) = 128、【CV】SqueezeNet:用于嵌入式设备的轻量化 CNN 压缩模型(0.5MB) = 0.5、freq = 2 和 SR = 0.125。我们训练多个模型,其中每个模型在 [ 0.125, 1.0]。在图 3(a) 中,我们展示了这个实验的结果,图中的每个点都是一个从头开始训练的独立模型。 SqueezeNet 是该图中的 SR=0.125 点。从该图中,我们了解到,**将 SR 增加到 0.125 以上可以进一步将 ImageNet top-5 准确率从 4.8MB 模型的 80.3%(即 AlexNet 级别)提高到 19MB 模型的 86.0% **。 SR=0.75(19MB 模型)时,准确率稳定在 86.0%,设置 SR=1.0 会进一步增加模型大小而不会提高准确度。

5.3 TRADING OFF 1X1 AND 3X3 FILTERS

在第 3.1 节中,我们建议通过用 1×1 滤波器替换一些 3×3 滤波器来减少 CNN 中的参数数量。一个悬而未决的问题是,CNN 滤波器中的空间分辨率有多重要

VGG (Simonyan & Zisserman, 2014) 架构在大多数层的滤波器中具有 3×3 的空间分辨率; GoogLeNet (Szegedy et al., 2014) 和 Network-in-Network (NiN) (Lin et al., 2013) 在某些层中有 1×1 滤波器。在 GoogLeNet 和 NiN 中,作者只是简单地提出了特定数量的 1×1 和 3×3 滤波器,而没有进一步分析。在这里,我们试图阐明 1×1 和 3×3 滤波器的比例如何影响模型大小和准确性

我们在本实验中使用以下元参数:basee = incre = 128,freq = 2,SR = 0.500,我们将 pct3x3 从 1% 更改为 99%。换句话说,每个 Fire 模块的扩展层都有预定义数量的滤波器,划分为 1×1 和 3×3,在这里我们将这些滤波器的旋钮从“大部分 1×1”转到“大部分 3×3”。与之前的实验一样,这些模型有 8 个 Fire 模块,其层组织结构与图 2 相同。我们在图 3(b) 中展示了该实验的结果。请注意,图 3(a) 和图 3(b) 中的 13MB 模型是相同的架构:SR = 0.500 和 pct3x3 = 50%。我们在图 3(b) 中看到,使用 50% 的 3×3 滤波器时,前 5 名的准确率稳定在 85.6%,进一步增加 3×3 滤波器的百分比会导致更大的模型尺寸,但在 ImageNet 上的准确度没有提高

6 CNN MACROARCHITECTURE DESIGN SPACE EXPLORATION

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

  • Vanilla SqueezeNet(根据前面的部分)。
  • SqueezeNet 在一些Fire 模块之间具有简单的旁路连接。灵感来自 (Srivastava et al., 2015; He et al., 2015b)。
  • SqueezeNet 在其余 Fire 模块之间具有复杂的旁路连接。

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

我们简单的旁路架构在 Fire 模块 3、5、7 和 9 周围添加了旁路连接,要求这些模块学习输入和输出之间的残差函数。与在 ResNet 中一样,为了实现 Fire3 周围的旁路连接,我们将 Fire4 的输入设置为等于(Fire2 的输出 + Fire3 的输出),其中 + 运算符是元素加法。这改变了应用于这些 Fire 模块参数的正则化,并且根据 ResNet,可以提高最终的准确性和/或训练完整模型的能力。

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

除了改变正则化之外,我们直观地认为,添加旁路连接将有助于缓解挤压层引入的表征瓶颈。在 SqueezeNet 中,挤压比 (SR) 为 0.125,这意味着每个挤压层的输出通道比伴随的扩展层少 8 倍。由于这种严重的降维,有限数量的信息可以通过挤压层。然而,通过向 SqueezeNet 添加旁路连接,我们开辟了信息在挤压层周围流动的途径。

7 CONCLUSIONS

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

我们在本文开头附近提到,小型模型更适合 FPGA 上的片上实现。自从我们发布了 SqueezeNet 模型以来,Gschwend 开发了 SqueezeNet 的一个变体,并在 FPGA 上实现了它(Gschwend,2016)。正如我们预期的那样,Gschwend 能够将类似 SqueezeNet 的模型的参数完全存储在 FPGA 中,并且无需通过片外存储器访问来加载模型参数。

在本文的上下文中,我们专注于 ImageNet 作为目标数据集。然而,将 ImageNet 训练的 CNN 表示应用于各种应用已经成为一种常见的做法,例如

  • 细粒度目标识别 (Zhang et al., 2013; Donahue et al., 2013)
  • 图像中的徽标识别 (Iandola et al. ., 2015)
  • 生成关于图像的句子 (Fang et al., 2015)

ImageNettrained CNN 也已应用于与自动驾驶相关的许多应用,包括

  • 图像中的行人和车辆检测 (Iandola al., 2014; Girshick al., 2015; Ashraf al., 2016)
  • 视频中的行人和车辆检测 (Chen al., 2015b)
  • 分割道路的形状 (Badrinarayanan et al., 2015)

我们认为 SqueezeNet 将成为各种应用程序的一个很好的候选 CNN 架构,尤其是那些对小模型尺寸很重要的应用程序。

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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2022年5月13日
下一篇 2022年5月13日

相关推荐