Inception v1, v2, v3, v4, ResNet , Xception网络结构总结

Inception v1

       Inception v1的网络,主要核心提出了Inceptionmodule结构(1×1,3×3,5×5的conv和3×3的pooling组合在一起),谷歌提出了最原始Inception的基本结构(左图),该结构将CNN中常用的卷积(1x1,3x3,5x5)、池化操作(3x3)堆叠在一起(卷积、池化后的尺寸相同,将通道相加),一方面增加了网络的宽度,另一方面也增加了网络对尺度的适应性。由于5x5的卷积核所需的计算量就太大了,造成了特征图的厚度很大,为了避免这种情况,在3x3前、5x5前、max pooling后分别加上了1x1的卷积核,以起到了降低特征图厚度的作用,这也就形成了Inception v1的网络结构,如下图所示:

  Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第1张图片Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第2张图片

Inception v1的总结如下:

(1)卷积层共有的一个功能,可以实现通道方向的降维和增维,至于是降还是增,取决于卷积层的通道数(滤波器个数),在Inception v1中1×1卷积用于降维,减少weights大小和feature map维度。

(2)1×1卷积特有的功能,由于1×1卷积只有一个参数,相当于对原始feature map做了一个scale,并且这个scale还是训练学出来的,无疑会对识别精度有提升,还用于修正线性激活(ReLU)。

(3)增加了网络的深度

(4)增加了网络的宽度

(5)同时使用了1×1,3×3,5×5的卷积,增加了网络对尺度的适应性。

Inception v2

    Inceptionv2结构,用2个3×3代替5×5的卷积核,加入了BN(Batch Normalization)层。

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第3张图片

         原理是大尺寸的卷积核可以带来更大的感受野,也意味着更多的参数,比如5x5卷积核参数是3x3卷积核的25/9=2.78倍。为此,作者提出可以用2个连续的3x3卷积层(stride=1)组成的小网络来代替单个的5x5卷积层。因此,GoogLeNet团队提出可以用2个连续的3x3卷积层组成的小网络来代替单个的5x5卷积层,即在保持感受野范围的同时又减少了参数量。

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第4张图片

 Inception v2的总结如下:

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

(2)用2个连续的3*3 conv替代inception模块中的5*5,从而实现网络深度的增加,网络整体深度增加了9层,缺点就是增加了25%的weights和30%的计算消耗。

(3)降低特征图大小, 同时保持特征表示且降低计算量,使用两个并行化的模块(卷积和池化)来降低计算量(卷积、池化并行执行,再进行合并)。

Inception v3

Inception v3主要在v2的基础上,提出了卷积分解(Factorization)。将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。结构图如下。

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第5张图片

         原理借鉴v2 中两个3×3的卷积代替5×5的卷积核经验,考虑到大的大卷积核完全可以由一系列的3x3卷积核来替代,那能不能分解的更小一点呢。文章考虑了 nx1 卷积核,如下图所示的取代3x3卷积:于是,任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。实际上,作者发现在网络的前期使用这种分解效果并不好,还有在中度大小的feature map上使用效果才会更好,对于mxm大小的feature map,建议m在12到20之间。用nx1卷积来代替大卷积核,这里设定n=7来应对17x17大小的feature map。

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第6张图片

Inception v3的总结如下:

(1) 将7×7分解成两个一维的卷积(1×7,7×1),3×3也是一样(1×3,3×1),这样的好处,既可以加速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,更加精细设计了35×35/17×17/8×8的模块。

(2)增加网络宽度,网络输入从224×224变为了299×299。


Inception v4
     inception v4实际上是把原来的inception加上了残差连接(Residual Connection)来改进v3结构从一个节点能够跳过一些节点直接连入之后的一些节点,并且残差也跟着过去一个。得到Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4网络。
