前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >squeezenet 论文阅读

squeezenet 论文阅读

原创
作者头像
yzh
修改2020-09-08 17:52:17
5480
修改2020-09-08 17:52:17
举报
文章被收录于专栏:YZh学习记录YZh学习记录

1 研究背景:

最近对深卷积神经网络 (CNNs) 的研究主要集中在提高计算机视觉数据集的精确度上。对于给定的精度级别, 通常可以用不同的 CNN 体系结构来实现了该精度级别。而具有更少参数的 CNN 体系结构具有以下几个优点:

(1)更高效的分布式训练

(2)向客户端导出新模型时的开销更小

(3)可行的 FPGA 和嵌入式部署

2 相关工作

2.1 模型压缩

奇异值分解 (SVD)

网络修剪

深压缩

【目前对模型压缩的理论以及方法还不熟悉,后续加强此方面学习】

2.2 CNN 微结构

CNNs网络结构越来越深的大趋势下, 手动选择每个层的过滤尺寸变得很麻烦。为了解决这一问题, 提出了由多个卷积层组成的各种更高级别的构建块或模块.然后将许多这样的模块组合起来, 也许还有其他的(ad-hoc)层来组成一个完整的网络. 我们使用CNN 微体系结构【CNN microarchitecture】一词来引用各个模块的特定组织和维度。

2.3 CNN 宏观结构

虽然微体系结构是指单个层和模块, 但我们将CNN macroarchitecture定义为多个模块的系统级组织, 使其成为一个端到端的 CNN 架构。

从Vgg 12层到19层开始,网络层数是热门话题。加深网络层数可获得较高的准确性。

ResNet 残差网络,解决网络加深,性能退化问题。

2.4 网络设计空间探索

神经网络 (包括深度网络和卷积神经网络) 具有很大的设计空间, 比如说microarchitectures、macroarchitectures的设计和其他超参数的选择。神经网络设计空间探索的大部分工作都侧重于开发自动化的方法, 以找到更高精度的神经网络体系结构。这些自动化方法包括贝叶斯优化 (Snoek et, 2012), 模拟退火 (Ludermir 等, 2006), 随机搜索 (Bergstra & Bengio, 2012) 和遗传算法 (Stanley & Miikkulainen, 2002)。值得赞扬的是,每一篇论文都提供了一个案例,在这个案例中,提出的DSE方法产生了一个NN体系结构,与一个具有代表性的基础神经网络相比,它的精确度的确更高。然而, 这些论文并没有试图提供关于神经网络设计空间形状的直觉。在本文的后面, 我们避开了自动化的方法-相反, 我们通过重构 CNNs 的方式, 这样就就可以做A/B的比较, 从而可以探索出CNN 架构是如何影响模型的大小和准确性的。

在下面的章节中, 我们首先提出和评估了 SqueezeNet 网络结构, 并没有模型压缩。然后, 我们探讨了微体系结构宏观体系结构中的设计选择对 SqueezeNet 型 CNN 架构的影响。

3 SQUEEZENET: 使用少量参数保持精度

3.1 结构设计策略

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

策略 1.用1x1 滤镜替换3x3 滤镜。

考虑到一定数量的卷积的预算, 我们将选择大量使用1x1卷积, 因为1x1 卷积的参数比3x3 过滤器少了 9X.

策略 2.减少3x3 卷积输入通道的数量。

假设有一个卷积层, 它完全由3x3 卷积组成。此层中参数的总数量为:(输入通道数) * (过滤器数) * (3 * 3)。因此, 为了在 CNN 中得到更少的参数, 不仅要减少3x3 过滤器的数量 (参见上面的策略 1), 还要减少3x3 卷积中输入通道的数量。我们使用squeeze层将输入通道的数量减少, 在下一节中我们将对其进行描述。

策略 3.在网络中延迟下采样的时间, 以便卷积层具有较大的特征图。

在卷积网络中,每个卷积层输出一个特征图,特征图的宽度和高度由一下内容决定:

(1)输入数据的大小

