深度学习模型压缩SqueezeNet

节选自《白话人工智能与大数据》

在NIN的思路和减小卷积核尺寸的思路驱使下,就有人开始研究新的网络模型,并把它们成功应用于移动设备中了,MobileNet和SqueezeNet就是其中的典型代表。它们的特点就是尺寸比较小,计算量也比较小,当然在移动设备上也非常省电,数据处理的延迟也小。我们这一节就重点介绍一下SqueezeNet的结构特点。Sqeeze是英文压榨的意思,虽然看上去有点形象,确实压榨出了不少的空间——其实也证明AlexNet提供的参数们是多么冗余。不过千万别把它翻译成压榨网络,因为你这么说真的是中国人听不懂外国人不明白,所有的术语尽可能使用英文交流是最好的。

2016年,Forrest N. Iandola等人发表了一篇名为《SqueezeNet: AlexNet-levelaccuracy with 50x fewer parameters and <0.5MB model size》的论文,从名字上我们就能看出来这篇论文多少有一点点标题党的嫌疑。具有AlexNet等级的准确率,但仅有小于0.5MB的尺寸,确实很吸引人。

这种网络的优势主要来源于其关键模块Fire Module——这相当于GoogleNet的Inception。

和Inception的思路类似,一个Fire Module的模块是对输入的Feature Map进行“Squeeze”操作,也就是用多个1*1和3*3的卷积核加ReLU层进行处理,根据我们前面讨论过的内容,这种技巧可以有效降低计算量。后面跟着的叫做“Expand”操作,由多个的卷积核和多个的卷积核处理加ReLU层处理。结构还是非常简单明了的,如果要构造一个网络就是用一个一个的FireModule把网络堆起来就OK了。

SqeezeNet也是允许在“堆”模块的过程中进行处理的,比如可以像最左侧这样什么也不做;也可以像中间这样加入简单的Bypass层,这个跟残差网络是一种思路;还可以像最右侧这边一样加入比较复杂的Bypass层——例如Bypass层中还可以有卷积层。

上面这个图表表示了一个SqueezeNet网络中,在Pruning后的模型尺寸对比。首先我们能看到的是在不同的Fire Module层中,1*1和3*3和的通道数组合还是比较自由的,也就是s1*1、e1*1、e3*3这三组数字的量。本身的参数量就少,只有大约124.8万左右,做过Pruning后只剩下42.1万左右。

在论文的最后,作者还专门用SqeezeNet和AlexNet做了个比较。

这个表从上到下分别描述了4种的AlexNet和3种SqueezeNet的性能指标。这7模型分别是原生的AlexNet(作为Baseline)、SVD分解过的AlexNet、做过剪枝的AlexNet、做过Deep Compression的AlexNet(就是咱们在量化那一节讲过的多种方法结合的手段)、原生的SqueezeNet,以及做过Deep Compression的SqueezeNet,和仅用6bit的数据来表示权值的DeepCompression SqueezeNet。真可谓“君子无所不用其极”。

后面看到的就是压缩比例和准确率的描述了。最下面的这个DeepCompression SqueezeNet比起AlexNet,压缩率达到了1:510,可以说非常高了,仅有0.47MB大小。而正确率和AlexNet的指标几乎是一样的(主要指的是分类任务)。

毫无疑问,这样小的模型无论是在移动设备上长期使用,还是放到服务器上去执行高频任务都是有着非常好的效果的。它为深度学习在更多领域的应用和更广泛的物理空间去使用提供了可能,也带来了更多的启示与鼓励。

原文发布于微信公众号 - 智能工场AIWorkshop(qddata)

原文发表时间:2019-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券