VGG论文阅读笔记

Very Deep Convolutional Networks for Large-Scale Image Recognition

一、摘要

先前,LeNet-5和AlexNet已经证明了卷积神经网络在图像识别场景的重要性,尤其是AlexNet在2012年的ILSVRC的图像分类赛道一举夺冠,并与亚军拉开极大的差距,从而掀起了CNN的热潮。而本文则是在经典卷积神经网络(LeNet-5、AlexNet)的基础上大幅增加网络深度,并采用极小规模(3×3)的卷积核架构,对不同深度的网络进行了全面评估,探究了卷积神经网络在大规模图像识别场景中对模型精度的影响。结果表明:将网络深度提升至16-19个权重层时,模型性能相较于现有最优配置实现了显著提升。最终团队的研究结果在2014年ILSVRC的目标定位赛道和图像分类赛道的冠军和亚军。此外,模型表征具备良好的泛化能力,在其他数据集上同样取得了当前最优结果。

二、引言

卷积神经网络近年来在大规模图像和视频识别领域取得了巨大成功。这一成就的实现得益于大型公共图像库(如ImageNet)和高性能计算系统(如GPU或大规模分布式集群)的支持。

随着卷积神经网络在计算机视觉领域的应用日益广泛,研究人员已进行了多项尝试来改进AlexNet这样的原始架构,以追求更高的精度。例如,2013年ILSVRC表现最佳的参赛方案在第一层卷积层中采用了更小的感受野窗口和更小步长;另一类的改进方向则是在整个图像上以及多尺度下对网络进行密集训练和测试(也是本文重点采用的)。而本论文则聚焦于卷积网络架构设计的另一重要方面—网络深度,因此,论文固定了架构的其他参数,通过增加更多卷积层来逐步提升网络深度。同时考虑到参数量和过拟合的问题,论文所有层均采用极小规模(3×3)的卷积核,让这一设计具有可行性。

最终,论文提出了精度显著提升的卷积网络架构。该架构不仅在ILSVRC分类和定位任务中达到了当前最优精度,还适用于其他图像识别数据集,这说明该卷积网络架构具有优秀的泛化能力。此外,即使将分类层(全连接层)替换为未经微调的线性SVM分类器,仍能取得出色的性能,这说明该卷积神经网络的特征表征能力已经足够强大。

三、卷积网络配置

3.1 网络架构

在训练阶段,卷积网络的输入为固定尺寸的224×224的RGB图像(注意,这里是说在训练时,输入的才为224×224的RGB图像,后续在测试阶段,输入可以是224×224的RGB图像,对应多裁剪块评估;也可以是整个图像,对应密集评估)。而对于属于前的预处理,论文仅采用了一项操作:从每个像素中减去训练集上计算得到的RGB均值(与AlexNet中相同,都只采用了这一项预处理操作)。

论文中设计了5种网络架构分别是A、B、C、D、E,网络深度逐步增加,网络的所有隐藏层的激活函数均采用 \(ReLU\) 非线性函数(除了第三全连接层,因为第三全连接层是非隐藏层,不使用任何激活函数,并且后接 \(Softmax\) 函数用于分类)。每种架构的卷积层均采用感受野极小的卷积核(除了其中一种配置还使用了1×1卷积核,可以被视为对输入通道的线性变换,后续会紧跟非线性激活函数,这种设计的优点是可以在几乎不增加计算成本、不改变空间结构和感受野的情况下,额外引入非线性,提升拟合能力;灵活调整通道数量,比如增加/减少通道数;实现输入特征图通道之间的特征交互)—3×3(这是能够捕捉左右、上下、中心等空间概念的最小尺寸),这种极小规模的卷积核能够在保证感受野不变的情况下,极大减少参数量,具体来说,堆叠3个3×3卷积核大小的卷积层的感受野可以替代1个7×7卷积核大小的卷积层的感受野,而3个3×3卷积核大小的卷积层的参数量只有 \(27C^2\) ,而1个7×7卷积核大小的卷积层的参数量是 \(49C^2\)\(C\) 为通道数),因此能够极大减少参数量,同时,因为由1层卷积层变为3层卷积层,也增加了非线性表达能力,特征模型的非线性拟合能力。卷积步长固定为1个像素;同时,为了确保卷积后空间分辨率保持不变,网络中每个3×3卷积层都进行了填充,填充尺寸为1个像素,填充形式为零值填充(即用0填充)。空间池化操作则由五个最大池化层完成,这些紧跟在部分卷积层之后(并非所有卷积层后都接有池化层)。最大池化操作基于2×2像素窗口,步长为2个像素。

