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

来源:互联网 发布:ecshop大京东2.5源码 编辑:程序博客网 时间:2024/05/01 06:58

前言:

最近看到个FPGA与Deep Learning相结合的文章,正好看到arxiv上放了这篇文章出来,听说这个SqueezNet有利于将CNN在FPGA上实现,于是简单看了一下。不过作者也没有给出实现结果,但既然是UC Berkeley 和 Stanford发的,说明大牛们都很关注这个事,搞不好哪天FPGA+DL真的就流行用起来了。

文章链接:http://arxiv.org/abs/1602.07360

文章概要:

这篇文章主要就是说,目前的DNN参数有点多了,如果我们有办法把DNN的参数减少,将有利于:

1、实现更高效的分布式训练;

2、训练出轻量级的模型;

3、在FPGA上实现;

那么,怎样在保证精度的前提下压缩网络呢?

作者采用了3个strategies:

1、将一部分3x3的filter替换成1x1的filter;

2、减少输入的channels;

3、在整个网络后期才进行下采样,使得卷积层有比较大的activation maps;

作者设计了一种fire module的结构:

这种fire module的结构由两个(实际上是3个)layers构成:squeeze和expand(expand其实是两个layers)。squeeze和expand其实都是卷积层,只是kernel大小、stride、padding这些参数调过,主要就是用了小kernel。因为Caffe是不支持同一个layer使用不同size的若干个(>1)kernels的,所以作者实际上是使用了两个layers,一个用3x3 kernel,一个用1x1kernel,最后再把它们concat起来。

给一个完整的网络看一下:

上图中这些fire module的参数并不是一样的。在前面几层的fire module,里面用到的kernel个数会少一些,但随着网络越来越深,后面的fire module用到的kernel个数会越来越多。我的理解是,网络越深,特征越抽象,就需要用越多的参数来学习它吧。

更多的调参细节就不多说了,有兴趣可以看看这篇paper原文。

作者在ImageNet 2012上给出了测试结果:

与AlexNet对比,参数减少了50倍,模型也只有4.8M。目前一些比较贵的FPGA,SRAM有8M那么大,是有机会把这个SqueezeNet放到上面跑跑看的。

我的看法:

1、跟PC机相比,因为FPGA的资源真的少得可怜,能够在保证精度的前提下减少网络参数和压缩模型大小,是很有帮助的;

2、但是,仅仅AlexNet这样的精度,不能满足很多场合的需求,作者没有拿SqueezeNet来跟VGG这些大网络来比比,也不知道SqueezeNet做深了之后,它的performance如何。而且也没在其它任务上做测试(如detection,Reid之类的),有点怀疑它的泛化能力,希望后面还会放更多的结果出来看;

3、实现一个SqueezeNet,调参感觉是个大坑。

0 0