VGG——Very deep convolutional networks for large-scale image recognition

1. 摘要

在使用非常小(3×3)的卷积核情况下,作者对逐渐增加网络的深度进行了全面的评估,通过设置网络层数达 16-19 层,最终效果取得了显著提升。

2. 介绍

近来,卷积神经网络在大规模图像识别领域取得了巨大的成功,这一方面归功于大规模公开数据的出现,另一方面则是计算能力的提升。在 AlexNet 的基础上大家进行了很多的尝试来进行改进,一条线是在卷积层利用更小的感知窗口和更小的步长,另一条线则是在整张图片上进行训练然后测试的时候采用多尺度。在本文中,作者则集中于卷积神经网络的另一个方面——它的深度。

3. 网络结构

网络的输入是一个固定大小的 224×224 的 RGB 图像,唯一的预处理就是减去三个通道像素的均值。卷积核大小只有 3×3 和 1×1 两种,同时卷积的时候采用填充来保证卷积后空间分辨率保持不变。总共有 5 个最大池化层,它们分别跟在一些卷积层后面,池化的窗口大小为 2×2,步长也为 2。

一系列卷积层后最后是 3 个全连接层,它们的通道个数分别为 4096,4096 和 1000,最后一层采用 Softmax 来进行 1000 个类别的分类。在所有的模型中,全连接层的设置都是一样的。激活函数都选择 ReLU,如果某些层应用了 LRN,则和 AlexNet 中的参数保持一致。

作者设计了 A-E 总共六个模型,所有的模型设置都如上面所述,只是层数不同,从模型 A 有 11 层到模型 E 有 19 层。通道数从第一层的 64 逐渐增大到 512,在每一次最大池化后变为之前的两倍。

VGG——Very deep convolutional networks for large-scale image recognition

和以前的网络结构在第一层采用比较大的卷积核不同,作者在所有的卷积层都采用了 3×3 的卷积核,步长为 1。至于为什么要这样做呢?

两个 3×3 的卷积层叠加后(不经过池化)其感知野是 5×5,三个 3×3 的卷积层也就具有了 7×7 的感知野。那为什么要用几个 3×3 卷积层的叠加而不只用一个 7×7 的卷积层呢?

其一,三个卷积也就是三个非线性的叠加让决策函数比只有一个非线性更有判别性。

其二,这样会减少参数的数量。假设 3 个连续 3×3 卷积层的输入输出通道数都一样,为 \(C\),那么它们叠加后的参数量为 \(3*3^2C^2=27C^2\),而如果采用一个 7×7 的卷积层,参数量为 \(7^2C^2=49C^2\),后者比前者参数数量多了 81%。这就可以看作是对 7×7 卷积核强加了一个正则化,将它分解为几个 3×3 的卷积核,并且在其间插入非线性。

VGG——Very deep convolutional networks for large-scale image recognition

其中,1×1 的卷积核可以看作是在不改变感知野的情况下增加非线性的一种方法,作者在实验中设置它们的输入输出通道数一样。

4. 分类框架

4.1. 训练过程

训练采用带动量的梯度下降算法,以及 \(L_2\) 正则化和 Dropout 技术。其中,为了让模型快速收敛,作者先对比较浅的模型 A 随机初始化然后进行训练。在训练更深的网络时,对前四个卷积层和最后三个全连接层用网络 A 对应层的参数来初始化,中间层则使用均值为 0 方差为 0.01 的高斯分布来初始化,偏置参数初始化为 0。

固定大小的 224×224 输入图片,则是从调整后的训练图片中随机裁剪出来的,一张图片在一个迭代过程中只裁剪一次。为了扩充训练集,作者再对图片进行了随机水平翻转和随机 RGB 颜色偏移。

调整后的图片短边大小为 S,也称之为训练尺度,对此作者有两种设置。一种是单尺度,也即 S 是固定的,在实验中作者取 S=256 和 S=384。为了加速 S=384 网络的训练,先用 S=256 预训练网络的参数来对其进行初始化。另一种是多尺度,每张图片调整后的大小 S 是从一个范围内 \([S_{min},S_{max}]\)随机采样的,其中 $ S_{min}=256,S_{max}=512$。之所以这么做,是因为图片中的物体大小本来就不一样,这样一个模型就被训练为能够识别各个尺度规模的物体。

4.2. 测试过程

测试阶段调整后的图片大小为 Q,称之为测试尺度。测试尺度和训练尺度没有必要一样,而且作者发现针对每个 S 采取几个不同的 Q 会对结果有所提升。然后,作者将网络中的三个全连接层全部转化为了卷积。

网络的原始输入大小为 224×224×3,经过一系列卷积和 5 次最大池化后,输入全连接时的特征图大小为 7×7×512,然后第一个全连接层神经元个数为 4096,这一层的参数 W 的大小也即为 (7×7×512*4096)。将全连接转化成卷积的意思就是,可以将 W 看作是 4096 个 7×7×512 的卷积核,卷积后特征图也就变成了 1×1×4096。同理,第二个全连接层的权重可以看作是 4096 个 1×1×4096 的卷积核,第三个全连接层的权重可以看作是 1000 个 1×1×4096 的卷积核。

然后,重新调整后的测试图片便可以直接传入到网络中去,因为全都是卷积层,输入大小没有限制。但是,这样的话,最后得到的特征图可能不是 1×1×1000 的,而是 W×H×1000 的,为了得到一个 1000 维的向量,我们需要进行空间平均(求和池化)。作者也对测试图片进行了水平翻转,最终的结果则取它们的平均值。

因为作者是将整个测试图片输入到网络中进行测试,也就没有必要去多次裁剪多次计算,但是,为了对比,作者也进行了多次裁剪的实验和先前的工作进行对比。

5. 实验结果

5.1. 单尺度验证

对一张图片,只选取一个 Q 值运行一次模型进行测试。对于单尺度训练的模型,选取 Q=S,对于多尺度训练的模型,取 \(Q=0.5(S_{min}+S_{max})\),结果如下。

VGG——Very deep convolutional networks for large-scale image recognition

可以发现,网络加深后错误率逐渐下降。模型 C 和 D 具有一样的层数,但是 C 中引入了一些 1×1 的卷积,D 的错误率比 C 低,说明非线性和捕获空间信息同样重要。同时,用 3×3 卷积核的深层网络比用 5×5 的浅层网络效果要好,也验证了作者的结论。最后,用多尺度训练的模型比单尺度训练的模型效果要好,说明捕获多尺度的图片特性是有帮助的。

5.2. 多尺度验证

对一张图片,选取不同的 Q 值多次运行模型取平均来进行测试。对于单尺度训练的模型,选取 Q={S-32,S,S+32},对于多尺度训练的模型,取 \(Q=\{S_{min},0.5(S_{min}+S_{max}),S_{max}\}\),结果如下。

VGG——Very deep convolutional networks for large-scale image recognition

5.3. 多裁剪验证

对测试图片多次裁剪,然后进行测试。

VGG——Very deep convolutional networks for large-scale image recognition

5.4. 多模型融合验证

对多个模型输出的结果进行平均作为最终的结果。

VGG——Very deep convolutional networks for large-scale image recognition

5.5. 与以前的方法对比

VGG——Very deep convolutional networks for large-scale image recognition

获取更多精彩,请关注「seniusen」!VGG——Very deep convolutional networks for large-scale image recognition

   
上一篇:ZOJ-Fire Net


下一篇:并 列 句