您当前的位置:首页 > 计算机 > 编程开发 > 人工智能

【深度学习】全面理解VGG16模型

时间:01-30来源:作者:点击数:

VGG16的结构层次

vgg16总共有16层,13个卷积层和3个全连接层,第一次经过64个卷积核的两次卷积后,采用一次pooling,第二次经过两次128个卷积核卷积后,再采用pooling,再重复两次三个512个卷积核卷积后,再pooling,最后经过三次全连接。附上,官方的vgg16网络结构图:

在这里插入图片描述

介绍结构图

首先需要看懂上图中的一些式子含义,如conv3-64,conv3-125

  1. conv3-64:是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128;
  2. input(224x224 RGB image):指的是输入图片大小为224244的彩色图像,通道为3,即224224*3;
  3. maxpool:是指最大池化,在vgg16中,pooling采用的是2*2的最大池化方法(如果不懂最大池化,下面有解释);
  4. FC-4096:指的是全连接层中有4096个节点,同样地,FC-1000为该层全连接层有1000个节点;
  5. padding:指的是对矩阵在外边填充n圈,padding=1即填充1圈,5X5大小的矩阵,填充一圈后变成7X7大小;
  6. 最后补充,vgg16每层卷积的滑动步长stride=1,padding=1,卷积核大小为333;

VGG16模型所需要的内存容量

此处引用大佬的一张图片来说明:

VGG16模型所需要的内存容量

上图,非常清晰地展示了每经过一次卷积或pooling后,所需要占用的内存,以及需要传送的权重值个数。

介绍卷积中的基本概念

什么是卷积?最直观的解释,直接上图(引用网上最火的图片)

卷积过程

image为需要进行卷积的图片,而convolved feature为卷积后得到的特征图;那么什么是卷积的过滤器也就是filter呢?图中黄色矩阵即为filter,image为5X5大小的一维图像,filter为3X3大小的一维矩阵;卷积过程是:filter与image对应位置相乘再相加之和,得到此时中心位置的值,填入第一行第一列,然后在移动一个格子(stride=1),继续与下一个位置卷积…最后得到是3X3X1的矩阵。

——这里需要注明:卷积后的结果矩阵维度=(image矩阵维数-filter矩阵维数+2xpad)/2+1,对应上图即宽width:3=(5-3+2x0)/1+1,高height:3=(5-3+2x0)/1+1;

如果还不懂,请接着看下图(为博主自己手写的卷积过程图)

卷积过程

在这里补充经过padding填充,那么卷积后图片大小不会发生改变,如5X5的图像大小,padding=1变成7X7,再用3X3的filter进行卷积,那么卷积后的宽高为(7-3+2x1)/1+1=7。

什么是maxpool?最大池化就是取filter对应区域内最大像素值替代该像素点值,其作用是降维。在这里,池化使用的滤波器都是2*2大小,因此池化后得到的图像大小为原来的1/2。下图为最大池化过程:

最大池化过程

介绍完基本概念之后,就开始进入到理解VGG16的网络模型了

1.从input到conv1:

由于224不太好计算,那么这里使用input图片大小为300x300x3举例:

图片:第一层

首先两个黄色的是卷积层,是VGG16网络结构十六层当中的第一层(Conv1_1)和第二层(Conv1_2),合称为Conv1。

那么,第一层怎么将300x300x3的矩阵变成一个300x300x64的呢??

在这里插入图片描述

假设RGB图像为蓝色框,橙色方块为3x3x3的卷积核(即filter),那么卷积后得到的图像应为298x298x1(此处没有进行padding,步长为1),但是经过填充一圈的矩阵,所以得到的结果为300x300x1,在这层中有64个卷积核,那么原来的300x300x1就变成了300x300x64。

2.从conv1到conv2之间的过渡:

在上面的结构图可以看到,第一层卷积后要经过pooling,才到第二层,那么:

第一层与第二层过渡

这层,pooling使用的filter是2x2x64,且步长为2,那么得到的矩阵维数刚好为原来的一半,第三个维度64不改变,因为那个指的是filter个数。

3.conv2到conv3:

我们从上面的过程中知道了,input为300x300x3的图片,经过第一层之后变成150x150x64,那么第二层里面有128个卷积核,可以推出经过第二层后得到是75x75x128。

4.进入conv3:

第三层

可知,第三层有256个卷积核,那么得到就是75x75x256

5.从conv3到conv4之间的过渡:

在这里插入图片描述

这里75是奇数,经过pad之后变成偶数76,那么就得到结果为38x38x256

其余的过程与上述一样,最终得到10x10x512。

6.最后到三层全连接FC层

在全连接层中的每一个节点都与上一层每个节点连接,把前一层的输出特征都综合起来。在VGG16中,第一个全连接层FC1有4096个节点,上一层pool之后得到是10x10x512=51200个节点,同样第二个全连接层FC2也有4096个节点,最后一个FC3有1000个节点。

结论

上述对VGG16进行了初步深入的理解,还有很多知识点没写,不足之处请多多原谅。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门