首先介绍一些小知识,VGG是Oxford Visual Geometry Group的简称,这个小组隶属于1985年成立的Robotics Research Group,这个团队研究范围很广,包括机器学习和移动机器人。
VGG网络在14年的ImageNet挑战赛中在localization和classification分别拿了第一与第二的好成绩。其最主要的贡献是使用更小的卷积核(3*3)并增加了整个模型的深度,将深度提高到了16~19层,实验表明这在一定程度上提高了模型的精度。文章最重要的部分就是讲解为什么要通过增加深度以及减小卷积核的方法来构建模型。
文章设置了6个模型(A~E),如图所示,每个模型的通道数都是从64开始,经过最大池化层后翻倍,一直到512。
其中conv<接收域的大小>-<通道的数目>,表中加粗的字体表示新添加的层。
表2说明尽管从A~E模型深度一直在增加,但是其参数的个数并没有增加很多。在OverFeat那篇论文中模型权重大小为144M。
在AlexNet中网络第一层卷积核的大小为11 × \times × 11,步长为4;在OverFeat文章中使用的改进的AlexNet的网络模型第一层的卷积核的大小为7 × \times × 7,步长为2。
在本文中提到在整个网络中使用更小的接收域3 × \times × 3,步长为1。两个3 × \times × 3的卷积层(中间没有池化层)相当于一个5 × \times × 5的卷积层;三个3 × \times × 3的卷积层相当于一个7 × \times × 7的卷积层。
reason 1: 使用3 × \times × 3代替7 × \times × 7意味着卷积层多了2层,而每一个卷积层中都有非线性修正函数,这就相当于多使用了修正,因此会使得最后的决策函数有更强的决策能力。但是要注意,修正层并不是越多越能提高模型准确性。
reason 2: 使用三个3 × \times × 3比一个7 × \times × 7有更少的参数。假设输入输出都是C个channel。则第一种的参数个数为3 × \times × (3 × \times × 3 × \times × C × \times × C)=27 C 2 C^2 C2;第二种为 7 2 C 2 7^2C^2 72C2=49 C 2 C^2 C2。
实际上1 × \times × 1相当于在相同维度空间中的一个线性投影,其输入输出的channel并没有发生改变。刚刚在上面的叙述中也提到了这主要是为了增加决策函数的决策能力。
在进行测试时,使用Q来表示图像的尺度,Q并不需要等于S,文章对于每个S都使用不同的Q来提高其性能。在测试时我们最后三层网络是全连接层,实际上相当于第一层变为了卷积核为7 × \times × 7大小的卷积层,后两层变为了卷积核为1 × \times × 1大小的卷积层全连接网络可以应用于整张图像(未裁剪),最后有几个通道数就意味着有几个类,对原始图像和经过裁剪、反转的图像得到的结果进行平均,这样就的到了一张图像的最终分数。
在AlexNet中通过对图像裁剪(翻转,中心加四个角,共10张图像),每张图像都需要网络计算,因此效率比较低。在OverFeat论文中使用大量的裁剪图像可以提高准确度,因为与全连接网络相比,输入的图像采样更加精细。由于不同的卷积边界条件,多裁剪图像评估是密集评估的补充:当将ConvNet应用于裁剪图像时,卷积特征图用零填充,而在密集评估的情况下,相同裁剪图像的填充自然会来自于图像的相邻部分(由于卷积和空间池化),这大大增加了整个网络的感受野,因此捕获了更多的上下文。文章提到在实践中多裁剪图像的计算时间增加并不足以证明准确性的潜在收益。但是文章还是在3个尺度上使用了裁剪图像,每个尺度上50个裁剪图像,评估了VGG网络。在OverFeat中在4个尺度上使用了144个裁剪图像。
文章使用的数据集为ILSVRC,训练集有1.3M 张图像,验证集有50K张图像,测试集有
00K张图像,并且测试集中每张图像都有类标签。使用的评价准则是top-1与top-5。
测试集图像的大小设置规则如下,对于固定尺寸的图像Q=S,对于变换尺寸的图像Q=0.5( S m i n + S m a x S_{min} + S_{max} Smin+Smax),其中S ∈ \in ∈[ S m i n , S m a x S_{min},S_{max} Smin,Smax]。
我们前面提到使用三个3 × \times × 3的卷积核代替一个7 × \times × 7的卷积核可以提高准确度,但是也不能盲目去替换追求效率,文章还使用了三个1 × \times × 1的卷积核代替了一个3 × \times × 3的卷积核,实验结果表明效果更差了,因此可以看出我们应该使用合适的卷积核大小,而不是盲目追求小的卷积核。
下表中展示了单一尺度的测试实验结果。
我们可以看出:1.使用LRN效果更差了;2.深度越深效果越好;训练集使用不同的输入图像的大小效果越好。
考虑到训练和测试尺度之间的巨大差异会导致性能下降,用固定S训练的模型在三个测试图像尺度上进行了评估,接近于训练一次:Q = {S−32, S, S+32}。同时,训练时的尺度抖动允许网络在测试时应用于更广的尺度范围,所以用变量S ∈ \in ∈[ S m i n , S m a x S_{min},S_{max} Smin,Smax]训练的模型在更大的尺寸范围Q = { S m i n S_{min} Smin, 0.5( S m i n S_{min} Smin + S m a x S_{max} Smax), S m a x S_{max} Smax}上进行评估。
下图是模型在多尺度测试集上的结果。
我们可以看出与单一尺度上的相同模型相比测试集的尺度变换使得结果更好。在验证集上得到了最好的性能为24.8%/7.5%的top-1/top-5的错误率;在测试集上实现了7.3%的top-5。
在下表中将使用Dense ConvNet评估与多裁剪图像进行评估,同时文章害通过平均soft-max的输出来评价了两种评估技术的互补性。可以看出使用多裁剪图像表现比使用密集评估要好一点,并且两种方法具有互补性,文章中假设这种差异是由于卷积边界条件的不同处理造成的。
将模型进行组合达到了更好的结果,其中采用表现最好的D、E模型组合使得密集评估将测试误差降到7.0%,使用多裁剪核密集组合将测试误差降到6.8%,如下表所示。
从表中可以看出,VGG网络明显的由于前几代的方法,在ILSVRC-2013竞赛中取得了很好的结果,并且VGG仅使用两个模型的组合明显少于其他的网络结构,虽然结果相对于分类任务的获胜者GoogleNet稍逊一些,但是在但网络性能上VGG取得了更好的成果(7.0%的测试误差),超过单个GoogleNet0.9%。VGG网络并没有篇理LeCun等人的静待你ConvNet架构,但是通过大幅度的增加深度改善了它。
图片参考博文(https://www.jianshu.com/p/9f77a4a4f294)
VGG拥有较小的卷积核这可以使得参数更少网络更深;
VGG使用了卷积层的堆叠,比如三个3 × \times × 3的卷积核相当于一个7 × \times × 7,使得特征提取能力更强。
VGG在训练时先训练简单的网络模型,比如A,再用A去训练后面复杂的模型,加快训练速度。
VGG去掉了LRN,验证了LRN并没有提高性能。
VGG虽然较深但是收敛速度快于AlexNet。
VGG提到的6个模型,深度逐渐增加,但是参数并没有显著增大。
VGG需要占用大量内存。
GoogleNet性能虽然优于VGG一些但是其结构太过复杂,因此VGG应用的更多一些。