总览
按照本人的学习理念,学习一个理论知识之前先总览一下它大概是个什么东西,话不多说先把VGG16经典概念图摆出来。
第一次看到这个图我有点头大,但是不用慌,至少我已经明白了,一张图片从左到右尺寸慢慢变小了,同时厚度却在慢慢变厚,可能它是一个类似压缩的过程。ok,现在可以开始深入了解了。
名词解释
卷积、卷积核
在解释卷积之前,我们需要了解一张图片的构成 ,我们现在见到的彩色图片有RGB三个色彩通道,分别对应Red、Green、Blue,每个通道(channels)我们可以理解为若干个像素组成的二维数组,每个格子的0-255的数值分别代表相应的像素值。假设有一张300*300的图片,就可以用(300*300*3)的数组来代表这张图片。
那么什么是卷积,就是用一个小矩阵——也就是卷积核(filter),在这样的矩阵里按特定的步长进行扫描,步长为1,则代表每次移动一格,如下图。
每次卷积核的停留都能得到一个数字,最终组成一个新的矩阵,假如原图像边长为5,那么新得到的矩阵边长就为3,相差的2是由卷积核尺寸决定的。上图中卷积核尺寸为3*3,如果卷积核是4*4,那么差为4-1=3,新通道边长为5-3=2。
卷积核中每个格子里的乘数,就称为卷积核权重参数,每次停留,都将原矩阵里相应位置的数值与参数相乘并相加,这样就得到新矩阵相应位置的数值。
如上图所示,在这个过程中其实原图有三个通道(矩阵),那么我们就需要在三个通道中都扫描一遍,并且将所得到的三个新矩阵再相加,得到最终的卷积特征图谱。具体参考(2条消息) 【CNN】理解卷积神经网络中的通道 channel_scxyz的博客-CSDN博客_卷积神经网络通道数
就可以清晰了解原理了。另外在使用卷积核时,卷积核的通道数(channels)必须和输入的图片通道数一致,也就是3。
padding
padding指的是让新得到的矩阵尺寸保持不变,在卷积前用padding指令将原矩阵周围围上一圈,于是得到7*7的矩阵,最终得到的就是5*5的新矩阵。
padding包括两种模式
SAME模式:输出尺寸等于输入尺寸除以步长向上取整,s是步长大小;
VALID模式:输入和输出尺寸关系如下
输出大小等于输入大小减去滤波器大小加上1,最后再除以步长(f为滤波器的大小,s是步长大小)。
卷积层
此时,我们再回到VGG16流程图,就可以理解第一步中变化的原理了。
从左到右我们使用了64个3*3的channels为3的卷积核(3*3*3的卷积核)来进行卷积,并且进行了padding处理,最终得到224*224的channels为64的新矩阵,此时我们称其为224*224*64的卷积层(Convolutional Layer),用conv3-64表示,3代表使用的是3*3的卷积核,64代表的是通道数。右边有两个卷积层,证明我们进行了两次卷积。
留坑
没想到这写起来这么麻烦,写着写着感觉反而变混乱了😅。其它的名词解释我就放下面备忘了。
全连接层
VGG16流程图中蓝色的即为全连接层(Fully connected Layer),用FC-XXXX表示。对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权。像下面的中间层就是全连接方式。
池化、池化层
卷积操作后我们提取了很多特征信息,相邻区域有相似特征信息,可以相互替代的,如果全部保留这些特征信息就会有信息冗余,增加了计算难度,这时候池化就相当于降维操作。池化是在一个小矩阵区域内,取该区域的最大值或平均值来代替该区域,该小矩阵的大小可以在搭建网络的时候自己设置。小矩阵也是从左上角扫到右下角。如下图
VGG16流程图中红色的即为池化层(Pool layer),用maxpool表示。
flatten
flatten 是指将多维的矩阵拉开,变成一维向量来表示,常用在从卷积层到全连接层的过渡。在流程图中代表的是蓝红色方块间的过渡。
权重层
卷积层和全连接层具有权重系数,因此也被称为权重层,在VGG16中总数目为13+3=16,这即是
VGG16中16的来源。而VGG来源于作者所在的牛津大学视觉几何组(Visual Geometry Group)的缩写。
权重参数
权重参数包括卷积核权重和全连接层权重。
- 对于第一层卷积,由于输入图的通道数是3,网络必须学习大小为3x3,通道数为3的的卷积核,这样的卷积核有64个,因此总共有(3x3x3)x64 = 1728个参数
- 计算全连接层的权重参数数目的方法为:前一层节点数×本层的节点数前一层节点数×本层的节点数。因此,全连接层的参数分别为:
-
- 7x7x512x4096 = 1027,645,444
- 4096x4096 = 16,781,321
- 4096x1000 = 4096000
可以看出VGG的参数数量很大,拟合能力很强,但是缺点就在于训练时间长、需要的存储容量大。
总结
理论的理解大概就到这里了,最后的三个全连接层和softmax之间的联系与转换流程还没有完全理解,我打算后续在实践当中边用边学。
从网上了解了很多VGG16的知识,以下是我作为参考的网站地址
卷积神经网络VGG16这么简单,为什么没人能说清? (sohu.com)
VGG16学习笔记 - Rogn - 博客园 (cnblogs.com)
(2条消息) TensorFlow中padding卷积的两种方式“SAME”和“VALID”_syyyy712的博客-CSDN博客
【CNN】理解卷积神经网络中的通道 channel_scxyz的博客-CSDN博客_卷积神经网络通道数
感谢网络的发达和善于分享的前辈,接下来开始进入实践部分,加油!