返回介绍

数学基础

统计学习

深度学习

工具

Scala

三、VGG-Net

发布于 2023-07-17 23:38:25 字数 5961 浏览 0 评论 0 收藏 0

  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激活函数,表中没有标出。

  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. 输入预处理:通道像素零均值化。

    • 先统计训练集中全部样本的通道均值:所有红色通道的像素均值 $ MathJax-Element-53 $ 、所有绿色通道的像素均值 $ MathJax-Element-54 $ 、所有蓝色通道的像素均值 $ MathJax-Element-55 $ 。

      $ \overline {Red} = \sum_{n}\sum_{i}\sum_{j} I_{n,0,i,j}\\ \overline {Green} = \sum_{n}\sum_{i}\sum_{j} I_{n,1,i,j}\\ \overline {Blue} = \sum_{n}\sum_{i}\sum_{j} I_{n,2,i,j} $

      其中:假设红色通道为通道0,绿色通道为通道1,蓝色通道为通道2 ; $ MathJax-Element-566 $ 遍历所有的训练样本, $ MathJax-Element-57 $ 遍历图片空间上的所有坐标。

    • 对每个样本:红色通道的每个像素值减去 $ MathJax-Element-58 $ ,绿色通道的每个像素值减去 $ MathJax-Element-59 $ ,蓝色通道的每个像素值减去 $ MathJax-Element-60 $ 。

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

    有两种方案:

    • 在所有图像上固定 $ MathJax-Element-321 $ :用 $ MathJax-Element-63 $ 来训练一个模型,用 $ MathJax-Element-64 $ 来训练另一个模型。最后使用两个模型来评估。

    • 对每个图像,在 $ MathJax-Element-65 $ 之间随机选取一个 $ MathJax-Element-321 $ ,然后进行裁剪来训练一个模型。最后使用单个模型来评估。

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

  3. 多尺度测试:将测试的原始图像等轴的缩放到预定义的最小图像边,表示为 $ MathJax-Element-673 $ ( $ MathJax-Element-673 $ 不一定等于 $ MathJax-Element-321 $ ),称作测试尺度。

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

    • 不同版本对应于不同的 $ MathJax-Element-673 $ 值。
    • 所有版本都执行通道像素归一化。注意:采用训练集的统计量。

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

  4. 评估有三种方案:

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

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

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

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

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

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

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

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

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

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文