SqueezeNet:论文笔记

目录

动机

model

设计策略

fire模块

网络结构

其他细节

网络评估

 CNN微架构设计空间探索

元参数

压缩比SR

 滤波器大小的权衡

  CNN宏架构设计空间探索


动机

  1. 更有效地分布式训练:通信开销一般与参数量成正比,训练更快往往需要更小的通信量。
  2. 将新模型导出到客户端时开销更小:自动驾驶汽车的无线更新。
  3. FPGA与嵌入式设备的部署更加灵活:更小的模型可以直接存储到芯片上。

model

设计策略

主要包含以下三个策略:

  1. 使用1*1的filter代替3*3,参数会少9x
  2. 减少输入到3x3滤波器的通道数目。考虑一个完全由3x3个滤波器组成的卷积层。该层参数总数为(输入通道数)*(滤波器数)*(3*3)。为了在一个CNN中保持较小的参数总数,不仅要减少3x3滤波器的数量(策略1),而且要减少3x3滤波器的输入通道的数量。
  3. 在网络中延迟下采样,使卷积层具有较大的激活map。在卷积网络中,每个卷积层都会产生一个空间分辨率至少为1x1且往往远大于1x1的输出激活map。这些激活map的高度和宽度,由以下几方面控制:
  • 输入数据的尺寸
  • 下采样层的选择

策略1、2旨在降低参数,策略3在于提高精度。

基于策略1、2和3,文章提出Fire模块,SqueezeNet架构的构建模块

fire模块

组成:

  • squeeze convolution层,只有1*1的filter
  • expand层,具有1*1以及3*3的filter

在fire模块中自由使用1x1filter是策略1的应用。在fire模块中展示了三个可调维度(超参数):s_{1x1},e_{1x1},e_{3x3},。在Fire模块中,s_{1x1}为squeeze convolution层的过滤器数量(全部为1x1), e_{1x1}为expand层的1x1过滤器数量,e_{3x3}为扩展层的3x3过滤器数量。在使用fire模块时,我们将s_{1x1}设置为小于(e_{1x1} + e_{3x3}),按照策略2,squeeze convolution层有助于限制3x3滤波器的输入通道数量。

网络结构

SqueezeNet从一个独立的卷积层(conv1)开始,接着是8个Fire模块(fire2-9),最后是一个conv层(conv10),逐步增加每个ire模块的filter数量。在conv1、fire4、fire8和conv10层后,SqueezeNet执行步长为2的最大池化;这些位置相对较后的池化是根据策略3进行的。表1中展示了完整的架构。 

其他细节

  • 为了使1x1和3x3滤波器的输出激活具有相同的高度和宽度,我们在expand模块的3x3滤波器的输入数据中添加1像素的填充零的边界。
  • ReLU用于挤压和膨胀层的激活。
  • Dropout 在fire9模块之后应用50%的比率。
  • 注意在SqueezeNet中缺少全连接层;
  • 在训练SqueezeNet时,我们从0.04的学习率开始,并在整个训练过程中线性降低学习率
  • Caffe框架本身并不支持包含多个滤波器分辨率(例如1x1和3x3)的卷积层。为了解决这个问题,使用两个独立的卷积层来实现扩展层:一个有1x1滤波器的层,一个有3x3滤波器的层。然后,我们在通道维度中将这些层的输出连接在一起。这在数字上等同于实现一个包含1x1和3x3过滤器的层。

网络评估

在评估SqueezeNet时,使用AlexNet和相关模型的压缩结果作为比较的基础。

在下表中,基于SVD的方法能够将预训练的AlexNet模型压缩5倍,同时将top-1的准确率降低到56.0%。在ImageNet上,网络修剪在保持基线57.2% top-1和80.3% top-5精度的同时,模型大小减少了9倍。深度压缩在保持基线精度水平的情况下,模型大小减少了35倍。SqueezeNet实现相比于AlexNet缩小模型尺寸50倍,同时满足或超过的top-1和top-5的准确性。

使用33%稀疏和8位量化的深度压缩,产生了0.66 MB的模型(小于32位的AlexNet363×),与AlexNet等效的准确性。此外,在SqueezeNet上应用具有6位量化和33%稀疏度的深度压缩,得到了一个具有同等精度的0.47MB模型(小于32位AlexNet510倍)。证明小模型确实经得起压缩。

 CNN微架构设计空间探索

SqueezeNet和其他的模型存在于CNN架构的一个广阔的和大部分未被探索的设计空间中。将架构探索分为两个主要主题:微架构探索
(每个模块层的维度和配置)和宏观架构探索(模块和其他层的高级端到端组织)。

这里的目标不是在每个实验中最大化精度,而是理解CNN架构的选择对模型大小和精度的影响。

元参数

