Inception系列:Inception-v1(GooLeNet)、Inception-v2、Inception-v3、Inception-v4论文全面解读


Paper



万字长文,建议收藏!


Inception-v1-2014

又名GoogLeNet,是一个22层的网络,取得了2014年ILSVRC比赛的冠军。

1、其设计初衷是可以在其基础上扩展宽度和深度

2、其设计动机来自于提高深度网络的性能一般可以通过提高网络的大小提高数据集的大小来提高,但同时会造成网络很容易过拟合和参数量过大计算资源的低效率以及高质量数据集的制作昂贵的问题。

3、其设计理念是将全连接改为稀疏架构,并尝试在卷积内部改为稀疏架构。

4、其主要的思想是设计了一个inception模块,并通过不断复制这些inception模块来提高网络的深度和宽度,不过GooLeNet主要还是在深度上扩展这些inception模块。

每一个inception模块中有四个并行通道,并在通道结束时进行concat
1x1 conv在文章中主要是用来进行维度的降低以避免计算瓶颈。
其还在前面的网络层一些分支上加入了额外的softmax loss以避免梯度消失问题。

四个并行通道:

  • 1x1的conv:借鉴了【Network in Network】,可以进行输入feature map的降维升维而不会太过损失输入的空间信息;
  • 1x1conv followed by 3x3 conv:3x3 conv增大feature map的感受野,并通过1x1conv进行维度的更改;
  • 1x1 conv followed by 5x5 conv:5x5 conv进一步增大feature map 的感受野,并通过1x1 conv进行维度的更改;
  • 3x3 max pooling followed by 1x1 conv:作者认为pooling层虽然会损失空间信息,但是因为其已经有效的应用在很多领域,这证明了其有效性,所以加了一个并行通道,并同时通过1x1 conv来更改其输出维度。

在这里插入图片描述


接下来是对论文主要内容的简单翻译:

  • Abstarct

本文提出了一个命名为Inception的深度卷积网络架构, 其成为2014年ILSVRC分类和检测比赛中最先进的方法。网络架构的主要特点是最大化利用网络内部的计算力。在保持计算负载稳定的前提下,通过精心的设计允许对网络的深度和宽度进行提升。为了最优化性能,网络架构是基于Hebbian原则,并且进行了多尺度处理。在2014ILSVRC中使用的是一个22层的网络,被命名为GooLeNet

  • Introduction

在过去三年里,由于深度学习的发展,更具体的卷积网络被提出,促进了图像分类和检测。一个值得振奋人心的消息是,大多数的进展不仅仅是更强大的硬件算力、更大的数据集、更大的模型的结果,而且是由于一些新的想法、算法以及在网络架构上的创新。我们的GooLeNet模型实际上用了比两年前AlexNet 12倍更少的参数,然而性能却更好
对于大多数的实验,模型被设计在推理阶段来保持一个15亿的multiply-adds

在这篇文章中,我们关注一个对计算机视觉更有效的深度神经网络架构,其被命名为Inception,名字源于Network in network这篇文章,并结合了“we need to go deeper”网络用语。在我们的情况下,deep有两种含义,首先是我们介绍了一种Inception module新的组织形式,而且可以直接的提升网络深度。

  • Related work

LeNet-5开创了CNN的标准结构,在全连接层之前堆积的卷积层,可选择的一些标准化层和池化层。这种基础的设计和架构已经在MINISTCIFAR中取得了显著的效果,甚至在ImageNet上都有很好地表现。但是对于Imagenet这种更大的数据集,趋势倾向于提升网络层的数量和其大小,同时使用dropout来避免过拟合的问题。

尽管最大池化会造成一些精细空间信息的损失,这种网络架构已经可以成功的应用在定位、目标检测以及人体姿态识别上。

本文在网络中使用1x1的卷积层主要有以下目的,它们被用来进行维度降低避免计算瓶颈,而这种瓶颈往往会限制模型的大小。这不仅允许深度提升,而且允许在不损失性能的前提下去提升宽度。

当前在目标检测最显著的模型是R-CNN,其将检测问题分为两个阶段问题:充分利用低级特征,例如颜色以及针对类别的超像素一致性,同时用CNN分类器去进行这些位置的分类。

  • Motivation and High Level Considerations

提高网络的性能的两种方式:

