VGG论文笔记及代码

VGG论文笔记及代码

VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION

牛津大学视觉组(VGG)官方网站:https://www.robots.ox.ac.uk/~vgg/

Abstract

在这项工作中,我们研究了在大规模图像识别环境中卷积网络深度对其准确性的影响。我们的主要贡献是使用具有非常小(3×3)卷积滤波器的架构对深度不断增加的网络进行了彻底评估,这表明通过将深度推至16–19权重层,可以实现对现有技术配置的显著改进。这些发现是我们2014年ImageNet挑战提交的基础,我们的团队在本地化和分类方面分别获得了第一名和第二名。我们还表明,我们的表示可以很好地推广到其他数据集,在这些数据集中,它们可以获得最先进的结果。我们已经公开了两个性能最好的ConvNet模型,以促进在计算机视觉中使用深度视觉表示的进一步研究。

创新点:多层3x3小卷积核取代大卷积核我,网络深度至19层,宽度逐层加深,VGG-16、VGG19迁移学习基模型模型简介、常规经典CNN结构得极致,但参数量较大,几种在FC1层,略显臃肿

1、Introduction

卷积网络(ConvNet)最近在大规模图像和视频识别方面取得了巨大成功(Krizhevsky等人,2012年;Zeiler&Fergus,2013年;Sermanet al.,2014年;Simonyan&Zisserman,2014年)(Overfeat),这是由于大型公共图像存储库,如ImageNet(Deng等人,2009年)和高性能计算系统,例如GPU或大规模分布式集群(Tensorflow)(Dean等人,2012年)。特别是,ImageNet大规模视觉识别挑战赛(ILSVRC)(Russakovsky et al.,2014)在深度视觉识别体系结构的发展中发挥了重要作用,它是几代大型图像分类系统的试验台,从高维浅特征编码(Perronnin等人,2010年)(ILSVRC-2011的获胜者)到深度转换(Krizhevsky等人,2012年)(ILSVRC-2012的获胜者)。

随着ConvNet越来越成为计算机视觉领域的一种潮流(越来越有用),为了获得更高的精确度,人们进行了许多尝试来改进Krizhevsky等人(AlexNet)(2012)的原始架构。例如,提交给ILSVRC2013(ZFNet)(Zeiler&Fergus,2013;Sermanet al.,2014)的表现最好的文件利用了较小的接受窗口大小和第一卷积层的较小步幅处理更小的细节)。另一系列改进涉及在整个图像和多个尺度上密集地训练和测试网络(Sermanet al.,2014;Howard,2014)(修改输入网络的数据)。在本文中,我们将讨论ConvNet架构设计的另一个重要方面——深度。为此,我们确定了体系结构的其他参数,并通过添加更多卷积层来稳步增加网络的深度,这是可行的,因为在所有层中使用非常小的(3×3)卷积滤波器。

因此,我们提出了更精确的ConvNet体系结构,不仅在ILSVRC分类和定位任务上达到了最先进的精度,而且还适用于其他图像识别数据集,即使作为相对简单管道的一部分使用(仅作为特征提取器),它们也能获得优异的性能(例如,由线性支持向量机分类的深度特征,无需微调)。为了便于进一步研究,我们发布了两个性能最好的模型(VGG16和VGG19)。

论文的其余部分组织如下。在第二节中我们描述了我们的ConvNet配置。图像分类训练和评估的细节将在第三节中介绍,并且在第四节中的ILSVRC分类任务中比较配置。第五节总结全文。为了完整性,我们还在附录A中描述和评估了我们的ILSVRC-2014object localisation system特征提取后在下游任务中的表现),并在附录B中讨论了将非常深层的特征推广到其他数据集的问题(泛化性测试)。最后,附录C包含了主要的论文修订列表。

2、ConvNet Configurations

为了在公平的环境下衡量ConvNet深度增加带来的改善,我们所有的ConvNet层配置都是根据Ciresan等人(2011)的启发,使用相同的原则设计的;Krizhevsky等人(2012年)。在本节中,我们首先描述ConvNet配置的一般布局(第2.1节),然后详细介绍评估中使用的具体配置(第2.2节)。然后讨论我们的设计选择,并与第2.3节中的现有技术进行比较(sota比较)。

2.1、Architecture

