全面理解VGG16模型
VGG16的结构层次
介绍结构图
首先需要看懂上图中的一些式子含义,如conv3-64,conv3-125
- conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128;
- input(224×224 RGB image) :指的是输入图片大小为224244的彩色图像,通道为3,即224224*3;
- 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模型所需要的内存容量
介绍卷积中的基本概念
什么是卷积? 最直观的解释,直接上图(引用网上最火的图片)

image为需要进行卷积的图片,而convolved feature为卷积后得到的特征图;那么什么是卷积的过滤器也就是filter呢?图中黄色矩阵即为filter,image为5X5大小的一维图像,filter为3X3大小的一维矩阵;卷积过程是:filter与image对应位置相乘再相加之和,得到此时中心位置的值,填入第一行第一列,然后在移动一个格子(stride=1),继续与下一个位置卷积…最后得到是3X3X1的矩阵。
——这里需要注明:卷积后的结果矩阵维度=(image矩阵维数-filter矩阵维数+2xpad)/2+1,对应上图即宽width:3=(5-3+2×0)/1+1,高height:3=(5-3+2×0)/1+1;
如果还不懂,请接着看下图(为博主自己手写的卷积过程图)

在这里补充经过padding填充,那么卷积后图片大小不会发生改变,如5X5的图像大小,padding=1变成7X7,再用3X3的filter进行卷积,那么卷积后的宽高为(7-3+2×1)/1+1=7。
什么是maxpool? 最大池化就是取filter对应区域内最大像素值替代该像素点值,其作用是降维。在这里,池化使用的滤波器都是2*2大小,因此池化后得到的图像大小为原来的1/2。下图为最大池化过程:

介绍完基本概念之后,就开始进入到理解VGG16的网络模型了
1.从input到conv1:
那么,第一层怎么将300x300x3的矩阵变成一个300x300x64的呢??

假设RGB图像为蓝色框,橙色方块为3x3x3的卷积核(即filter),那么卷积后得到的图像应为298x298x1(此处没有进行padding,步长为1),但是经过填充一圈的矩阵,所以得到的结果为300x300x1,在这层中有64个卷积核,那么原来的300x300x1就变成了300x300x64。
2.从conv1到conv2之间的过渡:
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进行了初步深入的理解,还有很多知识点没写,不足之处请多多原谅。另外本博文也参考了其他文章,图片来源于网络。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218811.html原文链接:https://javaforall.net
