VGG16网络结构详解


VGG16的结构层次
vgg16总共有16层,13个卷积层和3个全连接层,第一次经过64个卷积核的两次卷积后,采用一次pooling,第二次经过两次128个卷积核卷积后,再采用pooling,再重复两次三个512个卷积核卷积后,再pooling,最后经过三次全连接。附上,官方的vgg16网络结构图:
在这里插入图片描述
介绍结构图
首先需要看懂上图中的一些式子含义,如conv3-64,conv3-125
conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128;
input(224x224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为3,即2242243;
maxpool :是指最大池化,在vgg16中,pooling采用的是2
2的最大池化方法(如果不懂最大池化,下面有解释);
FC-4096 :指的是全连接层中有4096个节点,同样地,FC-1000为该层全连接层有1000个节点;
padding:指的是对矩阵在外边填充n圈,padding=1即填充1圈,5X5大小的矩阵,填充一圈后变成7X7大小;
最后补充,vgg16每层卷积的滑动步长stride=1,padding=1,卷积核大小为333;
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进行了初步深入的理解,还有很多知识点没写,不足之处请多多原谅。另外本博文也参考了其他文章,图片来源于网络。

参考文章:

[1]: (https://blog.csdn.net/gbyy42299/article/details/78969261]
[2]: [http://mini.eastday.com/mobile/180329080222874.html#]
[3]: https://www.jianshu.com/p/a4b8b0fc7d21

原文链接:https://blog.csdn.net/Resume_f/article/details/92800997