提升深度神经网络性能最直接的方法就是提升它们的大小。这包括深度,即层级的数量以及他们的宽度即每一层级单元的大小
还有一个比较容易和安全的方式是提升训练数据的大小。

然而这两种方法都会造成两个弊端

更大的模型意味着更多的参数量,这会使得网络更容易过拟合,特别是当训练数据集中的标签样本数量被限制的情况。
同时因为高质量训练集制作棘手的和昂贵的,特别是当一些人类专家去分的时候也有很大的错误率。如下图。

在这里插入图片描述
另外一个短板是,统一提升网络的大小是会提升计算资源使用、例如,在一个深度网络中,如果两个卷积是链式的,对于其卷积核任何统一的提升都会造成需求资源二次方的增加。如果增加的能力是低效率的,例如如果大多数的权值是以0作为结束,那么很多计算资源是被浪费的。但因为计算资源实际上总是有限的,一个有效的计算分布总是倾向于不加选择的去提升模型大小,甚至主要的客观目标是提升结果的性能。

来解决这两个问题的基础方法是在最后将全连接网络改成稀疏架构,甚至是在卷积内部

  • Architectural Details

Inception架构的主要创新点是关注如何在一个卷积网络中寻找一个稀疏的架构来和一个稠密的架构相匹配和对等。平移不变性意味着我们将需要从一个卷积模块中去构建网络。我们需要的是发现最优局部架构并且去重复这种架构

在这里插入图片描述GooLeNet网络层的细节如下表所示:
在这里插入图片描述
其在前面的一些分支上加入了一些softmax层去减轻深度网络的梯度消失问题。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
总结:

  • 128个1x1的卷积核用来维度降低和修正线性激活单元;
  • 一个1024个单元的全连接层和修正线性激活单元;
  • 一个以70%概率丢掉神经元连接的dropout层;
  • 一个以softmax损失作为分类的线性层
  • 预测1000个类别,但是在推理阶段被去除

  • Training Methodology

动量设置为0.9,学习率设置为每8个epoch降低4%。
训练了7个模型,为了使问题更精细,一些模型在小的crop上训练,一些则在大的crop上训练

使模型训练好的因素包括
图像各种尺寸patch的采样,大小平均分布在8%到100%,长宽比例在3/4到4/3之间。
光照变化对于避免过拟合有作用
后期使用随机插值进行图像的resize

  • ILSVRC 2014 Classification Challenge Setup and Results

在测试阶段,其将图像分为256、288、320、352四个尺度,并且裁剪左中右正方形在修正尺寸后图像,对于一些人物照片,我们进行了上中下的裁剪。对于每一个裁剪后的正方形图像,我们采取四个角点和中心采取了224x224的图像,同时这些正方形也被修正为224x224大小,以及还有他们的镜像版本。于是结果就有4x3x6x2=144张裁剪后的图像。4是四个尺度,3是左中右,6是四个角点+1个中心+一个原始图像修正,2是镜像图片的操作。

softmax输出概率通过不同裁剪图像以及不同分类器最终的平均作为分类器的输出,在我们的实验中,我们分析了在验证集中可选择的方法,例如对裁剪的图片进行平均池化,或者通过分类器后的平均,但是这些方法都劣于原始的平均方法。


结束。


Inception-v2-2015

本文在深度网络模型的发展中是一篇具有里程碑性质的文章,其最突出的贡献是提出了归一化的Batch Normalization层,去统一网络的输出范围,因此可以将每一层的网络输出都固定在一个较为统一的范围,如果不加BN层,那么每一层的网络输入输出的值范围相差较大,那么其学习率的大小也会不太一样,而BN层则避免了这种情况,这加速网络的训练和在一定程度给网络正则项,减轻网络的过拟合程度,在后续的网络模型发展,大多数模型都或多或少的在模型中添加BN层。

本文是在输入到激活函数前,先进行BN层标准化的处理。同时借鉴VGG用2个3x3的conv代替inception模块中的5x5conv,降低了参数量,加速了计算。

  • 伪代码:

在这里插入图片描述

  • 算法优势:

