深度学习经典论文阅读系列之VGG网络

VGG论文阅读笔记

本文中提到的论文做了详细的标注与注解,均放在了个人仓库中,如果觉得还不错的话,欢迎帮我点个start,如果文章有任何问题,欢迎在评论区指正

深度学习经典论文阅读系列之VGG网络_第1张图片

文章目录

  • VGG论文阅读笔记
    • 摘要
    • 一、介绍
    • 二、网络的配置
      • 2.1 网络结构
      • 2.2 配置细节
      • 2.3 讨论
    • 三、分类框架
      • 3.1 训练
      • 3.2 测试
      • 3.3 实现细节
    • 四、分类实验
    • 五、结论

摘要

本篇论文研究了网络深度对精度的影响,基于本篇论文中提出的模型获得了ILSVRC-2014比赛中目标检测比赛的第一名和分类比赛的第二名。同时该模型在其他数据集上的泛化作用也很好,取得了目前(截止他们发论文的时候)的最好效果。

这篇文章的主要贡献是使用非常小的卷积网络对增加深度的网络进行了全面的评估,并且使用现有的技术使得网络的深度达到了16-19层。

在VGG模型中,提出了多种配置的模型,使用的都是很小的卷积核,大部分都是 3 × 3 3\times3 3×3的卷积核,在其中的一种配置中用到了一些 1 × 1 1\times1 1×1大小的卷积核

文章的整体结构:

  1. 对于卷积神经网络以及以往模型的简单介绍
  2. 网络的具体配置以及得到的不同的模型
  3. 训练和评估过程的细节
  4. 在ILSVRC中不同配置的比较
  5. 总结
  6. 附录A:ILSVRC目标定位的综述
  7. 附录B:推广到其他数据集的效果

在阅读本篇论文的时候,由于能力有限,仅阅读了前三个部分,对网络的结构和训练过程有了一个清楚的了解,没有仔细看取得的结果

一、介绍

由于大规模的公开数据集(ImageNet)以及高性能的计算机系统(GPU和大规模分布式集群)使得卷积神经网络取得了很大的成功。

随着卷积神经网络越来越被人们所承认,人们在卷积网络的基础上做出了一系列的尝试来获得更高的准确率。例如2013年ILSVRC竞赛冠军在第一个卷积层使用了更小的感受窗口和更小的步幅,另一个改进是在整个图像和多个尺度上密集的训练和测试网络。本篇文章使用更小的卷积层( 3 × 3 3\times3 3×3大小的卷积层)解决了深度的问题。

因此,本篇文章提出了基于卷积网络的一个可以得到更准确结果的结构,这个模型不仅在ILSVRC的分类和定位比赛中取得了比当前最优算法更好的准确率,并且也可以很好的应用到其他图像识别的数据集当中

二、网络的配置

2.1 网络结构

网络的输入是一个 224 × 224 224 \times 224 224×224大小的RGB图片

预处理比较简单,在三个通道上减去了各个通道的均值(均值是从训练集的所有数据中计算得到的)

将预处理过后的图片输入一堆卷积层中,大部分的卷积层感受野的大小都是 3 × 3 3\times3 3×3,在其中一个配置模型中还使用到了 1 × 1 1\times 1 1×1大小的卷积核,所有的卷积核的步长限制为1,另外还包含了5个最大池化层( 2 × 2 2\times2 2×2大小,步长为2),只在部分的卷积层后面有

大小为 3 × 3 3\times3 3×3的卷积核是捕捉左右,上下,中间信息的最小卷积核尺寸

1 × 1 1\times 1 1×1大小的卷积核可以看做是对输入通道的线性变化

对于 3 × 3 3\times3 3×3大小的卷积核来说设置步长为1可以保证在卷积前后图像的尺寸不发生变化

大小为 2 × 2 2\times2 2×2,步长为2的最大池化层可以使得图像的尺寸减半

