Python深度学习:模型、方法与实现
上QQ阅读APP看书,第一时间看更新

3.4 理解Inception网络

Inception网络(“Going Deeper with Convolutions”,https://arxiv.org/abs/1409.4842)在2014年赢得了ImageNet挑战赛(这里似乎有一个模式)。从那时起,作者发布了该架构的多个改进(版本)。

000 有趣的事实:“Inception”这个名字部分来自“We need to go deeper”,与电影Inception有关。

Inception网络背后的理念源于一个基本前提,即图像中的对象具有不同的规模。一个遥远的对象可能占据图像的一小块区域,但同样的对象,一旦靠近,可能占据图像的大部分区域。这给标准的神经网络带来了困难,因为不同层的神经元对输入图像的感受野大小是固定的。一个常规的网络可以很好地探测到一定规模的对象,但是如果没有规模,就可能无法探测到它们。为了解决这一问题,作者提出了一种新颖的架构:由Inception块组成的体系结构。Inception块从一个公共的输入开始,然后将输入分割成不同的平行路径(或塔)。每个路径要么包含具有不同大小过滤器的卷积层,要么包含池化层。这样,对相同的输入数据应用不同的感受野。在Inception块的末尾,将串联不同路径的输出。在接下来的几节中,讨论Inception网络的不同变体。

3.4.1 Inception v1

下图显示了Inception块的第一个版本,它是GoogLeNet网络架构的一部分(https://arxiv.org/abs/1409.4842)。GoogLeNet包含九个这样的Inception块。

000

Inception v1块,灵感来自https://arxiv.org/abs/1409.4842

v1块有四条路径:

  • 1×1卷积,它作为一种对输入的中继器
  • 1×1的卷积,后面跟着一个3×3的卷积
  • 1×1的卷积,后面跟着一个5×5的卷积
  • 3×3的步长为1的最大池化

块中的层使用填充,使输入和输出具有相同的形状(但不同的深度)。填充也是必要的,因为根据过滤器的大小,每个路径将产生具有不同形状的输出。这对所有版本的Inception块都有效。

这个Inception块的另一个主要创新是使用了下采样1×1卷积。之所以需要它们,是因为所有路径的输出都被串联起来,以产生块的最终输出。串联的结果是具有四倍深度的输出。如果另一个Inception块在当前的块之后,它的输出深度将再次增加至四倍。为了避免这种指数增长,块使用1×1卷积来减少每条路径的深度,从而减少块的输出深度。这使在不耗尽资源的情况下创建更深层的网络成为可能。

GoogLeNet还利用了辅助分类器——也就是,它在不同的中间层上有两个额外的分类输出(具有相同的groundtruth标签)。在训练期间,损失的总价值是辅助损失和实际损失的加权和。

3.4.2 Inception v2和v3

Inception v2和v3一起发布,并且提出了对最初的Inception块的一些改进(“Rethinking the Inception Architecture for Computer Vision”,https://arxiv.org/abs/1512.00567)。第一个是将5×5卷积分解为两个3×3的卷积。在3.2节中讨论了这种方法的优点。

可以在下图中看到新的Inception块。

下一个改进是将n×n卷积分解为两个堆叠的不对称1×nn×1卷积。例如,可以将单个3×3卷积分解为两个1×3和3×1卷积,其中3×1卷积应用1×3卷积的输出。在第一种情况下,过滤器的大小为3*3 = 9,而在第二种情况下(如下图所示),组合的大小为(3*1)+(1*3)= 3 + 3 = 6,提高33%效率。

000

Inception块A,灵感来自https://arxiv.org/abs/1512.00567

000

将一个3×3卷积分解为1×3和3×1卷积。灵感来自https://arxiv.org/abs/1512.00567

论文作者引入了两个新的块,利用了分解卷积。这些块中的第一个(总体看是第二个)相当于Inception块A:

第二个(总体看是第三个)块与之前类似,但是不对称的卷积是并行的,从而导致更大的输出深度(更多串联的路径)。这里的假设是网络拥有的特征(不同的过滤器)越多,它的学习速度就越快(在第2章中也讨论了对更多过滤器的需求)。然而,更宽的层需要更多的内存和计算时间。作为一种折中,这个块仅在其他块之后,网络的较深部分使用。

000

Inception块B.当n=3时,相当于块A。灵感来自https://arxiv.org/abs/1512.00567

000

Inception块C,灵感来自https://arxiv.org/abs/1512.00567

利用这些新的块,论文作者提出了两个新的Inception网络:v2和v3。该版本的另一个主要改进是使用了批标准化,这是由同一位作者引入的。

3.4.3 Inception v4和Inception-ResNet

在Inception网络的最新版本中,论文作者介绍了三个新的精简的Inception块,它们建立在以前版本的基础上(“Inception-v4,InceptionResNet and the Impact of Residual Connections on Learning”,https://arxiv.org/abs/1602.07261)。其中引入了7×7的非对称分解卷积,用平均池化代替最大池化。更重要的是,创建了一个残差/Inception的混合网络,称为“Inception-ResNet”,其中Inception块包含了残差连接。可以在下页图中看到一个这样的块的示意图。

本节讨论了不同类型的Inception网络以及在不同的Inception块中使用的不同原则。接下来,讨论一个更新的CNN架构,它将Inception的概念带到了一个新的深度(或者应该说宽度)。

000

带有残差跳跃连接的Inception块