先发一张图(不全),以后再补
一,LeNet5
1998, Yann LeCun 的 LeNet5。
最早的卷积网络,已经有了卷积层,池化层和全连接层。
二,AlexNet
2012,ImageNet Classification with DeepConvolutional Neural Networks
ImageNet Top5错误率:16.4%,而两年前非深度学习的方法的最好错误率是28.2%
AlexNet总体结构和LeNet相似,但是有极大改进:
· 由五层卷积和三层全连接组成,输入图像为三通道224x224大小,网络规模远大于LeNet
· 使用了ReLU激活函数
· 使用了Dropout,可以作为正则项防止过拟合,提升模型鲁棒性
· 一些很好的训练技巧,包括数据增广、学习率策略、weight decay等
- AlexNet使用3GB显存的GTX 580显卡,所以如上图所示将模型分为两部分放到了两块显卡上并行运算。虽然在当时这仅仅是单块显卡资源有限时的做法,但是这种做法会减小参数数量,加快计算速度。(group convolution)对以后网络的加速方向提供了一种方法。如shufflenet,resnext都采用了这种group convolution的方式。
三,VGG
2014,Very deep convolutionalnetworks for large-scale image recognition
在AlexNet之后,另一个提升很大的网络是VGG系列,ImageNet上Top5错误率减小到7.3%。
具体结构:
主要改进:采取更深的网络结构,以尺寸为3x3的小卷积核来代替大的卷积核。抛弃了
Alexnet中5x5与11x11的卷积核。这样做的好处是让参数数量更少,速度更快,更能防止过拟合。举个例子来说:如果输入为256x256x3的图像,第一层要输出256x256x64特征图,如果以3x3的卷积尺寸进行卷积则参数数量为(3x3x3+1)x64=1792,而如果以11x11的卷积尺寸进行卷积的话,参数数量为)(3x11x11+1)x64=23296,增加了13倍。
四,GoogLeNet
Inception v1(GoogLeNet):2015,Going deeper with convolutions
ImageNet Top5错误率6.7%
Vgg让网络更深,GoogLeNet不仅深而且宽。GoogLeNet 加入了inception的模块如下(其实就是多个并行的卷积操作)。
1. inception v1(第一个版本)。如果单独5x5的卷积核,参数数量会很大,但是引入1x1的卷积核来对特征图降维(特征图的厚度)会大大减小参数的数量(后续的很多卷积神经网络都采用了1x1的卷积尺寸),例如输入256x256x64,输出256x256x128,如果单独采用5x5的卷积核则参数数量为(64x5x5+1)x128=204928,如果加上1x1的卷积操作则可以有中间过渡过程,输入256x256x64,过渡256x256x16,输出256x256x128,参数数量为(64x1x1+1)x16+(16x5x5+1)x128=52368,差不多只有25.6%的参数数量。
2. inception v2
一方面了加入了BN层(规范化层),使每一层的输出都规范化到一个N(0, 1)的高斯分布; 另外一方面学习VGG用2个3x3的conv替代inception模块中的5x5,既降低了参数数量,也加速计算;
3. inception v3
v3一个最重要的改进是分解(Factorization),将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,还有值得注意的地方是网络输入从224x224变为了299x299,更加精细设计了35x35/17x17/8x8的模块。
4. inception v4
v4研究了Inception模块结合Residual Connection能不能有改进?发现ResNet的结构可以极大地加速训练,同时性能也有提升,得到一个Inception-ResNet v2网络,同时还设计了一个更深更优化的Inceptionv4模型,能达到与Inception-ResNet v2相媲美的性能。
5. Xception
2016,Xception: Deep Learning withDepthwise Separable Convolutions
标准的卷积方式如下图:
Xception则把group convolution的思想发挥到了极致,每一个通道单独分为一组。叫做deepwise separable convolution,如下图所示:
其实就是把标准卷积分成两步,第一步叫deepwise convolution,就是单独对每个特征图进行卷积,第二步叫pointwise convolution,其实就是标准卷积,只是卷积核尺寸为1x1。这样分成两步会大大减少参数数量。列如输入256x256x64,输出256x256x128
标准卷积(如果·3x3的尺寸)的参数数量为(64x3x3+1)128=73856,另一种为(64x3
X3)+(64x1x1+1)x128=8896,相当于只有12%的参数数量。
五,ResNet
2016,Deep residual learning for imagerecognition
Vgg和inception都增加了网络的深度,但是随着网络的不断加深,可能会出现梯度消失(梯度接近于0)的问题(为什么,之后我会写个详细的文章来分析这个问题和梯度下降法,不然写太多了),由于卷积神经网络是依靠梯度下降法来寻优的,一旦梯度消失则无法更新参数,ResNet通过引入shortcut直连来解决这个问题:
对于shortcut的方式,作者提出了三个选项:
A. 使用恒等映射,如果residualblock的输入输出维度不一致,对增加的维度用0来填充;
B. 在block输入输出维度一致时使用恒等映射,不一致时使用线性投影以保证维度一致;
C. 对于所有的block均使用线性投影。
对这三个选项都进行了实验,发现虽然C的效果好于B的效果好于A的效果,但是差距很小,因此线性投影并不是必需的,而使用0填充时,可以保证模型的复杂度最低,这对于更深的网络是更加有利的。
在进一步的优化过程中引入1x1的卷积。减少了参数数量。
ResNet一个主流分支,基于残差结构发展出许多优秀的网络包括DenseNet、DPN、ResNeXt等。
1. DenseNet
既然残差结构这么好用,为什么不多用,于是·DenseNet将residualconnection发挥到极致,每一层输出都直连到后面的所有层,可以更好地复用特征,每一层都比较浅,融合了来自前面所有层的所有特征,并且很容易训练。但是不是resnet那样基于对应的特征图相加add,而是特征图的拼接concate。拼接的缺点是网络到后面特征图会很多(相当于之前特征图数量的累加(注意是数量上的累加)),所以使用一个叫做“增长率”(k)的超参数防止网络变得过宽,还用了一个1*1的卷积瓶颈层(又是它)在3*3卷积前减少特征映射的数量。缺点是显存占用更大并且反向传播计算更复杂一点。网络结构如下所示:
2. ResNeXt:
2017,Aggregated ResidualTransformations for Deep Neural Networks
结构图如下:
左边为普通的resnet结构,而右边为ResNeXt提出的结构,有点像inception+resnet
但是inception最后是拼接,而这里是加,各个通道也是一模一样的(很方便之后特征图相加)。这种方式利用1卷积和groupconvolution,看起来结构复杂了很多,其实参数数量并没有增加。
3. DPN
duall path networks
DPN可以说是融合了ResNeXt和DenseNet的核心思想,这里为什么不说是融合了ResNet和DenseNet,因为作者也用了group操作,而ResNeXt和ResNet的主要区别就在于group操作。
分成左右两个部分,第一部分类似DenseNet(因为加入了分组卷积,所以说是类似),第二部分是ResNeXt,对与中间的shortcut部分,由左右两部分的特征图经过1x1卷积相加,然后经过3x3卷积,和1x1的卷积(这就是resnet的shortcut部分),然后对获取的特征图分成两部分,一部分和左边类DenseNet对应特征图拼接,另一部分与右边ResNeXt的特征图进行相加(注意左右是不一样的操作)
六,移动端的网络
1. MobileNet
MobileNet v1:2017,MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications
和Xception类似,通过depthwiseseparable convolution来减少计算量,设计了一个适用于移动端的,取得性能和效率间很好平衡的一个网络。
MobileNet v2:2018,Inverted Residuals and Linear Bottlenecks: Mobile Networks forClassification, Detection and Segmentation
使用了ReLU6(即对ReLU输出的结果进行Clip,使得输出的最大值为6)适配移动设备更好量化,然后提出了一种新的Inverted Residuals and Linear Bottleneck,即ResNet基本结构中间使用了depthwise卷积,一个通道一个卷积核,减少计算量,中间的通道数比两头还多(ResNet像漏斗,MobileNet v2像柳叶),并且全去掉了最后输出的ReLU。
2. ShuffleNet
2017,ShuffleNet: An ExtremelyEfficient Convolutional Neural Network for Mobile Devices
Xception已经做得很好了,但是1x1那里太耗时间了成了计算的瓶颈,那就分组group convolution减少参数数量,但是分组了,组和组之间信息隔离了,那就重排shuffle一下,强行让信息流动。具体的网络结构如上图左侧所示。channelshuffle就是对通道进行重排,将每组卷积的输出分配到下一次卷积的不同的组去:
上图的a是没有shuffle,效果很差,b则像Alexnet一样把特征进行融合然后与后面的层进行全连接,但是这样会导致参数量剧增,要知道卷积神经·网络大部分参数都集中与全连接层。ShuffleNe如c中一样采取重排的方式来解决这个问题。没有引入额外的参数。同时ShuffleNet也采用了Xception中的deepwise convolution 减少了参数数量。ShuffleNet可以达到和AlexNet相同的精度,并且实际速度快13倍(理论上快18倍)。
未完待续
如果有什么错误,疑问,请加QQ:643421232探讨