SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
2016-07-13 22:55
483 查看
摘要:
SqueezeNet是UC Berkeley 和 Stanford的作者提出的一种“小网络”。
原文地址: http://arxiv.org/abs/1602.07360
长久以来,研究人员一直在努力提升DCNN的精度。但是,在一些嵌入式便携式设备上,“小网络”更加受欢迎。
“小网络”有三个优势,1)在分布式训练的时候,需要更少的服务器之间的通信。2)模型加载的时候,需要更少的带宽。3)可以装载到FPGA或者其他“内存小”的设备上面。
作者提供的网络SqueezeNet,在达到AlexNet的精度的情况下,只需要AlexNet的1/50的参数。进一步 使用模型压缩技术,可以将模型压缩到0.5MB。
详细介绍
在这部分,首先说明CNN结构设计的策略,然后介绍Fire Module,最后介绍利用Fire Module构建SqueezeNet。
1. 结构设计策略
这篇文章的首要目的找到一种参数很少的网络,并且能够保持有竞争力的精度。为了达到这个目的,作者采用了三个策略。
策略1: 使用1*1网络代替3*3网络
在设计中,减少3*3网络的使用,尽量使用1*1网络。因为”1*1网络的参数数目” 是 “3*3网络的参数数目” 的1/9。
策略2.减少3*3滤波器的输入通道数。
每个卷积层的参数总数 = (前一层的通道数)(输出滤波器数)(滤波器的宽 * 滤波器的高)。因此,减少前一层的通道数(当前层的输入通道数)可以减少参数数目。
策略3.降采样层移到网络的后端
前两个策略的目的是减少网络参数,第三个策略的目的是增加精度。
2. Fire Module
定义如下,一个Fire Module有一个 squeeze层(有1*1滤波器组成)和一个expand层(包括1*1滤波器和3*3滤波器)组成。
在上图中,有三个超参数:
作者在设计Fire Module的时候,s(1x1) < ( e(1x1) + e(3x3) )。
*3. SqueezeNet*
SqueezeNet用一个独立的卷积层开始,连接8个Fire Module,结束的时候也是一个卷积层。
SqueezeNet逐渐的增加每个Fire Module中的滤波器数目。
SqueezeNet在conv1,fire4,fire8和conv10之后使用步长为2的max pooling。
其他细节:
(1) 为了使expand层的输出有相同的大小,3*3filter的输入数据增加了padding操作。
(2) squeeze层和expand层之后都用了ReLU
(3) fire9之后,使用了drop out
(4) SqueezeNet没有使用全连接层
(5) 训练的时候,使用多项式学习率
评估结果
上图显示,SqueezeNet在不使用deep compression的情况,模型大小/参数个数已经超过之前的方法。
使用deep compression可以将模型压缩到0.5MB.
end
SqueezeNet是UC Berkeley 和 Stanford的作者提出的一种“小网络”。
原文地址: http://arxiv.org/abs/1602.07360
长久以来,研究人员一直在努力提升DCNN的精度。但是,在一些嵌入式便携式设备上,“小网络”更加受欢迎。
“小网络”有三个优势,1)在分布式训练的时候,需要更少的服务器之间的通信。2)模型加载的时候,需要更少的带宽。3)可以装载到FPGA或者其他“内存小”的设备上面。
作者提供的网络SqueezeNet,在达到AlexNet的精度的情况下,只需要AlexNet的1/50的参数。进一步 使用模型压缩技术,可以将模型压缩到0.5MB。
详细介绍
在这部分,首先说明CNN结构设计的策略,然后介绍Fire Module,最后介绍利用Fire Module构建SqueezeNet。
1. 结构设计策略
这篇文章的首要目的找到一种参数很少的网络,并且能够保持有竞争力的精度。为了达到这个目的,作者采用了三个策略。
策略1: 使用1*1网络代替3*3网络
在设计中,减少3*3网络的使用,尽量使用1*1网络。因为”1*1网络的参数数目” 是 “3*3网络的参数数目” 的1/9。
策略2.减少3*3滤波器的输入通道数。
每个卷积层的参数总数 = (前一层的通道数)(输出滤波器数)(滤波器的宽 * 滤波器的高)。因此,减少前一层的通道数(当前层的输入通道数)可以减少参数数目。
策略3.降采样层移到网络的后端
前两个策略的目的是减少网络参数,第三个策略的目的是增加精度。
2. Fire Module
定义如下,一个Fire Module有一个 squeeze层(有1*1滤波器组成)和一个expand层(包括1*1滤波器和3*3滤波器)组成。
在上图中,有三个超参数:
s(1x1): squeeze层的1*1滤波器个数; e(1x1): expand层的1*1滤波器个数; e(3x3): expand层的3*3滤波器个数;
作者在设计Fire Module的时候,s(1x1) < ( e(1x1) + e(3x3) )。
*3. SqueezeNet*
SqueezeNet用一个独立的卷积层开始,连接8个Fire Module,结束的时候也是一个卷积层。
SqueezeNet逐渐的增加每个Fire Module中的滤波器数目。
SqueezeNet在conv1,fire4,fire8和conv10之后使用步长为2的max pooling。
其他细节:
(1) 为了使expand层的输出有相同的大小,3*3filter的输入数据增加了padding操作。
(2) squeeze层和expand层之后都用了ReLU
(3) fire9之后,使用了drop out
(4) SqueezeNet没有使用全连接层
(5) 训练的时候,使用多项式学习率
评估结果
上图显示,SqueezeNet在不使用deep compression的情况,模型大小/参数个数已经超过之前的方法。
使用deep compression可以将模型压缩到0.5MB.
end
相关文章推荐
- CUDA搭建
- 稀疏自动编码器 (Sparse Autoencoder)
- 白化(Whitening):PCA vs. ZCA
- softmax回归
- 卷积神经网络初探
- 我的 ARM+Linux 学习路线
- TensorFlow人工智能引擎入门教程之九 RNN/LSTM循环神经网络长短期记忆网络使用
- TensorFlow人工智能引擎入门教程之十 最强网络 RSNN深度残差网络 平均准确率96-99%
- TensorFlow人工智能入门教程之十一 最强网络DLSTM 双向长短期记忆网络(阿里小AI实现)
- TensorFlow人工智能入门教程之十四 自动编码机AutoEncoder 网络
- TensorFlow人工智能引擎入门教程所有目录
- 开发学习记录之看门狗驱动
- 时钟+温度+遥控设置,综合时钟例子
- 如何用70行代码实现深度神经网络算法
- 近200篇机器学习&深度学习资料分享(含各种文档,视频,源码等)
- DNS劫持
- Linux下运行openwebos- -(转)
- Linux下运行openwebos- -(转)
- BusyBox 简化嵌入式 Linux 系统
- EGL 学习