1、提升了学习率:在BN模型中,实现了使用更高的学习率去加速训练收敛,但是不会造成其他影响。因为如果每层的scale不一样,那么每层需要的学习率是不一样的,同一层维度的scale往往也需要不同大小的学习率,而通常需要使用最小的学习才能保证损失函数的下降,但是BN层将每层每维的scale保持一致,那么就可以直接使用较高的学习率进行优化。
2、移除dropout层:BN层充分利用dropout层的目标。从BN-Inception模型中移除dropout层,但是不会出现过拟合。
3、降低L2权重衰减系数:尽管L2损失控制了Inception模型的过拟合,但是在BN-Inception模型中,权重的损失已经下降了五倍。
4、加速学习率的衰减:在训练Inception模型时,我们让学习率按照指数下降。因为我们的网络比Inception更快,我们将将降低学习率的速度提升了6倍。
5、移除局部响应层:尽管这个层是有一定作用的,但是在BN层加入后,这个层就没什么存在的必要了。
6、更彻底打乱训练样本:我们将训练样本打乱,这可以阻止相同的样本出现在一个mini-batch内。这可以在验证集提升1%的精度,这是BN层作为一个正则项的优势所在。在我们的方法中,当模型每一次看到的样本不同时,随机的选择是更有效的。
7、减少图像扭曲:因为BN网络训练的更快而且观察每一个训练样本的次数更少,我们想让模型看到更真实的图像而不是扭曲的图像。

  • 在模型中加入使用不同初始学习率的BN层表现如下表所示:

(Baseline:base_lr=0.0015,x5:base_lr=0.0075,x30:base_lr=0.045,x5-Sigmoid:将ReLU改为Sigmoid)
在这里插入图片描述

  • 在top-1和top-5 error上不同的模型对比:

在这里插入图片描述

  • 网络参数表格:

在这里插入图片描述

  • 参考链接:

Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》阅读笔记与实现
谷歌系列 :Inception v1到v4


结束


Inception-v3-2015

本文主要探讨这样一个问题,如何将卷积核使用两个甚至多个更小尺寸的卷积核去代替,同时还引入了非对称的卷积层即一维卷积
还提出了对pooling层会造成空间信息损失的一些补救方法;
还有label-smoothingBN-ahxiliary等思想。
对不同分辨率的输入进行了实验,结果证明低分辨率输入虽然需要更多的时间训练,但是达到的精度和高分辨率没有相差很多。

在提高网络精度的同时降低了计算成本。


  • Abstract

卷积网络依然是针对广泛任务的最先进的计算机视觉方法。从2014年开始,非常深的网络开始成为主流,在不同的标准评价上产生了重要的进步。虽然模型大小和计算成本的提升更容易对大多数任务产生一种立即的效果(只要为训练提供的标注好的数据足够大),但是计算效率以及低参数仍然是手机视觉和大数据场景下重要的推进因素。在这方面,我们有一些探索,致力于使用尽可能合适的卷积层正则化手段去修正网络架构。

本文测试了在ILSVRC2012上方法效果,达到top-1 error 21.2%top-5 error 5.6%,单帧图像的评价的成本大概是50亿mutiply-adds,使用的参数少于25百万

同时,在使用四个模型和多crop评价,本文达到了一个3.5%的top-1 error17.3%的top-5 error

  • 1-Introduction

自从2012年,AlexNet赢得了ImageNet比赛的冠军,其成功的被应用在很多计算机视觉任务中,包括目标检测,分割,人体姿态估计、视频分类,目标追踪以及超分辨率。

这些成功的应用激励了很多致力于寻找性能更好的网络的研究。从2014年开始,网络架构的性能在充分利用网络的深度和宽度后得到了显著的提升VGGNetGooLeNet在2014年ILSVRC中达到了相似的精度。一个有趣的现象是,在分类上性能优异的网络更倾向于用在更为广泛的应用领域。这意味着,深度卷积架构的进步可以被充分使用以提升其他的计算机视觉任务,这些视觉任务非常依赖于高质量可学习到的视觉特征。同时,网络性能的提升催生了其他应用领域,而在这些领域内,AlexNet提取的特征无法在检测领域同手动设计的特征方法或者推荐的生成相竞争。

虽然VGGNet可以简单地提取出有效的特征,但同时它也带来了高昂的计算成本:评价该网络需要很多计算。另一方面,GooLeNet的Inception设计在非常严苛的计算资源下可以展现出很好的效果,比如,其可以用5百万参数,相比于AlexNet12倍的降低,但是VGGNet的参数却是AlexNet的3倍

Inception的computational cost比VGGNet是更低的,包括比VGGNet性能更好的网络。因此在大数据场景充分利用Inception模块是可行的,因为在这种场景下,巨大的数据量需要在一种合理的cost和场景下被处理,而往往这种情况,memory和computational capacity是有限的,例如在手机视觉领域中。当然这是可能的来使用一些具体的方法来致力于内存使用,或者通过一些computational tricks来优化一些确定操作的执行。然而,这些方法用在Inception架构上,效果一样会很好,而且会将效率提升的更高。

虽然,Inception模块的复杂度使得对网络作出改变是非常困难的。如果网络架构是被简单的scale,那么很多计算效果就会立刻损失掉。同时,这是没办法确定GooLeNet架构中什么因素或者参数会影响到模型的设计。因此保持其性能的同时并将其适应一些使用情况是困难的。比如,如果提升模型的容量是必要的,那么简单的double所有卷积集群的数量将会导致在computational cost和参数数量上4倍的提升。这被证明在大部分实际场景下是不可行的和不合理的,特别是获得的效果一般。

在这篇文章中,我们开始描述一些一般原则和优化方法,这被证明是scale网络一种有效的手段。虽然我们的原则是不仅仅限于Inception style的网络,但是它们是更容易观测到这样一种效果,那就是Inception style这样一种更为普通模块结构是可以更灵活和自然地融合这些原则限制。通过Inception模块中的维度降低和并行结构可以缓和周围结构的变化所带来的影响。但是,这样做值得注意的地方是,这些指导原则应该是致力于保持模型的高性能。

  • 2-General Design Principles

我们将会描述一些设计原则,这些原则是通过对卷积网络进行不同的架构设计而进行的大量实验所提出的。在这一点上,对以下原则的充分利用是可以猜测出的,而且一些额外的在将来会进行的实验将是有必要来估算它们的精度和有效性。

原则1要防止出现特征描述的瓶颈。所谓特征描述的瓶颈就是中间某层出现对特征比较大比例的压缩(比如使用pooling操作),这种操作会造成特征空间信息的损失,导致特征的丢失。虽然pooling在CNN中操作很重要,但是可以使用一些方法来尽量避免这种损失(笔者记:后来的空洞卷积操作)。

原则2特征的维度越高训练收敛的速度越快。即特征的独立性和模型收敛的速度有很大关系,独立的特征越多,输入的特征信息就被分解的越彻底,子特征之间的相关性低,子特征内部的相关性高,把相关性强的放在一起更容易收敛,Hebbin原理:fire together, wire together。

原则3通过维度降低减少计算量。v1中先通过1x1卷积降维再进行特征提取。不同的维度之间有一定的相关性,降维可以理解为一种无损或者低损压缩,即便是维度降低了,依然可以利用其相关性恢复其原有的信息。

原则4要平衡网络的深度和宽度。只有同比例的提升网络的深度和宽度,才能最大限度提升模型的性能。

虽然这些原则是合理的,但是着 无法直接使用这些原则去提升模型的性能。

  • 3-Factorizing Convolutions with Large Filter Size

GooLeNet中使用很多维度降低的方法,这取得了一定的效果。考虑一下3x3卷积层之前有一个1x1卷积层用来降维的例子。在网络中,我们期望网络在激活函数处的输出相邻元素之间是具有高度相关性的。因此我们可以将它们的激活值在聚集前进行维度降低,这样应该可以生成相似的局部表达描述。

本文探索了为了提升方法计算效率,在不同设置下将网络层分解为不同因子的实验。因为Inception网络是全卷积的,每一个权值在每一次激活时对应一个乘积操作。因此,任何在计算成本的降低都会造成参数的降低。这意味着,我们可以使用一些合适的分解因子,来降低参数,从而加快训练速度。

  • 3.1-Factorizing Convolutions with Large Filter Size

在相同数量的卷积核情况下,更大的卷积核(例如5x5或者7x7)比3x3的卷积核计算的角度上是更加昂贵的,大概是25/9=2.78的倍数。当然,5x5的卷积核可以在前面的网络获得信息和激活单元更多的相关性,但是在计算资源消耗巨大的前提下,卷积核尺寸物理上的减小依然出现了。然而,我们依然想知道,是否一个5x5的卷积层在输入输出尺寸保持一致的情况可以用一个更少参数的多层卷积层来代替。如果我们缩放5x5卷积的计算图,我们可以看到每一个输出都像一个小的全连接网络以5x5的大小在输入窗口上作滑动。参考图1。
在这里插入图片描述
因此我们本文了一个网络,其更加本质地去探索平移不变性以及通过两层卷积去替换一层卷积:第一层是一个3x3的卷积层,第二层是一个全连接层。参考图1。我们最终用两个3x3的卷积层去替换一个5x5的卷积层。参考图4图5。这项操作可以实现邻近层的权值共享。大概是计算消耗(9+9)/25倍的降低。
在这里插入图片描述
在这里插入图片描述

  • 3.2-Spatial Factorization into Asymmetric Convolutions

我们在想是否可以卷积核变得更小,比如 2x2 的大小,然而这里有一个非对称方法可以比这种方法更加好。那就是使用 nx1 大小的卷积。比如使用【3x1+1x3】的卷积层,这种情况是和单独一个 3x3 的卷积是具有相同感受野的。参考图3.这种非对称的方法可以节约【((3x3)-(3+3))/(3x3)=33%】大小的计算资源,而替换成两个 2x2 只是节约【11%】的计算资源。
在这里插入图片描述从理论上讲,我们可以进行更深入的讨论,使用【1xn+nx1】的卷积来代替 nxn 的卷积层。参考图6。但是这种情况在前面层表现的不是很好,不过在一个中等大小的特征图上其可以表现的比较好【mxm,m大概在12至20之间】,这种情况下,使用【1x7+7x1】的卷积层可以获得一个非常好的结果。
在这里插入图片描述

  • 4-Utility of Auxiliary Classifiers

Inception-v1介绍过一些辅助分类器(指的就是前面层的一些分支加入softmax层去计算loss反向传播)来提升深度网络中的聚集问题。最原始的动机是将梯度能够回传到前面的卷积层,使得它们能够有效并且提升特征的聚集并避免梯度的消失问题

不过本文发现,辅助分类器在训练的早期并不会产生特别的提升:无论在模型头部有没有这些辅助分支,网络的训练进程都可以达到一个很高的精度。然而在训练快要结束的时候,带有辅助分类分支的网络的性能开始超过没有辅助分类分支的网络,并且可以达到一个非常好的稳定精度。

Inception-v1在网络不同阶段使用了两个额外分支。移除这些更低层次分类器分支不会对网络的最终质量产生不利的影响。

结合早期对网络的观察,我们发现Inception-v1中对于辅助分支可以提高对低级特征的获取的理论是不合理的。相反,我们讨论辅助分类器作为一个正则项。这个理论是被支持的,因为如果将辅助分支换成BN层或者加入一个dropout层,那么主分类器的性能是更好的**,大概0.4%的提升**。这同时也辅助证明了BN作为一个正则项在网络中的作用。

  • 5-Efficient Grid Size Reduction

传统的,卷积网络中使用池化层去降低feature map的尺寸大小。为了避免空间信息的表达瓶颈,可以在使用max pooling或者average pooling之前将网络的卷积核数量扩大。例如对于一个 dxd 带有 K 个feature map的网络层,要生成一个带有 2K 个 【d/2 x d/2】大小feature map的网络层,我们可以使用 2K 个卷积核按照步长为1的卷积然后加一个池化层去得到,那么这种操作就需要 【2d2K2】。但是用池化代替卷积,大概的操作是【2*(d/2)2xK2】,降低了四倍操作。然而这却会造成一个描述瓶颈,因为feature map降低到了【(d/2)2xK】,肯定会造成网络的空间信息损失。参考图9。不过我们采用了一个更不同的方法来避免这种瓶颈,参考图10。即使用两条并行的通道,一个是池化层(max or average),步长是2,一个是卷积层,然后在输出的时候被concatenated
在这里插入图片描述在这里插入图片描述

  • 6-Inception-v2

下面一段关于模块结构的文字描述使用有点疑问,感觉和表格中不太一致。

本文综合了之前提出的想法,提出了一种新的网络架构,这提升了ILSVRC 2012分类数据集的精度。我们的网络。参见表1。

本文将7x7的卷积分解为了3个3x3的卷积,这种想法来自于3.1章节。

对于网络Inception模块,本文用三个传统的Inception模块,288个35x35大小的feature map。

