三、VGG-Net

  1. VGG-Net 是牛津大学计算机视觉组和DeepMind公司共同研发一种深度卷积网络,并且在2014年在ILSVRC比赛上获得了分类项目的第二名和定位项目的第一名。

  2. VGG-Net 的主要贡献是:

    • 证明了小尺寸卷积核(3x3 )的深层网络要优于大尺寸卷积核的浅层网络。
    • 证明了深度对网络的泛化性能的重要性。
    • 验证了尺寸抖动scale jittering 这一数据增强技术的有效性。
  3. VGG-Net 最大的问题在于参数数量,VGG-19 基本上是参数数量最多的卷积网络架构。

3.1 网络结构

  1. VGG-Net 一共有五组结构(分别表示为:A~E ), 每组结构都类似,区别在于网络深度上的不同。

    • 结构中不同的部分用黑色粗体给出。

    • 卷积层的参数为convx-y,其中x 为卷积核大小,y 为卷积核数量。

      如:conv3-64 表示 643x3 的卷积核。

    • 卷积层的通道数刚开始很小(64通道),然后在每个池化层之后的卷积层通道数翻倍,直到512。

    • 每个卷积层之后都跟随一个ReLU激活函数,表中没有标出。

    三、VGG-Net - 图1

  2. 通用结构:

    • 输入层:固定大小的224x224RGB 图像。

    • 卷积层:卷积步长均为1。

      • 填充方式:填充卷积层的输入,使得卷积前后保持同样的空间分辨率。

        • 3x3 卷积:same 填充,即:输入的上下左右各填充1个像素。
        • 1x1 卷积:不需要填充。
      • 卷积核尺寸:有3x31x1 两种。

        • 3x3 卷积核:这是捕获左右、上下、中心等概念的最小尺寸。

        • 1x1 卷积核:用于输入通道的线性变换。

          在它之后接一个ReLU 激活函数,使得输入通道执行了非线性变换。

    • 池化层:采用最大池化。

      • 池化层连接在卷积层之后,但并不是所有的卷积层之后都有池化。
      • 池化窗口为2x2,步长为 2 。
    • 网络最后四层为::三个全连接层 + 一个softmax 层。

      • 前两个全连接层都是 4096个神经元,第三个全连接层是 1000 个神经元(因为执行的是 1000 类的分类)。
      • 最后一层是softmax 层用于输出类别的概率。
    • 所有隐层都使用ReLU 激活函数。
  3. VGG-Net 网络参数数量:

    其中第一个全连接层的参数数量为:7x7x512x4096=1.02亿 ,因此网络绝大部分参数来自于该层。

    AlexNet 相比,VGG-Net 在第一个全连接层的输入feature map 较大:7x7 vs 6x6512 vs 256

    网络A , A-LRNBCDE
    参数数量1.13亿1.33亿1.34亿1.38亿1.44

3.2 设计技巧

  1. 输入预处理:通道像素零均值化。

    • 先统计训练集中全部样本的通道均值:所有红色通道的像素均值 三、VGG-Net - 图2 、所有绿色通道的像素均值 三、VGG-Net - 图3 、所有蓝色通道的像素均值 三、VGG-Net - 图4

      三、VGG-Net - 图5

      其中:假设红色通道为通道0,绿色通道为通道1,蓝色通道为通道2三、VGG-Net - 图6 遍历所有的训练样本,三、VGG-Net - 图7 遍历图片空间上的所有坐标。

    • 对每个样本:红色通道的每个像素值减去 三、VGG-Net - 图8 ,绿色通道的每个像素值减去 三、VGG-Net - 图9 ,蓝色通道的每个像素值减去 三、VGG-Net - 图10

  2. 多尺度训练:将原始的图像缩放到最小的边 三、VGG-Net - 图11 ,然后在整副图像上截取224x224 的区域来训练。

    有两种方案:

    • 在所有图像上固定 三、VGG-Net - 图12 :用 三、VGG-Net - 图13 来训练一个模型,用 三、VGG-Net - 图14 来训练另一个模型。最后使用两个模型来评估。

    • 对每个图像,在 三、VGG-Net - 图15 之间随机选取一个 三、VGG-Net - 图16 ,然后进行裁剪来训练一个模型。最后使用单个模型来评估。

      • 该方法只需要一个单一的模型。
      • 该方法相当于使用了尺寸抖动(scale jittering) 的数据增强。

      三、VGG-Net - 图17

  3. 多尺度测试:将测试的原始图像等轴的缩放到预定义的最小图像边,表示为 三、VGG-Net - 图18三、VGG-Net - 图19 不一定等于 三、VGG-Net - 图20 ),称作测试尺度。

    在一张测试图像的几个归一化版本上运行模型,然后对得到的结果进行平均。

    • 不同版本对应于不同的 三、VGG-Net - 图21 值。
    • 所有版本都执行通道像素归一化。注意:采用训练集的统计量。

    该方法相当于在测试时使用了尺寸抖动。实验结果表明:测试时的尺寸抖动导致了更好的性能。

    三、VGG-Net - 图22

  4. 评估有三种方案:

    • single-crop:对测试图片沿着最短边缩放,然后选择其中的 center crop 来裁剪图像,选择这个图像的预测结果作为原始图像的预测结果。

      该方法的缺点是:仅仅保留图片的中央部分可能会丢掉图片类别的关键信息。因此该方法很少在实际任务中使用,通常用于不同模型之间的性能比较。

    • multi-crop:类似AlexNet 的做法,对每个测试图像获取多个裁剪图像,平均每个裁剪图像的预测结果为原始图像的预测结果。

      该方法的缺点是:需要网络重新计算每个裁剪图像,效率较低。

    • dense:将最后三个全连接层用等效的卷积层替代,成为一个全卷积网络。其中:第一个全连接层用7x7 的卷积层替代,后面两个全连接层用1x1 的卷积层替代。

      该全卷积网络应用到整张图片上(无需裁剪),得到一个多位置的、各类别的概率字典。通过原始图片、水平翻转图片的各类别预测的均值,得到原始图片的各类别概率。

      该方法的优点是:不需要裁剪图片,支持多尺度的图片测试,计算效率较高。

    实验结果表明:multi-crop 评估方式要比dense 评估方式表现更好。另外,二者是互补的,其组合要优于任何单独的一种。下表中,S=[256;512]三、VGG-Net - 图23

    还有一种评估策略:ensemble error 。即:同时训练同一种网络的多个不同的模型,然后用这几个模型的预测结果的平均误差作为最终的 ensemble error

    有一种术语叫single-model error。它是训练一个模型,然后采用上述的多种crop/dense 评估的组合,这些组合的平均输出作为预测结果。

    三、VGG-Net - 图24

  5. 权重初始化:由于网络深度较深,因此网络权重的初始化很重要,设计不好的初始化可能会阻碍学习。

    • 论文的权重初始化方案为:先训练结构A 。当训练更深的配置时,使用结构A 的前四个卷积层和最后三个全连接层来初始化网络,网络的其它层被随机初始化。
    • 作者后来指出:可以通过 Xavier均匀初始化来直接初始化权重而不需要进行预训练。
  6. 实验结果表明:

    • 分类误差随着网络深度的增加而减小。
    • A-LRNA 的比较发现:局部响应归一化层LRN 对于模型没有任何改善。