机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

机器不学习 www.jqbxx.com : 深度聚合机器学习、深度学习算法及技术实战

三、VGGNet

网络结构如下所示:

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

VGGNet与AlexNet不同的地方主要在于卷积核大小、卷积步数以及网络深度。

VGGNet将小卷积核带入人们的视线,AlexNet中第一个卷积层使用的kernel大小为 11×11

11×11 ,stride为4,C3和C5层中使用的都是 5×5

5×5 的卷积核;而出现在VGGNet中大多数的卷积核都是大小为3×3

3×3,stride为1的。

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

直观上我们会觉得大的卷积核更好,因为它可以提取到更大区域内的信息,但是实际上,大卷积核可以用多个小卷积核进行代替。例如,一个 5×5

5×5 的卷积核就可以用两个串联的 3×3

3×3 卷积核来代替,一个 7×7

7×7 的卷积核就可以用三个串联的 3×3

3×3 卷积核来代替。这样的替代方式有两点好处:

  1. 减少了参数个数:两个串联的小卷积核需要3×3×2=18
  2. 3×3×2=18 个参数,一个 5×5
  3. 5×5的卷积核则有25个参数;三个串联的小卷积核需要3×3×3=27
  4. 3×3×3=27个参数,一个 7×7
  5. 7×7的卷积核则有49个参数。大大减少了参数的数量。
  6. 引入了更多的非线性:多少个串联的小卷积核就对应着多少次激活(activation)的过程,而一个大的卷积核就只有一次激活的过程。引入了更多的非线性变换,也就意味着模型的表达能力会更强,可以去拟合更高维的分布。

值得一提的是,VGGNet结构的C里面还用到了 1×1

1×1的卷积核。但是这里对这种卷积核的使用并不是像Inception里面拿来对通道进行整合,模拟升维和降维,这里并没有改变通道数,所以可以理解为是进一步的引入非线性。

VGGNet的出现让我们知道CNN的潜力无穷,并且越深的网络在分类问题上表现出来的性能越好,并不是越大的卷积核就越好,也不是越小的就越好,就VGGNet来看, 3×3

3×3 卷积核是最合理的。

四、GoogLeNet

GoogLeNet的核心思想是:将全连接,甚至卷积中的局部连接,全部替换为稀疏连接。这样既能保持网络结构的稀疏性,又能利用密集矩阵计算的高效性的方法。大量研究表明,可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,Inception应运而生。Inception结构如下所示:

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

这里的稀疏性是指卷积运算过程中,kernel的尺寸远远小于图片的尺寸,一个feature map仅与少数的输入单元相连接;而密集矩阵计算是指在Inception模块中的四个分支可以看作是较为稀疏的部分,但是拼接之后又成为一个大的密集矩阵。这种基本模块使用了3种不同的卷积核,那么提取到的应该是3种不同尺度的特征,既有较为宏观的特征又有较为微观的特征,增加了特征的多样性。池化层则保留较为原始的输入信息。在模块的输出端将提取到的各种特征在channel维度上进行拼接,得到多尺度的特征。

GoogleNet将上述模块进行堆积,整个GoogleNet的网络结构如下所示:

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

此外,还有升级版本的Inception,如下所示:

  • Inception v2 & v3

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

  • Inception-v4 &Inception-ResNet-v2

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet

机器不学习:计算机视觉系列(2)VGGNet & GoogLeNet