基于章节5的思想,本文使用768个卷积核将尺寸降低到17x17,这种模块一共有5个,模块的细节参见图5。

图10所描述模块结构用来将feature map转换为8x8x1280。

在8x8大小的等级,本文使用两个图6中 所描述的模块结构将其变换为8x8x2048。
在这里插入图片描述

  • 7-Model Regularization via Label Smoothing

提出了一个机制通过在训练时估计label-dropout的边缘效果来调整分类层。

对于每一个训练样本x,模型会计算每一个label即类别的概率值,下图7.1。其中【zi】是 log 值或者是未标准化的 log 概率值。考虑一个该样本的 GT label 的分布【q(k|x)】,标准化之后有【sum(q(q|x))=1 {k=[1,2,…K]}】。简短来说,让我们忽略关于样本 x 的 p 和 q 的依赖性。我们对于该样本定义一个交叉熵损失函数(图7.2)。最小化损失函数的值等价于最大化该标签的log-likehood的值,在公式中,label是服从于其GT分布的【q(k)】。交叉熵损失关于【zk】的 logits 是可微的,因此可以用梯度更新来训练模型。梯度有一个简单的公式,如图7.3。其值范围是【-1,1】。

考虑单独的一个GT label y,因此【q(y)=1】,同时 【k不等于y --> q(k)=0】。在这种情况下,最小化交叉熵损失等价于最大化正确label的log-likelihood。对于一个标签为 y 的样本x,其loglihood值是 在这里插入图片描述在这里插入图片描述是在 k=y 时,等于1,其他情况为0。这会造成【zy】远大于【zk】,对于 k 不等于 y 的标签,其 log 值也会显著大于其他的 log 值。

而这会造成两个问题。首先会造成过拟合,如果模型学习每一个训练样本的 GT label 的全概率值,那么泛化性能是不够的。第二点是其鼓励最大的 log 和其他 log 之间的差距尽可能大,这种情况下,在一个有限的梯度下,即图7.3中的梯度,降低了模型适应的性能。直观来看,这种情况发生的原因是模型对预测值太自信了

通过提出一个机制鼓励模型对其预测值不那么自信,尽管这个和最大化训练标签log-likelihood值的目标是不符合的,但是这种理念的确可以调整模型,并且使其更具有泛化能力

方法非常简单,考虑 label 是【u(k)】分布的,独立的训练样本 x ,一个平滑值在这里插入图片描述,对于 GT label为y 的训练样本,将【q(k|x)】替换为:在这里插入图片描述,该公式是原始【q(k|x)】和固定分布【u(k)】的中和值。

具体的,其标签分布的k值可以通过以下方式获得:首先设置【GT k=y】;接着在概率在这里插入图片描述下,用分布的【u(k)】替换 k。根据经验,一般将【u(k)=1/K】,K是类别数。即在这里插入图片描述,命名为label-smoothing regularization或者是LSR。

注意LSR实现了防止最大的log值比其他的log变得更大的目的。

的确,如果这确实发生的话,那么一个单独q(k)是1,而其他为0。但是q’(k)会造成一个很大的交叉熵损失,因为其有一个正向的较低的限制。

图7.1
在这里插入图片描述
图7.2
在这里插入图片描述
图7.3
在这里插入图片描述

另外一个来解释LSR的理论是通过交叉熵理论:图7.4。

因此,LSR是通过【H(q,p)】和【H(u,p)】来替换【H(q,p)】的 loss 值。第二个loss用来惩罚预测的分布p和先验u之间偏差。注意这种也可以通过KL散度来获取,在这里插入图片描述,在这里【H(u)】是被固定的。当 u 是统一的分布时,【H(u,p)】用来衡量预测 p 和统一分布之间的差距,这可以通过一个负的交叉熵【-H§】来度量(但不等价)。

在我们ImageNet上的实验,K=1000,使用【u(k)=1/1000】,在这里插入图片描述

对于ILSVRC 2012,发现了top -1和top-5 error大概**0.2%**的提升。

图7.4
在这里插入图片描述

  • 8-Training Methodology

使用SGD训练模型,Tensorflow框架
batchsize=32,epoch=100,momentum=一篇文章(On theimportance of initialization and momentum in deep learning.)with decay=0.9。但是最好的模型时使用RMSProp,decay=0.9,但是LSR中权重设为1.0。base_lr=0.045,使用0.94的指数下降率,每两个epoch下降一次。另外梯度剪切的阈值是2.0,这对于训练稳定有一定效果。模型评价通过多次的平均来得到。

  • 9-Performance on Lower Resolution Input

