深度学习经典网络模型汇总2——VGGNet【对卷积池化后特征图变化有详细讲解】

1,196 阅读5分钟

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊专栏推荐:深度学习网络原理与实战

🍊近期目标:写好专栏的每一篇文章

🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

 

深度学习经典网络模型汇总2

    ​ 其中VGG-16和VGG-19较为出色(16、19指网络层数),下面以VGG-16为例,对VGG网络进行详细的介绍。首先我们可以先来看一下VGG-16的整体结构,如下图:可以看出VGG-16和AlexNet也有类似之处(网络层数变深),都是一系列卷积操作之后接上池化,最后在连接一些全连接层。

经典CNN网络:VGG16-输入和输出_呆呆珝的博客-程序员宝宝- 程序员宝宝

下面将用下图来逐一介绍每层之间的转化,一共16层,分别如下:

输入尺寸:224*224*3

卷积层:13个

池化层:5个

全连接层:3个 (这里已经包括了输出层,最后一个全连接层也可以说是输出层,最后的SotMax层只是做个分类)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-py1kqSVE-1643041241886)(https://media5.datahacker.rs/2019/02/vgg.png)]

  • 输入层:VGG-16的输入是224*224*3大小的彩色图片。
  • 第一个卷积层:对大小为224*224*3的图片进行卷积,卷积核大小为3*3,步长s=1,padding=1,卷积核个数为64,经卷积后得到大小为224*224*64的特征图。
  • 第二个卷积层:对大小为224*224*64的图片进行卷积,卷积核大小为3*3,步长s=1,padding=1,卷积核个数为64,经卷积后得到大小为224*224*64的特征图。【注意:上图中第一次、第二次卷积是放在一起的,因为第二次卷积相对于第一次卷积特征图的维度没有变化】
  • 第一个池化层:输入维度为224*224*64,池化核大小为2*2,步长s=2,padding=0,经池化核得到大小为112*112*64的特征图。
  • 第三个、第四个卷积层:输入维度为112*112*64的图片进行卷积,卷积核大小为3*3,步长s=1,padding=1,卷积核个数为128,经卷积后得到大小为112*112*128的特征图。【注意:和第一个、第二个卷积一样,第四个卷积后没有改变第三次卷积后特征图的维度,这里放在了一起进行书写】
  • 第二个池化层:输入维度为112*112*128,池化核大小为2*2,步长s=2,padding=0,经池化核得到大小为56*56*128的特征图。
  • 第五个、第六个、第七个卷积层:输入维度为56*56*128的图片进行卷积,卷积核大小为3*3,步长s=1,padding=1,卷积核个数为256,经卷积后得到大小为56*56*256的特征图。【同样的,第六次、第七次卷积没有改变第五次卷积后的特征图的大小,故将其放在了一起】
  • 第三个池化层:输入维度为56*56*256,池化核大小为2*2,步长s=2,padding=0,经池化核得到大小为28*28*256的特征图。
  • 第八个、第九个、第十个卷积层:输入维度为28*28*256的图片进行卷积,卷积核大小为3*3,步长s=1,padding=1,卷积核个数为512,经卷积后得到大小为28*28*512的特征图。
  • 第四个池化层:输入维度为28*28*512,池化核大小为2*2,步长s=2,padding=0,经池化核得到大小为14*14*512的特征图。
  • 第十一个、第十二个、第十三个卷积层:输入维度为14*14*512的图片进行卷积,卷积核大小为3*3,步长s=1,padding=1,卷积核个数为512,经卷积后得到大小为14*14*512的特征图。
  • 第五个池化层输入维度为14*14*512,池化核大小为2*2,步长s=2,padding=0,经池化核得到大小为7*7*512的特征图。
  • 第一个全连接层:输入的是7*7*512=25088个神经元、输出的是4096个神经元【可以看出这里的参数众多为:25088*4096=102760448个,一亿多,VGG的绝大多数参数都在这里】
  • 第二个全连接层:输入的是4096个神经元,输出的是4096个神经元。
  • 第三个全连接层:输入的是4096个神经元,输出的是1000个神经元。

VGG相较与AlexNet的改进如下:

  1. 主要的区别,更深,把网络层数加到了16-19层(不包括池化和softmax层),而AlexNet是8层结构。
  2. 将卷积层提升到卷积块的概念。卷积块有2~3个卷积层构成,使网络有更大感受野的同时能降低网络参数,同时多次使用ReLu激活函数有更多的线性变换,学习能力更强。
  3. 前面的Conv占用大量的memory,后面的FC占用大量的参数,最多的集中在第一个全连接层,使得最终参数多达138M个。
  4. 取消LRN,因为实际发现使用LRN,反而降低功效。