赞
踩
目录
瓶颈结构就是两头宽,中间窄的网络结构,先降维然后升为维;瓶颈结构不仅增加了网络的深度同时还有效的减少了网络的参数;
比较经典的应用:ResNet
左边的计算如下:
w*h*256*3*3*256 =589824*w*h
右边的计算如下:
w*h*256*1*1*64 + w*h*64*3*3*64 +w*h*64*1*1*256 = 69632*w*h
结果相差大概8.5倍。
在移动端部署,模型的大小很受限,这个技术可以不损害模型的精度降低模型的参数;
在有三的书中,将基准模型的Allconv6_baseline(5个卷积层和1个全连接层)中的五个卷积层从第二个卷积层开始全部替换成瓶颈模型。
Allconv6_baseline卷积层 | conv1 | conv2 | conv3 | conv4 | conv5 |
通道数 | 16 | 32 | 64 | 128 | 256 |
瓶颈模型替换层 | 替换 | 替换 | 替换 | 替换 |
具体的替换方法,可以参考有三的《深度学习之模型设计》第五章的内容,最终通过替换后的实验证明,将卷积层替换为瓶颈层后,性能比Allconv6_baseline略有提升,但是关键的是模型的参数量减少的是非常多的。这样说明针对普通的卷积网络结构来说,采用瓶颈结构设计的网络结构表现更加优秀。
SqueezeNet主要采用的是fire module模块组成。
Fire Module是由一个Squeeze(全部由1*1卷积组成)和Expand(由1*1卷积和3*3卷积组成)模块组成,且Squeeze的通道数小于Expand通道数,从而实现参数的压缩;
参数分析:
输入M个通道,输出N个通道。直接使用3*3的卷积,参数为M*N*3*3;
如果使用上图的结构参数为:M*1*1*3+3*N/2*1*1+3*N/2*3*3;
比例关系K=(3M+15N)/9MN=1/(3N)+5/(3M),所以当M和N很大的时候,可以实现很大的压缩比
该模块的可调参数为:S1,e1,e3
总结
1)Fire module由两层构成,分别是squeeze层和expand层,如上面的图所示,squeeze层是由s1个1x1卷积核组成的,expand层由e1个1x1的卷积核和e3个3x3的卷积核组成的,得到的feature map进行concat。对应策略1
2)一般令s1 < e1 + e3, 这样可以限制输入到3x3卷积核的channels。对于策略2
SqueezeNet是一种轻量化网络结构
1.相同准确率下,更少参数量的模型有几点好处:
1)更加高效的分布式训练
2)向客户端提供新模型的开销更小
3)FPGA和嵌入式设备部署更便利
2.网络结构的设计策略
1)使用1x1的卷积核代替3x3的卷积核,可以减少9倍参数
2)减少输入3x3卷积的特征图的数量,因为参数由NCHW决定。
3)延后下采样,使得卷积层有较大的activtion maps。较大的特征图会带来较高的准确率。
其它细节:
在3x3的输入特征图上加了1像素的zero-padding,使其与1x1的输出大小一致
squeeze和expand层后跟ReLU激活函数
fire9后加0.5的Dropout
没有FC层(可以较少大量参数)
SqueezeNet小结:
1)Fire module与GoogLeNet思想类似,采用1x1卷积对feature map的维数进行[压缩],从而达到减少权值参数的目的;
2)采用与VGG类似的思想–堆叠的使用卷积,这里堆叠使用的是Fire module。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。