MENU

VGG 论文阅读

June 3, 2019 • Read: 4528 • Deep Learning阅读设置

论文下载

VGG 是 ImageNet 2014 年目标定位竞赛的第一名,图像分类竞赛的第二名

VGG 论文图

摘要中,作者研究了模型深度与精确度之间的关系。"我们的主要贡献是使用非常小的(3×3)卷积滤波器架构对网络深度的增加进行了全面评估,这表明通过将深度推到 16-19 加权层可以实现对现有技术配置的显著改进"。并且作者还在其他的数据集上进行了测试,发现精确度也很高,说明模型的泛化能力很好

在引言中,作者提到了其他一些论文研究,有的人着眼于用尺寸更小的 filter 和第一层卷积的 stride,还有的人在整个图像和多个尺度上对网络进行密集地训练和测试。

这篇论文主要是对模型的深度进行改进,固定其他的超参数,通过不断的增加层数,其中的技巧是因为作者所有的 filter 都使用的非常小的(3×3)的卷积滤波器

首先是一些通用的配置(generic configurations)。输入的每一张图片尺寸都是固定大小的 224×224×3。"我们唯一的预处理是从每个像素中减去在训练集上计算的 RGB 均值"。Conv 层使用的都是 3×3 的滤波器,"在其中一种配置中,我们还使用了 1×1 卷积滤波器,它可以看作是输入通道的线性变换"。Conv 层的所有 stride 固定为 1

为了保证卷积后的大小不变,所以设置 padding=1

总共有 5 个 max-pooling layers 跟在 Conv 后面,但并非所有的 Conv 后面都有。max-pooling 的 filter 为 2×2,stride=2

卷积层后是三个 FC(全连接层),前两层都有 4096 个神经元,最后一层 1000 个

所有的隐藏层都设置 ReLU 为激活函数。作者的模型(除了一个)都不包含局部响应规范化(LRN),LRN 就是 Local Response Normalization,这是 AlexNet 中使用的一种规范化方法,VGG 的作者认为 LRN 效果并不好,反而还会增加内存占用和计算时间,我们注意到,作者其实是有一个使用了 LRN 的,但是使用了的效果也并不好

表 1 列出了六种网络,所有网络的基础配置都和上文所述的相同,仅仅只是深度不同。表 2 列出了每种网络的参数数量,"尽管深度很大,我们的网络中权重数量并不大于具有更大卷积层宽度和感受野的较浅网络中的权重数量"

首先看第一列的模型,A 模型总共有 11 个带有权重的层,第一层的 filter 是 64 个,紧接着一个 max-pooling... 剩下的看表就很容易懂,这里就不赘述了

第二张表描述的是每种模型需要训练的参数个数

2.3 节主要讨论作者使用的模型和其他的模型区别,其他的一些竞赛模型的 filter size 要不就是 11×11,要不就是 7×7,11×11 的 stride=4,7×7 的 stride=2。本文的模型 filter size 是 3×3,并且 stride=1

然后作者解释了,2 个 3×3 的 Conv (no padding) == 1 个 5×5 的 Conv;3 个 3×3 的 Conv (no padding) == 1 个 7×7 的 Conv。但是使用较小的 Filters 的意义在于,每个小的 Conv 后面都会跟上一个 ReLU,这样比单个 ReLU 的效果要更好,同时还能减少 parameters 的总数,因为 1 个 7×7 的 Conv 总共有 $49$ 参数,而 3 个 3×3 的 Conv 总共只有 $27$ 个参数

作者使用 1×1 的 Conv 层,作用是维持 input output 维数不变,同时虽然内部是一个简单的线性计算,但是由于后面跟了一个 Relu,所以还是达到了非线性的效果

在这一部分中,作者详细解释了模型是如何训练的。首先,VGG 模型的训练是站在 AlexNet 的肩膀上进行的,其中有一项不同的是,VGG 没有对图片做 cropping 处理。VGG 模型的 Loss Function 选择的是 multinomial logistic regression

Batch Size=256,gradient descent 使用的是 BP+momentum,momentum=0.9。前两个 FC 层使用了 dropout 来防止过拟合(dropout=0.5),learning rate 初始设为 0.01,当 validation datasets 的 loss 值无法下降时,就会手动将 learning rate 降低十倍

作者还提到 weights 初始化的意义 —— 影响反向传递的稳定性。具体做法是首先给予 A 模型随机 weights,训练 A 模型,从而获取训练好的 Conv 和 FC 的 weights,给到更深的模型使用。而其他层的 weights 使用 random weights(mean=0,var=0.01),bais=0

对于输入图片的处理,作者将图片进行了压缩,修剪,使得图片达到 224×224,图片还进行了水平翻转和 RGB shift,目的是为了让模型的泛化能力更好

这一部分,作者主要阐述如何处理图片,使得网络从不同角度识别某个物品都能识别出来。令 S 是等轴归一化的训练图像的最小边,从中裁剪 ConvNet 输入(我们也将 S 称为训练尺度)。虽然裁剪尺寸固定为 224×224,但原则上 S 可以是不小于 224 的任何值:对于 S=224,裁剪图像将捕获整个图像的统计数据;对于 S>>224,裁剪图像将对应于图像的一小部分

"我们考虑两种方法来设置训练尺度 S。在我们的实验中,我们评估了以两个固定尺度训练的模型:S=256 和 S=384。给定 ConvNet 配置,我们首先使用 S=256 来训练网络。为了加速 S=384 网络的训练,用 S=256 预训练的权重来进行初始化,我们使用较小的初始学习率 $10^{-3}$"

设置 S 的第二种方法是多尺度训练,其中每个训练图像都是通过从一定范围内随机采样 S 来单独重新标定的 $[S_{min}, S_{max}]$(我们使用 $S_{min}$ = 256 和 $S_{max}$ = 512)。为了速度的原因,我们通过对具有相同配置的单尺度模型的所有层进行微调,训练了多尺度模型,并用固定的 S=384 进行预训练

基本上 VGG 模型的重点就在上面了,下面用吴恩达老师的一张图来总结一下吧

Last Modified: June 19, 2019
Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment