从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet
来源:互联网 发布:易观智库数据 编辑:程序博客网 时间:2024/05/16 17:59
v1:Going deeper with convolutions
Inception v1的网络,主要提出了Inceptionmodule结构(1*1,3*3,5*5的conv和3*3的pooling组合在一起),最大的亮点就是从NIN(Network in Network)中引入了1*1 conv,结构如下图所示,代表作GoogleNet
假设previous layer的大小为28*28*192,则,
a的weights大小,1*1*192*64+3*3*192*128+5*5*192*32=387072
a的输出featuremap大小,28*28*64+28*28*128+28*28*32+28*28*192=28*28*416
b的weights大小,1*1*192*64+(1*1*192*96+3*3*96*128)+(1*1*192*16+5*5*16*32)+1*1*192*32=163328
b的输出feature map大小,28*28*64+28*28*128+28*28*32+28*28*32=28*28*256
写到这里,不禁感慨天才般的1*1 conv,从上面的数据可以看出一方面减少了weights,另一方面降低了dimension。
Inception v1的亮点总结如下:
(1)卷积层共有的一个功能,可以实现通道方向的降维和增维,至于是降还是增,取决于卷积层的通道数(滤波器个数),在Inception v1中1*1卷积用于降维,减少weights大小和feature map维度。
(2)1*1卷积特有的功能,由于1*1卷积只有一个参数,相当于对原始feature map做了一个scale,并且这个scale还是训练学出来的,无疑会对识别精度有提升。
(3)增加了网络的深度
(4)增加了网络的宽度
(5)同时使用了1*1,3*3,5*5的卷积,增加了网络对尺度的适应性
v2:Batch Normalization: Accelerating Deep Network Training by ReducingInternal Covariate Shift
Inception v2的网络,代表作为加入了BN(Batch Normalization)层,并且使用2个3*3替代1个5*5卷积的改进版GoogleNet。
Inception v2的亮点总结如下:
(1)加入了BN层,减少了InternalCovariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯,从而增加了模型的鲁棒性,可以以更大的学习速率训练,收敛更快,初始化操作更加随意,同时作为一种正则化技术,可以减少dropout层的使用。
(2)用2个连续的3*3 conv替代inception模块中的5*5,从而实现网络深度的增加,网络整体深度增加了9层,缺点就是增加了25%的weights和30%的计算消耗。v3:Rethinking the InceptionArchitecture for Computer Vision
Inception v3网络,主要在v2的基础上,提出了卷积分解(Factorization),代表作是Inceptionv3版本的GoogleNet。
Inception v3的亮点总结如下:
(1) 将7*7分解成两个一维的卷积(1*7,7*1),3*3也是一样(1*3,3*1),这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,更加精细设计了35*35/17*17/8*8的模块。
(2)增加网络宽度,网络输入从224*224变为了299*299。
v4:Inception-v4,Inception-ResNet and the Impact of Residual Connections on Learning
Inception v4主要利用残差连接(Residual Connection)来改进v3结构,代表作为,Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4
resnet中的残差结构如下,这个结构设计的就很巧妙,简直神来之笔,使用原始层和经过2个卷基层的feature map做Eltwise
Inception v4的亮点总结如下:
(1)将Inception模块和ResidualConnection结合,提出了Inception-ResNet-v1,Inception-ResNet-v2,使得训练加速收敛更快,精度更高。
ILSVRC-2012测试结果如下(single crop),(2)设计了更深的Inception-v4版本,效果和Inception-ResNet-v2相当。
(3)网络输入大小和V3一样,还是299*299
Aggregated ResidualTransformations for Deep Neural Networks
这篇提出了resnet的升级版。ResNeXt,the next dimension的意思,因为文中提出了另外一种维度cardinality,和channel和space的维度不同,cardinality维度主要表示ResNeXt中module的个数,最终结论
(1)增大Cardinality比增大模型的width或者depth效果更好
(2)与 ResNet 相比,ResNeXt 参数更少,效果更好,结构更加简单,更方便设计
其中,左图为ResNet的一个module,右图为ResNeXt的一个module,是一种split-transform-merge的思想
Xception: DeepLearning with Depthwise Separable Convolutions
这篇文章主要在Inception V3的基础上提出了Xception(Extreme Inception),基本思想就是通道分离式卷积(depthwise separable convolution operation)。最终实现了
(1)模型参数有微量的减少,减少量很少,具体如下,
(2)精度较Inception V3有提高,ImageNET上的精度如下,
先说,卷积的操作,主要进行2种变换,
(1)spatial dimensions,空间变换
(2)channel dimension,通道变换
而Xception就是在这2个变换上做文章。Xception与Inception V3的区别如下:
(1)卷积操作顺序的区别
Inception V3是先做1*1的卷积,再做3*3的卷积,这样就先将通道进行了合并,即通道卷积,然后再进行空间卷积,而Xception则正好相反,先进行空间的3*3卷积,再进行通道的1*1卷积。
(2)RELU的有无
这个区别是最不一样的,Inception V3在每个module中都有RELU操作,而Xception在每个module中是没有RELU操作的。
MobileNets: EfficientConvolutional Neural Networks for Mobile Vision Applications
MobileNets其实就是Exception思想的应用。区别就是Exception文章重点在提高精度,而MobileNets重点在压缩模型,同时保证精度。
depthwiseseparable convolutions的思想就是,分解一个标准的卷积为一个depthwise convolutions和一个pointwise convolution。简单理解就是矩阵的因式分解。
传统卷积和深度分离卷积的区别如下,
假设,输入的feature map大小为DF * DF,维度为M,滤波器的大小为DK * DK,维度为N,并且假设padding为1,stride为1。则,
原始的卷积操作,需要进行的矩阵运算次数为DK · DK · M · N · DF · DF,卷积核参数为DK · DK · N
depthwise separable convolutions需要进行的矩阵运算次数为DK · DK ·M · DF · DF + M · N · DF · DF,卷积核参数为DK · DK · M+N
由于卷积的过程,主要是一个spatial dimensions减少,channel dimension增加的过程,即N>M,所以,DK · DK · N> DK · DK · M+N。
因此,depthwiseseparable convolutions在模型大小上和模型计算量上都进行了大量的压缩,使得模型速度快,计算开销少,准确性好。如下图所示,其中,横轴MACS表示加法和乘法的计算量(Multiply-Accumulates),纵轴为准确性。
depthwise separable convolutions在caffe中,主要通过卷积层中group操作实现,base_line模型大小大概为16M。
ShuffleNet: AnExtremely Efficient Convolutional Neural Network for Mobile Devices
这篇文章在mobileNet的基础上主要做了1点改进:
mobileNet只做了3*3卷积的deepwiseconvolution,而1*1的卷积还是传统的卷积方式,还存在大量冗余,ShuffleNet则在此基础上,将1*1卷积做了shuffle和group操作,实现了channel shuffle 和pointwise group convolution操作,最终使得速度和精度都比mobileNet有提升。
如下图所示,
(a)是原始的mobileNet的框架,各个group之间相互没有信息的交流。
(b)将feature map做了shuffle操作
(c)是经过channel shuffle之后的结果。Shuffle的基本思路如下,假设输入2个group,输出5个group
| group 1 | group 2 |
| 1,2,3,4,5 |6,7,8,9,10 |
转化为矩阵为2*5的矩阵
1 2 3 4 5
6 7 8 9 10
转置矩阵,5*2矩阵
1 6
2 7
3 8
4 9
5 10
摊平矩阵
| group 1 | group 2 | group 3 | group 4 | group 5 |
| 1,6 |2,7 |3,8 |4,9 |5,10 |
ShuffleNet Units 的结构如下,
(a)是一个带depthwiseconvolution (DWConv)的bottleneck unit
(b)在(a)的基础上,进行了pointwisegroup convolution (GConv) and channel shuffle
(c)进行了AVG pooling和concat操作的最终ShuffleNetunit
references:
http://iamaaditya.github.io/2016/03/one-by-one-convolution/
https://github.com/soeaver/caffe-model
https://github.com/facebookresearch/ResNeXt
https://github.com/kwotsin/TensorFlow-Xception
https://github.com/shicai/MobileNet-Caffe https://github.com/shicai/MobileNet-Caffe
https://github.com/tensorflow/models/blob/master/slim/nets/mobilenet_v1.md
https://github.com/HolmesShuan/ShuffleNet-An-Extremely-Efficient-CNN-for-Mobile-Devices-Caffe-Reimplementation
https://github.com/camel007/Caffe-ShuffleNet
- 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet
- Inception v1 —v2 —v3 —v4
- 谷歌系列 :Inception v1到v4
- 谷歌Inception网络中的Inception-V3到Inception-V4具体作了哪些优化?
- Glide从V3到V4的探索
- Glide从V3到V4的探索
- 版本号V1*.V2*.V3*.V4* 第四位从svn versioon同步
- Inception-V2,V3
- 深度学习方法(十一):卷积神经网络结构变化——Google Inception V1-V4,Xception(depthwise convolution)
- 深度学习方法(十一):卷积神经网络结构变化——Google Inception V1-V4,Xception(depthwise convolution)
- GoogLeNet 之 Inception(V1-V4)
- CNN结构模型一句话概述:从LeNet到ShuffleNet
- react-router 从 v2/v3 to v4 迁移
- SNMP v1 v2 v3
- googleNet Inception v1 - v4 papers 发展历程
- GoogleNet Inception v1 - v4 papers 发展历程
- google Inception v1 - v4 papers 发展历程
- Google Inception v1 - v4 papers & 发展历程
- iOS 颜色渐变
- C# 使用 MonoPInvokeCallback,让 C 直接回调 C# 函数(C/C++ 跨平台方案)
- linux 安装 git
- sdl2.0 线程
- c语言简单的数据结构动态链表
- 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet
- Itellij ideal "Cannot load this JVM TI agent twice, check your java command line for duplicate jd"
- 目前最流行的运行时权限请求框架PermissionsDispatcher、RxPermissions和easypermissions的使用和对比
- struts 框架介绍 原理透析 struts概念说明
- Java内部类、匿名类及this使用
- 【大数据部落】基于R的关联数据挖掘技术在煤矿隐患管理
- python数据格式化之pprint
- Spark伪分布式安装(一)
- Android 中的内存泄漏