【面试基础--分类网络】inception系列(v1,v2,v3,v4)

时间:2024-04-07 18:48:01

     主要参考: https://www.cnblogs.com/yifdu25/p/8542740.html

1. inception v1

paper: Going Deeper with convolutions

(*) code:  https://github.com/loveplay1983/inception/blob/master/inception.py (keras) 现在这个版本用的很少了

     inception v1 最关键的就是inception模块。

                                  【面试基础--分类网络】inception系列(v1,v2,v3,v4)

   这样的结构主要有以下改进:

  1. 一层block就包含1x1卷积,3x3卷积,5x5卷积,3x3池化(使用这样的尺寸不是必需的,可以根据需要进行调整)。这样,网络中每一层都能学习到“稀疏”(3x3、5x5)或“不稀疏”(1x1)的特征,既增加了网络的宽度,也增加了网络对尺度的适应性;
  2. 通过deep concat在每个block后合成特征,获得非线性属性

      虽然这样提高了性能,但是网络的计算量实在是太大了,因此GoogLeNet借鉴了Network-in-Network的思想,使用1x1的卷积核实现降维操作,以此来减小网络的参数量,如图所示。

                                      【面试基础--分类网络】inception系列(v1,v2,v3,v4)

      参数量为:1x1x192x64+1x1x192x96+1x1x192x16+3x3x96x128+5x5x16x32+1x1x192x32=163328

      如果不加1x1,输入28x28x192,输出28x28x416:1x1x192x64+3x3x192x128+5x5x192x32=387072

      由此可见,降低了weights,同时降低了dimension。将这个模块的优点概括如下:

(1)实现了通道降维和增维,1x1卷积用于降维,减小参数量和feature map的维度;

(2)由于1x1只有一个参数,相当于对原始feature map做scale,且训练效果较好;

(3)增加了网络深度和宽度;

(4)同时使用了1x1,3x3,5x5,具有多尺度的特点

      另外,它为了保证网络收敛,构建了三个额外的loss;也可以将全连接层替换成gloabal average pooling。

【面试基础--分类网络】inception系列(v1,v2,v3,v4)

 

2. inception v2

paper: Batch Normalization: Accelerating Deep Network Training b y Reducing Internal Covariate Shift

      其实inception v2主要做的改进就是加入了batch normalization,BN在CNN中是非常重要的一个概念,因而这边一起回顾一下。它在网络结构上其实也做了一些改动,我将其和inception v3一起介绍,这里重点就将BN。

      主要解决的问题:Internal Covariate Shift

      机器学习中有一个经典假设,源空间和目标空间的数据分布是一致的。Covariate Shift 是其中的一个分支:源空间和目标空间的条件概率是一致的,但边缘概率不同。

      对于神经网络的各层输出,在经历了层内操作之后,各层输出分布会与对应的输入信号分布不同,而且差异会随网络深度增大而增加了,但每一层所指的label仍然不变。

      动机:参考了白化操作

      在传统的机器学习中,对图像提取特征之前,都会对图像做白化操作,输入数据变换成0均值,单位方差的正态分布。

      对于深度网络,每个隐藏层的输出都是下一个隐藏层的输入,因而均可做白化。

     在一个mini-batch中,BN算法如下:

                           【面试基础--分类网络】inception系列(v1,v2,v3,v4)

      其中,测试时,其使用的方差是方差的无偏估计。无偏估计是指估计量的数学期望等于被估计参数。

     下面是整个网络中训练时的算法,包括了训练和测试的过程。

                          【面试基础--分类网络】inception系列(v1,v2,v3,v4)

      理解:

(1)归一化作用:经过BN后,大部分**值落入非线性函数的线性区,对应倒数远离饱和区,防止梯度小时,加速训练收敛过程。

(2)增加shift和scale:往非线性区移动,避免完全变为线性,降低网络性能,因而希望找一个线性和非线性的平衡点。

      优点:

(1)有效遏制了梯度爆炸和消失

(2)解决了ICS问题

      其他的优点包括训练更快,可以有更大的学习率,权重更易初始化,支持更多的**函数。

 3. inception v3

paper: Rethinking the Inception Architecture for Computer Vision

code: https://github.com/ColeMurray/keras-inception-v3-tutorial (keras)

解决的主要问题:

(1)减少特征的表征性瓶颈。直观上来说,当卷积不会大幅度改变输入维度时,神经网络可能会执行地更好。过多地减少维度可能会造成信息的损失,这也称为「表征性瓶颈」。

(2)使用更优秀的因子分解方法,卷积才能在计算复杂度上更加高效。

主要做法:

(1)分解卷积核尺寸:

分解成对称小核:使用2个3x3的卷积代替梯度(特征图,下同)为35x35中的5x5的卷积,这样既可以获得相同的视野(经过2个3x3卷积得到的特征图大小等于1个5x5卷积得到的特征图),还具有更少的参数,还间接增加了网络的深度,如下图。

                                                      【面试基础--分类网络】inception系列(v1,v2,v3,v4)

                                                                                         figure 5 

分解成不对称小核:3x3的卷积核表现的不错,那更小的卷积核是不是会更好呢?比如2x2。对此,v2在17x17的梯度中使用1*n和n*1这种非对称的卷积来代替n*n的对称卷积,既降低网络的参数,又增加了网络的深度(实验证明,该结构放于网络中部,取n=7,准确率更高),如下。

                                                            【面试基础--分类网络】inception系列(v1,v2,v3,v4)

                                                                                     figure 6 