探究了低分辨率输入图像同模型性能之间的关系。一般来说分辨率越高,模型的性能相应也会提升,但是计算消耗也会增加,模型也要相应的设计提升以能够容纳足够高分辨率图像的空间特征信息。

作者做了几组实验:
1、299x299,stdide=2.max-pooling,在第一层后
2、151x151感受野。stride=1,max-pooling,在第一层后
3、79x79感受野,stride=1,没有max-pooling,在第一层后

所有的网络计算成本都是一样的,虽然第三个是更小的,但是pooling的成本是很小的,一般占据整个cost的1%。在ILSVRC 2012进行测试,结果如表2所示。尽管低分辨率图像需要更长的时间训练,但是其结果精度却非常靠近高分辨率图像。
在这里插入图片描述

然而,如果只是根据分辨率的大小就简单的缩小网络的大小,那么模型的表现也不会好。虽然这是一个不公平的比较,因为,我们在一个复杂的任务上执行的是一个16倍小的网络。
正如表2建议的那样,一个可以考虑的点是RCNN中可以使用专用的高耗时低分辨率图像进行更小目标的检测。

  • 10-Experimental Results and Comparisons

Inception-v2就是章节6描述的那种结构,每一行Inception-v2描述的都是累积的一个变化。7x7的分解,表示将其分为多个3x3的卷积层。而BN-auxiliary是在全连接的辅助分类器之路上加入BN而不是卷积层。

我们提交了表3中最后一行的模型作为Inception-v3,并且在multi-crop和ensemble settings下评价了其性能。

评价是在48238张ILSVRC 2012的non-blacklisted validation样本中进行的。
同时测试了50000个样本,大概在top-5 error上有0.1%的降低top-1 error上有**0.2%**的降低。

1、single-crop,single-model
在这里插入图片描述2、single-model,multi-crop

在这里插入图片描述3、multi-model,multi-crop
在这里插入图片描述 - 11-Conclusions

在single-crop上的最好的模型达到了 21.2%top-1 error5.6%top-5 error,ILSVRC 2012。在计算cost上,比Inception-v2有大概 2.5x 的提升。

  • 参考链接:

Inception-v2/v3结构解析(原创)
深度学习卷积神经网络——经典网络GoogLeNet(Inception V3)网络的搭建与实现


结束


Inception-v4-2016

在ResNet出现后,加入了ResNet的残差结构。

就是在Inception-v3的基础上加入ResNet中的跳跃连接结构,最终在3个residual1个inception-v4的结构下,达到了CLS(ImageNet calssification)中top-5 error 3.08%

  • 1-Introduction

residual conn在训练非常深的网络时有很好地效果。 因为Inception网络架构可以非常深,因此使用residual conn代替concat是合理的。

Inception-v4相比v3有更多统一的简化结构而且inception模块更多。

  • 3-Architectural Choices
  • 3.1 Pure Inception blocks

凡是没有加V的层都是意味着其输入和输出尺寸是一致,即same。加V都是valid的。

Inception-v4整体一览图

在这里插入图片描述
Inception-v4具体结构大图:

Fig9是一各整体图,而Fig3,4,5,6,7,8都是其局部结构。各模块具体结构参见文末。
在这里插入图片描述

  • 3.2. Residual Inception Blocks

对于Inception网络中的residual版本,我们使用相比于原始Inception消耗更小的Inception模块。每一个Inception模块followed by1x1的卷积核(no activation),用来修正维度,可以在一定程度上补偿Inception维度的降低。

尝试了很多版本,但是本文只给出了其中两个版本的细节。

一个命名为Inception-ResNet-v1,和Inception-v3的计算cost一致。
一个命名为Inception-ResNet-v2,和Inception-v4的计算cost一致。

图15给出两个的结构。但是实际上Inception-v4在实际情况是更慢的,可能是因为其层数更多。

另外一个小的技术是,**我们在Inception-ResNet模块中的传统层的头部使用了BN层,但是没有在summations的头部使用。**有理由相信BN层是有效的。但是为了在增加更多的Inception模块,我们在这两者中作了一个妥协。