在一系列卷积层后是三个全连接层:前两个全连接层各包含4096个通道(神经元),第三个全连接层负责1000个类别的ILSVRC分类任务,所以第三个全连接层属于输出层,不属于隐藏层,没有使用 \(ReLU\) 激活函数(准确来说是没有使用任何激活函数,只是单纯的线性映射),需要输出1000个类别的logits值(logits值只是由第二个全连接层的输出线性加权组合而来,并没有经过激活函数),然后这1000个类别的logits值输入 \(Softmax\) 函数计算得到1000个类别的概率(这里 \(Softmax\) 只能算是一个算子,不算是网络的一部分,也不存在全连接的说法,因为它只用到了第三个全连接层输出的1000个类别的logits值)。

需要说明的是,除了一种配置(A-LRN)外,论文的所有网络均未包含局部响应归一化(LRN),因为这类归一化,在后续实验中证明不会提升在ILSVRC数据集上的性能,反而会增加内存消耗和计算时间。

3.2 具体配置

论文设计的卷积网络配置如下图所示,每列对应一个配置。后续将以名称(A-E)指代这些网络。所有配置均遵循2.1节所述的通用设计,仅在深度上存在差异:从网络A的11个权重层(8个卷积层和3个全连接层)到网络E的19个权重层(16个卷积层和3个全连接层),网络深度逐步增加。卷积层的宽度(通道数)相对较小,第一层为 64 个通道,之后在每个最大池化层后通道数翻倍,直至达到 512 个通道。

image

3.3 讨论

本论文的卷积网络配置与2012年ILSVRC竞赛和2013年ILSVRC竞赛中表现最优的参赛方案存在显著差异。不同于前者在第一卷积层中采用相对较大的感受野(分别使用11×11感受野与4的步长和7×7感受野与2的步长),本文在网络中均采用极小的3×3感受野,并以1的步长对输入图像的每个像素进行卷积运算,这种方案的优势已在3.1节说明。

而1×1卷积层的引入是在不影响卷积层感受野的前提下,增加决策函数非线性的一种方式,其优势也在3.1节说明。

四、分类框架

上一节详细介绍了网络配置,本节将阐述分类卷积网络的训练与评估细节

4.1 训练过程

卷积网络的训练过程大体遵循AlexNet论文中的方法,但是增加了固定尺度训练和多尺度训练(后面会详细介绍)。具体来说,训练是通过带动量的小批量梯度随机下降法优化多项式逻辑回归目标函数(即损失函数,论文中选择交叉熵函数作为损失函数)。批量大小(BatchSize)设为256,动量参数为0.9(关于带动量的梯度随机下降法的详细介绍,请参照关于AlexNet论文的学习笔记)。训练过程采用两种正则化策略:权重衰减( \(L_2\) 惩罚系数设为 \(5×10^{-4}\) )和针对前两个全连接层的丢弃正则化(即AlexNet中提出的Dropout技术,在本论文中丢弃率设为0.5)。初始学习率为 \(10^{-2}\) ,当验证集精度停止提升时,学习率衰减为原来的1/10,共衰减3次。

此外,为了加快收敛以及避免不良初始化阻碍训练进程,论文对网络权重采用了预初始化策略。首先,对网络架构A进行训练。因为,该网络足够浅,网络架构A的权重可直接采用随机初始化,最终完成网络架构A的训练。之后,在训练更深层的网络架构时,使用网络架构A的前四个卷积层和最后三个全连接层的权重来初始新网络对应层的权重,其他中间层采用随机初始化。在训练时,无论是预初始化层还是随机初始化层的学习率都未降低(因为有的一些方案在采用预初始化后,会降低学习率进行微调,而在本论文则仍保持学习率进行参数调整),允许其在训练过程中调整参数。随机初始化时(即用于未预初始化的层),权重从均值为0、方差为 \(10^{-2}\) 的正态分布中采样,偏执初始化为0。以上即为论文网络架构的权重初始化说明,但是,作者在提交论文后发现,采用 \(Glorot \& Bengio\) 的随机初始化方法,可以无需上述的权重初始化操作(即预训练)。

