[计算机视觉]-经典网络inception v1、v2、v3、v4核心工作详解及总结

资源

inception v1
Going deeper with convolutions:https://arxiv.org/abs/1409.4842

BN算法
Batch Normalization:https://arxiv.org/pdf/1502.03167.pdf

inception v2/v3
Rethinking the Inception Architecture for Computer Vision:https://arxiv.org/pdf/1512.00567.pdf

inception v4/resnet
Inception-v4, Inception-ResNet: https://arxiv.org/pdf/1602.07261.pdf


1. Inception-v1

在这篇文章之前,卷积神经网络的性能提高都是依赖于提高网络的深度和宽度,而这篇论文是从网络结构上入手,改变了网络结构。

该论文的核心贡献:提出了inception的卷积网络结构。

1.1 动机

提高网络最简单粗暴的方法就是提高网络的深度和宽度,即增加隐层和以及各层神经元数目。但这种简单粗暴的方法存在一些问题:

  • 1.会导致更大的参数空间,更容易过拟合,特别是在样本标记数目有限的情况下
  • 2.需要更多的计算资源,网络越深,梯度容易消失,优化困难(这时还没有提出BN时,网络的优化极其困难)

基于此,我们的目标就是,提高网络计算资源的利用率,在计算量不变的情况下,提高网络的宽度和深度。

作者认为,解决这种困难的方法就是,把全连接改成稀疏连接,卷积层也是稀疏连接,但是不对称的稀疏数据数值计算效率低下,因为硬件全是针对密集矩阵优化的,所以,我们要找到卷积网络可以近似的最优局部稀疏结构,并且该结构下可以用现有的密度矩阵计算硬件实现,产生的结果就是Inception。

1.2 inception-v1 模块细节

在这里插入图片描述
首先看第一个结构,有四个通道,有11、33、55卷积核及33的max pooling,该结构有几个特点:

  • 并行结构增加了网络的宽度,即每层神经元的数目
  • 采用大小不同的卷积核,意味着感受野的大小不同,就可以得到不同尺度的特征。
  • 类似与FPN结构,最后融合不同尺度的信息,可以得到更好的图像表征。
    在这里插入图片描述

如上图所示,两只狗在图中的占比是不同的,对于左图,用55这样的大卷积核可能会更好的捕捉特征;对于右图,用11或3*3的卷积可能会更好的捕捉特征,而采用inception 相当与对不同卷积核捕捉到的特征做了融合。

但是这个结构有个缺点,5*5的卷积核的计算量太大。
那么作者想到了第二个结构,即上述网络结构的(b)图,用1*1的卷积核进行降维。

这个1*1的卷积核,它的作用就是:

  • 降低维度,减少计算瓶颈
  • 增加网络层数,提高网络的表达能力,每个1*1后面都跟了激活函数ReLU,增强网络的非线性能力。
Q&A 1.如何减少的计算量?

比如,上一层的输出为100x100x128,经过具有256个通道的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256,其中,卷积层的参数为128x5x5x256= 819200。而假如上一层输出先经过具有32个通道的1x1卷积层,再经过具有256个输出的5x5卷积层,那么输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256= 204800,大约减少了4倍。

那么在具体的卷积神经网络中,Inception应该放在哪里,作者的建议,在底层保持传统卷积不变,在高层使用Inception结构。


1.3 inception-v1整体结构及几点说明

在这里插入图片描述
几点说明

  • 1.采用模块化结构,方便增添和修改。其实网络结构就是叠加Inception Module。

  • 2.采用Network in Network中用Averagepool来代替全连接层的思想。

  • 3.在最后一层还是添加了一个全连接层,是为了大算法家做finetune。

  • 4.依然使用Dropout层,防止过拟合。

  • 5.另外增加了两个辅助的softmax分支,作用有两点,一是为了避免梯度消失,用于向前传导梯度。反向传播时如果有一层求导为0,链式求导结果则为0。二是将中间某一层输出用作分类,起到模型融合作用。最后的loss=loss_2 + 0.3 * loss_1 + 0.3 * loss_0。实际测试时,这两个辅助softmax分支会被去掉。


2.BN算法

占个坑,单独开一篇,写完了把链接放这里。


3. Inception-v2/v3

