深度学习:原理简明教程13-深度学习:CNN常见网络结构
欢迎转载,作者:Ling,注明出处:深度学习:原理简明教程13-深度学习:常见CNN网络结构
本文主要介绍一些主要的CNN网络结构,并且总结它们的特点:
这些网络包括:
LeNet-5
AlexNet
VGG16 & VGG19
ResNets50
Network in Network and 1*1 convolutions
Inception
Inception V2
Inception V3
Inception V4
ResNeXt
Xception
MobileNet
ShuffleNet
LeNet-5
特点:
1)[LeCun et al., 1998. Gradient-based learning applied to document recognition]
2)长和宽在下降,而channel在增加
3)input->conv->avg pool->conv->avg pool->fc->fc->output结构
4)激活函数用的sigmoid/tanh,输出激活函数用softmax
5)输入为1个channel,用于手写识别
AlexNet:
特点:
1)[Krizhevsky et al., 2012. ImageNet classification with deep convolutional neural networks]
2)长宽都在下降,channel在增加又下降,FC经过三个,下降趋势,最后经过一个softmax进行1000分类
3)模型大小比LeNet大多了,约60m参数
4)引入了Relu,更快迭代,引入了multiple GPUs训练
VGG16:
特点:
1)[Simonyan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition]
2)长宽在以1/2的方式递减,channel在不断以2倍增加
3)多个conv后跟一个pool,最后跟两个FC,再加一个softmax
4)参数约138m
5)参数具体情况
VGG19:
特点:
和VGG16主要区别在于中间的Conv从3个变成了4个
ResNets50:
完整结构:http://github.bdpt.net/ling/BlogResource/src/master/DL/dl_13/ResNet50_model.png
特点:
1)[He et al., 2015. Deep residual networks for image recognition]
2)ResNets实际上是由一系列Residual Block构成:
蓝色/紫色连接线称为:short cut或者skip connection
3)ResNets结构
原始网络 vs ResNet
4)为什么ResNet能有这种效果?
5)参数个数:
Total params: 25,636,712
Trainable params: 25,583,592
Non-trainable params: 53,120
6)最新ResNet的从50层变成了上千层
Network in Network and 1*1 convolutions:
特点:
1)[Lin et al., 2013. Network in network]
2)如果按第一幅图结果没多大意义,它只是扩大了每个点的值成2倍
3)如果按第二幅图结果就有意义了,每个filter会形成一个一个channel的output,如果多个filter,可以生成和原来长宽一样,但是每个channel的每个点的值不一样,且深度不一样的output
4)在Inception中将会用到,用1*1的conv进行降维
Inception:
1)[Szegedy et al., 2014, Going Deeper with Convolutions]
2)整个Inception网络由如下一组一组模块构成
为什么要这样做?
我们用CNN有个问题是,如何确定filter的size?1*1?3*3?5*5?
我们很难直接知道多大比较好,Inception提出来的办法就是都加入网络,让网络自己去学习每种的参数,如果1*1效果不好,那么学出来参数会很小。
但是每种size的filter都尝试,将会导致参数过多,于是。
Previous Activation在进行3*3的conv之前,先通过1*1的conv进行深度降维,从192降到96,而进行5*5的conv之前先通过1*1的conv从192降维到16,然后最后再将1*1,3*3,5*5,1*1的结果concat起来,得到最后28*28*256,其中256是所有filter数目总和。
2.1)卷积层共有的一个功能,可以实现通道方向的降维和增维,至于是降还是增,取决于卷积层的通道数(滤波器个数),在Inception v1中1*1卷积用于降维,减少weights大小和feature map维度。
2.2)1*1卷积特有的功能,由于1*1卷积只有一个参数,相当于对原始feature map做了一个scale,并且这个scale还是训练学出来的,无疑会对识别精度有提升。
2.3)增加了网络的深度与增加了网络的宽度
2.4)同时使用了1*1,3*3,5*5的卷积,增加了网络对尺度的适应性
3)注意所有filter都要用same padding保证结果是28*28
4)每一个卷积之后都有ReLU
5)网络除了最后有个softmax,其实中间也加入了softmax,可以让中间部分也出结果,看哪个准。
Inception V2:
特点:
1)加入了BN(Batch Normalization)层:使每一层的输出都规范化到一个N(0, 1)的高斯,从而增加了模型的鲁棒性,可以以更大的学习速率训练,收敛更快,初始化操作更加随意,同时作为一种正则化技术,可以减少dropout层的使用。
2)用2个连续的3*3 conv替代inception模块中的5*5,从而实现网络深度的增加,网络整体深度增加了9层,缺点就是增加了25%的weights和30%的计算消耗。
为什么两个3*3可以替代5*5?
如图5*5经过filter得到一个输出格子,两个3*3一样效果。
Inception V3:
完整网络结构:http://github.bdpt.net/ling/BlogResource/src/master/DL/dl_13/InceptionV3_model.png
特点:
1)提出了卷积分解(Factorization),代表作是Inceptionv3版本的GoogleNet
2)用1*3和3*1卷积替代3*3卷积。(实际上是1*n和n*1替代n*n,n可以变)。这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,更加精细设计了35*35/17*17/8*8的模块。
为什么1*3和3*1可以替换3*3?
如图和之前类似。
3)参数
Total params: 23,851,784
Trainable params: 23,817,352
Non-trainable params: 34,432
Inception V4:
特点:
1)Inception v4主要利用残差连接(Residual Connection)来改进v3结构,代表作为,Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4。使得训练加速收敛更快,精度更高。
2)设计了更深的Inception-v4版本,效果和Inception-ResNet-v2相当
3)网络输入大小和V3一样,还是299*299
4)各种网络微调,这里就不细说
5)论文:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error
6)个人觉得这种微调有点尴尬,所以v3用得更广
ResNeXt:
特点:
1)论文:Aggregated ResidualTransformations for Deep Neural Networks
2)这篇提出了resnet的升级版。ResNeXt,the next dimension的意思,因为文中提出了另外一种维度cardinality,和channel和space的维度不同,cardinality维度主要表示ResNeXt中module的个数,最终结论
3)增大Cardinality比增大模型的width或者depth效果更好
4)与 ResNet 相比,ResNeXt 参数更少,效果更好,结构更加简单,更方便设计
5)左图为ResNet的一个module,右图为ResNeXt的一个module,是一种split-transform-merge的思想
Xception:
完整网络:http://github.bdpt.net/ling/BlogResource/src/master/DL/dl_13/Xception_model.png
特点:
1)论文:Xception: DeepLearning with Depthwise Separable Convolutions
2)这篇文章主要在Inception V3的基础上提出了Xception(Extreme Inception),基本思想就是通道分离式卷积(depthwise separable convolution operation)
3)Xception与Inception V3的区别如下
3.1)
卷积的操作,主要进行2种变换,
spatial dimensions,空间变换: 在一个channel上的操作。
channel dimension,通道变换:在多个channel上的操作。
Inception V3是先做1*1的卷积,再做3*3的卷积,这样就先将通道进行了合并,即通道卷积,然后再进行空间卷积。
Xception则正好相反,先进行空间的3*3卷积,这个卷积不跨channel,仅对一个channel进行,再进行通道的1*1卷积,跨channel,多个channel一起操作。
3.2)RELU的有无:
这个区别是最不一样的,Inception V3在每个module中都有RELU操作,而Xception在每个module中是没有RELU操作的。
总结过程如下:
Depthwise Separable Convolution,或者简称Depthwise Convolution,是下面这个样子:先做channel-wise conv,然后再过1*1卷积,中间没有ReLU,最后有ReLU。
4)参数
Total params: 22,910,480
Trainable params: 22,855,952
Non-trainable params: 54,528
MobileNet
特点:
1)论文:MobileNets: EfficientConvolutional Neural Networks for Mobile Vision Applications
2)MobileNets其实就是Xception思想的应用。区别就是Xception文章重点在提高精度,而MobileNets重点在压缩模型,同时保证精度.
3)运用同上的:Depthwise Separable Convolution
4)为什么参数能大量减少?
图中第一行是输入的图片维度,p是padding,s是stride,和filter情况,filter数目是nf
第二行是传统方法需要的计算量:要得到输出结果的每个格子需要进行式子中第一大项,另外每个格子要综合nc个channel结果,每个格子需要算f^2的矩阵结果,最后nf个filter
第三行是MobileNets方法:要得到输出结果的每个格子需要进行式子中第一大项,每个格子需要f^2矩阵计算结果,共nc个channel,所以要分别进行nc个channel计算量,式子第二大项是1*1的卷积
由于网络不断往后,n变小,nf变大,所以,网络计算量会大大减小。
5)实验结果
其中,横轴MACS表示加法和乘法的计算量(Multiply-Accumulates),纵轴为准确性。
6) 参数:
Total params: 4,253,864
Trainable params: 4,231,976
Non-trainable params: 21,888
ShuffleNet:
特点:
1)旷视科技论文:ShuffleNet: AnExtremely Efficient Convolutional Neural Network for Mobile Devices
2)这篇文章在mobileNet的基础上主要做了1点改进:
mobileNet只做了3*3卷积的deepwiseconvolution,而1*1的卷积还是传统的卷积方式,还存在大量冗余,ShuffleNet则在此基础上,将1*1卷积做了shuffle和group操作,实现了channel shuffle 和pointwise group convolution操作,最终使得速度和精度都比mobileNet有提升。
留言