(2)在CNN 体系结构中缩减像素采样的层的选择

我们的直觉是, 在其他不变的情况下,大的特征图 (由延迟下采样产生) 可以导致更高的分类精度 。的确, K.He和 h. Sun 将延迟下采样率应用到四种不同的 CNN 体系结构中, 在每种情况下, 延迟下采样都会导致分类精度变高 (He& Sun, 2015).【这里所说的下采样应该就是指池化】

策略1和2是关于在尽可能保持模型准确度地情况下减少 CNN 的参数数量,。策略3是关于在有限的参数数量下最大化精度。接下来, 我们描述的Fire模块, 将使我们能够成功地使用战略 1, 2 和3。

3.2 Fire Model

图1
图1

一个Fire模块包括:

一个squeeze层 (只有1x1 卷积), 将其放入一个具有1x1 和3x3 卷积组合的expand层中(图1)。

在Fire模块中随意使用1x1 过滤器是应用3.1节中的策略1。

在一个Fire模块中有三个超参数: s1x1, e1x1和 e3x3。在Fire模块中, s1x1 是squeeze层 (所有 1x1) 中的过滤器数, e1x1是1x1 卷积在expand层的数量, e3x3 3x3卷积在expand层的数量。当我们使用Fire模块时, 我们设置 s1x1 小于 (e1x1 e + 3x3 ), 因此, expand层有助于限制3x3卷积中输入通道的数量即3.1节中的策略 2

3.3 SQUEEZENET 体系结构

我们现在描述了 SqueezeNet CNN 的架构。

我们在图2中说明了 SqueezeNet 从一个独立的卷积层 (conv1) 开始, 后跟8个Fire模块 (fire2-9), 最后 conv 层 (conv10) 结束。从开始到网络的末端,我们逐渐增加每个Fire模块的卷积的数量。

SqueezeNet 在层 conv1、fire4、fire8 和 conv10 之后执行最大池化, 其步长为 2;这些相对较晚地执行池化操作是在执行3.1节的策略3。我们在表1中展示了完整的 SqueezeNet 体系结构。

图 2
图 2

3.3.1 其他SQUEEZENET 细节

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

(1)为了使1∗1 和 3∗3 filter输出的结果有相同的尺寸,在expand modules中,给3∗3 filter的原始输入添加一个像素的边界(zero-padding)

(2)squeeze 和 expand layers中都是用ReLU作为激活函数

(3)在fire9 module之后,使用Dropout,比例取50%

(4)注意到SqueezeNet中没有全连接层,这借鉴了Network in network的思想,用GAP代替全连接

【GAP 代替全连接解释与实现】https://www.cnblogs.com/hutao722/p/10008581.html

(5)训练过程中,初始学习率设置为0.04,在训练过程中线性降低学习率。更多的细节参见本项目在github中的配置文件。

(6)由于Caffe中不支持使用两个不同尺寸的filter,在expand layer中实际上是使用了两个单独的卷积层(1∗1filter 和 3∗3filter),最后将这两层的输出连接在一起,这在数值上等价于使用单层但是包含两个不同尺寸的filter。

【在github上还有SqueezeNet在其他框架下的实现】MXNet、Chainer、Keras、Torch。

https://github.com/forresti/SqueezeNet

表1
表1

4 评估SQUEEZENET

在评估 SqueezeNet 时, 我们使用 AlexNet[4] 和相关的模型压缩结果作为比较的基准

表2
表2

在表2中, 我们将最近的模型压缩结果 和SqueezeNet网络做一个对比。可以看到:SVD 方法可以将 AlexNet 模型压缩为以前的5x, 同时会使top-1 数据集上的精度降低到 56.0% (丹顿 et, 2014)。网络修剪实现了模型尺寸的9x 降低, 同时保持了 top-1数据集上 57.2%的精度和top-5数据集上 80.3% 的精度 (Han等人, 2015b)。深压缩达到35x 的模型尺寸压缩比率, 同时仍然保持以往的精度 (Han等, 2015a)。现在, 使用 SqueezeNet网络, 我们实现了减少50X 的模型压缩比率, 同时满足或超过 AlexNet 的 top-1 和 top-5 的准确性。

