Inception系列

Inception V1:Going deeper with convolutions

该论文的主要贡献:提出了inception的卷积网络结构。
1.该深度网络的代号为“inception”,在ImageNet大规模视觉识别挑战赛2014上,在分类和检测上都获得了好的结果。
2.控制了计算量和参数量的同时,获得了很好的分类性能。500万的参数量只有AlexNet的1/12(6000万)。

Inception V1如何降低参数量的?

1.用全局平均池化层代替了全连接(VGG中全连接层的参数占据了90%的参数量)
2.大量1×1的卷积核的使用
在这里插入图片描述
Inception中 1×1的卷积恰好可以融合三者。一层可能会有多个卷积核,在同一个位置但在不同通道的卷积核输出结果相关性极高。一个1×1的卷积核可以很自然的把这些相关性很高,在同一个空间位置,但不同通道的特征结合起来。而其它尺寸的卷积核(3×3,5×5)可以保证特征的多样性,因此也可以适量使用。于是,这就完成了inception module下图的设计初衷。

在这里插入图片描述

Architecture Details

Inception 模块主要的想法是考虑如何用已有的密度单元来估计和表示最优的局部稀疏结构。我们要做的就是找到最优的局部结构,然后重复他。 Arora 等人在文献中提到,一个逐层搭建的结构,需要分析其最后一层的统计相关性,并将高度相关的神经元聚类为簇。这些簇组成了下一层的单元,并与前一层的各个单元连接。我们假定前面一层的每个单元都关于输入图像的一部分,并将这些单元分组分配给滤波器,在较低的层次(更靠近输入端),相关单元聚焦于局部区域。这意味着我们能够得到大量聚焦在同一区域的簇,它们会被下一层的 1x1 卷积捕捉到。

为了避免区域归一化的问题,Inception 限制了滤波器的尺寸在 1x1,3x3,5x5;这个设定是为了方便而不是必要。这意味着合理的结构是将层次的输出滤波器 bank 层一个输出向量,作为下一层的输入,另外池化对于现有水平的卷积网络很重要的,建议最好在每一步后增加一条并行池化通路,这样会有额外的好处。

Inception单元是一层一层往上堆叠的,所以他们的输出关联统计性会发生变化:更高层次的抽象特征会由更高层次捕获,而它们的空间聚集度就会随着降低,因为随着层次的升高,3x3 和 5x5 的卷积的比例也会随之增长。

这个模型的一个问题是在朴素模型(有多个不同的版本,这是其中之一)中,即使只有中等数量的 5x5 卷积也会有很大的计算开支:这个问题将池化层加进来以后会更严重,他们的输出过滤波器个数与前面过程的滤波器的个数想同。(注:因为结构是用 concat 层需要相同的分辨率大小, ele_wise 层需要相同的通道数,这就需要他们每一层的输出个数相同,以最后输出向量的长度就会以 2 倍的速度增长)。这就提出了第二种设想:需要降维的地方可能是计算量可能剧烈增加的地方。相对于一个大型的图像区域块,即使低维的 embedding 也可能包含大量的信息,然后 embedding 会把信息以一种致密的,压缩的方式表示出来,而压缩的信息是很难被建模的。我们还是想大部分位置保持稀疏性,而只在信号需要被聚合的时候压缩它们。也就是说, 1x1 卷积被用在需要大量运算的 3x3 和 5x5 卷积之前来降维,外加 ReLU 。

在这里插入图片描述

Inception V1的亮点

Inception V1的亮点总结如下:

(1)卷积层共有的一个功能,可以实现通道方向的降维和增维,至于是降还是增,取决于卷积层的通道数(滤波器个数),在Inception v1中11卷积用于降维,减少weights大小和feature map维度。
(2)1
1卷积特有的功能,由于11卷积只有一个参数,相当于对原始feature map做了一个scale,并且这个scale还是训练学出来的,无疑会对识别精度有提升。
(3)增加了网络的深度
(4)增加了网络的宽度
(5)同时使用了1
1,33,55的卷积,增加了网络对尺度的适应性

补充

论文中认为,由于技术性的原因,好像低层仍然用传统的卷积,在高层用 Inception 结构才有用。我们这个结构最有用的一点就是可以在不巨幅提升计算的情况下(因为降维的大量使用),增加网络的单元的数量(宽度)和网络的深度,并且可以使下一级同时处理不同尺寸的特征。实验证明,经过人为谨慎的设计下,相同深度的卷积网络,使用Inception比不使用的网络快 3-10 倍 。

Inception V2:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

简介:提出了BN(Batch Normalization)层(批标准化),一种常用的优化策略。通常和minibatch一起使用。并且使用2个33卷积替代1个55卷积的改进版GoogleNet。

亮点

(1)加入了BN层,减少了Internal Covariate Shift(内部neuron的数据分布发生变化),使每一层的输出都规范化到一个N(0, 1)的高斯分布,从而增加了模型的鲁棒性,可以以更大的学习速率训练,收敛更快,初始化操作更加随意,同时作为一种正则化技术,可以减少dropout层的使用。

(2)用2个连续的33 conv替代inception模块中的55,从而实现网络深度的增加,网络整体深度增加了9层,缺点就是增加了25%的weights和30%的计算消耗。
在这里插入图片描述

Batch Normalization

我们知道在神经网络训练开始前,都要对输入数据做一个归一化处理,那么具体为什么需要归一化呢?归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。Google 将这一现象总结为 Internal Covariate Shift,简称 ICS.
在这里插入图片描述
我们知道网络一旦train起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。以网络第二层为例:网络的第二层输入,是由第一层的参数和input计算得到的,而第一层的参数在整个训练过程中一直在变化,因此必然会引起后面每一层输入数据分布的改变。我们把网络中间层在训练过程中,数据分布的改变称之为:“Internal Covariate Shift”。Paper所提出的算法,就是要解决在训练过程中,中间层数据分布发生改变的情况,于是就有了Batch Normalization算法的诞生。