另外就是V4把一个先1×1再3×3那步换成了先3×3再1×1,论文说引入resnet不是用来提高深度,进而提高准确度的,只是用来提高速度的。图1为残差网络结构,图2为v4网络结构。

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第7张图片

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第8张图片

   inception v4的总结如下

   (1)加入resnet的残差单元,使浅层特征通过另外一条分支加到高层特征中,达到特征复用的目的,同时也避免深层网路的梯度弥散问题。

   (2)Inception module都是简化版,没有使用那么多的分支,因为identity部分(直接相连的线)本身包含丰富的特征信息

   (3) 每个Inception module最后都使用了一个1x1的卷积(linear activation),作用是保证identity部分和Inception部分输出特征维度相同,这样才能保证两部分特征能够相加。

   (4) Inception module每个分支都没有使用pooling。

 

ResNet

        假定某段神经网络的输入是x,期望输出是H(x),如果我们直接把输入x传到输出作为初始结果,那么此时我们需要学习的目标就是F(x) = H(x) - x。如图所示,这就是一个ResNet的残差学习单元(Residual Unit),ResNet相当于将学习目标改变了,不再是学习一个完整的输出H(x),只是输出和输入的差别H(x)-x,即残差。H(x) = F(x)+x ,  加法随之变为对应channel间的两个feature map逐元素相加。 论文地址:https://arxiv.org/pdf/1512.03385.pdf

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第9张图片

   残差网络的设计规则:

对于普通网络,其实对残差网络也是适用的

(1)具有相同特征图尺度大小,具有相同个数的卷积核。

(2)特征图的大小减半时,特征图的数目加倍。

对于残差网络,维度匹配的shortcut连接为实线,反之为虚线。维度不匹配时,同等映射有两种可选方案:

(1)直接通过zero padding来增加维度(channel)。

(2) 乘以w矩阵投影到新的空间。实现是用的1x1的卷积实现的,直接改变为1x1卷积的filters数目

ResNet分为两类 (1) 一种基于BasicBlock,浅层网络ResNet18, 34都由BasicBlock搭成;(2) 另一种基于Bottleneck,深层网络ResNet50, 101, 152乃至更深的网络,都由Bottleneck搭成。如下图

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第10张图片

 残差网络的总结:

 (1) 解决了增加深度带来的副作用(退化问题,简单的加深网络结构,会出现梯度爆炸和弥散,可以用正则初始化和中间正则化层解决,但是会出现准确率下降)网络性能退化问题,其同时也解决了梯度问题。

 (2)网络越深,表达的特征越好,分类和检测的效果都会提升。

 (3)深层的网络更容易优化并且不会产生更高的训练错误率,并且层数增加后准确率也会有所提升。

 

Xception

  Xception 是 Google 继 Inception 后提出的对 Inception-v3 的另一种改进。作者认为,通道之间的相关性 与 空间相关性 最好要分开处理。采用 Separable Convolution(极致的 Inception 模块)来替换原来 Inception-v3中的卷积操作。

  结构变形过程如下:

    在 Inception 中,特征可以通过1×1 卷积, 3×3 卷积,5×5 卷积,pooling 等进行提取,Inception 结构将特征类型的选择留给网络自己训练,也就是将一个输入同时输给几种提取特征方式,然后做 concat 。Inception-v3的结构图如下:

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第11张图片

对 Inception-v3 进行简化,去除 Inception-v3 中的 avg pool 后,输入的下一步操作就都是 1×1 卷积:

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第12张图片

提取1x1卷积公共部分

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第13张图片


Xception(极致的 Inception):先进行普通卷积操作,再对 1×1 卷积后的每个channel分别进行3×3 卷积操作,最后将结果 concat:
 

Inception v1, v2, v3, v4, ResNet , Xception网络结构总结_第14张图片

 xception网络结构总结:

 (1) 用于学习空间相关性的 3×3 的卷积,和用于学习通道间相关性的 1×1 卷积之间,不使用非线性激活函数时,收敛过程更快、准确率更高.
 

参考链接: https://my.oschina.net/u/876354/blog/1637819 

                  https://blog.csdn.net/lk3030/article/details/84847879                      

你可能感兴趣的:(Inception v1, v2, v3, v4, ResNet , Xception网络结构总结)