我们似乎已经超过了目前模型压缩所取得的最新成果: 即使使用未压缩的32位值来表示模型, SqueezeNet 也在保持或超过原本正确率的基础上有一个1.4× 的模型压缩比,这相比于目前模型压缩所取得的最新成果还要好一些。

SqueezeNet, 使用33% 稀疏和8位量化. 这将生成一个 0.66 MB 的模型 (363× 小于32位 AlexNet), 并具有与 AlexNet 等效的精度。

此外, 在 SqueezeNet 上应用6位量化和33% 稀疏度的深压缩, 我们生成一个0.47MB 模型 (510× 小于32位 AlexNet), 具有等效的精度。我们的小模型确实可以压缩。

此外, 这些结果表明, 深压缩 (韩等, 2015a) 不仅在 CNN 的体系结构具有许多参数 (如 AlexNet 和 VGG), 但它也能够压缩已经紧凑, 完全卷积 SqueezeNet结构。通过10×压缩 SqueezeNet 的深层压缩, 同时保留基线精度。总而言之: 通过将 CNN 的体系结构创新 (SqueezeNet) 与最先进的压缩技术 (深压缩) 结合在一起, 我们实现了一个 510× 在模型大小上的缩减, 与基线相比, 精确度没有降低。

5 CNN 微体系结构设计空间探索

现在, 在5和6节中, 我们探讨了设计空间的几个方面。我们将此体系结构探索分为两个主要主题: microarchitectural 探索(每个模块层的维度和配置) 和macroarchitectural 探测(模块的端到端组织和其他层)。

在本节中, 我们设计并执行实验, 目的是提供关于 microarchitectural 设计空间形状的直觉, 就我们在3.1 节中提出的设计策略而言。请注意, 我们在这里的目标不是在每个实验中实现最大的精确度, 而是要了解 CNN 架构选择对模型大小和准确性的影响。

图3
图3

5.1 CNN 微体系结构参数

5.2 压缩比(SR)

在3.1 节中, 我们建议减少参数的数目, 方法是使用squeez层减少3x3 卷积的输入通道数。我们将压缩比率 (SR)定义为squeeze层中的卷积个数与expand层中的卷积个数之间的比值。我们现在设计了一个实验来研究压缩比对模型尺寸和精确度的影响。

在这些实验中, 我们使用 SqueezeNet (图 2) 作为起点。与 SqueezeNet 中一样, 这些实验使用以下 metaparameters:basee=128,incre=128,pct3x3=0.5,freq=2basee=128,incre=128,pct3x3=0.5,freq=2。我们培训多个模型, 其中每个模型有一个不同的压缩比 (SR),他们在范围 [0.125, 1.0]内变化。 在图 3 (a) 中, 我们展示了这个实验的结果, 在图上的每个点都是一个独立的模型, 从头开始训练。SqueezeNet 是SR = 0.125的点。 从这个数字我们知道, 在SR= 0.125时增加SR 可以进一步增加 ImageNet top-5 精度(从 80.3% (4.8MB)到86.0% (19MB)) 峰值在86.0% ( SR = 0.75 ,模型大小为19MB ), 并且设置 SR = 1.0 进一步增加了模型的大小,却没有提高准确性。

5.3 训练时关闭1X1和3X3卷积核

在3.1 节中, 我们建议通过用1x1 卷积替换一些3x3 卷积来减少 CNN 的参数数目。一个开放的问题是, CNN 过滤器中的空间分辨率有多重要?

VGG (Simonyan & Zisserman 2014) 体系结构在大多卷积层中都充斥着3x3 的卷积;GoogLeNet (Szegedy 等, 2014) 和NiN (林等, 2013)在某些层里有1x1 的卷积。在 GoogLeNet 和NiN, 作者简单地提出了具体数量的1x1 和3x3 卷积没有进一步的分析。在这里, 我们试图阐明1x1 和3x3 过滤器的比例对模型大小和精度的影响.