GoogLeNet也就是inception-v1设计的初衷就是要又准又快,而如果只是单纯的堆叠网络虽然可以提高准确率,但是会导致计算效率有明显的下降,所以如何在不增加过多计算量的同时提高网络的表达能力就成为了一个问题。

Inception V2版本的解决方案就是修改Inception的内部计算逻辑,提出了比较特殊的“卷积”计算结构,学习vgg那样,用连续的小卷积替换大卷积,对大卷积进行分解,但这个思路是学的别人的。

同时提出了几条设计原则

1.避免特征表示瓶颈,尤其是在网络的前面。要避免严重压缩导致(pooling,卷积等操作)的瓶颈。特征表示尺寸应该温和的减少,从输入端到输出端。特征表示的维度只是一个粗浅的信息量表示,它丢掉了一些重要的因素如相关性结构,循序渐进的降低网络维度,多使用几次降维操作

2.高维的信息(representations)更适合在网络的局部处理。在卷积网络中逐步增加非线性激活响应可以解耦合更多的特征(独立更多特征),那么网络就会训练的更快。
空间聚合可以在较低维度嵌入上完成,而不会在表示能力上造成许多或任何损失。例如,在执行更多展开(例如3×3)卷积之前,可以在空

3.间聚合之前减小输入表示的维度,没有预期的严重不利影响。我们假设,如果在空间聚合上下文中使用输出,则相邻单元之间的强相关性会导致维度缩减期间的信息损失少得多。鉴于这些信号应该易于压缩,因此尺寸减小甚至会促进更快的学习(inception-v1中提出的用1x1卷积先降维再作特征提取就是利用这点。不同维度的信息有相关性,降维可以理解成一种无损或低损压缩,即使维度降低了,仍然可以利用相关性恢复出原有的信息。)

4.平衡好网络的深度和宽度。通过平衡网络每层滤波器的个数和网络的层数可以是网络达到最佳性能。增加网络的宽度和深度都会提升网络的性能,但是两者并行增加获得的性能提升是最大的。

该论文的核心贡献:分解卷积核

3.1 大卷积分解

大尺寸的卷积核可以带来更大的感受野,但也意味着会产生更多的参数,比如5x5卷积核的参数有25个,3x3卷积核的参数有9个,前者是后者的25/9=2.78倍。
因此,GoogLeNet团队学习VGG用2个连续的3x3卷积层组成的小网络来代替单个的5x5卷积层,即在保持感受野范围的同时又减少了参数量,如下图:
在这里插入图片描述
那么这种替代方案会造成表达能力的下降吗?通过大量实验表明,并不会造成表达缺失。
可以看出,大卷积核完全可以由一系列的3x3卷积核来替代,那能不能再分解得更小一点呢?

3.2 非对称卷积

GoogLeNet团队考虑了nx1的卷积核,如下图所示,用3个3x1取代3x3卷积:
在这里插入图片描述
因此,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。GoogLeNet团队发现在网络的前期使用这种分解效果并不好,在中度大小的特征图(feature map)上使用效果才会更好(特征图大小建议在12*12到20*20之间)。
在这里插入图片描述

3.3 辅助分类器

如incepition v1 中的分类器,可能没啥用在早期的研究可能就充当了一个正则化作用(那时候没有BN与dropout),现在完全可以去掉这些辅助分类器而使用BN与dropout

3.4降低特征图大小

为了对应第一条准则。
一般情况下,如果想让图像缩小,可以有如下两种方式:

在这里插入图片描述
先池化再作Inception卷积,或者先作Inception卷积再作池化。但是方法一(左图)先作pooling(池化)会导致特征表示遇到瓶颈(特征缺失),方法二(右图)是正常的缩小,但计算量很大。为了同时保持特征表示且降低计算量,将网络结构改为下图,使用两个并行化的模块来降低计算量(卷积、池化并行执行,再进行合并)
在这里插入图片描述
这样做既没有造成信息提取上的损失,也能够很好的降低维度。
以上就是核心改变。

3.5 标签平滑

占坑写完放链接

3.6 V2结构