模块中的滤波器组被扩展(即变得更宽而不是更深)在梯度为8x8时使用可以增加滤波器输出的模块(如下图),以此来产生高维的稀疏特征。 

                                                    【面试基础--分类网络】inception系列(v1,v2,v3,v4)

                                                                                 figure 7

(2)避免使用瓶颈层

       inception模块之间特征图的缩小,主要有下面两种方式:

                                                    【面试基础--分类网络】inception系列(v1,v2,v3,v4)

      右图是先进行inception操作,再进行池化来下采样,但是这样参数量明显多于左图(比较方式同前文的降维后inception模块),因此v2采用的是左图的方式,即在不同的inception之间(35/17/8的梯度)采用池化来进行下采样。

      但是,左图这种操作会造成表达瓶颈问题,也就是说特征图的大小不应该出现急剧的衰减(只经过一层就骤降)。如果出现急剧缩减,将会丢失大量的信息,对模型的训练造成困难。

    因而inceptionv3采用一种并行的降维结构,如下图:

    【面试基础--分类网络】inception系列(v1,v2,v3,v4)

      具体来说,就是在35/17/8之间分别采用下面这两种方式来实现特征图尺寸的缩小,如下图:   

                                                                      【面试基础--分类网络】inception系列(v1,v2,v3,v4)   

                                                               figure 5'   35/17之间的特征图尺寸减小  

                                                               【面试基础--分类网络】inception系列(v1,v2,v3,v4)

                                                             figure 6' 17/8之间的特征图尺寸缩小

      这样就得到Inception v3的网络结构,如表所示。

                                         【面试基础--分类网络】inception系列(v1,v2,v3,v4)

(3)使用额外的分类器

       训练早期不推荐使用额外的分类器。额外的分类器可以将梯度有效传递回去,不会有梯度消失的问题,加快了训练;中间层空间特征比较丰富,利于提高模型判别力。

 

4. inception v4 

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

code: https://github.com/titu1994/Inception-v4

      由于残差连接的优越性,这里考虑将inception 和 残差连接在一起。这篇文章介绍了三个网络,inception v4无残差,inceotion resnet v1/v2均加入了残差连接。

      接下来对比一下三个网络的区别:

整体架构:

                                  inception v4                                                        inception-resnet-v1/v2

                 【面试基础--分类网络】inception系列(v1,v2,v3,v4)                   【面试基础--分类网络】inception系列(v1,v2,v3,v4)    

stem 模块:

                 inception v4/ inception- resnet -v2                                  inception-resnet-v1

          【面试基础--分类网络】inception系列(v1,v2,v3,v4)           【面试基础--分类网络】inception系列(v1,v2,v3,v4)

inception 模块:

inception v4: 

                                           inception A                          inception B                                    inception C

【面试基础--分类网络】inception系列(v1,v2,v3,v4)【面试基础--分类网络】inception系列(v1,v2,v3,v4)          【面试基础--分类网络】inception系列(v1,v2,v3,v4)

 

inception resnet v1:

                        inception A                                     inception B                                             inception C

【面试基础--分类网络】inception系列(v1,v2,v3,v4)          【面试基础--分类网络】inception系列(v1,v2,v3,v4)             【面试基础--分类网络】inception系列(v1,v2,v3,v4)

 

inception-resnet-v2

                        inception A                                     inception B                                             inception C

   【面试基础--分类网络】inception系列(v1,v2,v3,v4)          【面试基础--分类网络】inception系列(v1,v2,v3,v4)             【面试基础--分类网络】inception系列(v1,v2,v3,v4)

reduction 模块:

reduction A:

【面试基础--分类网络】inception系列(v1,v2,v3,v4) 【面试基础--分类网络】inception系列(v1,v2,v3,v4)

reduction B:

           inception v4                                                 inception resnet v1                                             inception resnet v2

【面试基础--分类网络】inception系列(v1,v2,v3,v4)

      【面试基础--分类网络】inception系列(v1,v2,v3,v4)    【面试基础--分类网络】inception系列(v1,v2,v3,v4)

      几点说明:

(1)参数量:Inception-ResNet v1 的计算成本和 Inception v3 的接近。Inception-ResNetv2 的计算成本和 Inception v4 的接近。它们有不同的 stem,正如 Inception v4 部分所展示的。

(2)inception-residual中 1x1卷积作用:为了使残差加运算可行,卷积之后的输入和输出必须有相同的维度。因此,我们在初始卷积之后使用 1x1 卷积来匹配深度(深度在卷积之后会增加)。

(3)reduction block: Inception v4 引入了专用的「缩减块」(reduction block),它被用于改变网格的宽度和高度。

(4)如果卷积核的数量超过 1000,则网络架构更深层的残差单元将导致网络崩溃。因此,为了增加稳定性,作者通过 0.1 到 0.3 的比例缩放残差**值。

                                                                         【面试基础--分类网络】inception系列(v1,v2,v3,v4)

(5)研究发现 Inception-ResNet 模型可以在更少的 epoch 内达到更高的准确率,结合残差连接可以显著加速 Inception 的训练。inception-resnet有v1和v2两个版本,v2表现更好且更复杂。