为了获取大小为224×224的固定尺寸的卷积网络输入图像,会从缩放后训练图像(进行缩放的原因在4.1.1节说明)中随机裁剪(每次随机梯度下降迭代为每张图像生成一个裁剪块)。为了进一步扩充训练集,裁剪块会经过随机水平翻转和随机RGB颜色偏移处理(与AlexNet中RGB通道强度扰动相同)。下面将详细介绍图像尺寸的缩放。

4.1.1 训练图像尺寸

考虑到在不同的训练图像尺寸上随机裁剪图像块用于训练,能够体现多尺度统计信息,能够体现目标占比的多样性,进而帮助模型学习到全局和局部信息,使得模型性能提升,因此,本论文的训练采用了两种图像尺寸训练方式:固定尺寸训练和多尺度训练。

设S为各向同性缩放后训练图像的最小边长(S即为训练尺度)。裁剪块尺寸固定为224×224,因此,S的取值应为不小于224的任意值(当S=224时,裁剪块的裁剪范围刚好覆盖到最小边长,而不会超出训练图像尺寸,裁剪块能够覆盖图像的整体统计信息;当S大于224时,裁剪块仅对应图像的一小部分,可能包含小型目标或目标局部区域,进而体现目标占比的多样性),这也是训练图像缩放后能体现多尺度统计信息的原因。下面介绍固定尺寸训练和多尺度训练。

固定尺寸训练:即S设为固定值。实验中,作者评估了两种固定训练尺度:S=256(该尺度在当时的研究中被广泛使用)和S=384。当S=256时,对于任意一种卷积网络配置,按照前面的权重初始化方案进行训练;为了加速S=384尺度的训练,会使用S=256预训练的权重初始化对应的网络(比如要训练S=384时的网络架构A,就先训练S=256时的网络架构A,再按照S=256时训练好的网络架构A的权重参数初始化S=384时的网络架构A),并将学习率设为更小的 \(10^{-3}\)

多尺度训练:每张训练图像单独缩放,S从特定范围[S_min, S_max]中随机采样(论文中设置S_min=256、S_max=512)。由于图像中目标尺寸各异,训练过程中采用多尺度训练的效果很好。这种方式也可以视为通过尺度抖动扩充数据集,使单个模型能够识别大范围尺度下的目标。为了提升效率,多尺度训练模型通过微调单尺度模型(即固定尺寸训练得到的模型,比如现在要在多尺度训练下训练网络架构A,就先训练得到S=384时的网络架构A,再对这个网络架构A在多尺度图像缩放下进行微调训练,进而得到多尺度训练的网络架构A)的所有层得到。

4.1.2 具体训练流程

接下来,将详细讲述论文所设定的具体训练流程。论文中的训练方法分为两种:固定尺寸训练和多尺度训练,下面将分别说明。

4.1.2.1 固定尺寸训练

由于论文中一些网络架构的训练是需要训练好的基础网络架构A的权重进行初始化,因此,先解释网络架构A的训练流程,再说明其余网络架构的训练流程。

网络架构A的权重是随机初始化,权重从均值为0、方差为 \(10^{-2}\) 的正态分布中采样,偏置初始化为0。设定BatchSize=256,即从训练集中随机抽取256张图像(在训练集中随机抽取时,由于是随机的,因此一张图像可能会被多次抽取,也就会出现一张图像的多次裁剪),进行像素值预处理(每张图片的RGB像素减去训练集中所有图像的RGB像素均值),每张图像都进行固定尺寸S的缩放,使得最小边长为S,之后对缩放后的每张图像进行随机裁剪,得到一个224×224的裁剪图像块。之后对该图像块进行概率为0.5的水平翻转以及RGB图像强度扰动,之后就可以输入网络进行训练。