采用以上这些改变,v2相对于v1有着如下变化

  • [1] - 5x5 卷积层被替换为两个连续的 3x3 卷积层. 网络的最大深度增加 9 个权重层. 参数量增加了大约 25%,计算量增加了大约 30%.两个 3x3 卷积层作用可以代替一个 5x5 卷积层.
  • [2] - 28x28尺寸 的 Inception 模块的数量由 2 增加到了 3.
  • [3] - Inception 模块,Ave 和 Max Pooling 层均有用到. 参考表格.
  • [4] - 两个 Inception 模块间不再使用 pooling 层;而在模块 3c 和 4e 中的 concatenation 前采用了 并行结构的stride-2 conv/pooling 层.
  • [5] - 网络结构的第一个卷积层采用了深度乘子为 8 的可分离卷积(separable convolution with depth multiplier 8),减少了计算量,但训练时增加了内存消耗.
  • [6] - 加入了标签平滑

在这里插入图片描述
在这里插入图片描述

v3相对于V2变化:加入了BN算法


4. Inception-v4/resnet

此论文主要是作者尝试将inception与residual结合,而提出了inception-resnet-v1和inception-resnet-v2网络,并且为了比较inception与resnet结合后是否真的对网络性能有提升而提出了一个inception-v4网络进行对比。试验证明residual能够加速inception网络的训练,并且精度上有少量的提升。

没啥新意了,就是inception与resnet拼接。
如果懂inception与resnet 可以直接跳过不看这段。
论文核心贡献:总结了inception结构,对inception与residual结构结合做了探索

4.1 动机

研究了Inception本身通过变得更深更宽能否能变得更加高效。为了实现这个目的,我们设计了一个新版本的Inception-v4,相比Inception-v3,它有更加统一简化的网络结构和更多的inception模块。

在ResNet中,认为残差连接对非常深的架构的训练非常重要。因为Inception网络趋向于非常深,考虑用残差连接替代滤波器的连结便是很自然的事。这将在保持计算量基本不变的情况下,允许Inception充分利用残差连接的优点。

4.2 纯inception模块

在最新的Inception-v4实验中,我们决定去掉不必要的模块,同时统一各个grid size一样的Inception模块的参数。如图9,展示了大尺寸的Inceptionv4网络结构。图3至8是每个部分的详细结构。所有图中没有标记“V”的卷积使用same的填充原则,意即其输出网格与输入的尺寸正好匹配。使用“V”标记的卷积使用valid的填充原则,意即每个单元输入块全部包含在前几层中,同时输出激活图(output activation map)的网格尺寸也相应会减少。

结构图
在这里插入图片描述

4.3残差Inception模块(Residual Inception blocks)

在Residual-Inception网络中,我们使用比原始Inception模块计算量更低的Inception模块。每个Inception块后紧连接着滤波层(没有激活函数的1×1卷积)以进行维度变换,以实现输入的匹配。这样补偿了在Inception块中的维度降低。

我们尝试了很多Inception-Residual版本。这里对其中的两个进行具体细节说明。第一个是“Inception-ResNet-v1”,计算量跟Inception-v3大致相同,第二个“Inception-ResNet-v2”的计算量跟Inception-v4网络基本相同。图15是Residual-Inception的架构图。(但是,实验中Inception-v4单个step的时间更慢,这可能是因为有了更多的层)。

残差和非残差Inception的另外一个小技术性区别是,在Inception-ResNet网络中,我们只在传统层上使用BN。在全部层使用 batch-normalization是合情合理的,但是我们想保持每个模型副本在单个GPU上就可以训练。结果证明,使用更大的activation尺寸消耗更多的GPU内存。省略这些activation后的BN层,我们能够增加更多的Inception模块。我们希望可以更好的利用计算量,因而这种trade-off变得没有必要。
在这里插入图片描述
在这里插入图片描述

4.4 总结

本文详细呈现了三种新的网络结构:

  • Inception-Reset-v1:混合Inception版本,它的计算效率同Inception-v3;
  • Inception-ResNet-v2:更加昂贵的混合Inception版本,同明显改善了识别性能;
  • Inception-v4:没有残差链接的纯净Inception变种,性能如同Inception-ResNet-v2
    我们研究了引入残差连接如何显著的提高inception网络的训练速度。而且仅仅凭借增加的模型尺寸,我们的最新的模型(带和不带残差连接)都优于我们以前的网络。

参考

Inception v4, Inception-ResNet 论文笔记
Inception v1,v2,v3,v4论文汇总。
inception-v1,v2,v3,v4----论文笔记
大话CNN经典模型:GoogLeNet(从Inception v1到v4的演进)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值