深度学习之(十)GoogLeNet 网络

Posted by feizaipp on July 3, 2019

我的博客

1. 概述

       在 2014 年的 ImageNet 图像识别挑战赛中,一个名叫 GoogLeNet 的网络结构大放异彩。GoogLeNet 借鉴了 NiN 中网络串联网络的思想,并在此基础上做了很大改进。在随后的几年里,研究人员对 GoogLeNet 进行了数次改进,本节将介绍这个模型系列的第一个版本。

2. Inception 块

       GoogLeNet 中的基础卷积块叫作 Inception 块。与上章介绍的 NiN 块相比,这个基础块在结构上更加复杂,如下图所示。

       Inception 块里有 4 条并行的线路。前 3 条线路使用窗口大小分别是 1×1 、 3×3 和 5×5 的卷积层来抽取不同空间尺寸下的信息,其中中间2个线路会对输入先做 1×1 卷积来减少输入通道数,以降低模型复杂度。第四条线路则使用 3×3 最大池化层,后接 1×1 卷积层来改变通道数。 4 条线路都使用了合适的填充来使输入与输出的高和宽一致。最后我们将每条线路的输出在通道维上连结,并输入接下来的层中去。

3. GoogLeNet 模型

        GoogLeNet 在主体卷积部分中使用 5 个模块,每个模块之间使用步幅为 2 的 3×3 最大池化层来减小输出高宽。

       第一模块使用一个 64 通道的 7×7 卷积层。

       第二模块使用 2 个卷积层:首先是 64 通道的 1×1 卷积层,然后是将通道增大 3 倍的 3×3 卷积层。它对应 Inception 块中的第二条线路。

       第三模块串联 2 个完整的 Inception 块。第一个 Inception 块的输出通道数为 64+128+32+32=256 ,其中 4 条线路的输出通道数比例为 64:128:32:32=2:4:1:1 。其中第二、第三条线路先分别将输入通道数减小至 96/192=1/2 和 16/192=1/12 后,再接上第二层卷积层。第二个 Inception 块输出通道数增至 128+192+96+64=480 ,每条线路的输出通道数之比为 128:192:96:64=4:6:3:2 。其中第二、第三条线路先分别将输入通道数减小至 128/256=1/2 和 32/256=1/8 。

       第四模块更加复杂。它串联了 5 个 Inception 块,其输出通道数分别是 192+208+48+64=512 、 160+224+64+64=512 、 128+256+64+64=512 、 112+288+64+64=528 和 256+320+128+128=832 。这些线路的通道数分配和第三模块中的类似,首先含 3×3 卷积层的第二条线路输出最多通道,其次是仅含 1×1 卷积层的第一条线路,之后是含 5×5 卷积层的第三条线路和含 3×3 最大池化层的第四条线路。其中第二、第三条线路都会先按比例减小通道数。这些比例在各个 Inception 块中都略有不同。

       第五模块有输出通道数为 256+320+128+128=832 和 384+384+128+128=1024 的两个 Inception 块。其中每条线路的通道数的分配思路和第三、第四模块中的一致,只是在具体数值上有所不同。需要注意的是,第五模块的后面紧跟输出层,该模块同 NiN 一样使用全局平均池化层来将每个通道的高和宽变成 1 。最后我们将输出变成二维数组后接上一个输出个数为标签类别数的全连接层。