在将网络架构A训练收敛之后,后需要进行其余网络架构的训练,在此假设训练网络架构D。使用训练收敛的网络架构A的前四层卷积层和最后三个全连接层权重来初始化网络架构D的对应层的权重。网络架构D其余中间层权重依旧随机初始化,权重从均值为0、方差 \(10^{-2}\) 的正态分布中采样,偏置初始化为0。之后的训练流程与网络架构A的流程相同,不再赘述。

4.1.2.2 多尺度训练

网络架构的多尺度训练一般使用对应网络架构的固定尺寸训练来初始化权重。在此沿用4.1.2.1中的设定,已经有固定尺寸训练收敛的网络架构D,在这个网络架构D的基础上进行多尺度训练微调。

设定BatchSize=256,即从训练集中随机抽取256张图像(在训练集中随机抽取时,由于是随机的,因此一张图像可能会被多次抽取,也就会出现一张图像的多次裁剪),进行像素值预处理(每张图片的RGB像素减去训练集中所有图像的RGB像素均值),然后对每张图像进行随机尺度S的缩放(S从缩放范围中随机采样),缩放的范围为[S_min, S_max],使得最小边长为S,之后对缩放后的每张图像进行随机裁剪,得到一个224×224的裁剪图像块。之后对该图像块进行概率为0.5的水平翻转以及RGB图像强度扰动,之后就可以输入网络进行训练,直至训练收敛。这是关于网络架构D的多尺度训练,其余网络架构的多尺度训练也是类似的流程。

4.2 测试过程

论文进行了两种形式的测试:密集评估和多裁剪块评估,其中密集评估是本文的主要测试方法,而多裁剪块评估则是为了与密集评估进行对比参照,后续还将两者进行融合互补。此外,无论是密集评估还是多裁剪块评估,都会对图像进行缩放(包括固定尺寸缩放和多尺度缩放),这需要分开说明。

4.2.1 密集评估

论文设定的输入图像大小固定为224×224,因此对于任意一张缩放后的图像都需进行裁剪才能输入到网络中,而这会导致一定信息的丧失,因此论文采用了密集评估的方式。具体是通过将全连接层转换为卷积层实现的(第一个全连接层转为7×7卷积层,后两个全连接层转为1×1卷积层,转化后的卷积层的权重沿用全连接层的权重,比如将原先25088×4096的全连接层权重倒转为7×7×512×4096(本身25088就是由全连接层前一层的卷积层输出特征图(7×7×512)转换而来的,所以相当于倒转回去),就变为了卷积层权重的形式),之后就能将转换后的全卷积网络应用于完整未裁剪的图像。转换后全卷积层的输出就不再是原先的1×1000的类别概率向量,而是H×W×1000的类别得分图(H、W的具体值,由输入的完整未裁剪的图像尺寸决定),之后对每个类别的H×W大小的得分图进行求和取平均得到该类别的得分,一共会得到1000个不同类别的得分,选择最大的得分类别作为最终的判断(为了增加判断的准确性,还可以将输入图像进行翻转,分别计算得到原始图像和翻转图像的得分向量取平均作为最终的得分)。

固定尺寸缩放:将从测试集中抽取的图像进行固定尺寸Q的缩放,之后输入到修改后的全卷积层得到类别得分向量。

多尺度缩放:将从测试集中抽取的图像进行多尺度尺寸Q的缩放,Q的选取是从预设设定的集合范围中进行遍历(Q取值集合中每个尺寸值都需要用到)得到的(如果测试的模型是固定尺寸S训练而来,那么Q的取值集合为S-32, S, S+32;如果测试的模型是多尺度训练而来,S的取值范围为[S_min, S_max],那么Q的取值集合为[S_min, (S_min+S_max)/2, S_max]),之后输入到修改后的全卷积层得到类别得分向量。

4.2.2 多裁剪块评估

多裁剪块评估则不需要将全连接层改为卷积层,是对缩放后的图像进行裁剪,将裁剪后的图像块输入到网络进行测试。同样需要对固定尺寸缩放和多尺度缩放分开说明。

