VGG详解

时间:2024-03-31 12:28:59

一、背景介绍

VGG全称是Visual Geometry Group,因为是由OxfordVisual Geometry Group提出的。AlexNet问世之后,很多学者通过改进AlexNet的网络结构来提高自己的准确率,主要有两个方向:小卷积核和多尺度。而VGG的作者们则选择了另外一个方向,即加深网络深度。

二、网络架构

卷积网络的输入是224 * 224RGB图像,整个网络的组成是非常格式化的,基本上都用的是3 * 3的卷积核以及 2 * 2max pooling,少部分网络加入了1 * 1的卷积核。因为想要体现出“上下左右中”的概念,3*3的卷积核已经是最小的尺寸了。

解释两个关键问题:

  1. 作者用的是多个3 * 3卷积叠加,而不是例如7 * 711 * 11的单个卷积,原因如下:
    • 3个3 * 3卷积叠加得到的理论感受野和一个7 * 7卷积的理论感受野是相同的。详细解释可以参考深度学习面试题-感受野
    • 因为每个卷积层后面都会跟着一个ReLU,3个3 * 3卷积就会有3个ReLU,但是一个7 * 7卷积只有一个,所以这么做可以使得模型的非线性拟合能力更强。
    • 减少了参数数量。假设3个3*3卷积的输入和输出都是C个通道,那么参数数量为3(33CC)=27C23(3 * 3 * C * C) = 27C^2,而7 * 7卷积的参数数量为77CC=49C27 * 7 *C * C = 49 C^2
  2. 1 * 1卷积的作用是什么?
    • 为了在不影响卷积层感受野的前提下,增加模型的非线性。
    • 调整网络维度,如mobilenet使用1 * 1卷积核来扩维,resnet用其降维。不过这一条不是vgg提出的。

下图是VGG16的网络架构:
VGG详解

三、对比实验

首先放上作者用来做对比实验的六组网络。
VGG详解

简单介绍一下各组的区别:

  • A:没啥特别的。
  • A-LRN:加了LRN,这是AlexNet里提出来的,不需要怎么了解,基本很少使用了。
  • B:加了两个卷积层。
  • C: 进一步叠加了3个卷积层,但是加的是1 * 1kernel
  • D:将C中1 * 1的卷积核替换成了3 * 3的,VGG16
  • E:在D的基础上进一步叠加了3个3*3卷积层,VGG19

3.1 Single-Scale Evalution

VGG详解

首先说明一下训练集里图像短边长度S的设置,设置方式分为两种:

  • 固定S:针对单尺寸图片进行训练。
  • Scale jittering:即对图片采用不同的Scale进行缩放,文中S[Smin,Smax][S_{min}, S_{max}]之间随机选择,Smin=256,Smax=512S_{min} = 256, S_{max} = 512

然后图片进行各向同性缩放(后面有解释),并裁剪出224 * 224的区域。注意,这些是针对训练集图片的,但是Single Scale Evalution是针对测试集图像的,测试集图像的短边被固定为单一尺寸Q,比如Q = 256或者384

实验结果分析:

  1. A、B对比:LRN对网络性能提升没有帮助。
  2. 从A到E对比: 增加一定程度的网络深度可以提高网络精度,进一步地说,用小卷积核构建出更深的网络,比使用大卷积核的浅层网络要好。
  3. B、C对比:引入1 * 1卷积层可以提高网络精度
  4. C、D对比: 有一定大小的感受野(3*3)可以更好地捕捉上下文语境
  5. C\D\E的内部对比:针对训练集图像的Scale jittering也可以提升网络精度。

3.2 Multi-Scale Evalution

VGG详解

这里Multi-Scale是指采用多个尺寸的测试图像,可以把这个表格和前面Single Scale的表格进行对比,可以发现测试时对测试集的图像采用Scale jittering也可以获得更好的精度。

3.3 Mulit-Crop Evalution

VGG详解

首先解释一下dense evalutionmulti-crop:

  • dense evalution:用卷积层代替全连接层,那么卷积网络就可以接受任意大小的图像作为输入。

    VGG详解

    ​ 以上图为例,假设输入图片大小是14 * 14,最后输出有C个通道(等同于类别数),经过第一阶段的卷积和池化之后得到了5 * 5的特征图。如果我们用传统的CNN,那么这时候我们需要将特征图展平为一维向量,大小为(1, 25),然后加上一个全连接层(权重w的大小为(25, C)),就可以得到属于各类别的概率。但是我们可以用一个5 * 5的卷积层来代替,得到输出为(1, 1, C),然后降维得到分类概率。

    ​ 如果将全卷积网络的输入换成16 * 16的图像,结果如下图所示:

    VGG详解

    那么最后会得到2 * 2 * C的输出,把每个通道里2 * 2的特征图的每一点相加求平均(sum pooling),就是图片属于某一类别的概率。看不懂的话可以去了解一下FCN

  • multi-crop:这一种方式是将测试图片的短边缩放到不同大小Q,然后在Q * Q的图像上裁剪出多个图像,将这些图像作为CNN(没有将全连接转化为卷积)的输入,经过网络计算之后得到每个裁剪图像的分类概率,相加取平均之后作为原始图像的分类概率。按我的理解,这种方式其实和上面的dense很类似,上面输入任意大小的图像,不经过裁剪直接放到卷积层里,卷积核在原图或者特征图上的滑动就好像是在Crop,只是更加密集(dense)。

按照作者的观点,这两种方法的差别在于convolution boundary condition不同:dense由于不限制图片大小,可以利用像素点及其周围像素的信息(来自于卷积和池化),包含了一些上下文信息,增大了感受野,因此提高分类的准确度;而multi-crop由于从图片上裁剪再输网络,需要对图像进行零填充,因此增加了噪声。

实验表明,两种方式结合在一起更好。然而我也不懂怎么把它们结合在一起。

3.4 ConvNet Fushion

VGG详解

这个融合貌似意思是分别跑了各个网络之后,得到各自每张图片的softmax分类概率,然后取平均作为最后的结果,作者说因为不同网络的互补性,所以分类效果有提升。不太清楚这种测试思路在后面提出的网络中应用得怎么样了。

四、补充

4.1 各向同性缩放和各向异性缩放

VGG详解
各向同性缩放:也称为“等比缩放”,图像长边和短边缩放比例相同,这样就不会破坏原图的比例,便于对物体精准定位,对应图中上边的路线。Smin被设置为256,假设短边缩放了2倍到Smin,那么长边也对应缩放两倍。

各向异性缩放:不考虑物体是否会发生形变,直接对图片进行暴力resize,使得图像变为我们想要的尺寸,对应图中下边的路线。如图所示,直接将图片先放缩到256 * 256,发生了肉眼可见的形变。

参考资料