在训练期间,ConvNets的输入是一个固定大小的224×224 RGB图像。我们所做的唯一预处理是从每个像素中减去在训练集上计算的平均RGB值。图像通过一堆卷积(conv.)层,在那里我们使用具有非常小的感受野的滤波器:3×3(这是捕捉左/右、上/下、中心概念的最小尺寸)。在其中一种配置中,我们还使用了1×1卷积滤波器,可以将其视为输入通道的线性变换(其次是非线性)。卷积步长固定为1个像素;conv.layer输入的空间填充是在卷积后保持空间分辨率,即3×3 conv.layer的填充为1像素。空间池由五个最大池层执行,它们位于一些conv.层之后(并非所有conv.层后面都是最大池)。最大池在2×2像素窗口上执行,步幅为2

一堆卷积层(在不同的体系结构中具有不同的深度)之后是三个完全连接的(FC)层:前两个层各有4096个通道,第三个层执行1000路ILSVRC分类,因此包含1000个通道(每类一个)(1000分类对应ImageNet-1K)。最后一层是softmax层。在所有网络中,完全连接的层的配置都是相同的。

所有隐藏层都配备了校正(ReLU(Krizhevsky等人,2012))非线性。我们注意到,我们的网络(除一个网络外)均不包含局部响应归一化AlexNet使用的中间层归一化方法BN归一化当时还没提出)(Krizhevsky等人,2012年):如第4节所示。这种标准化不会提高ILSVRC数据集的性能,但会增加内存消耗和计算时间。适用时,LRN层的参数为(Krizhevsky等人,2012年)。 (LRN )

2.2、Configurations

本文评估的ConvNet配置如表1所示,每列一个。在下文中,我们将按网络名称**(A-E)代码中A-E有表现出来,可以对比代码看结构)来指代网络。所有配置均遵循第2.1节中介绍的通用设计。仅在深度上有所不同:从网络A中的11个权重层(8个conv层和3个FC层)到网络E中的19个权重层(16个转换层和3个FC层)**。conv.layers的宽度(通道的数量/feature map数量)非常小,从第一层的64开始,然后在每个最大池层之后增加2倍,直到达到512。

image-20220419210256048

在表2中,我们报告了每个配置的参数数量。尽管网的深度很大,但我们网中的weights数量并不大于较浅网中的weights数量,该网具有较大的转换层宽度和感受野(2014年为144M weights(Sermanet al.,2014))。 (随着网络深度加大,参数量并没有太大改变,这里是和GoogLeNet进行参数量比较,但是GoogLeNet的实际参数量只有5.9M,VGG的E模型才是144M

image-20220419171633021

2.3、Discussion

我们的ConvNet配置与ILSVRC-2012(Krizhevsky et al.,2012)和ILSVRC-2013竞赛(Zeiler&Fergus,2013;Sermanet al.,2014)中表现最好的参赛作品中使用的配置截然不同。我们在整个网络中使用非常小的3×3感受野,而不是在第一个conv.层中使用相对较大的感受野(例如,步幅为4英寸的11×11感受野(Krizhevsky et al.,2012),或步幅为2英寸的7×7感受野(Zeiler&Fergus,2013;Sermanet al.,2014)),这些感受野与每个像素的输入(步幅为1)相卷积。很容易看出,由两个3×3 conv.层(中间没有空间池)组成的堆栈具有5×5的有效感受野;三个这些层(3x3)具有7×7的有效感受野。那么,我们通过使用三个3×3转换层而不是一个7×7层的堆栈获得了什么呢?首先,我们加入了三个非线性校正层,而不是单个校正层,这使得决策函数更具区分性。第二,我们减少了参数的数量:假设三层3×3卷积堆栈的输入和输出都有C通道,堆栈的参数化为 3 ( 3 2 C 2 ) = 27 C 2 3(3^{2}C^{2})=27C^{2} 3(32C2)=27C2 weights;同时,单个7×7转换层需要 7 2 C 2 = 49 C 2 7^{2}C^{2}=49C^{2} 72C2=49C2参数,即多81%。这可以被视为对7×7 conv.滤波器施加正则化,迫使它们通过3×3滤波器进行分解(分解大卷积并注入非线性,后面出现的轻量化网络证明了这一点)。

合并1×1 conv.层(参数C,表1)是一种在不影响conv.层感受野的情况下增加决策函数非线性的方法。即使在我们的例子中,1×1卷积本质上是相同维度空间上的线性投影VGG同一个block中的输入和输出通道的数量相同),校正函数也会引入额外的非线性。(1x1卷积本质上相当于线性变化+1次非线性激活)应该注意的是,1×1 conv.层最近被用于Lin等人(2014)的“Network in Network”架构中(很重要的论文,卷积方面很多网络结构的减少参数量方法都参考该论文)。 论文原文链接:https://arxiv.org/abs/1312.4400