固定尺寸缩放:将从测试集中抽取的图像进行固定尺寸Q的缩放,之后对缩放后的图像进行裁剪,首先对原始图像按照步长滑动裁剪25个图像块,之后将原始图像进行翻转,对翻转后的图像同样按照步长滑动裁剪25个图像块,最后将共计50个图像块分别输入到网络中进行测试,对测试结果取平均作为最终结果。

多尺度缩放:多尺度缩放流程与固定尺寸缩放类似,但是需要对Q取值集合中每个尺寸值都重复固定尺寸缩放的步骤,比如Q取值集合中有三个尺寸值,一张图像需要按照每个尺寸值都进行缩放,然后对每个尺寸缩放后的图像都裁剪出50张图像块以输入到网络中进行测试,最后对每个尺寸缩放的每个裁剪图像块的测试结果取平均作为最终结果。

4.2.3 密集评估和多裁剪块评估融合

此处就是将对网络架构分别进行密集评估和多裁剪块评估,之后将两者的结果取平均作为最终结果,进行融合。需要说明的一点是密集评估和多裁剪块评估尺度缩放类型应该是相同的,比如密集评估是在[256, 384, 512]下测试的,多裁剪块评估也需要是在[256, 384, 512]下测试的,之后再将两者进行融合。

4.3 实现细节

论文具体的实现是基于公开可用的C++ Caffe工具包,但进行了多项重要修改,使其能在单台设备的多块GPU上进行训练和评估,同时支持对全尺寸未裁剪图像进行多尺度训练和评估。多GPU训练采用数据并行策略:将每个训练批次的图像拆分到多个GPU批次,在各GPU上并行处理(具体来说,一个批次抽取256张图像,将批次图像均分到不同GPU,然后每张图像在各自的GPU进行训练和测试,GPU之间互不影响,只在需要交换数据时进行通信,比如训练时需要共享一个批次的梯度以计算平均梯度,这时需要进行通信);计算得到各GPU批次的梯度后,对其求平均得到完整批次的梯度。GPU间的梯度计算是同步的,因此训练结果与单GPU训练完全一致。

五、分类实验

5.1 数据集

图像分类实验的数据集使用的是ILSVRC-2012的数据集,该数据集同时用于2012-2014年的ILSVRC竞赛。数据集包含1000个类别的图像,分为三个子集:训练集(130万张图像)、验证集(5万张图像)和测试集(10万张图像,类别标签不公开)。分类性能通过两个指标评估:Top-1错误率和Top-5错误率。

5.2 单尺度评估

论文首先评估了单个卷积网络模型在单尺度测试下的性能,测试图像尺寸按如下规则设置:

  • 对于固定训练尺度S的模型,测试尺度设为Q=S;
  • 对于训练尺度抖动( \(S\in[S_{min}, S_{max}]\) )的模型,测试尺度设为 \(Q=0.5(S_{min}+S_{max})\)

实验结果如下图所示:

image

首先,作者发现使用局部响应归一化的模型(A-LRN),性能并未优于未使用任何归一化层的基础模型A。因此,在后续的更深网络机构中,并没有再使用局部响应归一化操作。

其次,观察到到分类错误率随网络深度的增加而降低:从模型A的11层下降至模型E的19层。值得注意的是,尽管模型C和模型D的网络深度相同,但模型C(包含3个1×1卷积层)的性能不如全程使用3×3卷积层的模型D。这表明:额外的非线性层确实能提升模型性能(模型C优于模型B),但通过具有有效感受野的卷积核捕捉空间上下文信息也同样关键(模型D优于模型C)。当网络深度达到19层时,我们的架构错误率趋于饱和,但对于更大规模的数据集,更深的模型可能会带来性能提升。作者还将模型B与一个浅层网络做了对比,该浅层网络包含5个5×5卷积层,是通过将模型B中每两个3×3卷积层替换为一个5×5卷积层得到的(两者的有效感受野相同)。实验显示,这个浅层网络的Top-1错误率(基于中心裁剪评估)比模型B高出7%,这验证了采用小卷积核的深层网络,性能优于采用大卷积核的浅层网络。
最后,实验结果表明:即便测试时采用单尺度,训练时的尺度抖动( \(S\in[256, 512]\) )也能显著提升模型性能,效果远超固定最小边长(S=256或S=384)的训练方式。这证明了通过尺度抖动扩充数据集确实有助于模型学习多尺度的图像统计信息。

