> 文章列表 > Inception Network V1

Inception Network V1

Inception Network V1

文章目录

  • Inception Network简介
  • CNN的痛点
  • Inception Network
    • 1x1卷积
      • 1. 升维/降维:
      • 2. 调节参数数量:
      • 3. 增加非线性特性:
    • Inception原始模型
    • Inception Module
    • Inception Network

Inception Network简介

  Inception Network又称GoogleNet,是2014年Christian Szegedy提出的一种全新的深度学习结构,并在当年的ILSVRC比赛中获得第一名的成绩。相比于传统CNN模型通过不断增加神经网络的深度来提升训练表现,Inception Network另辟蹊径,通过Inception model的设计和运用,在有限的网络深度下,大大提高了模型的训练速度(即减少了训练参数)和准确率,是一个CNN历史上里程碑式的进步。

CNN的痛点

  在Inception Network出现之前,很多CNN模型(如VGG等)在图像识别上都取得了令人惊叹的成果,但是他们都面临着共同的痛点:
  1. 由于模型深度过大,导致计算量飙升,对算力的需求近乎无限增加;
  2. 过深的神经网络容易产生过拟合;
  3. 由于图像信息的多样性,合适的卷积核大小的选择变得更加困难(不同大小的卷积核感受野不同,提取的图像信息侧重点不同);
  为了解决以上问题,Inception Network的设计者对“过滤器使用固定大小卷积核”提出了质疑,并给出“要更宽,而不是更深(wider rather than deeper)”的思路(即过滤器使用多个大小不同的卷积核),为CNN的设计提供了一种更好的方案。

Inception Network

1x1卷积核

  1x1卷积核是CNN网络中常见的组成部分,它的主要作用有如下三点:

1. 升维/降维:

  1x1的卷积核由于大小只有1x1,所以并不需要考虑像素跟周边像素的关系,它主要用于调节通道数,对不同的通道上的像素点进行线性组合,然后进行非线性化计算,可以完成升维和降维的功能,如下图所示,输入的WHD特征图矩阵与1个1x1大小的卷积核卷积后,输出的特征图的深度(通道数)将会从D变成1,从而实现了降维的作用。而升维只需要增加卷积核的数量即可,原理相同。
单个1*1卷积核的降维

2. 调节参数数量:

  前面所说的降维,其实也是减少了参数,因为特征图的通道数小了,参数也自然跟着就减少,相当于在特征图的通道数上进行卷积,压缩特征图,二次提取特征,使得新特征图的特征表达更佳。
&esmp;&esmp;如下图,28x28x192的输入特征图,与32个5x5的卷积核做卷积计算,产生24x24x32的输出,此过程涉及的计算量为28x28x32x(5x5x192)=120.422 million ops。
在这里插入图片描述
  而经过1x1卷积核降维后,整个过程分成了两步,第一步的计算量是28x28x16x(1x1x192)=2.4 million ops。第二部的计算量是28x28x32x(5x5x16)=10 million ops。
合计12.4 million ops。可见经过1x1卷积核降维后,神经网络的计算量大大降低,即需要训练的参数量大幅度减少(同时一定程度上减少了过拟合)。
在这里插入图片描述

3. 增加非线性特性:

  使用1x1卷积核的网络更深,而每一层网络后都会用Relu激活函数做计算,这样就增加了一层非线性特征。

Inception原始模型

  为了验证“wider rather than deeper”的理论,Inception network的作者设计了如下Inception原始模型。
  我们都知道不同大小的卷积核具有不同的感受野,在输入特征图上用 3 个不同的卷积核(1x1,3x3,5x5)实施卷积操作,相当于同时提取了不同的尺度的特征,冗余信息更少,训练效率更高。最后执行了最大池化操作(max pooling),被连接(concatenated)后,送往下一层 inception 模块。
在这里插入图片描述

Inception Module

  然而在Inception原始模型中,由于3x3和5x5的卷积核涉及的参数量过大,计算代价过于昂贵,作者便充分利用了1x1卷积核的特性,在过大的卷积核之前增加1x1卷积核,大幅减少了参数数量,提高了训练效率,这就是Inception Module,如下图。
在这里插入图片描述

Inception Network

  利用上述Inception module,一个22层的神经网络被构建完成,如下图,这就是Inception Network V1。
在这里插入图片描述
  Inception Network线性堆叠了 9 个Inception Module,它有 22 层深(如果包括池化层,则为 27 层),在最后它使用了全局平均池化操作。
  注意这里除了Inception Module外,还多了几个分支。所以这些分支有什么用呢?在网络的最后几层,通常是全连接层然后softmax来做出预测。图中分支就是通过隐藏层来做出预测,所以其实是一个softmax输出,它确保了即便是隐藏单元和中间层也参与了特征计算和图片分类,起到一种调整的效果并且防止网络发生过拟合。