Ciresan等人(2011年)以前曾使用过小尺寸卷积滤波器,但它们的网络深度明显低于我们的,而且它们没有在大规模ILSVRC数据集上进行评估。古德费罗等人(2014年)将deep ConvNets(11个权重层)应用于街道号码识别任务,并表明深度的增加会带来更好的性能。GoogLeNet(Szegedy et al.,2014)是ILSVRC-2014分类任务中表现最好的一个条目,它是独立于我们的工作开发的,但与我们的工作类似,它基于非常深刻的ConvNets(22 weight layers) 以及小型卷积滤波器(除了3×3,它们还使用1×1和5×5卷积)。然而,它们的网络拓扑比我们的更复杂,在第一层中,特征地图的空间分辨率会更大程度地降低,以减少计算量。如第4.5节所示,我们的模型在单网络分类精度方面优于Szegedy等人(2014)。

3、Classification framework

在上一节中,我们介绍了网络配置的详细信息。在本节中,我们将详细介绍训练和评估。

3.1、Training

ConvNet训练程序通常遵循Krizhevsky等人(2012年)的规定(基本遵循ALexNet网络的规定,加深网络)(除了从多尺度训练图像中对输入crops进行采样,如下文所述)。也就是说,通过使用带有动量的小批量梯度下降(基于反向传播(LeCun等人,1989))优化多项式逻辑回归目标来进行训练。批量大小设置为256,动量设置为0.9。训练通过体重衰减(L2惩罚乘数设置为 5 ⋅ 1 0 − 4 5·10^{-4} 5104进行规范化) 以及前两个完全连接层的dropout正则化(dropout设置为0.5)。学习率最初设定为 1 0 − 2 10^{-2} 102,然后在验证集精度停止提高时,下降了10倍。总的来说,学习率降低了3倍,在370K迭代(74个历次)后,学习停止。我们推测,尽管与(Krizhevsky et al.,2012)相比,我们的网络具有更多的参数和更大的深度,但由于(a)更大的深度和更小的conv.过滤器尺寸施加的隐式正则化,网络需要更少的时间收敛;(b) 某些层的预初始化

Dropout对减少过拟合很有效,Hinten大佬有专门论文解释该问题:

Dropout: A Simple Way to Prevent Neural Networks from Overfitting,

论文连接:http://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf

image-20220419210714272

网络权值的初始化很重要,因为初始化不好可能会由于深网中梯度的不稳定性而导致学习停滞。为了避免这个问题,我们从训练配置A(表1)开始,它足够浅,可以通过随机初始化进行训练。然后,在训练更深层次的架构时,我们初始化了前四个卷积层,最后三个完全连接的层与网络A的层中间层是随机初始化的)。我们没有降低预初始化层的学习率,允许它们在学习过程中发生变化。对于随机初始化(如适用),我们从正态分布中抽取权重,平均值为零,平均值为 1 0 − 2 10^{-2} 102差异。偏差初始值为零。值得注意的是,在提交论文后,我们发现可以使用Glorot&Bengio(深度学习花书作者)(2010)的随机初始化程序,在不进行预训练的情况下初始化权重。

为了获得固定大小的224×224 ConvNet输入图像,从重新缩放的训练图像中随机裁剪它们(每SGD迭代一次,每张图像裁剪一次)。为了进一步增强训练集,crops经历了随机水平翻转和随机RGB颜色偏移(Krizhevsky等人,2012年)。下面解释了训练图像的重新缩放。

Training image size:

设S为各向同性重缩放训练图像的最小边,从中裁剪ConvNet输入(我们也将S称为训练尺度)。虽然裁剪尺寸固定为224×224,但原则上S可以采用不小于224的任何值:对于S=224,裁剪将捕获整个图像统计信息,完全覆盖训练图像的最小一侧;对于S≫ 224裁剪将对应于图像的一小部分,包含一个小对象或一个对象部分。

我们考虑设置训练规模的两种方法。第一种是固定S,它对应于单尺度训练(注意采样的crops内的图像内容仍然可以代表多尺度图像统计)。在我们的实验中,我们评估了以两个固定比例训练的模型:S=256(在现有技术中已广泛使用(Krizhevsky等人,2012年;Zeiler&Fergus,2013年;Sermanet等人,2014年))和S=384。给定ConvNet配置,我们首先使用S=256训练网络。为了加快S=384网络的训练,它是用S=256的预训练权重初始化的,我们使用了较小的初始学习率 1 0 − 3 10^{-3} 103.

