一、简介
论文全名:《Very Deep Convolutional Networks for Large-Scale Image Recognition》
2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发出了新的深度卷积神经网络:VGGNet,并取得了ILSVRC2014比赛分类项目的第二名(第一名是GoogLeNet,也是同年提出的)和定位项目的第一名。
VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG仍然被用来提取图像特征。
VGGNet可以看成是加深版本的AlexNet,都是由卷积层、全连接层两大部分构成。
二、VGGNet的特点
-
小卷积核和多卷积子层
-
卷积核的尺寸设置为(3x3)是因为这是捕获左/右,上/下,中心概念的最小尺寸。
-
-
使用小卷积核(3x3)和多卷积子层代替一个卷积核较大的卷积层的好处一是可以减少参数,二是相当于进行了更多的非线性映射,可以增加网络的拟合/表达能力。
-
相比于AlexNet中较大的卷积核尺寸(如11x11, 7x7),VGG通过降低卷积核的大小(3x3),增加卷积子层数来达到同样的性能(VGG:从1到4卷积子层,AlexNet:1子层)。
-
VGG的作者认为两个3x3的卷积堆叠获得的感受野大小,相当一个5x5的卷积;而3个3x3卷积的堆叠获取到的感受野相当于一个7x7的卷积。这样可以增加非线性映射,也能很好地减少参数(例如7x7的参数为49个,而3个3x3的参数为27)
-
-
小池化核
相比AlexNet的3x3的池化核,VGG全部采用2x2的池化核。 -
通道数多
VGG网络第一层的通道数为64,后面每层都进行了翻倍,最多到512个通道,通道数的增加,使得更多的信息可以被提取出来。 -
层数更深、特征图更宽
由于卷积核专注于扩大通道数、池化专注于缩小宽和高,使得模型架构上更深更宽的同时,控制了计算量的增加规模。 -
全连接转卷积(测试阶段)
在网络测试阶段将训练阶段的三个全连接替换为三个卷积,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽或高为的输入,这在测试阶段很重要。
例如7x7x512的层要跟4096个神经元的层做全连接,则替换为对7x7x512的层作通道数为4096、卷积核为1x1的卷积。
全连接转卷积的思路是参考了OverFeat的工作思路,如下图所示,对14x14的图像进行卷积操作,在得到5x5的feature map后的这一步,如果使用全连接,就会把它压平再全连接,这样就破坏了feature map的图像位置关系,直接转为一列特征。但是如果使用的是全卷积,最后会得到1x1xC的feature map,C是channel数,也是类别的大小。这个时候如果来了一张16x16的图像,经过全卷积后就会得到2x2xC的feature map,这个时候可以对这个2x2的4个值做一个取最大或平均,就会变成一个值了,以此类推,来了更大的图像,最后得到的feature map就是3x3xC,4x4xC,5x5xC的大小,输出的大小和输入的大小相关,但总是可以对这个输出map池化(取最大)来得到这个类别的值。 -
用简单模型初始化复杂模型
VGGNet在训练的时候先训级别A的简单模型,再复用A网络的权重来初始化后面的几个复杂模型,这样收敛速度更快 -
采用了Multi-Scale的方法来训练和预测
可以增加训练的数据量,防止模型过拟合,提升预测准确率。
三、 网络结构
在这篇论文中分别使用了A、A-LRN、B、C、D、E这6种网络结构进行测试,这6种网络结构相似,都是由5层卷积层、3层全连接层组成,其中区别在于每个卷积层的子层数量不同,从A至E依次增加(子层数量从1到4),总的网络深度从11层到19层(添加的层以粗体显示),表格中的卷积层参数表示为conv<感受野大小>-<通道数>,例如con3-128,表示使用3x3的卷积核,通道数为128。为了简洁起见,在表格中不显示ReLU激活功能。
VGG16处理过程如下:
1、输入224x224x3的图片,经64个3x3的卷积核作两次卷积+ReLU,卷积后的尺寸变为224x224x64
2、作max pooling(最大化池化),池化单元尺寸为2x2(效果为图像尺寸减半),池化后的尺寸变为112x112x64
3、经128个3x3的卷积核作两次卷积+ReLU,尺寸变为112x112x128
4、作2x2的max pooling池化,尺寸变为56x56x128
5、经256个3x3的卷积核作三次卷积+ReLU,尺寸变为56x56x256
6、作2x2的max pooling池化,尺寸变为28x28x256
7、经512个3x3的卷积核作三次卷积+ReLU,尺寸变为28x28x512
8、作2x2的max pooling池化,尺寸变为14x14x512
9、经512个3x3的卷积核作三次卷积+ReLU,尺寸变为14x14x512
10、作2x2的max pooling池化,尺寸变为7x7x512
11、与两层1x1x4096,一层1x1x1000进行全连接+ReLU(共三层)
12、通过softmax输出1000个预测结果
四、网络复杂度分析
A、A-LRN、B、C、D、E这6种网络结构的深度虽然从11层增加至19层,但参数量变化不大,这是由于基本上都是采用了小卷积核(3x3,只有9个参数),这6种结构的参数数量(百万级)并未发生太大变化,这是因为在网络中,参数主要集中在全连接层。
在内存使用方面最初的卷积层使用的内存最多;
在参数使用方面最后的卷积层参数数量最大;
五、模型评估方法
预初始化权重
对于深度网络来说,网络权值的初始化十分重要。为此,论文中首先训练一个浅层的网络结构A(网络结构见上图),训练这个浅层的网络时,随机初始化它的权重就足够得到比较好的结果。然后,当训练深层的网络时,前四层卷积层和最后的三个全连接层使用的是学习好的A网络的权重来进行初始化,而其余层则随机初始化。这也就是上一点提到的某些层的预初始化。(随机初始化权重时,使用的是0均值,方差0.01的正态分布;偏置则都初始化为0)。
训练图像尺寸选择
S是训练图像的最小边,训练尺度。
Q是测试图像的最小边,测试尺度。
对原始图片进行等比例缩放,使得S大于224,然后在图片上随机提取224x224窗口,进行训练。
单一尺度训练:固定 S 的大小,对应了单一尺度的训练,训练多个分类器。训练S=256和S=384两个分类器,其中S=384的分类器用S=256的权重进行初始化;
多尺度(Multi-scale)训练(尺度抖动):直接训练一个分类器,每次数据输入的时候,每张图片被重新缩放,缩放的短边S随机从[256,512]中选择一个,也可以认为通过尺度抖动(scale jittering)进行训练集增强。图像中的目标可能具有不同的大小,所以训练时认为这是有用的。
模型评估
VGG在test的时候提出了输入图像Q未必要等于S,并且之后更是率先提出了全卷积网络来实现dense评估。
-
单一尺度评估(single scale)
即测试图像大小Q固定,若S固定,则Q=S;若S抖动,则Q=0.5(Smin+Smax)从表中可以看出:
-
LRN层无性能增益(A-LRN) VGG作者通过网络A-LRN发现,AlexNet曾经用到的LRN层(local response normalization,局部响应归一化)并没有带来性能的提升,而且还浪费了内存计算损耗。 因此在其它组的网络中均没再出现LRN层。
-
随着深度增加,分类性能逐渐提高(A、B、C、D、E) 从11层的A到19层的E,网络深度增加对top1和top5的错误率下降很明显。
-
多个小卷积核比单个大卷积核性能好(B) VGG作者做了实验用B和自己一个不在实验组里的较浅网络比较,较浅网络用conv5x5来代替B的两个conv3x3,结果显示多个小卷积核比单个大卷积核效果要好。
-
训练时的尺度抖动(S∈[256;512])得到了与固定最小边(S=256或S=384)的图像训练相比更好的结果。这证实了通过尺度抖动进行的训练集增强确实有助于捕获多尺度图像统计。
-
-
多尺度评估(multi-scale)
即评估图像大小Q不固定,Q = {S{min}, 0.5(S{min} + S{max}), S{max}作者通过试验发现当使用固定值S训练时,Q的范围在[S−32,S,S+32]之间时,测试的结果与训练结果最接近,否则可能由于训练和测试尺度之间的巨大差异导致性能下降。 实验结果表明测试时的尺度抖动与在单一尺度上相同模型的评估相比性能更优,并且尺度抖动优于使用固定最小边S的训练。
-
多裁剪评估(multi-crop)
Dense(密集评估):即指全连接层替换为卷积层(第一FC层转换到7×7卷积层,最后两个FC层转换到1×1卷积层),最后得出一个预测的score map,再对结果求平均。
multi-crop(多裁剪评估):即对图像进行多样本的随机裁剪。对三个尺度上每个尺度进行50次裁剪(5x5大小的正常网格,并进行两次翻转)即总共150次裁剪的效果图,然后通过网络预测每一个样本的结构,最终对所有结果平均。
多剪裁表现要略好于密集评估,并且这两种方法是互补的,因为它们的结合优于它们中的每一种。
多裁剪图像评估是密集评估的补充:当将ConvNet应用于裁剪图像时,卷积特征图用零填充,而在密集评估的情况下,相同裁剪图像的填充自然会来自于图像的相邻部分(由于卷积和空间池化),这大大增加了整个网络的感受野,因此捕获了更多的上下文。 由于全卷积网络被应用在整个图像上,所以不需要在测试时对采样多个裁剪图像,因为它需要网络重新计算每个裁剪图像,这样效率较低。使用大量的裁剪图像可以提高准确度,因为与全卷积网络相比,它使输入图像的采样更精细。
六、参考资料
VGGNet相关:
https://my.oschina.net/u/876354/blog/1634322
https://blog.csdn.net/qq_31531635/article/details/71170861
https://www.cnblogs.com/TIMHY/p/10669978.html
OverFeat相关:
https://www.cnblogs.com/liaohuiqiang/p/9348276.html