图像分类一文彻底搞明白GoogLeNet

网友投稿 1266 2022-05-30

1、 模型介绍

GoogLeNet作为2014年ILSVRC在分类任务上的冠军,以6.65%的错误率力压VGGNet等模型,在分类的准确率上面相比过去两届冠军ZFNet和AlexNet都有很大的提升。从名字GoogLeNet可以知道这是来自谷歌工程师所设计的网络结构,而名字中GoogLeNet更是致敬了LeNet。GoogLeNet中最核心的部分是其内部子网络结构Inception,该结构灵感来源于NIN,至今已经经历了四次版本迭代(Inception_v1-4)。下表是Inception_v1-4提出的时间表

Inception不同版本的性能比较图

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但一味地增加,会带来诸多问题:

1)参数太多,如果训练数据集有限,很容易产生过拟合;

2)网络越大、参数越多,计算复杂度越大,难以应用;

3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。

我们希望在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。但是在实现上,全连接变成稀疏连接后实际计算量并不会有质的提升,因为大部分硬件是针对密集矩阵计算优化的,稀疏矩阵虽然数据量少,但是计算所消耗的时间却很难减少。在这种需求和形势下,Google研究人员提出了Inception的方法。

2、 模型结构

如图所示,GoogLeNet相比于以前的卷积神经网络结构,除了在深度上进行了延伸,还对网络的宽度进行了扩展,整个网络由许多块状子网络的堆叠而成,这个子网络构成了Inception结构。为了更详细的了解Inception,下面对Inception_v1、Inception_v2、Inception_v3、Inception_v4做更详细的说明。

Inception_v1

Inception_v1在同一层中采用不同的卷积核,并对卷积结果进行合并; 下面的两张图展示Inception_v1采用的两种卷积模块a和b。

对上图做以下说明:

1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;

2 . 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;

3 . 文章说很多地方都表明pooling挺有效,所以Inception里面也嵌入了。

4 . 网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3x3和5x5卷积的比例也要增加。

但是,使用5x5的卷积核仍然会带来巨大的计算量。 为此,文章借鉴NIN2,采用1x1卷积核来进行降维。

例如:上一层的输出为100x100x128,经过具有256个输出的5x5卷积层之后(stride=1,pad=2),输出数据为100x100x256。其中,卷积层的参数为128x5x5x256。假如上一层输出先经过具有32个输出的1x1卷积层,再经过具有256个输出的5x5卷积层,那么最终的输出数据仍为为100x100x256,但卷积参数量已经减少为128x1x1x32 + 32x5x5x256,大约减少了4倍。

具体改进后的Inception Module如下图:

GoogLeNet中Inception_v1网络参数配置

网络层

输入尺寸

核尺寸

【图像分类】一文彻底搞明白GoogLeNet

输出尺寸

参数个数

卷积层 C_ 11

H× W ×C_1

1  ×1  ×  C_2 /2

frac  H   2   ×  frac  W   2   ×  C_2

(1  ×1  ×  C_1 +1)  ×  C_2

卷积层 C_  21

H  ×  W   ×  C_2

1  ×1  ×  C_2 /2

frac  H   2   ×  frac  W   2   ×  C_2

(1  ×1  ×  C_2 +1)  ×  C_2

卷积层 C_  22

H  ×  W   ×  C_2

3  ×3  ×  C_2 /1

H  ×  W   ×  C_2 /1

(3  ×3  ×  C_2 +1)  ×  C_2

卷积层 C_  31

H  ×  W   ×  C_1

1  ×1  ×  C_2 /2

frac  H   2   ×  frac  W   2   ×  C_2

(1  ×1  ×  C_1 +1)  ×  C_2

卷积层 C_  32

H  ×  W   ×  C_2

5  ×5  ×  C_2 /1

H  ×  W   ×  C_2 /1

(5  ×5  ×  C_2 +1)  ×  C_2

下采样层 S_  41

H  ×  W   ×  C_1

3  ×3/2

frac  H   2   ×  frac  W   2   ×  C_2

0

卷积层 C_  42

frac  H   2   ×  frac  W   2   ×  C_2

1  ×1  ×  C_2 /1

frac  H   2   ×  frac  W   2   ×  C_2

(3  ×3  ×  C_2 +1)  ×  C_2

合并层 M

frac  H   2   ×  frac  W   2   ×  C_2 (  ×4)

拼接

frac  H   2   ×  frac  W   2   ×(  C_2   ×4)

0

Inception_v2

Inception_v2组合不同卷积核的堆叠形式,并对卷积结果进行合并;把5*5的卷积改成了两个3*3的卷积串联,它说一个5*5的卷积看起来像是一个5*5的全连接,所以干脆用两个3*3的卷积,第一层是卷积,第二层相当于全连接,这样可以增加网络的深度,并且减少了很多参数。模型的结构如下图:

Inception_v2还引入了使用了Batch Normalization,加了这个以后训练起来收敛更快,学习起来自然更高效,可以减少dropout的使用。

28x28 的 Inception 模块的数量由 2 增加到了 3.

Inception 模块,Ave 和 Max Pooling 层均有用到. 参考表格。

两个 Inception 模块间不再使用 pooling 层;而在模块 3c 和 4e 中的 concatenation 前采用了 stride-2 conv/pooling 层.

详细的参数列表

Inception_v3

Inception_v3则在v_2 基础上进行深度组合的尝试,输入改为299×299×3。

Inception_V3出了采用Inception_V2中,将5×5的卷积分解成两个3×3的卷积,还衍生出了非对称分解,将一个3x3的卷积分解为3x1和1x3,进一步衍生出了一种混合两种分解方式的结构Inception_V3三种结构如下图:

Inception_v4

总结

Inception V1——构建了1x1、3x3、5x5的 conv 和3x3的 pooling 的分支网络,同时使用 MLPConv 和全局平均池化,扩宽卷积层网络宽度,增加了网络对尺度的适应性;

Inception V2——提出了 Batch Normalization,代替 Dropout 和 LRN,其正则化的效果让大型卷积网络的训练速度加快很多倍,同时收敛后的分类准确率也可以得到大幅提高,同时学习 VGG 使用两个3´3的卷积核代替5´5的卷积核,在降低参数量同时提高网络学习能力;

Inception V3——引入了 Factorization,将一个较大的二维卷积拆成两个较小的一维卷积,比如将3´3卷积拆成1´3卷积和3´1卷积,一方面节约了大量参数,加速运算并减轻了过拟合,同时增加了一层非线性扩展模型表达能力,除了在 Inception Module 中使用分支,还在分支中使用了分支(Network In Network In Network);

Inception V4——研究了 Inception Module 结合 Residual Connection,结合 ResNet 可以极大地加速训练,同时极大提升性能,在构建 Inception-ResNet 网络同时,还设计了一个更深更优化的 Inception v4 模型,能达到相媲美的性能

复现代码:GoogLeNet(V1-V4)Pytorch复现.zip-深度学习文档类资源-CSDN下载

神经网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么在Excel表格中的数据快速转置成多列数据
下一篇:硬核!!教你如何通过脚本自动部署虚拟机并安装操作系统
相关文章