SqueezeNet学习笔记

SqueezeNet学习笔记

一、前言

   《SQUEEZENET: ALEXNET-LEVEL ACCURACY  WITH  50X  FEWER PARAMETERS AND <0.5MB MODEL SIZE》[1]主要贡献是提出了减少网络参数的轻量级网络结构:SqueezeNet,该网络在ImageNet上的精度比肩AlexNet,然而模型的参数量比AlexNet少50倍,配合模型压缩的算法(Deep Compression[2]),模型可进一步压缩至0.5MB.

   论文提到为了达到同一精度水平,可以设计出多种网络结构,而参数量小的网络结构则具有以下几个优势:(1)在分布式训练中,与服务器通信需求更小;(2)参数更少,从云端下载模型的数据量小;(3)更适合在FPGA等内存受限的设备上部署。为了达到这个目的,论文主要就是设计出参数量更小的网络模型,而精度却能与公开的大模型比肩。

二、SqueezeNet设计思想及核心组件

  论文最大亮点则是提出了SqueezeNet轻量级模型,成功达到减少模型参数量并且保持精度的目标。SqueezeNet主要是在网络结构层面做了精心设计以达到上述目标。

1、SqueezeNet主要设计思想

  为了达到降低网络复杂度并减少参数的目的,SqueezeNet采用的三个策略为:

  (1)用1x1卷积替换3x3卷积。1x1卷积核参数比3x3少9倍。

  (2)减少3x3卷积层的输入通道数。3x3卷积层的网络参数量计算为输入通道数*卷积核个数*3*3,减少输入通道数自然减少了参数量。

  (3)延迟网络的下采样操作,即下采样滞后,论文认为较大的activation map更有利于提高模型的精度。

  通常卷积网络的下采样是通过池化或者卷积层中stride>1来实现,下采样是卷积网络中必不可少的,而下采样通常在前面几层,如果网络在前几层就有很大的下采样,则后续大多数层的activation maps都会很小。如果延迟下采样到后面的层,则网络结构中大多数层都会获得较大的activation maps。

2、fire-module结构

  fire-module是SqueezeNet的核心单元,也是其设计策略体现最为集中的点。Fire-module由squeeze卷积层和expand卷积层组成。fire-module的结构示意图如下:

                                 

 

                                             

   其中squeeze卷积层是一个1x1卷积层,对应策略1(用1x1替换3x3卷积),从NIN我们可以知道1x1卷积可以增强卷积网络的抽象表达能力相当于又接了一个线性感知机,同时又起到通道降维或升维的作用,输入M通道,输出N通道,squeeze层中M>N;squeeze后接一个expand结构,expand顾名思义是通道扩张(升维),squeeze层后分别接1x1卷积和3x3卷积,最后concat合并就是完整的fire-module。

   在fire-module中,设为squeeze层的卷积核数(输出通道数)为expand结构中1x1卷积层的卷积核数,为expand结构中3x3卷积层的卷积核数。又,而同时分别小于,这就对应于策略2;关于这三个参数的设计在论文中有详细的讨论与试验,最终得到较好的参数为,最终确定为

                          

   其中为第一个fire-module中expand层其中一个卷积层(1x1或3x3)的通道数,为expand结构中3x3卷积层通道比重,SR为squeeze层通道数与expand层通道数比值。每隔freq个fire-modules,expand结构各种1x1和3x3卷积分别增长的通道数。

三、SqueezeNet网络结构

  SqueezeNet通过标准卷积层、池化以及若干fire-module串联组成。在整体网络结构设计中, 以标准卷积conv1开始,随后以此跟8个fire-module(fire2-9),最后一个卷积为标准卷积conv10。池化分别位于conv1、fire4、fire8、conv10以后,这样相对较晚的池化符合策略3的设计原则(延迟下采样),整体网络结构如下表:

这个其实对应开源实现中的squeezenet_v1.0的结构,squeezenet_v1.1相对原结构略微做了调整,第一二个池化以后只接了两个fire-module,第三个池化后接了4个fire-module,其实就是稍微提前了下池化的位置,计算量较1.0减少2.4倍,缓解了下计算量。

四、总结

  论文对于主要工作SqueezeNet讨论完毕,从题目中可以看到SqueezeNet是基于AlexNet做了改进,参数量减少了50倍,减少50倍以后为4.8MB,后面的0.5MB则是通过Deep Compression[2](剪枝、量化及霍夫曼编码)实现,另外借鉴ResNet[3]研究了bypass在Squeeze中的性能增益作用(详情可参看原文[1]),以及DSD[4]训练提高其精度。

试验的版本都在开源项目中:

https://github.com/DeepScale/SqueezeNet

  论文的主要直接的成果则是fire-module及其组成的SqueezeNet结构,其实更是提供了一种设计轻量级网络的思想:三个设计策略,出发点则是既要减少网络参数,又要保证精度,不得已延迟池化,实际上也增加了计算量,所以貌似也没快多少(PC测试)。还提到了网络设计空间中需要考虑的网络微观结构设计(众多bottleneck 大行其道的今天)、网络宏观结构设计、网络模型的压缩加速。

  但是到目前为止,这篇论文的影响还是巨大的,在众多深度学习分支目标检测、分割以及分类等任务的模型压缩加速中,依然是重要轻量级backbone选择,如目标检测的SqueezeNet-ssd,甚至基于关键点的CornerNet[5]目标检测算法在其加速版本CornerNet-lite[6]中也是参考了SqueezeNet,并设计了轻量级版本CornerNet-Squeeze。

参考文献:

[1] Iandola F N, Han S, Moskewicz M W, et al. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size[J]. arXiv preprint arXiv:1602.07360, 2016.

[2] Han S, Mao H, Dally W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding[J]. arXiv preprint arXiv:1510.00149, 2015.

[3] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.

[4] Han S, Pool J, Narang S, et al. DSD: regularizing deep neural networks with dense-sparse-dense training flow[J]. arXiv preprint arXiv:1607.04381, 2016, 3(6).

[5] Law H, Deng J. Cornernet: Detecting objects as paired keypoints[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 734-750.

[6] Law H, Teng Y, Russakovsky O, et al. CornerNet-Lite: Efficient Keypoint Based Object Detection[J]. arXiv preprint arXiv:1904.08900, 2019.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值