在卷积层后面跟得是3个全连接层,前两层的大小是4096,后面都跟着一个ReLU层,第三层的大小是1000,最后面跟着一个softmax层

这个全连接层的配置与AlexNet的全连接层的配置一致

文章中说到所有的网络最后面的全连接层基本都一致(个人看法:应该在ILSVRC竞赛中都是一样的)

另外,在本文的基础配置中,并没有使用到AlexNet中的LRN(Local Response Normalisation)技术,作者实验中发现LRN技术在ILSVRC中并没有什么用,并且还增加了内存的消耗和计算的时间

2.2 配置细节

本文中的所有配置都在下标中列出来了,每一列代表一种不同的配置,命名为(A-E),所有的细节配置均与上一小节中提到的配置一致,只是在深度上不同而已(从11个带权重层的网络A(8个卷积层,3个全连接层)到19个带权重层的网络E(16个卷积层,3个全连接层))

通道的数目相对来说也比较少,第一层的通道数为64,每经过一次最大池化层乘2,最后到达512个通道

表二是网络参数的数量,虽然VGG比较深,但是因为使用了小卷积核原因参数数量相对于一些较大的网络来说还是比较少的

深度学习经典论文阅读系列之VGG网络_第2张图片

2.3 讨论

本文章中的网络配置与前面一些表现非常好的网络配置比较不一样(例如AlexNet和OverFeat),我们(VGG)在整个网络使用了非常小的感受野而不是在第一个卷积层使用相对来说比较大的卷积层(AlexNet中卷积核大小为 11 × 11 11\times 11 11×11步长为4,OverFeat中卷积核大小为 7 × 7 7\times7 7×7步长为2)

通过对卷积层作用的评估,可以很容易看出来两个 3 × 3 3\times3 3×3的卷积层可以起到一个 5 × 5 5\times5 5×5卷积层的作用,三个 3 × 3 3\times3 3×3的卷积层可以起到一个 7 × 7 7\times7 7×7卷积层的作用

为什么使用多个 3 × 3 3\times3 3×3大小的卷积层而不是一个比较大的卷积层?

  1. 得到的更好的拟合效果:每一个卷积层后面都会跟着一个非线性激活层,因此,为了达到 7 × 7 7\times7 7×7的效果需要使用三个 3 × 3 3\times 3 3×3大小的卷积核,因此就会有三个非线性激活层,相比较一个激活层来说可以得到的更好的拟合效果
  2. 减少了网络的参数:每一个卷积核的参数数量为 s i z e × s i z e × C i n size \times size \times C_{in} size×size×Cin,卷积核的数量为 C o u t C_{out} Cout,因此可以算出来三个 3 × 3 3\times 3 3×3大小的卷积核的参数为 3 × ( 3 × 3 × C ) × C = 27 C 2 3\times(3\times 3 \times C)\times C=27C^2 3×(3×3×C)×C=27C2,而一个 7 ∗ 7 7*7 77大小的卷积层的参数为 ( 7 × 7 × C ) × C = 49 C 2 (7\times 7\times C)\times C =49C^2 (7×7×C)×C=49C2,比使用小的卷积核多了 81 % 81\% 81%的参数

另外,在配置C中还用到了 1 × 1 1\times 1 1×1大小的卷积层, 1 × 1 1\times 1 1×1大小的卷积层主要有两个作用

  • 在不影响卷积层接受域大小(分辨率)的情况下增加决策函数的非线性能力
  • 降维(减少通道数):较大的卷积核计算起来计算成本较高,因此应该在计算前先使用 1 × 1 1\times 1 1×1大小的卷积核进行降维处理,减少输入的通道数量,可以起到减少计算的作用,降维主要是在GoogLeNet的Inception块中使用到了

GoogLeNet 2014年ILSVRC分类竞赛冠军,主要使用了一种叫做Inception的结构,这个结构中包含多个不同大小的卷积核, 1 × 1 , 3 × 3 , 5 × 5 , 7 × 7 1\times1,3\times3,5\times5,7\times7 1×1,3×3,5×5,7×7,可以让网络可以同时检测到不同大小的特征