我们在本实验中使用以下 metaparameters:basee=128,incre=128,SR=0.5,freq=2basee=128,incre=128,SR=0.5,freq=2, 并且我们让pct3x3pct3x3从1% 到99%变化 。换句话说, 每个Fire模块的expand层有一个预定义的数量的过滤器划分在1x1 和3x3 之间,

在这里,我们把“旋钮”从 “大多数是1x1卷积” 调节到 “大多数是 3x3卷积”。与以前的实验一样, 这些模型有8个FIre模块, 与图2中的层组织相同。我们在图 3 (b) 中显示了这个实验的结果。请注意, 图 3 (a) 和图 3 (b) 中的13MB 模型是相同的体系结构: SR = 0.500 和 pct3x3=50pct3x3=50%。我们在图 3 (b) 中看到, 在3x3 卷积占比为50%时,ImageNet数据集上的精度会达到85.6% , 当进一步增加了3x3 卷积的百分比时,只增加了模型的大小, 但没有提高 ImageNet数据集上的准确性。

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

到目前为止, 我们已经探索了微体系结构层面的设计空间, 即CNN网络各个模块的内容。现在, 我们在 macroarchitecture 级别上探讨了有关Fire模块之间高层连接的设计决策。灵感来自 ResNet (He等, 2015b), 我们探索了三种不同的体系结构:

· Vanilla SqueezeNet (按前一节). · SqueezeNet 在某些Fire模块之间进行简单的旁路连接。 · SqueezeNet 在Fire模块之间使用复杂的旁路连接。

我们在图2中画出了这三种 SqueezeNet 的变体。

表3
表3

我们的简单旁路体系结构在3、5、7和9的Fire模块附近添加旁路连接, 要求这些模块在输入和输出之间学习残差函数。与 ResNet 一样, 要实现围绕 Fire3 的旁路连接, 我们将输入设置为 Fire4 等于 (Fire2 + 输出 Fire3 的输出), 其中 + 运算符为数组加法。这改变了应用于这些Fire模块的参数, 并且, 根据 ResNet, 可以提高最终的准确度。

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

我们还可以比较直观地看到: 增加旁路连接将有助于减轻squeeze层引入的瓶颈。例如:在 SqueezeNet中, 挤压比 (SR) 是 0.125, 这意味着每个squeeze层的输出通道比expand层少8倍。由于这种严重的通道数减少, 只有很少的信息可以通过expand层。但是, 通过将旁路连接添加到 SqueezeNet网络中, 我们打开了信息的通道, 使信息可以在不同的squeeze层之间传输。

我们按照图2中的三种结构训练了 SqueezeNet网络, 并比较了表3中的精度和模型大小。我们修正了微体系结构以匹配 SqueezeNet, 如表1在整个探索中所述。复杂和简单的旁路连接相比于基础的SqueezeNet结构,准确性得以改善。有趣的是, 简单的旁路使得精确度的提高比复杂的旁路更高。

7 论文阅读总结

关于神经网络的部分理解:

CNN微结构

CNN宏观结构

关于模型压缩的方法:

这方面理论基础为无,后续加强。

参考链接:

https://blog.csdn.net/u013044310/article/details/80188530?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 研究背景:
  • 2 相关工作
    • 2.1 模型压缩
      • 2.2 CNN 微结构
        • 2.3 CNN 宏观结构
          • 2.4 网络设计空间探索
          • 3 SQUEEZENET: 使用少量参数保持精度
            • 3.1 结构设计策略
              • 3.2 Fire Model
                • 3.3 SQUEEZENET 体系结构
                  • 3.3.1 其他SQUEEZENET 细节
              • 4 评估SQUEEZENET
              • 5 CNN 微体系结构设计空间探索
                • 5.1 CNN 微体系结构参数
                  • 5.2 压缩比(SR)
                    • 5.3 训练时关闭1X1和3X3卷积核
                    • 6 CNN 宏观体系结构设计空间探索
                    • 7 论文阅读总结
                    • 参考链接:
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档