Very Deep Convolutional Networks for Large-Scale Image Recognition-VGGNet解读

作者:HYH

日期:2020-9-10

论文期刊:ICLR2015

标签:VGG

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

一、简介:

  1. 2014年,牛津大学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员一起研发出了一种新的深度卷积神经网络:VGGNet,并取得了ILSVRC2014比赛分类项目的第二名(第一名是GoogLeNet,也是同年提出的)。

  2. VGGNet的产生主要源于2012年AlexNet将深度学习的方法应用到ImageNet的图像分类比赛中并取得了惊人的效果后,大家都竞相效仿并在此基础上做了大量尝试和改进,例如,在卷积层使用更小的卷积核以及更小的步长(Zeiler&Fergus,2013; Sermanet,2014),又或者在整个图像和多个尺度上密集地训练和测试网络(Sermanet,2014:Howard,2014)。但这些优化中作者觉得都没有谈到网络深度的工作,因此受到启发,不仅将上面的两种方法应用到自己的网络设计和训练测试阶段,同时想再试试深度对结果的影响。

  3. 因此VGGNet主要探索了卷积神经网络的深度与其性能之间的关系,并成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降。所以到目前为止,VGG仍然被用来提取图像特征。换句话说,VGGNet可以看成是加深版本的AlexNet,都是由卷积层、全连接层两大部分构成。

  4. 他们最好的网络包含了13个卷积层和3个全连接层(VGG16),网络的结构非常一致,从头到尾全部使用的是3x3的卷积核和2x2的池化核(Alexnet中使用的是3x3池化核)。他们的预训练模型是可以在网络上获得并在Caffe中使用。 VGGNet不好的一点是它耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。作者后来发现这些全连接层即使被去除,对于性能也没有什么影响,而且还可以使输入的图片尺寸不受限制,因此在后面的测试阶段将这三个全连接层转化成了卷积层使用。因此目前使用比较多的深层网络结构主要有ResNet(152-1000层),GooleNet(22层),VGGNet(19层)。而后面大多数模型都是基于这几个模型进行改进,采用新的优化算法,多模型融合等。

主要贡献: 最重要的就是讨论了在大规模图像识别中,神经网络深度对于其准确率的影响。

二、VGG的网络配置

因为论文主要讨论的是网络结构的深度,所以一开始先给出了多种不同深度的网络,分别称为为A-E网络,从11-19层,其中D和E被称为VGG16和VGG19。各网络结构配置如下:
在这里插入图片描述
在这篇论文中分别使用了A、A-LRN、B、C、D、E这6种网络结构进行测试,这6种网络结构相似,都是由5层卷积层、3层全连接层组成,其中区别在于每个卷积层的子层数量不同,从A至E依次增加(子层数量从1到4),总的网络深度从11层到19层(添加的层以粗体显示),表格中的卷积层参数表示为“conv⟨感受野大小⟩-通道数⟩”,例如con3-128,表示使用3x3的卷积核,通道数为128。为了简洁起见,在表格中不显示ReLU激活功能。

基本了解了VGG的网络配置之后,可以提炼出一些VGG的特点:

1.小卷积核与多卷积子层
一般说到网络深度,就不得不提到卷积,虽然AlexNet有使用11x11和5x5的大卷积核,但大多数还是3x3卷积核,对于使用stride=4的11x11的大卷积核,原因在于一开始原图的尺寸很大,最为原始的纹理、颜色等细节的特征变化用大卷积核尽早捕捉到,后面到了更深的层数害怕会丢失掉较大局部范围内的特征相关性,就转为使用更多3x3的小卷积核(和一个5x5卷积)去捕捉细节变化(GoogleNet后面也有应用)。

而VGG虽然是在模仿AlexNet的网络结构,但它没有采用AlexNet中比较大的卷积核尺寸(如7x7),而是通过降低卷积核的大小(3x3),增加卷积层的子层数来达到同样的性能,因此自始自终使用3x3的小卷积核是VGG的一个重要特点。

问题:为什么要用多个3x3的卷积核代替5x5卷积核甚至是7x7卷积核呢?
这里作者主要说了两个原因:一是降低计算量,他认为两个3x3的卷积堆叠获得的感受野大小,相当一个5x5的卷积;而3个3x3卷积的堆叠获取到的感受野相当于一个7x7的卷积。以7x7为例,参数数量就从7x7=49降到了3x(3x3)=27.二是因为卷积后都伴有RELU激活函数,因此更多的卷积核/层就意味着可以进行更多的非线性映射,可以增加网络的拟合/表达能力,使决策函数(softmax)更具有判别力。
在这里插入图片描述
2.特征图的通道数随着层数的加深而增加
首先来看一下VGG16的立体网络结构图:
在这里插入图片描述

VGG16处理过程如下:
1、输入224x224x3的图片,经64个3x3的卷积核做两次卷积+ReLU,卷积后的尺寸变为224x224x64。
2、作max pooling(最大池化),池化单元尺寸为2x2,步长为2(效果为图像尺寸减半),池化后的尺寸变为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个预测结果。

