VGGNet

1、VGGNet网络结构(ICLR2015):

                   VGGNet_第1张图片

                  

  VGGNet探索了网络层的深度对网络层的影响。VGGNet参考AlexNet的结构,采用5段卷积+3个全连接层的结构,每段卷积内有1~4个卷积层,每个卷积层后面都一个激活函数。从A到E不断增加每段卷积中的卷积层数量,越往后的卷积段中卷积层的通道数越大:64->128->256->512->512。每段卷积尾部连接一个最大池化层,池化层采用的是2*2的核,步长为2。不同于AlexNet采用大卷积核,VGGNet中的卷积层都采用3*3的卷积核,步长为1。我们容易看到,2个3*3的卷积层的堆叠等价于一个5*5的卷积层,而3个3*3的卷积层的堆叠等价于一个7*7的卷积层。那么用多个小卷积核的网络层来替换一个大卷积核的网络层有什么效果呢?第一是使用了多个非线性变换函数,而不是一个,这使得决策函数更具有判别性;第二是多个小卷积核的网络层比单个大卷积核的网络层的参数更少,这可以看做是一种正则化的作用。VGG网络的参数比AlexNet参数的两倍还多,约14000万参数

    VGGNet总结出:1)AlexNet中提出的LRN层的不仅作用不大,而且还增加了内存消耗和计算时间;2)越深的网络性能越好,深层小卷积核的性能比浅层大卷积核的效果更好;3)1*1的卷积核也是有作用的,它相当于一个线性映射。

2、训练和测试过程

  输入图像大小为224*224*3,图像预处理只采用减去RGB均值,不做其它处理。除了图像裁剪方式不同,整个训练过程和AlexNet相似。batchsize设置为256,momentum设置为0.9,权重L2正则化的权重衰减为0.0005,对前两个全连接层使用Dropout,概率为0.5。训练的学习率初始化为0.01,当验证集的误差不再下降时学习率除以10进行衰减。学习率总共进行了三次衰减,74个epoch之后停止训练。网络权重的初始化是非常重要的,因为错误的初始化方式会导致学习失败,这是因为深层网络中梯度的不稳定性造成的。我们从上表中A网络开始训练,网络A由于非常浅,因此可以随机初始化进行训练。当训练更深的网络结构时,我们用训练好的A网络的权重来初始化前四个卷积层核后三个全连接层,而中间的网络层使用随机初始化。对于预训练模型初始化的网络层,我们不对其进行学习率衰减,对于随机初始化的网络层,初始化值为均值为0方差为0.01的高斯分布,偏置初始化为0。下面介绍图像的裁剪方式:

  假设S是原始图片等比例缩放后图像的最小边大小(S>=224),我们考虑设置S的两种方法。第一种是固定S这对应单尺寸训练。 在我们的实验中,我们评估了在两个固定尺度下训练的模型:S = 256(AlexNet采用的方法)和S =384。我们首先使用S = 256训练网络,为了加速S = 384网络的训练,使用预先训练的S = 256的权重对其进行初始化,并且我们使用较小的初始学习率0.001。第二个设置S的方法是多尺寸训练,其中通过从特定范围 [Smin,Smax](Smin = 256和Smax = 512)随机采样S来单独地重新调整每个训练图像。 由于图像中的物体可以具有不同的尺寸,因此在训练期间考虑这一点是有帮助的。 这也可以被看做通过尺度抖动来增强训练集,这样训练后单个模型就可以识别在各种尺度上的对象。  出于速度原因,我们通过微调预训练的S = 384的单尺度模型来训练多尺度模型。

  在测试时,给定训练好的网络和输入图像,按以下方式对其进行分类。首先,它被等比例地缩放到先前定义的最小图像边,表示为Q(我们也将其称为测试尺度)。我们注意到Q不一定等于训练S(每个S可以使用几个Q值可以提高性能)。然后,将网络应用于缩放后的测试图像上。即首先将全连接的层替换为卷积层(第一FC层替换为7×7的卷积层,最后两个FC层转换为1×1卷积层)。然后将得到的全卷积网应用于整个(未剪切到224*224的)图像。输入的结果类别得分图,其通道数等于类别的数量,并且得分图的空间分辨率取决于输入图像大小。最后,为了获得图像固定大小的类别得分向量,对类别得分图进行每个通道所有值求平均。我们还通过水平翻转图像来增加测试集;将原始图像和翻转图像的softmax概率值平均化以获得图像的最终分数。由于全卷积网络应用于整个图像,因此无需在测试时像AlexNet那样对图像进行多次裁剪(AlexNet从每张测试图像裁剪出10张224*224的图像),因为它需要对每张裁剪重新进行计算,效率较低。但与此同时,使用大量的裁剪确实可以提高准确度,因为与全卷积网相比,它可以对输入图像进行更精细的采样。而且,多裁剪评估也是对密集评估的补充,这是由于不同的卷积边界条件:当将CNNs应用于裁剪块时,卷积的特征图用零填充;而在密集评估的情况下,同一裁剪的填充是来从图像的相邻部分(这是因为卷积和空间池化的作用),这大大增加了整个网络的感受野,因此捕获了更多的上下文信息。虽然我们认为实际上多种裁剪的计算时间增加并不能证明准确性的潜在增益,但作为参考,我们还使用每个规模50个裁剪(5×5常规网格,2个翻转)评估我们的网络,总共150个3种尺度的裁剪。

3、实验结果

  实验是在ILSVRC2012上做的,评估标准采用的是top-1和top-5的错误率,测试时使用了三种评估方式如下:

 1) 单尺寸评估,Q取固定值。当S是固定值时,我们让Q=S;当S是属于[Smin,Smax]时,我们让Q=0.5(Smin+Smax)。

  VGGNet_第2张图片

  2)多尺寸评估,让Q取多个不同的值,然后跑多次分类最后计算平均概率值。当S是固定值时,Q={S-32,S,S+32};当S属于[Smin,Smax]时,Q={Smin,0.5(Smin+Smax),Smax}。

    VGGNet_第3张图片

 3) 多裁剪评估:

VGGNet_第4张图片      

 4) 卷积模型的融合评估:

VGGNet_第5张图片

4、参考

VGG官方代码:https://github.com/tensorflow/models/blob/master/research/slim/nets/vgg.py

VGG的预训练模型:https://github.com/tensorflow/models/tree/master/research/slim

论文:《Very Deep Convolutional Networks forLarge-Scale Image Recognition》

你可能感兴趣的:(Classification,Networks)