内容纲要

欢迎转载,作者: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

dl_13_001

特点:

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:

dl_13_002

特点:

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:

dl_13_003

特点:

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)参数具体情况

dl_13_004

 

VGG19:

dl_13_005

特点:

和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构成:

dl_13_006

蓝色/紫色连接线称为:short cut或者skip connection

dl_13_007

3)ResNets结构

dl_13_008

原始网络 vs ResNet

dl_13_009

4)为什么ResNet能有这种效果?

dl_13_010

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:

dl_13_011

dl_13_012

特点:

1)[Lin et al., 2013. Network in network]

2)如果按第一幅图结果没多大意义,它只是扩大了每个点的值成2倍

3)如果按第二幅图结果就有意义了,每个filter会形成一个一个channel的output,如果多个filter,可以生成和原来长宽一样,但是每个channel的每个点的值不一样,且深度不一样的output

4)在Inception中将会用到,用1*1的conv进行降维

 

Inception:

dl_13_013

1)[Szegedy et al., 2014, Going Deeper with Convolutions]

2)整个Inception网络由如下一组一组模块构成

dl_13_014

为什么要这样做?

我们用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%的计算消耗。

 

dl_13_015

为什么两个3*3可以替代5*5?

dl_13_016

如图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的模块。

dl_13_017

为什么1*3和3*1可以替换3*3?

dl_13_018

如图和之前类似。

3)参数

Total params: 23,851,784

Trainable params: 23,817,352

Non-trainable params: 34,432

 

Inception V4:
特点:

dl_13_019

1)Inception v4主要利用残差连接(Residual Connection)来改进v3结构,代表作为,Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4。使得训练加速收敛更快,精度更高。

dl_13_020

dl_13_021

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的思想

dl_13_022

 

Xception:

完整网络:http://github.bdpt.net/ling/BlogResource/src/master/DL/dl_13/Xception_model.png

dl_13_023

特点:

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一起操作。

dl_13_024

3.2)RELU的有无:

这个区别是最不一样的,Inception V3在每个module中都有RELU操作,而Xception在每个module中是没有RELU操作的。

总结过程如下:

Depthwise Separable Convolution,或者简称Depthwise Convolution,是下面这个样子:先做channel-wise conv,然后再过1*1卷积,中间没有ReLU,最后有ReLU。

dl_13_025

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

dl_13_026

4)为什么参数能大量减少?

dl_13_027

图中第一行是输入的图片维度,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)实验结果

dl_13_028

其中,横轴MACS表示加法和乘法的计算量(Multiply-Accumulates),纵轴为准确性。

6) 参数:

Total params: 4,253,864

Trainable params: 4,231,976

Non-trainable params: 21,888

 

ShuffleNet:

dl_13_029

特点:

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有提升。