问题:这么做的原因是什么呢?
这里引用崔同学在上次汇报中的解释“因为在高层是想要提取局部特征,所以一般来说,从输入到输出,特征图像会越来越小,同时在这个越来越小的过程中会当然会丢失掉一些重要的信息,如果减小的太快或者是最终特征图像太小就难免造成表征瓶颈。”
所以VGG就采用每次池化后特征图的厚度增加1倍的策略来防止信息丢失的太快。换句话说,特征信息从一开始输入的224x224x3被变换到7x7x512,从原本较为local的信息逐渐分摊到不同channel上,随着每次的卷积和池化操作打散到channel层级上。

3.全连接转卷积(测试阶段)
问题1:全连接层为什么需要固定输入图像的尺寸?
要回答这个问题,首先看一下全连接层是如何工作的:在这里插入图片描述
由上图所示,我们假定要将一个221的feature map通过全连接层输出一个4维向量,图中的矩阵X便是这221的feature map,向量Y就是输出的4维向量,全连接层的做法便是将feature map由矩阵形式展开成向量形式,该向量便是全连接层的输入。在这里插入图片描述
如上图所示,全连接层的运算就是矩阵运算,输出向量Y就是由权重矩阵W乘展开成向量的X’,我们可以看到,对于每一个yi,都是由权重矩阵的第i行与X’对应元素相乘,这个相乘的过程和用权重矩阵的第i行所构成的卷积核去卷积X会产生一样的结果。
在这里插入图片描述
那么将221的feature map通过全连接层得到4维向量就相当于以全连接层中的权重矩阵中的四行向量所组成的4个卷积核去卷积221的feature map,此时的卷积核的大小就和feature map的大小一样,因此称之为全卷积,全卷积最终得到114的矩阵,这和4维向量效果是一样的。

个人理解:通过上面的过程基本就可以知道,当我们使用全连接层的时候,参数是一开始就根据输入图的尺寸设置好的,参照图2,例如最后一层输出的特征图尺寸是22(也就是2x2的矩阵),把它转换为向量就是41,同时它作为下一个全连接层的输入,而全连接层的输出是一个4维向量(也就是4x1的矩阵),很明显,输入尺寸确定了,输出尺寸也确定了,那这参数矩阵W也就确定了(只能是44的参数矩阵),而这参数矩阵确定了,那输入的尺寸如果发生变化,比如变成33,打开就是91的矩阵,明显就不可能与44的参数矩阵相乘了,这就是全连接层需要固定图像尺寸的原因。

**简单来说就是,全连接层的权重矩阵是固定的,每一次feature map的输入过来必须都得是一定的大小(即与权重矩阵正好可以相乘的大小),所以网络最开始的输入图像尺寸必须固定,才能保证传送到全连接层的feature map的大小跟全连接层的权重矩阵匹配。
**

问题2、全连接层如何转换为卷积层
在这里插入图片描述
看上图感觉很容易明白,白色的长方体为最后一层输出的特征图77512,原本全连接层的输出是40961,那么如果用4096组77512的卷积核对其进行卷积,就会得到40961*1的输出向量,这和全连接层的输出是等价的。

问题三:全连接层转换为卷积层为什么就可以处理任意尺寸的图片输入呢?
在这里插入图片描述
看这张图就基本可以知道答案,上下分别是不同尺寸的图输入(14x14和16x16),很明显,当这张图经过最后一层卷积和池化之后分别变成了5x5和6x6的特征图,这在全连接层显然是不可能同时往下进行的,要不就是全输入14x14,或者全部输入16x16,因为上面问题一说到的参数矩阵是固定的。而在这里,当全连接层转换为卷积层时,显然就没有这个问题,当不同尺寸的特征图经过三个卷积层后,虽然输出的尺寸不一样,但是并不影响它输入到softmax层进行分类。

注:至于为什么用4096这个参数的问题,基本的回答都是作者为了契合自己的模型而设置的参数,没有特别的表征意义。

这也是VGG的一个特点,在网络测试阶段将训练阶段的三个全连接层替换为三个卷积层,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽和高的输入。

如上面的VGG网络结构图所示,输入图像是224x224x3,如果后面三个层都是全连接,那么在测试阶段就只能将测试的图像全部都缩放大小到224x224x3,才能符合后面全连接层的输入数量要求,这样就不便于测试工作的开展。 而“全连接转卷积”,替换过程如下:
在这里插入图片描述
例如7x7x512的层要跟4096个神经元的层做全连接,则替换为对7x7x512的层作通道数为4096、卷积核为1x1的卷积

VGG模型训练

1.预初始化权重

对于深度网络来说,网络权值的初始化十分重要。为此,论文中首先训练一个浅层的网络结构A(网络结构见上图),训练这个浅层的网络时,随机初始化它的权重就足够得到比较好的结果。然后,当训练深层的网络时,前四层卷积层和最后的三个全连接层使用的是学习好的A网络的权重来进行初始化,而其余层则随机初始化。