在SqueezeNet中,每个fire模块都有超参数:s_{1x1},e_{1x1},e_{3x3},。SqueezeNet有8个fire模块,共有24个超参数。如果对压缩式架构的设计空间进行广泛的扫描,定义以下更高级别的元参数集,这些元参数集控制CNN中所fire模块的尺寸。

我们将base_e定义为CNN中的第一个fire模块中的expand过滤器的数量。在每freq个fire模块之后,增加了expand过滤器的数量incr_e。换句话说,对于Fire模块i,expand过滤器的数量是e_i = base_e + (incr_e * \left | i/freq \right |),
定义e_i =e_{i,1x1}+e_{i,3x3},pct_{3x3}(在[0,1]范围,在所有fire模块共享)作为3x3expand过滤器的百分比。也就是说e_{i,3x3}=e_{i} * pct_{3x3},e_{i,1x1}=e_{i} * (1-pct_{3x3})

最后,使用称为压缩比(SR)的元参数(同样,在[0,1]范围内,由所有Fire模块共享)定义Fire模块squeeze层中的过滤器数量:s_{i,1x1}=SR*(e_{i,1x1}+e_{i,3v3})

SqueezeNet(表1)是生成的一个示例架构。其中,SqueezeNet的metaparameters有:base_e = 128, incr_e = 128, pct_{3x3} = 0.5, freq = 2, SR = 0.125

压缩比SR

将压缩比(SR)定义为压缩层中的过滤器数量与扩展层中的过滤器数量之间的比率。

使用以下元参数::base_e = 128, incr_e = 128, pct_{3x3} = 0.5, freq = 2。对多个模型进行训练,每个模型在[0.125,1.0]范围内具有不同的压缩比。

下图展示了实验的结果,图上的每个点都是一个独立的模型,是从零开始训练的。在图中,SqueezeNet为SR=0.125点。从这个图中,了解到SR增加到0.125以上可以进一步增加ImageNet top5的精确度。从4.8MB模型的80.3%(即alexnet级别)提高到86.0%
19 mb的模型。当SR=0.75(一个19MB的模型)时,精度稳定在86.0%,设置SR=1.0会进一步增加模型的大小,但不会提高精度。

 滤波器大小的权衡

在本实验中,使用以下元参数base_e = 128, incr_e = 128,, freq = 2 SR = 0.500,将pct_{3x3}从1%变化到99%。换句话说,每个Fire模块的扩展层都预定义了1x1和3x3之间划分的过滤器数量,这里我们将旋钮从“most 1x1”到“most 3x3”。

下图显示实验结果。可以看出,使用50%的3x3滤波器后,前5位的精度稳定在85.6%,进一步增加3x3滤波器的比例会导致更大的模型尺寸,但在ImageNet上并没有提高精度。

  CNN宏架构设计空间探索

受ResNet的启发,探索了三种不同的架构:

  • vanilla SqueezeNet
  • 一些fire模块之间简单的旁路连接的SqueezeNet

简单的旁路架构围绕fire模块3,5,7,和9的增加了旁路连接,要求这些模块学习输入和输出之间的残差功能。为了像在ResNet中实现围绕Fire3的旁路连接,将输入设置为Fire4的输入等于(Fire2的输出+Fire3的输出),+操作符是按元素添加的。这改变了应用于这些fire模块参数的正则化,并且可以提高最终的精度和/或训练整个模型的能力。

一个限制是,在简单的例子中,输入通道的数量和输出通道的数量必须是相同的;因此,只有一半的Fire模块可以进行简单的旁路连接。当“相同数量的通道”要求不能满足时,使用复杂的旁路连接。一个简单的旁路“只是一根线”,一个复杂旁路,包括一个1x1卷积层,滤波器的数量设置等于所需的输出通道的数量。注意,复杂的旁路连接会向模型添加额外的参数,而简单的旁路连接不会。

  • 剩余fire模块之间复杂的旁路连接的SqueezeNet

除了改变正则化之外,添加旁路连接有助于缓解压缩层带来的代表性瓶颈。
在SqueezeNet中,压缩比(SR)为0.125,这意味着每个压缩层的输出通道比后面的expand层少8倍。由于这种严重的维数降低,只有有限的信息可以通过压缩层。然而,通过在SqueezeNet中添加旁路连接,为信息在压缩层周围流动开辟了通道。

用下图中的三种宏架构训练了SqueezeNet,并在表中比较了精确度和模型大小。在整个宏架构探索中,固定微架构,以匹配在表1中描述的SqueezeNet。
复杂和简单的旁路连接都比普通的SqueezeNet结构提高了准确性。有趣的是,简单旁路比复杂旁路提高了更高的准确度。在不增加模型大小的情况下,简单的旁路连接使top 1的准确率提高了2.9个百分点,top 5的准确率提高了2.2个百分点。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值