5.3 多尺度评估

在完成单尺度评估后,接下来分析测试阶段尺度抖动对模型性能的影响。具体操作是:将测试图像缩放到多个不同的尺寸(对应不同的测试尺度Q),分别输入模型进行推理,最后对得到的类别后验概率取平均,作为最终分类结果。

考虑到训练尺度与测试尺度差异过大会导致性能下降,我们针对固定训练尺度S训练的模型,选取了与训练尺度相近的三个测试尺度进行评估,即 \(Q=\{S-32, S,S+32\}\) 。而对于训练阶段采用尺度抖动( \(S\in[S_{min},S_{max}]\) )的模型,由于模型已学习到多尺度的图像特征,因此,可以在更宽的测试尺度范围内进行评估,选取的测试尺度为 \(Q=\{S_{min},0.5(S_{min}+S_{max}),S_{max}\}\)

实验结果如下图所示:

image

实验结果表明,测试阶段的尺度抖动能够显著提升模型性能,效果优于同模型的单尺度评估结果。与单尺度评估的结论一致,最深的网络架构(D和E)依然表现最佳,且训练阶段的尺度抖动策略,效果优于固定最小边长S的训练方式。在验证集上,最优单模型取得了24.8%的Top-1错误率和7.5%的Top-5错误率。

5.4 多裁剪块评估

论文对比了卷积网络密集评估与多裁剪块评估的性能表现。同时,我们还通过对两种方法输出的softmax概率取平均,验证了这两种评估技术的互补性。实验结果如下图所示:

image

实验结果显示:多裁剪块评估的性能略优于密集评估;而将两种方法结合后,性能会超过任一单独方法,这也证实了二者确实具有互补性。论文推测这种互补性源于两种方法对卷积边界条件的不同处理方式:

  • 密集评估利用整张图的上下文信息,补边区域多采用原图边界值,感受野更完整;
  • 多裁剪块评估对图像进行精细采样,裁剪块边缘采用零填充,能捕捉局部细节特征。
    二者结合可兼顾全局上下文与局部细节,从而进一步提升分类精度。

5.5 卷积网络融合

到目前为止,评估的都是单个卷积网络模型的性能。在本部分实验中,我们通过对多个模型输出的softmax类别后验概率取平均,实现了多模型融合,这种方法能够借助模型间的互补性提升性能。
实验结果如图所示:

image

训练了若干单尺度网络,以及一个多尺度模型D(该模型仅对全连接层进行微调,而非更新所有层的权重)。最终由 7 个网络组成的集成模型,在 ILSVRC 测试集上取得了7.3% 的Top-5错误率。后续又构建了仅包含两个最优多尺度模型(架构D和E)的集成模型:

  • 采用密集评估时,测试错误率降至7.0%;
  • 结合密集评估与多裁剪块评估后,测试错误率进一步降至6.8%。

六、结论

在本研究中,作者针对大规模图像分类任务,评估了极深卷积网络的性能。这些网络的权重层数量最多可达 19 层。研究结果表明,特征表示的深度对分类精度具有显著增益(这一结论到现在依旧成立,只是需要强调深度增益不再是VGG所理解的朴素堆叠深度,而是有效深度所带来的增益,即不再是层数越多越好而是有用的、能够学习的层数越多越好)。通过在经典卷积网络架构(LeNet-5、AlexNet)的基础上大幅增加网络深度,我们在ImageNet竞赛数据集上取得了当前最优的性能。此外,VGG提出了一种用基础块代替网络层的思想,这使得它在构建深度网络模型时可以重复使用这些基础块。使用了块代替层的思想,具体的来说,它提出了构建基础的卷积块和全连接块来替代卷积层和全连接层,而这里的块是由多个输出通道相同的层组成。这样非常方便于它的迁移能力,也是VGG成为很多新模型基础框架的必选项之一的原因。

posted @ 2025-12-17 17:02  其柒  阅读(2)  评论(0)    收藏  举报