2、训练图像尺寸选择

S是训练图像的最小边,训练尺度。
Q是测试图像的最小边,测试尺度。

对原始图片进行等比例缩放,使得S大于224,然后在图片上随机提取224x224窗口,进行训练(注意只有S需要缩放,Q是不需要的,因为测试阶段是将全连接层转换为了卷积层,可以处理任意分辨率的图像)。

在这里,作者提供了两种方法:
(1)单尺度训练,直接按照固定的S(S是图片尺寸,S=256和S=384)进行缩放(其中S=384网络的权重来自于预训练的S=256网络以加速训练),这个是AlexNet和ZFNet里面用过的。
(2)多尺度训练,每个训练图片被独立的随机缩放,S在[Smin,Smax]范围内,这里的Smin=256,Smax=512。原始训练集上每张图片中目标大小是不确定的,因此采用这一方法是有效的,其实这也可以看做是通过抖动缩放来增加训练集。出于速度考虑,先预训练S=384的单尺度模型,再微调多尺度模型。

测试与评估

VGG在测试的时候提出了输入图像Q未必要等于S,并且之后更是率先提出了全卷积网络来实现dense评估。

1、单尺度评估

即测试图像大小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,结果显示这样做比原来的top-1错误率提升了7%,证明了多个小卷积核比单个大卷积核效果要好。
• 训练时的尺度抖动(S∈[256;512])得到了与固定最小边(S=256或S=384)的图像训练相比更好的结果。这证实了通过尺度抖动进行的训练集增强确实有助于捕获多尺度图像统计。

2、多尺度评估

即评估图像大小Q不固定,Q = {S{min}, 0.5(S{min} + S{max}), S{max}

在这里插入图片描述
作者通过试验发现当使用固定值S训练时,Q的范围在[S−32,S,S+32]之间时,测试的结果与训练结果最接近,否则可能由于训练和测试尺度之间的巨大差异导致性能下降。 实验结果表明测试时的尺度抖动与在单一尺度上相同模型的评估相比性能更优,并且尺度抖动优于使用固定最小边S的训练。

3、多裁剪评估(Multi-crop)和密集评估(Dense)方法

Dense(密集评估):即指全连接层替换为卷积层(第一FC层转换到7×7卷积层,最后两个FC层转换到1×1卷积层),最后得出一个预测的score map,再对结果求平均。

Multi-crop(多裁剪评估):即对图像进行多样本的随机裁剪。对三个尺度上每个尺度进行50次裁剪(5x5大小的正常网格,并进行两次翻转)即总共150次裁剪的效果图,然后通过网络预测每一个样本的结构,最终对所有结果平均。

在这里插入图片描述
从论文中给出的结果来看,多裁剪评估表现要略好于密集评估,并且这两种方法是互补的,因为它们的结合优于它们中的每一种。

多裁剪图像评估是密集评估的补充:当将ConvNet应用于裁剪图像时,卷积特征图用零填充,而在密集评估的情况下,相同裁剪图像的填充自然会来自于图像的相邻部分(由于卷积和空间池化),这大大增加了整个网络的感受野,因此捕获了更多的上下文。

4、卷积网络融合

这一部分就是将前面说到的方法进行一个融合并评估最终效果,从下图可以看到VGG团队在比赛时提交的7模型组合的测试误差最低是7.3%(GoogleNet是6.7%).

在提交之后,他们考虑了只有两个表现最好的多尺度模型(配置D和E)的组合,它使用密集评估将测试误差降低到7.0%,使用密集评估和多裁剪图像评估将测试误差降低到6.8%。
在这里插入图片描述

与当时最新的技术比较:

在这里插入图片描述
作者团队在赛后对模型和其组合进行改良后,可以看到,效果与当时获得第一名的GoogleNet非常接近,甚至在单模型的网络性能方面,已经超过了GoogleNet.

总结

最后进行一个简单的总结,主要分为以下几个方面:

1.解决了什么
提高了大规模图像分类的精度。

2.使用的方法
搭建更深的卷积神经网络:使用3x3卷积核,模型达到16-19层,16层的被称为VGG16,19层的被称为VGG19。 使用Single-Scale和Multi-Scale训练和评估模型。

3.实验结果
该模型获得ImageNet Challenge 2014的图像localization第一名,图像分类第二名,并且在赛后做了进一步改进,效果直逼GoogleNet。

4.待解决的问题
该模型还不够深,只达到19层便饱和了,网络参数过多,达到1.3亿参数以上。

补充:
通过增加深度能有效地提升性能。
最佳模型:VGG16,从头到尾只有3x3卷积和2x2池化,简洁优美。
卷积可代替全连接,可适应各种尺寸的图片。

注:若有侵权请联系我们

猜你喜欢

转载自blog.csdn.net/cyl_csdn_1/article/details/108982505