GoogleNet
- GoogleNet原文链接 https://arxiv.org/pdf/1409.4842.pdf
- 改进的GoogleNet:
- Inception-v2: https://arxiv.org/abs/1502.03167
- Inception-v3: https://arxiv.org/abs/1512.00567
- Inception-v4: https://arxiv.org/pdf/1602.07261.pdf
- ResNetXt: https://arxiv.org/pdf/1611.05431.pdf
- Xception: https://arxiv.org/abs/1610.02357
- MobileNets: https://arxiv.org/pdf/1704.04861.pdf
- ShuffleNet: https://arxiv.org/pdf/1707.01083.pdf
- MobileNetV2: https://arxiv.org/abs/1801.04381
- ShuffleNetV2: https://arxiv.org/pdf/1807.11164.pdf
- References:
- https://zhuanlan.zhihu.com/p/42501123 深度学习20讲CNN之GoogLeNet Inception
- https://blog.csdn.net/wcx1293296315/article/details/80505191 GoogLeNet学习
- https://blog.csdn.net/marsjhao/article/details/73088850 GoogleNet, inception v2-v4
-
https://blog.csdn.net/qq_14845119/article/details/73648100 从Inception v1,v2,v3,v4,RexNeXt到Xception再到MobileNets,ShuffleNet,MobileNetV2,ShuffleNetV2
GoogleNet的创新点:在借鉴1*1卷积思想的基础上,通过滤波器组合构建Inception模块,使得网络可以更深、更宽,提高了网络的表达能力。其中,1*1卷积主要用来降低模块的维度(dimension reduction module),减少计算量,使得网络可以更深更宽。Inception模块的基本思想是:不需要人为的决定使用哪个卷积结构或者池化结构,而是由网络自己决定使用这些参数,决定用哪种滤波器组合。
1*1卷积
1*1卷积也是一种卷积核,它的作用主要是用来降维。例如,用一个1*1*32的卷积核对6*6*32的图片进行卷积,会产生6*6*1的输出。相当于压缩了数据的depth,或者说压缩了通道数。它在接下来要讲的Inception module中起着降维的作用,有效的减少了参数的数量。此外,1*1卷积还引入了ReLU非线性激活,能组合出更多的非线性特征。
Inception Module
通常在构建卷积神经网络时,我们需要考虑如何设计网络的每一层,是使用1*1卷积、3*3卷积还是5*5卷积,以及是否使用池化操作。而GoogleNet的Inception Module就是出于让网络自己决定使用什么样的层结构而设计的。
简单来说,Inception模块就是分别采用1*1,3*3,5*5的卷积以及一个3*3的最大池化构造起来的组合,其输出的组合为Inception模块的输出。Naive Inception Module的基本组成如下图:
上图中,Inception的输入为28*28*192的图像块,分别采用64个1*1的卷积核,128个3*3的卷积核,32个5*5的卷积核以及32个3*3的最大池化对输入进行操作,采用zero-padding保持输出的width和height不变,共得到:32+32+128+64=256个切片,因此输出为大小为28*28*256。 综上可以看出,Inception Module的作用就是不需要人为的去决定使用哪个卷积结构或者池化,而是由网络自己决定这些参数,决定有哪些滤波器组合。
在论文中,Inception Module有两种类型,分别为naive Inception,以及带降维的Inception。其结构如下图:
其中(b)图的Inception Module采用了大量的1*1卷积进行depth压缩,减少计算量。
GoogleNet 网络结构
上图为GoogleNet使用的网络结构,即:Inception-V1版本。可以看到GoogleNet有如下优点:
- GoogleNet的网络更深,更宽,进而可以更加充分的提取各种层次的特征。
- GoogleNet还是用了全局平均池化层来替代前两个全连接层,进而减少参数的数量,降低过拟合。
这是因为全连接层参数数量庞大,容易造成过拟合。
- GoogleNet还使用了2个辅助分类器:softmax0和softmax1所对应的结构。
在Inception Net中,还使用到了辅助分类节点(auxiliary classifiers),即将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中。这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个Inception Net的训练很有裨益。
Inception v1版本的具体结构如下表:
继Inception V1后,又不断对其进行优化和改进,提出了V2,V3和V4版本,以及后来的Xception等等,成为了深度卷积网络架构中的一大分支。文章开头已经附上各个版本的论文链接,就不在本文中对其进行一一介绍了。