VGG卷积神经网络是牛津大学在2014年提出来的模型。当这个模型被提出时,由于它的简洁性和实用性,马上成为了当时最流行的卷积神经网络模型。它在图像分类和目标检测任务中都表现出非常好的结果。在2014年的ILSVRC比赛中,VGG 在Top-5中取得了92.3%的正确率。有VGG16和VGG19,模型的权重由ImageNet训练而来。

VGG结构

结构图介绍:
(1):conv3-64 :是指第三层卷积后维度变成64,同样地,conv3-128指的是第三层卷积后维度变成128;
(2):input(224x224 RGB image)指的是输入图片大小为224x244的彩色图像,通道为3,即224x224x3;
(3):maxpool 是指最大池化,在vgg16中,pooling采用的是2x2的最大池化方法;
(4):FC-4096 指的是全连接层中有4096个节点,同样地,FC-1000为该层全连接层有1000个节点;
(5):padding指的是对矩阵在外边填充n圈,padding=1即外边缘填充1圈,5x5大小的矩阵,填充一圈后变成7x7大小; 在进行卷积操作的过程中,处于中间位置的数值容易被进行多次的提取,但是边界数值的特征提取次数相对较少,为了能更好的把边界数值也利用上,所以给原始数据矩阵的四周都补上一层0,这就是padding操作。
(6):vgg16每层卷积的滑动步长stride=1,padding=1。

以VGG16为例来说明:

从上图可以看出VGG16由13个卷积层+3个全连接层=16层构成,过程为:
(1) 输入:输入224 * 224 * 3的图片。
(2) Conv1_1+conv1_2+pool1:经过64个卷积核的两次卷积后,采用一次max pooling。经过第一次卷积后,有(3 * 3 * 3) * 64=1728个训练参数;第二次卷积后,有(3 * 3 * 64) * 64=36864个训练参数,大小变为112 * 112 * 64.
(3) Conv2_1+conv2_2+pool2:经过两次128个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 128) * 128=147456个训练参数,大小变为56 * 56 * 128.
(4) Conv3_1+conv3_2+con3_3+pool3: 经过三次256个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 256) * 256=589824个训练参数,大小变为28 * 28 * 256.
(5) Conv4_1+conv4_2+con4_3+pool4: 经过三次512个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 512) * 512=2359296个训练参数,大小变为14 * 14 * 512.
(6) Conv5_1+conv5_2+con5_3+pool5: 再经过三次512个的卷积核卷积之后,采用一次max pooling,有(3 * 3 * 512) * 512=2359296个训练参数,大小变为7 * 7 * 512.
(7) Fc6+Fc7+Fc8:经过三次全连接,最终得到1000维的向量。

VGG16模型所需要的内存容量

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

conv的基本概念

image为需要进行卷积的图片,而convolved feature为卷积后得到的特征图;图中黄色矩阵即为卷积核filter,image为5x5大小的一维图像,filter为3x3大小的一维矩阵;卷积过程是:filter与image对应位置相乘再相加之和,得到此时中心位置的值,填入第一行第一列,然后在移动一个格子(stride=1),继续与下一个位置卷积…,最后得到是3x3x1的矩阵。
卷积神经网络的卷积核大小、个数,卷积层数如何确定呢?卷积核的大小一般选择3x3和5x5。一般取(3,3)的小矩阵,训练效果会更好。卷积核里面每个值就是我们需要寻找(训练)的神经元参数(权重),开始会随机有个初始值,当训练网络时,网络会通过后向传播不断更新这些参数值,直到寻找到最佳的参数值。对于如何知道是“最佳”?则是通过loss损失函数去评估。
卷积核的步长是指卷积核每次移动几个格子,有横行和纵向两个方向。
卷积操作相当于特征提取,卷积核相当于一个过滤器,提取我们需要的特征。如上图,左边小红色框是卷积核,从左上角扫到右下角,最终得到右边的特征图谱。

池化Pooling
池化操作相当于降维操作,有最大池化和平均池化,其中最大池化(max pooling)最为常用。经过卷积操作后我们提取到的特征信息,相邻区域会有相似特征信息,这是可以相互替代的,如果全部保留这些特征信息会存在信息冗余,增加计算难度。
最大池化就是取filter对应区域内最大像素值替代该像素点值,其作用是降维。在这里,池化使用的滤波器都是2*2大小,因此池化后得到的图像大小为原来的1/2。下图为最大池化过程:
通过池化层会不断地减小数据的空间大小,参数的数量和计算量会有相应的下降,这在一定程度上能够控制过拟合。


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

softmax层
softmax层一般连接的是全连接层和loss层,现在的CNN都是end-to-end的,最后通过全连接层送入softmax来进行分类。

Flatten 是指将多维的矩阵拉开,变成一维向量来表示。
Dropout是指在网络的训练过程中,按照一定的概率将网络中的神经元丢弃,这样有效防止过拟合。
VGG采用的激活函数是ReLu. ReLu是非常接近线性函数的非线性函数。

内容中包含的图片若涉及版权问题,请及时与我们联系删除