GoogLeNet论文翻译详情见我的博客:
https://blog.csdn.net/muye_IT/article/details/123886132
1.背景介绍
GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如过拟合、梯度消失、梯度爆炸等。Inception Architecture的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。
2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构,而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的20倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。
GoogLeNet这个名字的诞生由两方面促成,一是设计者在Google工作,二是向LeNet致敬。GoogLeNet只是一个名字,它的核心是Inception Architecture。
2.GoogLeNet创新点
➢ 提出了一种Inception结构,它能保留输入信号中的更多特征信息;
➢ 去掉了AlexNet的前两个全连接层,并采用了平均池化,这一设计使得
GoogLeNet只有500万参数,比AlexNet少了12倍;
➢ 在网络的中部引入了辅助分类器,克服了训练过程中的梯度消失问题。
模型总览图如下:
3.串联结构(如VGG)存在的问题
—后面的卷积层只能处理前层输出的特征图;前层因某些原因(比如感受野限制)丢失重要信息,后层无法找回。
如何解决?
每一层尽量多的保留输入信号中的信息。
4.GoogLeNet
4.1 网络架构
4.1.1 INPUT层
原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。
4.1.2 Conv 1×1
使用7x7的卷积核(滑动步长2,padding为3),64通道,输出为112x112x64,卷积后进行ReLU操作
经过3x3的max pooling(步长为2),输出为((112 - 3+1)/2)+1=56,即56x56x64,再进行ReLU操作
4.1.2 Conv 3×3
使用3x3的卷积核(滑动步长为1,padding为1),192通道,输出为56x56x192,卷积后进行ReLU操作
经过3x3的max pooling(步长为2),输出为((56 - 3+1)/2)+1=28,即28x28x192,再进行ReLU操作
4.1.3 Inception 3a层
分为四个分支,采用不同尺度的卷积核来进行处理
1.64个1x1的卷积核,然后RuLU,输出28x28x64
2.96个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x96,然后进行ReLU计算,再进行128个3x3的卷积(padding为1),输出28x28x128
3.16个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x16,进行ReLU计算后,再进行32个5x5的卷积(padding为2),输出28x28x32
4.pool层,使用3x3的核(padding为1),输出28x28x192,然后进行32个1x1的卷积,输出28x28x32。
将四个结果进行连接,对这四部分输出结果的第三维并联,即64+128+32+32=256,最终输出28x28x256
4.1.4 Inception 3b层
1.128个1x1的卷积核,然后RuLU,输出28x28x128
2.128个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x128,进行ReLU,再进行192个3x3的卷积(padding为1),输出28x28x192
3.32个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x32,进行ReLU计算后,再进行96个5x5的卷积(padding为2),输出28x28x96
4.pool层,使用3x3的核(padding为1),输出28x28x256,然后进行64个1x1的卷积,输出28x28x64。
将四个结果进行连接,对这四部分输出结果的第三维并联,即128+192+96+64=480,最终输出输出为28x28x480
第四层(4a,4b,4c,4d,4e)、第五层(5a,5b)……,与3a、3b类似,在此就不再重复。
4.2 Inception模块
首先得说一下Szegedy发明Inception Architectur的动机,他估计是在某天阅读了Provable Bounds for Learning Some Deep Representations这篇论文,又结合自己多年来的经验,发现传统的提高网络精度的方法(扩大网络规模或增大训练数据集)不可靠,而想从本质上提高网络性能,就得用sparsely connected architectures,即“稀疏连接结构”。
我自己对“稀疏连接结构”的理解是这样的,用尽可能的“小”、“分散”的可堆叠的网络结构,去学习复杂的分类任务,怎么体现“小”、“分散”呢?如下图:
原来造神经网络,都是一条线下来,比如AlexNet、VGG等网络,而IA是“分叉-汇聚”型网络,也就是说在一层网络中存在多个不同尺度的kernels,卷积完毕后再汇聚。汇聚就是简单的在kernel维度把矩阵concatenate起来。但是这么做有一个问题,会产生“维度爆炸”,也就是说假如1x1卷积、3x3卷积、5x5卷积都有256个kernels,加上pool的kernels(假定为256),经过concat操作,最终的kernels是256×4=1024个kernels!这没法接受啊!如果多层IA叠加起来,那kernels的数量岂不上天!!于是Szegedy就改进了一下也就是Inception V1,如下图:
Inception V1加入了kernels数量控制方式,就是那些1×1的卷积层,这些1×1的卷积层输出kernels会比上一层要少,其实就是多了三个1×1的卷积层,这三个卷积层起到了降维的作用。这样即便在经过concat以后,总kernels数量不会增加太多。另外,这些1×1的卷积层还增加了网络的非线性程度。
1×1如何起到降维的作用?
如果有一个特征矩阵是channels是512,如果不使用1×1的卷积核,直接使用64个5×5的卷积核进行卷积的话,那么总参数为5×5×512×64=819200,如果使用24个1×1卷积核进行降维,再使用64个5×5的卷积核进行卷积,则所需要的参数就会变为50688,在上图b中加入1×1的卷积结构其目的就是为了减小特征矩阵的深度从而减小卷积参数。
为什么Inception Architecture可以有更好的性能呢?
它拥有多个不同尺度的kernels,每一个尺度的kernel会学习不同的特征,把这些不同kernels学习到的特征汇聚给下一层,能够更好的实现全方位的学习。
4.3 取消全连接层
首先看一下GoogLeNet与VGGNet的模型参数对比
VGG网络的参数那么多?就是因为它在最后有两个4096的全连层!为了压缩GoogLeNet的网络参数,他把全连层取消了!GoogLeNet网络详细配置如下:
网络的最后几层是AveragePool、Dropout、Liner和Softmax。可能是全连层参数太多,网络深度增加了以后,难以接受吧。但是去年来自谷歌大脑的研究团队在网络架构设计方面挖出新坑,提出 MLP-Mixer ,这是一个纯 MLP 构建的视觉架构。该架构无需卷积、注意力机制,仅需 MLP,在 ImageNet 数据集上就实现了媲美 CNN 和 ViT 的性能表现。所以说神经网络是个玄学~
4.4 辅助分类器
原因——虽然ReLU单元能够一定程度解决梯度消失问题,但是并不能完全解决深层网络难以训练的问题。离输出远的层就不如靠近输出的层训练得好。
结果——让低层的卷积层学习到的特征也有很好的区分能力,从而让网络更好地被训练,而且低层的卷积层学到了好的特征也能加速整个网络的收敛。
当随着网络深度加深是,梯度消失是所有深层网络的通病,往往训练到最后,网络最开始的几层就“训不动了”!于是Szegedy加入了Auxiliary Classifiers(简称AC),用于辅助训练,加速网络收敛。这两个AC在训练的时候也跟着学习,同时把自己学习到的梯度反馈给网络,算上网络最后一层的梯度反馈,GoogLeNet一共有3个“梯度提供商”,它确实提高了网络收敛的速度,因为梯度变大了。但是,GoogLeNet在做预测的时候AC是要被摘掉的。
5. 思考
5.1 平均池化向量化与直接展开向量化有什么区别?
➢ 特征响应图上每个位置的值反应了图像对应位置的结构与卷积核记录的语义结构的相似程度。
➢ 平均池化丢失了语义结构的空间位置信息。
➢ 忽略语义结构的位置信息,有助于提升卷积层提取到的特征的平移不变性。
5.2 利用1x1卷积进行压缩会损失信息吗?
如图,把一个64维的向量压缩成32维的向量,位置A的这个64维向量是一个非常稀疏向量,利用1x1卷积进行非线性压缩通常不会损失信息。
6.GoogLeNet相关论文及下载地址
[v1] Going Deeper withConvolutions, 6.67% test error,2014.9
[v3] Rethinking theInception Architecture for Computer Vision, 3.5%test error,2015.12