11.3 GoogLeNet

2014 年,Google 的研究团队提出了 GoogLeNet(又称 Inception V1),并凭借其在 ILSVRC 2014 中创纪录的 6.7% Top-5 错误率一举夺魁,几乎将前一年冠军的错误率腰斩。这一成果的关键在于 Inception 模块,它通过多尺度卷积和降维技巧,既增加了网络深度,又在计算量可控的前提下抑制了参数爆炸和过拟合。为了向之前的LeNet致敬,他们将Google里的L大写,让GoogLeNet里包含了一个LeNet。

11.3.1 Inception模块

在GoogLeNet中最重要的就是Inception模块,堆叠的多个Inception模块构成网络的主要框架。 1039.png 上图展示了Inception模块的主要思想。

输入是一个28×28×192的特征图,在设计卷积神经网络时,我们面临选择,接下来是进行池化操作还是卷积操作呢?对于卷积操作,我们应该选择多大的卷积核呢?1×1、3×3还是5×5呢?

Inception模块的思想,不做选择,全都要。接下来我们看具体操作。

1×1卷积

设置64个1×1×192的卷积核,输出特征图为28×28×64。

3×3卷积

设置128个3×3×192的卷积核,padding为1,stride为1,输出特征图为28×28×128。

5×5卷积 设置32个5×5×192的卷积核,padding为2,stride为1,输出特征图为28×28×32。

最大池化 设置最大池化窗口为2×2,padding为1,stride为1,(为了保持输出特征图的长宽不变,所以padding为1,stride为1)。输出特征图为28×28×192,然后再接32个1×1×192的卷积,改变输出特征图为28×28×32

上边的1×1、3×3、5×5、最大池化操作,输出的特征图的长和宽都是一致的,只是通道数不同,可以将它们按通道合并,最终的特征图尺寸为28×28×256。

Inception的思想是不做选择,每个模块做各种粒度的卷积,池化。但是这样带来的问题是参数量和计算量都非常大。我们以其中的5×5卷积核为例来看一下它的参数量和计算量。

32个5×5×192的卷积核的参数量为5×5×192×32=153600。接下来我们来看计算量,对于输出特征图里的每一个特征,都需要对一个卷积核5×5×192=4800个位置的特征和权重的乘法。累加我们不计入。然后输出特征图一共有28×28×32=25088个特征,所以总共计算量为4800×25088=120,422,400。

1040.png

解决参数量和计算量大的问题,可以用1×1卷积来缩减维度,Inception模块在输入特征图和5×5卷积之间增加了16个1×1卷积核。这样它的总共参数量就为6×192+5×5×16×32=13952。参数量缩减为原来的十分之一。接着来看计算量:192×28×28×16+5×5×16×28×28×32=12,443,648和之前的计算量比,也是原来的十分之一。由此可见通过1×1卷积是可以大幅缩小模型的参数量和计算量的。

所以,Inception模块同样将1×1卷积应用在3×3卷积之前来降低输入的通道数。最终,Inception模块的示意图如下: 1041.png

11.3.2 GoogLeNet架构

1042.png

通过上图可以看到GoogLeNet首先通过卷积,池化来提取原始图片的特征,然后是多个Inception模块,接一个MaxPolling来降低特征图的长和宽,然后再Inception模块,最终通过全连接层进行分类。

还有一个细节需要注意,就是上图中用红框标记的部分,在训练时也对中间隐藏层提取的特征直接进行分类训练,这样保证中间隐藏层提取的特征必须是对分类有帮助的。来增强模型训练的监督信号。

11.3.3 GoogLeNet的意义

多尺度并行卷积(Inception模块): Inception模块通过并行使用不同尺寸的卷积核(1x1、3x3、5x5)和池化操作,同时捕捉不同尺度的特征。这种设计突破了传统堆叠单一卷积层的模式,显著提升了模型的特征表达能力。

1x1卷积的革新应用: 利用1x1卷积进行通道降维和非线性增强(1×1卷积后的激活引入非线性),在减少计算量的同时提升了网络的深度和宽度。这一技术成为后续模型设计的标配。

results matching ""

    No results matching ""