就像激活函数层、卷积层、全连接层、池化层一样,BN(Batch Normalization)也属于网络的一层。算法本质:在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理,然后再进入网络的下一层。

主要作用:用来加速网络收敛及防止梯度消失等神经网络常见的问题

BN详解
Internal Covariate Shift介绍

Inception V3:Rethinking the Inception Architecture for Computer Vision

Inception v3网络,主要在v2的基础上,提出了卷积分解(Factorization),代表作是Inceptionv3版本的GoogleNet。

改进点:

分解卷积。(VGG里面已经应用了这一方法,不过这篇论文升华了一下,使得更加系统)
辅助分类器的使用。
池化层优化:为了减少计算量。(怎么实现的看论文中的图即可)
平滑标签:为了提升精确度。(如何实现的要看懂公式)

1.分解卷积

即分解卷积核尺寸,一般有两个办法:
分解为对称的小的卷积核;
分解为不对称的卷积核。

第一种方法,将55的卷积核替换成2个33的卷积核
在这里插入图片描述
上图左边是原来的Inception,右图是改进的Inception。将5x5分解为两个3x3,分解前和分解后的感受野是一样的。两个3x3卷积的串联比一个5x5卷积的representation能力更强。另外,分解后多使用了一个激活函数,增加了非线性能力。

第二种方法就是将nn的卷积核替换成 1n 和 n*1 的卷积核堆叠,计算量又会降低。但是在大维度的特征图上表现不好,在特征图12-20维度上表现好。事实上,通过卷积的非对称分解可以将3x3卷积分解为1x3和3x1卷积。在输入输出filters数目一定的时候,卷积的非对称分解可以将计算量减少33%。然而,如果将3x3卷积分解为两个2x2卷积只能减少11%的计算量。

不对称分解方法有几个优点:
节约了大量的参数
增加一层非线性,提高模型的表达能力
可以处理更丰富的空间特征,增加特征的多样性
在这里插入图片描述
上图是不对称分解的两种方式。

2.使用辅助分类器

Inception v1引进辅助的分类器去提高非常深的网络的收敛。引进辅助分类器的原始动机是加大梯度向更前层的流动(缓解梯度vanishing),从而加速训练过程中的收敛。有趣的是,作者发现辅助分类器并不能加速训练过程的早期收敛:辅助分类器并没有加速网络的早期收敛。在训练末期,有辅助分类器的网络开始超越没有辅助分类器的模型的准确率。

其实在Inception V1中就使用了2个辅助分类器。去掉低层辅助分类器并不会对网络的最终效果产生负面影响。结合上一段,这意味着Inception v1关于辅助分类器的假设(辅助分类器有助于低层特征的evolving)是错误的。取而代之,我们认为辅助分类器的作用是一个regularizer。作者关于上一句话的解释:如果辅助分类器进行BN或Dropout,网络的主分类器的性能会更好。这也间接说明(weak supporting evidence)了BN作为一个regularizer的推测。

3.改变降低特征图尺寸的方式

设计准则的第一条,就是避免表达瓶颈。那么传统的卷积神经网络的做法,当有pooling时(pooling层会大量的损失信息),会在之前增加特征图的厚度(就是双倍增加滤波器的个数),通过这种方式来保持网络的表达能力,但是计算量会大大增加。
在这里插入图片描述
上图就是作者的改进方式。有两个通道,一个是卷积层,一个是pooling层,两个通道生成的特征图大小一样,concat在一起即可。

亮点

(1) 将77分解成两个一维的卷积(17,71),33也是一样(13,31),这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,更加精细设计了3535/1717/88的模块。
(2)增加网络宽度,网络输入从224
224变为了299*299。
Inception V3详解

Inception V4:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

简介:Inception v4利用残差连接(Residual Connection)来改进v3结构,代表作为,Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4
主要改进就是使用上文的Inception module来替换resnet shortcut中的bootleneck。
具体网络架构

Inception V4

在这里插入图片描述
上图左侧是Inception-v4的整体结构,右侧是其中的stem部分,用于对进入Inception模块前的数据进行预处理。stem部分其实就是多次卷积+2次pooling,pooling采用了Inception-v3论文里提到的卷积+pooling并行的结构,来防止bottleneck问题。stem后用了3种共14个Inception模块(图2),三种Inception模块具体是怎么取舍参数的论文没有过多解释,估计还是靠经验判断吧。三种Inception模块间的Reduction模块(图3)起到pooling作用,同样使用了并行的结构来防止bottleneck问题。
图2:从左到右分别为Inception-v4中的 Inception A、 Inception B、 Inception C模块

图2:从左到右分别为Inception-v4中的 Inception A、 Inception B、 Inception C模块 整体结构

在这里插入图片描述

Inception-ResNet

Szegedy把Inception和ResNet混合,设计了多种Inception-ResNet结构,在论文中Szegedy重点描述了Inception-ResNet-v1(在Inception-v3上加入ResNet)和Inception-ResNet-v2(在Inception-v4上加入ResNet),具体结构见图4和图5

在这里插入图片描述

图4: Inception-ResNet-v1 整体结构

在这里插入图片描述

图5: Inception-ResNet-v1 的三种 Inception 结构

inception-v1,v2,v3,v4----论文笔记

从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2,ShuffleNetV2,MobileNetV3

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值