CNN框架演进及特点

CNN神经网络的演化过程

Hubel&Wiesel
     |
Neocognitron
     |
 LeCun1989
     |
   LeNet
     |增加dropout、relu
  AlexNet
     |多种演化方向
网络加深     增强卷积模块                     目标检测/实例分割             增加新功能单元
   |            |                         /              \                  |     
VGG16          NN                      RCNN           Yolo/SSD     Inception V2(增加BN)
   |            |                        |                |                 |
VGG19       GoogLeNet                fast-RCNN         Yolov2          FCN/FCN+CRF
   |            |                        |                |                 |
MSRANet   Inception V3/V4           faster-RCNN        Yolov3             STNet
   \            /                        |                                  |
    前两条路线合并                      mask-RCNN                        CNN+RNN/LSTM
         |
       ResNet
         |
  Inception ResNet

在GoogLeNet出现之前,对神经网络的修改往往是单纯增加层数和宽度,但是这样导致网络的参数变得非常多,容易出现梯度消失问题,也更加难以训练。

LeNet

DenseNet

AlexNet

NN

GooleNet

2014年,GoogLeNet 和 VGG 是当年 ImageNet 挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构,而GoogLeNet则做了更加大胆的网络结构尝试。虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍。因此在内存或计算资源有限时,GoogleNet是比较好的选择,从模型结果来看,GoogLeNet的性能却更加优越。

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,深度指网络层次数量、宽度指神经元数量。但这种方式存在以下问题:
(1)参数太多,如果训练数据集有限,很容易产生过拟合;
(2)网络越大、参数越多,计算复杂度越大,难以应用;
(3)网络越深,容易出现梯度弥散问题,难以优化模型。

解决这些问题的方法当然就是在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。

那么,有没有一种方法既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。GoogLeNet团队提出了Inception网络结构,是构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构。

Inception

通过设计一个稀疏网络结构,但是能够产生稠密的数据,既能增加神经网络表现,又能保证计算资源的使用效率。谷歌提出了最原始Inception的基本结构:
在这里插入图片描述
该结构将CNN中常用的卷积(1x1,3x3,5x5)、池化操作(3x3)堆叠在一起(卷积、池化后的尺寸相同,将通道相加),一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。
网络卷积层中的网络能够提取输入的每一个细节信息,同时5x5的滤波器也能够覆盖大部分接受层的的输入。还可以进行一个池化操作,以减少空间大小,降低过度拟合。在这些层之上,在每一个卷积层后都要做一个ReLU操作,以增加网络的非线性特征。

Inceptionv1

然而这个Inception原始版本,所有的卷积核都在上一层的所有输出上来做,而那个5x5的卷积核所需的计算量就太大了,造成了特征图的厚度很大,为了避免这种情况,在3x3前、5x5前、max pooling之前分别加上了1x1的卷积核,以起到了降低特征图厚度的作用,这也就形成了Inception v1的网络结构,如下图所示:
在这里插入图片描述
基于Inception构建了GoogLeNet的网络结构(共22层)。
在这里插入图片描述
对上图说明如下:

  1. GoogLeNet采用了模块化的结构(Inception结构),方便增添和修改;
  2. 网络最后采用了average pooling(平均池化)来代替全连接层,该想法来自NIN(Network in Network),事实证明这样可以将准确率提高0.6%。但是,实际在最后还是加了一个全连接层,主要是为了方便对输出进行灵活调整;
  3. 虽然移除了全连接,但是网络中依然使用了Dropout ;
  4. 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练很有裨益。而在实际测试的时候,这两个额外的softmax会被去掉。

1x1的卷积核有什么用呢?

1x1的卷积核最早在NIN的结构中提出,后应用于GooLeNet。
1×1的卷积大概有两个方面的作用:

  1. 1x1卷积的主要目的是为了实现特征通道数的降维和升维。比如,上一层的输出为100x100x128,经过具有256个通道的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256,其中,卷积层的参数为128x5x5x256= 819200。而假如上一层输出先经过具有32个通道的1x1卷积层,再经过具有256个输出的5x5卷积层,那么输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 204800,大约减少了4倍。
  2. 实现跨通道的交互和信息整合。即加入非线性。卷积层之后经过激励层,1*1的卷积在前一层的学习表示上添加了非线性激励( non-linear activation ),提升网络的表达能力;可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。

