[PyTorch][chapter 37][经典卷积神经网络-2 ]

1: VGG

2:    GoogleNet


一 VGG

    1.1 简介

     VGGNet 是牛津大学计算机视觉组(Visual Geometry Group)和谷歌 DeepMind 一起研究出来的深度卷积神经网络,因而冠名为 VGG。VGG是一种被广泛使用的卷积神经网络结构,其在在2014年的 ImageNet 大规模视觉识别挑战(ILSVRC -2014)中获得了亚军,

   其主要创新点:(相对alexNet)

         1 是探索出了更小的卷积核 3*3, 1*1,降低了运算量,加快了模型训练速度

          深度学习 1x1卷积核的作用_1*1卷积核的作用_高祥xiang的博客-CSDN博客

         2  网络层次更深
 

1.2  网络结构

     VGGNet以下6种不同结构,我们以通常所说的VGG-16(即下图D列)为例,展示其结构示意图

[PyTorch][chapter 37][经典卷积神经网络-2 ]_第1张图片

1.3 参数说明

[PyTorch][chapter 37][经典卷积神经网络-2 ]_第2张图片

第1层输入层:

            输入为3@224*224 的图片(RGB 通道为3, 宽高等于224)

第2层vgg block层:

         输入为3@224*224,

        卷积核: 由4个kernel size为3×3×3的filter,stride = 1,padding=same

        输出:64@224*224的block层(指由conv构成的vgg-block)。

第3层Max-pooling层:

         输入为64@224*224

         池化:pool size=2,stride=2的减半池化

         输出: 64@112×112

第4层vgg block层:

         输入:64@112×112

         卷积核:经128个3×3×64的filter卷积,

         输出: 128@112×112。

第5层Max-pooling层:

          输入为128@112×112×128,

          池化:经pool size = 2,stride = 2减半池化后得到尺寸为

          输出:  128@56×56

第6层vgg block层:

           输入:   128@56×56

           卷积核:256个3×3×128的filter卷积

           输出:    256@56×56的block层。

第7层Max-pooling层:

             输入: 256@56×56×256

             池化:经pool size = 2,stride = 2减半池化

            输出: 256@28×28

第8层vgg block层:

              输入: 256@28×28

              卷积核: 512个3×3×256的filter卷积

              输出: 512@28×28

第9层Max-pooling层:

            输入:512@28×28,

           池化:经pool size = 2,stride = 2减半池化

           输出:512@14×14。

第10层vgg block层:

            输入: 512@14×14,

            卷积核: 512个3×3×512的filter卷积,

            输出        512@14×14。

第11层Max-pooling层:

              输入: 512@14×14,

              池化:pool size = 2,stride = 2减半池化后

              输出: 512@7×7×512的池化层。

该层后面还隐藏了flatten操作,通过展平得到7×7×512=25088个参数后与之后的全连接层相连。

后面 接上FC_1,FC_2,FC_3, softmax 


二  GoogleNet

GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失、梯度爆炸等。inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果 

 2.1 创新点

引入Inception结构,融合不同尺度的特征信息(heightwidth相同,在channel深度方面进行拼接)

使用1x1的卷积核进行降维以及映射处理

添加两个辅助分类器帮助训练

丢弃全连接层,使用平均池化层,大大减少模型参数

   [PyTorch][chapter 37][经典卷积神经网络-2 ]_第3张图片

2.2 1*1 卷积核

    [PyTorch][chapter 37][经典卷积神经网络-2 ]_第4张图片

          左图:

                  输入: channel 512

                 卷积核  64@5*5

                 输出:  64

                参数量: 819200

         右图:

                  输入: channel 512

                  卷积核1: 24@1*1

                   输出:   24

                   卷积核2: 64@5*5

                    输出:  64

                     参数量: 50688

                    降低了参数量

   

  

2.3 Inception结构

         Inception结构的核心思想是将输入特征矩阵进行卷积,使得多个输出特征矩阵的高和宽相同,再将多个输出特征矩阵在深度方向进行拼接。而如图b则是引入了1x1卷积核进行降维(为了减少训练所需参数)的Inception结构。

         最早版本的Inception 如下:

 

[PyTorch][chapter 37][经典卷积神经网络-2 ]_第5张图片

创新点

1 . 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;

2 串联改并联。 inception 结构之前的网络都是先 卷积 再 池化。

  inception 结构 卷积和池化同时计算

3  把池化和卷积放在一层里面,Inception里面也嵌入了pooling。
4  最后把不同的feature map ,做了concate

后面为了降低计算,又增加了在卷积核前面,又增加了1*1卷积核

[PyTorch][chapter 37][经典卷积神经网络-2 ]_第6张图片

 

       2.4 googLeNet——Inception V1结构

    googlenet的主要思想就是围绕这两个思路去做的:


(1).深度,层数更深,文章采用了22层,为了避免上述提到的梯度消失问题,
          googlenet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。


(2).宽度,增加了多种核
          1x1,3x3,5x5,还有直接max pooling的,
但是如果简单的将这些应用到feature map上的话,concat起来的feature map厚度将会很大,
所以在googlenet中为了避免这一现象提出的inception具有如下结构,在3x3前,5x5前,
max pooling后分别加上了1x1的卷积核起到了降低feature map厚度的作用。

[PyTorch][chapter 37][经典卷积神经网络-2 ]_第7张图片

请添加图片描述

2.5  辅助分类器

[PyTorch][chapter 37][经典卷积神经网络-2 ]_第8张图片

 

 

2.6    跟其它模型相比

     通过下图可以看到,VGG,GoogleNet 在20层左右,再增加网络层次

已经对loss 的降低无法再优化,甚至会导致过拟合.

    直到ResNets 出现。

[PyTorch][chapter 37][经典卷积神经网络-2 ]_第9张图片

 

 参考:

5.1 GoogLeNet网络详解_哔哩哔哩_bilibili

课时70 经典卷积网络 LeNet5,AlexNet, VGG, GoogLeNet-2_哔哩哔哩_bilibili

 GoogLeNet 网络简介_樱木之的博客-CSDN博客

转载-GoogleNet(Inception)详解 - 知乎

你可能感兴趣的:(pytorch,cnn,人工智能)