设置S的第二种方法是多尺度训练,其中每个训练图像通过从特定范围[Smin,Smax](我们使用Smin=256和Smax=512)随机采样S来单独重新缩放。由于图像中的对象可能大小不同,因此在训练期间考虑这一点是有益的。这也可以被看作是通过规模抖动来扩充训练集(可以当做一种数据增强),其中该模型经过训练,可以在很大范围内识别物体。出于速度原因,我们通过微调具有相同配置的单比例模型的所有层来训练多比例模型,并使用固定的S=384进行预训练

3.2 Testing**(重点)

在测试时,给定一个经过训练的ConvNet和一个输入图像,它按以下方式分类。首先,将其各向同性地重新缩放到预定义的最小图像侧,表示为Q(我们也将其称为测试尺度)。我们注意到,Q不一定等于训练量表S(如我们将在第4节中所示,为每个S使用几个Q值可以提高绩效)。然后,以类似于(Sermanet al.,2014)的方式在重新缩放的测试图像上密集应用网络。即,首先将完全连接的层转换为卷积层(第一个FC层转换为7×7转换层,最后两个FC层转换为1×1转换层)。然后将生成的完全卷积网络应用于整个(未裁剪的)图像。结果是一个类分数图通道数等于类别数,空间分辨率可变,取决于输入图像的大小。最后,为了获得图像的固定大小的类分数向量,对类分数映射进行空间平均(总和合并)。我们还通过水平翻转图像来增加测试集;对原始图像和翻转图像的softmax类后验概率进行平均,以获得图像的最终分数。 (将原始的全连接层换成了全卷积层,对最后卷积层输出的feature map进行卷积核为7x7的卷积,转换成4096维向量或者最后输出的feature map是14x14的,那么需要在最后使用GAP的时候修正维度,即14x14x512>(使用4096个7x7卷积减少尺寸)2x2x4096->(使用1000个1x1卷积,feature map size不变)2x2x1000->(使用2x2卷积求平均或者最大 GAP减少size,需要声明这里的GAP类似卷积核,对每个feature map进行求平均,一个feature map对应一个值,最后可以得到1000个值)1000个值

image-20220419211619759

全局最大池化(平均池化就是全部相加求平均)

image-20220420203035107

由于全卷积网络应用于整个图像,因此无需在测试时对多个crops进行采样(Krizhevsky et al.,2012),因为需要对每个crops进行网络重新计算,因此效率较低。同时,如Szegedy等人(2014年)所做的那样,使用大量crops可以提高精度,因为与完全卷积网络相比,它可以对输入图像进行更精细的采样。此外,由于卷积边界条件的不同,多crops评估是对密集评估的补充:当对crops应用卷积网络时,卷积特征map用零填充,而在dense评估的情况下,同一crops的填充自然来自图像的相邻部分(由于卷积和空间池),这大大增加了整个网络的感受域,因此捕获了更多的上下文。虽然我们认为,在实践中,多种crops计算时间的增加并不能证明精度的潜在提高是合理的,但作为参考,我们还使用50种crops/尺度(5×5个crop图片,2次翻转)对我们的网络进行了评估,在3个尺度上总共有150种crops,这与Szegedy等人(2014)使用的4个尺度上的144种crops相当。 (最后提到的crop方法是输入之前的数据增强方法

3.3、Implementation details

我们的实现是从公开可用的C++ Caffe工具箱(JAU,2013)(2013年12月分支)导出的,但是包含了许多显著的修改,允许我们对安装在单个系统中的多个GPU进行训练和评估,以及 尺寸(未经剪接)图像进行训练和评估(如上所述)。多GPU训练利用数据并行性,通过将每一批训练图像分割成几个GPU批,在每个GPU上并行处理来执行。计算GPU批次梯度后,对其进行平均,以获得整个批次的梯度。梯度计算在GPU上是同步的,因此结果与在单个GPU上训练时完全相同。

虽然最近提出了更复杂的加速ConvNet训练的方法(Krizhevsky,2014),该方法为网络的不同层使用模型和数据并行,但我们发现,与使用单个GPU相比,我们的概念上简单得多的方案已经在现成的4-GPU系统上提供了3.75倍的加速。在一个配备四个NVIDIA Titan Black GPU的系统上,训练一个网络需要2-3周的时间,具体取决于体系结构。

4、Classification experiments

Dataset:

在本节中,我们将介绍所述ConvNet体系结构在ILSVRC-2012数据集(which was used for ILSVRC 2012-2014 challenges)上实现的图像分类结果。该数据集包括1000个类的图像,并分为三组:train(130万张图像)、validat(50K images)、testing(100K images with held-out class labels)。使用两种测量方法评估CLAS筛选性能:top-1和top-5误差。前者是多类分类错误,即错误分类图像的比例;后者是ILSVRC中使用的主要评估标准,计算为图像的比例,使groud truth类别超出前5个预测类别。

虽然最近提出了更复杂的加速ConvNet训练的方法(Krizhevsky,2014),该方法为网络的不同层使用模型和数据并行,但我们发现,与使用单个GPU相比,我们的概念上简单得多的方案已经在现成的4-GPU系统上提供了3.75倍的加速。在一个配备四个NVIDIA Titan Black GPU的系统上,训练一个网络需要2-3周的时间,具体取决于体系结构。

4.1、Single scale evaluation (单尺度比较,Q为固定值)

我们首先评估单个ConvNet模型在单尺度上的性能,以及第2.2. 节中描述的层配置。 测试图像大小设置如下:对于固定的Q=S;对于抖动的S,Q=0.5(Smin+Smax),抖动得S∈ [Smin,Smax]。试验结果如表3所示。 (Q的参数是固定的,有两种模式,一种是S固定的情况Q=S,另一种是S改变的情况Q=0.5(Smin+Smax)

image-20220419215248472

首先,我们注意到,在没有任何归一化层的情况下,使用局部响应归一化(A-LRN网络)不会改善模型A。因此,我们不在更深层次的架构(B-E)中使用规范化。 (LRN并没有提升模型性能,在B-E模型中不使用LRN层

其次,我们观察到,分类误差随着ConvNet深度的增加而减小:从A中的11层到E中的19层。值得注意的是,尽管深度相同,配置C(包含三个1×1 conv.层)的性能比配置D差,配置D在整个网络中使用3×3 conv.层。这表明,虽然额外的非线性确实有帮助(C比B好),但通过使用具有非常规感受野的conv.过滤器捕捉空间上下文也很重要(D比C好)。当深度达到19层时,我们架构的错误率就会饱和,但更深层的模型可能对更大的数据集有利。我们还将网络B与带有五个5×5转换层的浅网络进行了比较,这是通过将每对3×3转换层替换为一个5×5转换层(具有与第2.3节所述相同的感受野)而从B派生出来的。根据测量,浅网的前1位误差比B(在中心作物上)高7%,这证实了带有小过滤器的深网优于带有较大过滤器的浅网。

最后,在训练时进行尺度抖动∈ [256;512])比在具有固定最小边(S=256或S=384)的图像上进行训练的结果要好得多,即使在测试时使用了单个刻度。这证实了通过尺度抖动增强训练集确实有助于捕获多尺度图像统计信息。

4.2、Multi-scale evaluation(多尺度比较,Q为范围值)

image-20220420205311547

image-20220419220231115

4.3 Multi-crop evaluation

Crop:zero padding

dense:临近像素padding

image-20220419220245070

4.4、Convnet fusion(多模型集成)

到目前为止,我们评估了单个ConvNet模型的性能。在这一部分的实验中,我们通过对几个模型的软最大类后验概率进行平均,来组合这些模型的输出。由于模型的互补性,这提高了性能,并在2012年(Krizhevsky等人,2012年)和2013年(Zeiler&Fergus,2013年;Sermanet al.,2014年)提交的ILSVRC报告中使用。

结果如表6所示。在提交ILSVRC时,我们只训练了单尺度网络和多尺度模型D(通过微调完全连接的层而不是所有层)。由此产生的7个网络的集成具有7.3%的ILSVRC测试误差。提交后,我们只考虑了两个性能最好的多尺度模型(配置D和E)的集成,使用dense 评估将测试误差降低到7.0%,使用multi-crop & dense 联合评估将测试误差降低到6.8%。作为参考,我们表现最好的单一模型达到7.1%的误差(模型E,表5)。

image-20220419220710676

4.5、Comparison with the state of the art

和之前最优模型对比

image-20220419220934372

思考:为何VGG多模型集成性能提升少,GooLeNet多模型集成性能提升大?

1、VGGnet集成的两个模型是相似的,有很多共同点,可能在一些方面无法大幅度提升

2、GooLeNet集成的比较多

以上为个人见解

5、Conclusion

在这项工作中,我们评估了用于大规模图像分类的非常深的卷积网络(多达19个权重层)。研究表明,表示深度有助于提高分类精度,使用传统的ConvNet体系结构(LeCun等人,1989年;Krizhevsky等人,2012年)可以在ImageNet挑战数据集上实现最先进的性能,深度大幅增加。在附录中,我们还介绍了基于不太深的图像表示构建的图像存储库的数据存储库。我们的研究结果再次证实了视觉表征中深度的重要性。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值