NN的卷积核和n1的卷积核

1×N 和 N×1 的卷积核主要是为了发现宽的特征和高的特征。
非对称卷积,1n和n1的卷积与nn卷积相比能够降低参数量与计算量。
前者:(1
n)+(n1)
后者:n
n
非对称卷积在深层中使用较好,但在浅层使用不太好,因为很多信息还在空间中,需要用较“全面的”对称卷积来提取信息。

Inception v2

如何在不增加过多计算量的同时提高网络的表达能力,Inception V2版本的解决方案就是修改Inception的内部计算逻辑,提出了比较特殊的“卷积”计算结构。
卷积分解(Factorizing Convolutions)
大尺寸的卷积核可以带来更大的感受野,但也意味着会产生更多的参数,比如5x5卷积核的参数有25个,3x3卷积核的参数有9个,前者是后者的25/9=2.78倍。因此,GoogLeNet团队提出可以用2个连续的3x3卷积层组成的小网络来代替单个的5x5卷积层,即在保持感受野范围的同时又减少了参数量,如下图:
在这里插入图片描述
那么这种替代方案会造成表达能力的下降吗?通过大量实验表明,并不会造成表达缺失。
可以看出,大卷积核完全可以由一系列的3x3卷积核来替代,那能不能再分解得更小一点呢?GoogLeNet团队考虑了nx1的卷积核,如下图所示,用3个3x1取代3x3卷积:
在这里插入图片描述
因此,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。GoogLeNet团队发现在网络的前期使用这种分解效果并不好,在中度大小的特征图(feature map)上使用效果才会更好(特征图大小建议在12到20之间)。
在这里插入图片描述
降低特征图大小
一般情况下,如果想让图像缩小,可以有如下两种方式:
在这里插入图片描述
先池化再作Inception卷积,或者先作Inception卷积再作池化。但是方法一(左图)先作pooling(池化)会导致特征表示遇到瓶颈(特征缺失),方法二(右图)是正常的缩小,但计算量很大。为了同时保持特征表示且降低计算量,将网络结构改为下图,使用两个并行化的模块来降低计算量(卷积、池化并行执行,再进行合并)

Inception的思想

基本思想:1、不需要人为决定使用哪个过滤器,或是否需要池化,而是由网络自行确定这些参数,你可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些过滤器组合。
2、增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。而Inception网络结构既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。

VGG

ResNet

为什么残差网络可以设计的很深

Inception-Resnet

Inception-Resnet是将resnet和Inception相结合的方法来提高分类精度。

Inception-Resnet-V1

在这里插入图片描述
Figure 7 中的,k=192, l=192, m=256, n=384

Inception-Resnet-V2

在这里插入图片描述
其中
stem部分设计,inception设计,并且conv也使用了71+17这种优化形式,
inception-resnet-A部分设计,inception+残差设计,

vgg和Googlenet的区别

参数(存储):
精度:
计算效率

比 VGG 更深的网络结构,但是却比 VGG 的参数更少,因为其去掉了后面的全连接层,所以参数大大减少,同时有了很高的计算效率。

总结:

RNN
LSTMHochreiter & Schmidhuber1997
LSTM变体Gers & Schmidhuber2000
LSTM变体-GRUCho2014
AlexNet
GoogleNet2014 ImageNet挑战赛Going deeper with convolutions
VGGNet2014 ImageNet挑战赛
ResNet

参考:
演化
https://www.cnblogs.com/skyfsm/p/8451834.html

GoogLeNet
https://my.oschina.net/u/876354/blog/1637819
https://blog.csdn.net/zgcr654321/article/details/90264871
tf实现
https://blog.csdn.net/guyuealian/article/details/81560537#1、训练和测试的图片数据集f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值