GoogLeNet Inception v1,v2,v3,v4及Inception Resnet介绍

2,956 阅读6分钟

GoogLeNet,作为 ILSVRC-2014的分类和检测任务的冠军,相比于当年分类任务第二名VGG Net的对于小卷积层(3x3)的简单堆叠,GoogLeNet提出更具创意的Inception模块,虽然网络结构比较复杂,但是模型参数量却降低了,仅为AlexNet的1/12,而VGGNet的参数量却是AlexNet的3倍,但模型精度却比VGG要跟高。

正是因为GoogLeNet的高性能,后续继续在Inception v1版本上继续优化,出现了Inception v2,Inception v3,Inception v4,Inception-ResNet v1,Inception-ResNet v2等优化模型,下面我们来具体看下。

一、Inception v1

首先,我们需要明确,提高深度神经网络性能最直接的方式是增加深度和宽度,但是这样会带来两个问题:

1.更大的尺寸通常意味着更多的参数,这会使增大的网络更容易过拟合,尤其是在训练集的标注样本有限的情况下。

2.会耗费大量计算资源。


GoogLeNet的设计理念为:

1.图像中的突出部分可能具有极大的尺寸变化。

2.信息位置的这种巨大变化,卷积操作选择正确的核大小比较困难。

3.对于较全局分布的信息,首选较大的核,对于较局部分布的信息,首选较小的核。

4.非常深的网络容易过拟合。它也很难通过整个网络传递梯度更新。

5.简单地堆叠大卷积运算导致计算复杂度较高

出于上面的考虑,提出了如下图所示的初始Inception 模块


对前一层的输入进行并行并行卷积操作,使用多个感受野大小的卷积(1x1, 3x3, 5x5).

但是上述初始Inception ,参数量过大,从而导致计算量过大。

受Network in Network的启发,作者使用1x1卷积对特征图通道数进行降维,这就是Inception v1的最终网络结构,如下:

inception结构的主要贡献:

一是使用1x1的卷积来进行降维;二是在多个尺寸上同时进行卷积再聚合

最终,基于Inception v1的GoogLeNet网络结构如下图:

                                    


每一层的具体情况如下图:


GoogLeNet v1一共包含22层,网络参数量只有Alexnet的1/12。随着网络层数的加深,依然会存在梯度消失问题,所以作者在中间层加入两个辅助的softmax,以此增加反向传播的梯度大小,同时也起到了正则化的作用。在计算网络损失的时候,中间的辅助softmax loss会乘以一个权重(0.3)加入到最后层的loss值中。在预测时,则忽略中间softmax层的输出。


二、Inception v2

Inception v2 的改进主要在以下几点:

1. 加入Batch Normalization(批归一化)层,标准结构为:卷积-BN-relu

2. 借鉴VGG的使用,使用两个3*3的卷积串联来代替Inception 模块中的5*5卷积模块。因为两个3*3的卷积与一个5*5的卷积具体相同的感受野,但是参数量却少于5*5的卷积。并且因为增加了一层卷积操作,则对应多了一次Relu,即增加一层非线性映射,使特征信息更加具有判别性

3. 使用非对称卷积对3*3的卷积进一步分解为3*1和1*3的卷积。如下图:

                       

关于非对称卷积,论文中提到:


  1)先进行 n×1 卷积再进行 1×n 卷积,与直接进行 n×n 卷积的结果是等价的。

  2)非对称卷积能够降低运算量,原来是 n×n 次乘法,分解之后,变成了 2×n 次乘法了,n越大,运算量减少的越多。

  3)虽然可以降低运算量,但这种方法不是哪儿都适用的,这样的非对称卷积不要用在靠近输入的层,会影响精度,要用在较高的层,非对称卷积在图片大小介于12×12到20×20大小之间的时候,效果比较好。


Inception v2中有以下三种不同的Inception 模块,如下图

第一种模块(figure 5)用在35x35的feature map上,主要是将一个5x5的卷积替换成两个3x3的卷积


                     

第二种模块(figure 6),进一步将3*3的卷积核分解为nx1 和 1xn 的卷积,用在17x17的feature map上,具体模块结构,如下图:

                        

第三种模块(figure 7)主要用在高维特征上,在网络中用于8x8的feature map上,具体结构如下图:

                 

GoogLeNet Inception v2的完整网络架构如下图:


三、Inception v3

Inception v3整体上采用了Inception v2的网络结构,并在优化算法、正则化等方面做了改进,具体如下:

1. 优化算法使用RMSProp替代SGD

2. 辅助分类器中也加入BN操作

3. 使用Label Smoothing Regularization(LSR)方法 ,来避免过拟合,防止网络对某一个类别的预测过于自信,对小概率类别增加更多的关注。(关于LSR优化方法,可以参考下这篇博客https://blog.csdn.net/lqfarmer/article/details/74276680)

4. 将刚开始的第一个7x7的卷积核替换为两个3x3的卷积核


四、Inception v4

Inception v4中的三个Inception模块如下:

1. Inception-A block:

使用两个3x3卷积代替5x5卷积,并且使用average pooling,该模块主要处理尺寸为35x35的feature map;结构如下图:


             

2. Inception-B block:

使用1xn和nx1卷积代替nxn卷积,同样使用average pooling,该模块主要处理尺寸为17x17的feature map。结构如下图:

              

3. Inception-C block:

该模块主要处理尺寸为8x8的feature map。结构如下图:

          

在将feature map从35x35降到17x17,再到8x8时,不是使用的简单的pooling层,而是使用了两个Reduction结构,具体结构如下图:

                 

                

最终,Inception v4完整结构如下图:

五、Inception-ResNet v1, v2

Inception-ResNet顾名思义,在Inception的基础上引入了ResNet残差网络的思想,将浅层特征通过另外一条分支加到高层特征中,达到特征复用的目的,同时也避免深层网络的梯度消失问题。

Inception-ResNet v1:

三个基本模块如下图:

Inception-ResNet v1的 Reduction-A 模块和 Inception v4的保持一致,

Reduction-B模块如下:



完整架构如下:

Inception-ResNet v2:

三个基本模块如下图:

Inception-ResNet v2的 Reduction-A 模块同样与 Inception v4的保持一致,Reduction-B模块如下:

Inception-Resnet v2的整体架构和v1保持一致,Stem具体结构有所不同,Inception-Resnet v2的Stem结构和Inception v4的保持一致,具体如下图:

欢迎关注我的公众号,本公众号不定期推送机器学习,深度学习,计算机视觉等相关文章,欢迎大家和我一起学习,交流。