笔记:SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <1MB model size
2016-02-28 22:55
633 查看
前言:
最近看到个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,调参感觉是个大坑。
最近看到个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,调参感觉是个大坑。
相关文章推荐
- UIView属性clipsTobounds的应用
- Jmeter性能测试,MySQL JDBC request
- UIGestureRecognizer
- EasyUI Combobox 级联查询
- npm package.js Guide
- UIControl 的基本使用方法和 Target-Action 机制
- microservice-demo maven build 时报错(A required class is missing: org/codehaus/plexus/util/Scanner)
- UITableview代理方法与Viewcontroller分离
- Dynamic web module 3.0 requires Java 1.6 or newer解决办法
- 4.5.3 Async耗时操作必须由子线程完成,更新UI需要由主线程完成
- UITableView介绍 之 基本用法
- UINavigationController相关
- POJ Ultra-QuickSort 逆序数 树状数组 归并排序
- CharSequence接口
- Android之使用Android-query框架进行开发
- iOS UIViewController生命周期控制
- EasyUI DataGrid 多级表头设置
- EasyUI DataGrid 多级表头设置
- EasyUI DataGrid 多级表头设置
- Java中String和CharSequence的关系