深度学习经典论文阅读系列之VGG网络_第3张图片

三、分类框架

3.1 训练

VGG的训练过程类似于ALexNet

使用的是带动量的小批量梯度下降作为优化函数,同时添加了L2正则项进行正则化,使用Dropout减少全连接层过拟合,并且应用了学习率退火,具体参数设置如下:

  • batch size:256

  • momentum:0.9

  • weight decay 5 × 1 0 − 4 5\times 10^{-4} 5×104

  • dropout ratio:0.5

  • learning rate:0.01

    学习率退火:当验证集的准确率停止提升的时候除以10,学习率总共下降了三次,一共经过了74个Epochs

该网络与AlexNet相比来说参数的数量更多并且更深,但是因为隐式正则化(更小的卷积层)和某些层的预初始化导致收敛的速度更快

在训练的时候首先使用比较浅的配置A进行预训练,然后将预训练好的模型中应用到其他模型上去(前面的几个卷积层和最后三个全连接层,可以对照表A看)

数据增广:该模型数据增广也比较常规,对图片进行缩放后裁剪出 224 × 224 224\times224 224×224大小的图片,然后进行随机水平翻转和随机的RGB通道切换

如何进行缩放?

在本文章中对具体如何进行缩放也进行了解释:训练用到的 224 × 224 224\times 224 224×224的图片是从缩放后的原始图片中裁剪出来的,而缩放不仅仅可以缩小也可以放大,记图片缩放后的最短边的长度为S,也称为训练尺度(training scale)

有两种设置训练尺度S的办法

  • 第一种是使用固定的S,对应的是单尺度的训练,本文使用了两种大小:256(先前的模型中用的比较多)和384
  • 第二种方法是变化的S,给定一个S变化的范围 [ S m i n , S m a x ] [S_{min},S_{max}] [Smin,Smax](文章中使用的范围是 [ 256 , 512 ] [256, 512] [256,512]),使其在这个范围中随机选值来缩放图片,由于目标物体通常是不同的大小的,因此这种做法可以看做是对训练集的一种数据增广方法

3.2 测试

这里没有太看明白,不太清楚为什么文章中说到要把全连接的层转换为卷积层

3.3 实现细节

实现使用的是基于C++的Caffe toolbox,并且还做了一系列的优化,是的可以在一个系统的多个GPU上进行训练和测试。

多GPU训练首先将一个batch上的数据平均分配到各个GPU上面,计算完成之后再将所有的GPU的计算结果取平均值就可以得到整个batch上面的计算结果,与单个GPU上取得的结果一致

最后,该模型在配备有4个NVIDIA Titan Black GPU的机器上训练一个架构需要花费2-3周的时间

四、分类实验

这里使用的数据集是ILSVRC-2012,这个数据集有1000个类,包含三个部分:训练集(1.3M),验证集(50K),测试集(100K),可以通过两个指标来评估准确率:top-1 和 top-5误差

  • top-1误差是一个多类分类误差,表示分类错误图片的比例
  • top-5误差是竞赛评估的主要指标,表示了真实的类别不在预测到的概率最大的五个类别中的错误率

在该部分总共介绍了三种不同的评估方法,分别是

  • 单尺度评估
  • 多尺度评估
  • 多次裁剪评估

在评估完成后与当前效果最好的网络进行了比较

感觉这里对模型理解帮助不大,没有仔细读,因此就不细写了

五、结论

在这次的工作中,我们评估了大尺度图像分类汇总非常深的卷积神经网络的作用,他展示了模型的深度对于分类准确率的重要性。

同时在附录中,我们也展示了我们的模型更广范围的任务以及数据集上得到一个很好的泛化效果。

最后,我们的结论再一次证明了深度在视觉表征中的重要性

你可能感兴趣的:(深度学习经典论文,计算机视觉,深度学习,分类)