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等优化模型,下面咱们来具体看下。网络
首先,咱们须要明确,提升深度神经网络性能最直接的方式是增长深度和宽度,可是这样会带来两个问题:架构
1.更大的尺寸一般意味着更多的参数,这会使增大的网络更容易过拟合,尤为是在训练集的标注样本有限的状况下。机器学习
2.会耗费大量计算资源。性能
GoogLeNet的设计理念为:
学习
1.图像中的突出部分可能具备极大的尺寸变化。优化
2.信息位置的这种巨大变化,卷积操做选择正确的核大小比较困难。 .net
3.对于较全局分布的信息,首选较大的核,对于较局部分布的信息,首选较小的核。 设计
4.很是深的网络容易过拟合。它也很难经过整个网络传递梯度更新。3d
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 的改进主要在如下几点:
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 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模块以下:
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顾名思义,在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的保持一致,具体以下图:
欢迎关注个人公众号,本公众号不按期推送机器学习,深度学习,计算机视觉等相关文章,欢迎你们和我一块儿学习,交流。