Inception-ResNet-v1整体一览图

在这里插入图片描述

Inception-ResNet-v2整体一览图

在这里插入图片描述

Inception-ResNet-v1/v2具体结构大图:

Fig15是 Inception-ResNet-v1/v2的具体结构图;
其中v1各模块的具体结构参见Fig14,10,7,11,12,13;
其中v2各模块的具体结构参见Fig3,16,7,17,18,19。

在这里插入图片描述

  • 3.3 Scaling of the Residuals

本文发现当卷积核的数量超过1000个残差变体就会开始表现出不稳定,而且网络也会在训练的早期的died,这意味着在进行平均pooling层的之前的最后一层在很少迭代次数的开始仅仅输出0值。这种情况及不能通过降低学习率也不能通过添加BN层来阻止。Hekaiming的ResNet文章也提到了这一个现象。

本文发现将残差模块添加到激活层之前先进行scale可以稳定训练过程。本文将scale系数定在0.1到0.3之间。参见Fig20.

warm-up

为了防止深层残差网络的不稳定训练现象的出现,He在文章中建议分为两阶段的训练,第一阶段称之为warm-up(预热),即先以一个很低学习去训练模型,第二阶段再使用一个比较高的学习率。而本文发现如果卷积和非常高,甚至是一个0.00001的学习率也是无法解决这个训练不稳定问题,而且高的学习率也会破坏效果。但是本文认为scale residuals比warm-up更可靠。

即便是scal不是严格必要的,但是对最终的精度没有任何影响,不过却能够稳定训练的过程。

在这里插入图片描述

  • 4-Training Methodology

本文使用SGD,Tensorflow,在20GPU上训练了20个模型。momentum(On the
importance of initialization and momentum in deep learning)参考的这篇文章,decay设置为0.9。但是最好的模型时使用RMSProp,decay=0.9,但是LSR中权重设为1.0。base_lr=0.045,使用0.94的指数下降率,每两个epoch下降一次。模型评价使用多次平均。

  • 5-Experimental Results

在这里插入图片描述

表3是single model,10/12 crops
表4是single model,144 crops
表5是multi model,144 crops

在这里插入图片描述

  • 6-Conclusions

Inception-ResNet-v1:和Inception-v3具有相似计算cost的一个结合inception模块和resnet模块的网络架构;

Inception-ResNet-v2:一个cost更加昂贵但是性能更好的网络架构。

Inception-v4:单纯的inception模块,没有residual connections,但是性能和Inception-ResNet-v2差不多。


Inception-v4/Inception-ResNet-v1/v2各种模块结构大图一览:

  • Fig3-Stem:(Inception-v4&Inception-ResNet-v2)

在这里插入图片描述

  • Fig4-Inception-A:(Inception-v4)

在这里插入图片描述

  • Fig5-Inception-B:(Inception-v4)

在这里插入图片描述

  • Fig6-Inception-C:(Inception-v4)

在这里插入图片描述

  • Fig7-Reduction-A:(Inception-v4&Inception-ResNet-v1&Inception-ResNet-v2)

在这里插入图片描述
Fig7中的具体参数参见下表。
在这里插入图片描述

  • Fig8-Reduction-B:(Inception-v4)

在这里插入图片描述

  • Fig10-Inception-ResNet-A:(Inception-ResNet-v1)

在这里插入图片描述

  • Fig11-Inception-ResNet-B:(Inception-ResNet-v1)

在这里插入图片描述

  • Fig12-Reduction-B:(Inception-ResNet-v1)

在这里插入图片描述

  • Fig13-Inception-ResNet-C:(Inception-ResNet-v1)

在这里插入图片描述

  • Fig14-Stem:(Inception-ResNet-v1)

在这里插入图片描述

  • Fig16-Inception-ResNet-A:(Inception-ResNet-v2)

在这里插入图片描述

  • Fig17-Inception-ResNet-B:(Inception-ResNet-v2)

在这里插入图片描述

  • Fig18-Reduction-B:(Inception-ResNet-v2)

在这里插入图片描述

  • Fig19-Inception-ResNet-C:(Inception-ResNet-v2)

在这里插入图片描述


结束



2019.11.1
希望能帮到大家。
全文15000字。


猜你喜欢

转载自blog.csdn.net/jsk_learner/article/details/102821885