Inception v1、v2、v3

1、Incention V1(CVPR2015): 

(1)网络结构

    

     GooLeNet的提出主要为为了解决这个问题,即通过增加网络层数量或者增加每层网络的宽度来提高准确率时有很多缺点,第一个是容易引起过拟合,第二个是造成计算资源极大增加。而解决这个问题的方法通常是让全连接层甚至卷积层变得稀疏化,这种方法不仅有仿生系统基础,而且这也有更坚实的理论基础的优势,即如果数据集的概率分布可由大的而且非常稀疏的深度神经网络表示,那么构筑这个网络的最佳方法是逐层构建网络,让上一层高度相关的节点聚类,并将聚类输出的小簇连接到一起。这和Hebbian原理有异曲同工之妙,即一起发射的神经元连接到一起。Incention模块有四个分支,分别是1*1卷积、3*3卷积、5*5卷积和3*3的池化,在3*3和5*5的卷积之前用一个1*1的卷积进行降维,减少特征图的通道数减少计算量。整体的网络结构由堆叠Incention module搭建而成。

          

  整个网络如果不包含池化层的话有22层,如果包含池化层的话有27层。所有的卷积层均采用ReLu激活函数,#3*3reduce和#5*5reduce表示在3*3和5*5的卷积之前使用1*1的卷积进行降维。然而,对于深网而言,梯度传播慢是一个值得关注的问题,通过对中间网络层添加辅助分类器,可以加快网络的训练速度。这既可以解决梯度消散问题,而且也有正则化作用。Inception4a和Inception4b添加了两个辅助分类器,在训练时以0.3的权重损失加入到总损失中,而在预测时放弃这些辅助分类器。

                                                                     

  辅助分类器由以下几个网络层组成:一个5*5的步长为3的池化,128个1*1的卷积用于降维,一个1024神经元的带有ReLUt激活的全连接层,一个0.7概率的Dropout层,一个带softmax回归的线性变换层得到1000维的向量。

(2)实验结果

  实验是基础ILSVRC2014做的,我们独立地训练了7个相同版本的GoogLeNet模型(包括一个更宽版本),并用它们进行了融合预测。 这些模型使用相同的初始化和学习率策略进行训练。 它们仅在采样方法和随机输入图像顺序上有所不同。在测试过程中,我们采用了比AlexNet更激进的裁剪方法。 具体来说,我们将图像调整为4种尺度,其中较短的尺寸分别为256,288,320和352,取这些尺寸调整后的图像的左,中,右方块(在肖像图像的情况下,我们采取顶部,中心和底部方块)。对于每个方块,我们然后采用4个角和中心的224*224裁剪以及调整大小为224*224的方形,再对这些裁剪取镜像版本。 这导致每个图像有4*3*6*2=144个裁剪。我们注意到在实际应用中可能不需要这种激进的裁剪方式,因为在合理数量的裁剪存在之后,更多裁剪的好处变得微不足道。softmax概率在多个裁剪和所有单个分类器上取平均值以获得最终预测。 在我们的实验中,我们分析了验证数据的替代方法,例如裁剪的最大池化和分类器的平均值,但它们导致性能低于简单平均。实验结果如下:

  

(3)参考

    Inception  v1官方源码:https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v1.py

    Inception v1的预训练模型:https://github.com/tensorflow/models/tree/master/research/slim

    Inception v1的论文:《Going Deeper with Convolutions》

2、Incention V2(ICML2015):

 (1)网络结构

    Inception V2的提出主要是解决这个问题:训练深度神经网络很复杂,这是由于训练时每层的网络参数会发生变化,因此在训练过程中每层输入的分布都会发生变化。 这就需要我们用较低的学习速率和小心地进行参数初始化,然而这样会导致训练非常慢,并且这使得训练具有饱和非线性的模型变得非常困难,我们称这种现象为“internal covariate shift”。Inception V2提出了Batch Normalization来解决这个问题。采用BN之后,训练的学习率可以设置很大,也不需要小心进行初始化,而且BN也具有正则化作用,甚至可以完全取代Dropout层。注意,原论文中的BN层位于卷积之后,激活函数之前:Conv+BN+ReLU,但是有很多人认为BN放在ReLu之前还是之后是一个需要调整的超参数,有的论文放在前,有的论文放在后。下面我们介绍BN的实现方式:

  众所周知,白化处理可以加快网络的训练速度,例如线性变换为均值为0方差为1的分布并且取出变量之间的相关性。然而,白化处理会导致计算量过大而且并不是处处可微。因此我们不做白化处理,而是对每个标量特征作独立的归一化处理,使之具有均值0和方差为1的分布。对于一个d维的输入x=量我们归一化每维向量为:

                                                  

   然而,只对网络层的每个输入做归一化将改变网络层的表征,破坏网络层所学习到的特征。为了解决这个问题,我们必须要确保插入到网络中的变换必须能表示恒等变换。因此对于每个激活值,我们引入一队参数,它们能缩放并平移归一化后的值:

                                                

  这两个参数可以跟随原始模型的参数被学习到,而且可以恢复网络的原有表征能力。比如学习到的时,我们就能恢复原始的激活值。因此BN的前向传播为:

                            

    其中m代表batchsize的大小,xi代表一个网络层的一个神经元,在CNNs中就代表输出[m, h, w, d]的一个特征图。在CNNs中,所有mini-batch的同一个位置的特征图共享均值、方差和,因此某一层的输出有多少个特征图,就有多少对均值、方差和。此外,训练时迭代一次就计算一个mini-batch的均值和方差,迭代第二次时均值和方差会用移动平均算法来累积上次计算的均值和方差,当训练结束时,得到的均值和方差是整个训练集上的。测试时所有的均值、方差都是固定值。而这两个参数学习时的反向传播为:

                               

(2)实验结果

  Inception V2与Inception V1相比,除了给Inception V1加上BN之外,还有一个变化就是把Inception V1中的5*5的卷积换成了两个3*3的卷积。此外在训练过程中,为了加快训练速度,还对训练参数做了一下改变:1)增加学习率;2)去掉Dropout层,因为BN也具有正则化作用;3)减少L2权重正则化,权重衰减因子降为原来的1/5;4)加速学习率的衰减,原来使用的衰减策略为指数衰减,这里加快衰减速度为原来的6倍;5)去掉LRN层;6)更加全面地打乱训练集;7)减少光度失真,即减少数据增强。单个网络的训练结果如下:

   

    其中Inception表示把Inception V1的5*5换成两个3*3,学习率为0.0015;BN-Baseline表示在Inception基础上加上了BN层;BN-x5表示对BN-Baseline做了那7中超参数改变,初始学习率增加5倍,为0.0075;BN-x30与BN-x5类似,只是初始学习率增加30倍,为0.045;BN-x5-Sigmoid与BN-x5相同,只是把ReLu激活函数换成Sigmoid函数。接下来进行模型融合,我们选择6个网络进行模型融合,每个都基于BN-x30,通过以下一些方法进行修改:在卷积层中增加初始权重; 使用Dropout(Dropout概率为5%或10%,而原始Inception为40%)等。验证集上的评估结果如下:

          

    此外,BN-Inception融合模型在测试集上实现了4.82%的top5错误率。

(3)参考

    Inception  v2官方源码:https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v2.py

    Inception v2的预训练模型:https://github.com/tensorflow/models/tree/master/research/slim

    Inception v2的论文:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》

3、Incention V3(CVPR2016): 

(1)网络结构

    Inception V3的设计遵循以下几个原则:规则1)尽量避免网络层的表征瓶颈,特别是网络的前面几层。即特征图的分辨率从输入到输入出应该逐渐减小,中间层要避免极端的分辨率压缩,理论上,图像信息不能只靠特征图的维度来评估,因为这将丢失重要的比如图像的空间结构关系等信息,维度只提供粗糙的图像信息表征;规则2)在一个网络内,更高维度的特征表示更容易处理局部信息。因为增加维度可以囊括更多的分解特征;规则3)空间聚合可以在较低维度嵌入上完成,而不会导致太大或任何表征能力上的损失;规则4)平衡宽度和深度,通过平衡每个阶段卷积核的个数和网络的深度可以达到网络最优的性能。

    在Inception V1中,网络性能的增加来自于维度的减少,Inception V1中在3*3和5*5的卷积之前,使用1*1的卷积进行降维处理,这是因为在视觉网络中,越靠近激活层的输出相关性越高越好,因此在3*3的卷积前用1*1的进行降维,这也课以产生相似的局部表征。在这里我们探索其他分解卷积的方式,主要是为了减少计算量,因此Inception V3提出了三种结构如下:

    第一个结构是将Inception V1中5*5的卷积换成两个3*3的卷积(左图为原始结构,有图为替换后的结构):

                                           

    第二个结构是可以将任何n*n的卷积替换为1*n和一个n*1的卷积,这种分解在网络的前面几层效果不好,但是在网络的中间层时的效果很好,特别是对于m*m的特征图(m位于12到20之间时)。下面的左图分分解后的结构,有图为第三种结构。

                     

    第三种结构右上图所示,主要是遵循规则2)设计的,用于处理低分辨率高维的特征图。最终网络的总体结构如下:

                                      

    网络有42层,计算成本约为GooLeNet的2.5倍,但是仍然比VGG更加的高效。网络的每个Inception模块都使用了以下提出的降采样技术。传统的卷积网络都用池化层来进行降采样,为了避免表征瓶颈,在使用最大池化后者平均池化之前,特征图的通道数需要先进行扩展(如下左图的第二种方案),然而这却造成很大的计算成本。一个可行的方案是先池化再卷积进行降采样(如下左图的第一种方案),然而这样做会导致表征瓶颈的出现。为了解决这个问题,我们提出了一个既减少计算成本而且又不造成表征瓶颈的方案,即我们使用并行的步长为2的卷积和池化组合,如下右图所示:

 

    左图表示传统的下采样方式,第一种先池化再卷积,导致表征瓶颈的出现,第二种是先加倍通道再池化,计算量是原来的三倍。右图是论文中提出的下采样方法。

(2)实验结果

    训练使用随机梯度下降和TensorFlow实现,momentum=0.9,而我们的最好模型使用RMSProp优化方法实现的。初始学习率为0.045,每2次epoch进行一次指数衰减,指数衰减率为0.94。此外,阈值为2的梯度裁剪对训练很有用。实验室基于ILSVRC2012做的,包括单一裁剪实验(下图左)、单模型多裁剪实验(下图右)和多模型的融合实验(最后一个图),注意这里的Inception-v3等价于Inception-v2 BN-auxiliary,可以为了和上一节的Inception V2(即下面BN-Inception)区别,这篇论文中提出的模型可以全部统称为Inception V3:

                    

       

(3)参考

    Inception  v3官方源码:https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v3.py

    Inception v3的预训练模型:https://github.com/tensorflow/models/tree/master/research/slim

    Inception v3的论文:《Rethinking the Inception Architecture for Computer Vision》

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值