VggNet 论文分析

题目:

  VggNet:《Very Deep Convolutional Networks for Large-Scale Image Recognition》,大规模图像识别的深度卷积网络。

论文总览

  首先,读一篇论文,我们第一遍通常需要泛读,即读这篇论文的题目,摘要,各个部分的标题和小标题,以及图片和表格。

  下面是泛读之后整理出该篇论文大致分成5个部分。

在这里插入图片描述


Part 1:论文导读

研究背景

  VGGNet 这篇论文的主要贡献就是在于从网络深度这一角度出发,对卷积神经网络进行了改进。非常详细的评估了网络深度所带来的影响,证明了网络的深度对于性能的提升具有举足轻重的作用。而且由于文中训练的两个16层和19层的网络由于其强大的泛化能力,在之后得到了非常广泛的应用。

VGGNet 主要特点

  • 网络很深
  • 卷积层中使用的卷积核很小,且都是3*3的卷积核

研究成果

  VGGNet 在2014年的 ImageNet Challenge 中获得了分类任务的第二名和定位任务的第一名。而且在分类任务中,只和获得冠军的 GoogLeNet 只相差了 0.1%,而且在单个网络中,VGG 是表现最好的,误差是 7.0%,比 GoogLeNet 的 7.9% 高了 0.9 个百分点。
在这里插入图片描述


Part 2:论文精读

摘要

下面,我们先来看看摘要。
在这里插入图片描述

我们可以将摘要总结如下:

  • 这篇论文主要研究的是卷积神经网络深度对分类准确度的影响
  • 我们整个网络都使用 3*3 的卷积核,成功将深度扩大了16-19层,并且得到了一个很好的效果
  • VGGNet 获得了2014年 ImageNet Challenge 的定位任务第一名和分类任务第二名
  • 该模型的泛化能力很强,运用到其它数据集上也得到了很好的效果
  • 表现最好的两个模型已经投入到未来的研究中

论文小标题

在这里插入图片描述
  从小标题的个数可以看出,第4部分的子标题最多,我们应该重点关注,其次应该关注第2、3部分。

  当我们正式进入某一部分时,我们可以先看一下,该部分有没有 Overall、Conclusion、Discussion等等。或许我们先从该部分入手,先了解到该部分的大体内容,再返回去看具体的实现细节。

  那么我们先从网络的架构(Configurations)入手,从上面的小标题可以看出,我们可以先从 2.3 小节入手。


2. VGGNet 网络结构

我们先看 2.3 的 discussion。
在这里插入图片描述

可以从上面一段文字总结如下:

  1. 整个神经网络都是使用的 3*3的卷积核
  2. 通过堆叠多个33的卷积核来代替大尺度卷积核,堆积2个33的卷积代替一个55的卷积,堆叠3个33的卷积代替一个7*7的卷积
  3. 这样做的好处:不仅能使决策函数更有区别,而且使得参数大大减少

在这里插入图片描述

  可以从上面一段文字总结如下: 使用 1*1 的卷积可以在不影响卷积层的结果的情况下增加决策函数的非线性。


在这里插入图片描述
  可以从上面一段文字总结如下: 这次比赛的冠军 GoogLeNet 也使用了非常深的网络(22层)和小的卷积核(11,33,5*5)。它们使用为了减少计算量,设计更为复杂,更积极地减少了第一层的特征图的空间分布。但是从单个网络的分类准确率来看,VGGNet 的表现要优于 GoogLeNet。


接下来,我们再来看 2.3 小节中的图。
在这里插入图片描述
  
  在实验中,一共尝试了上面六种模型(每一列是一种模型),模型中都使用了是 3x3 的卷积核大小,在模型 C 中尝试了 1x1 的卷积核,模型的深度从左向右依次增加。为了简洁方便,表格中只展示了卷积操作和池化操作,没有显示激活函数(在每个卷积层和全连接层后都有激活函数)。而且我们发现每层的通道数很小,第一层的通道数只有64,之后每进行一次最大池化,通道数变为之前的2倍,直到增加到512为止。

  下面是16层的 VGGNet 的模型图。
在这里插入图片描述

图中符号表示:

  • conv3-64:卷积核的大小为 3*3,输出通道数为 64
  • conv1-256:卷积核大小为 1*1,输出通道数为 256
  • FC-4096:全连接层,输出神经元个数为 4096
  • FC-1000:全连接层,输出神经元个数为 1000
  • maxpool:采用最大池化

在这里插入图片描述

  关于Table 2 的描述,在 2.2 小节中,我们来看看 2.2 小节。
在这里插入图片描述

  Table 2 展示了上面六种模型中的参数个数,从 Table 1 中,我们知道模型的深度是从11层增加到了19层,尽管深度很深,但是网络的权重的数量是不大于一个更浅更宽的网络的。

  最后我们在来看看整体网络的架构(2.1)。
在这里插入图片描述
从上面几段话,可以总结如下

  1. 每个模型的输入都是 224x224 大小的RGB图片,而且需要在训练集上进行正则化。
  2. 在卷积层中使用的是 3x3 的卷积核,在模型 C 中使用了 1x1 的卷积核
  3. 六个模型都有5个最大池化层,并且池化层中使用的都是 2x2 的卷积核,并且 stride 为 2
  4. 所有的隐藏层都有激活函数
  5. LRN(局部响应正则化)不能改善性能,反而会导致增加内存消耗和时间消耗

3. Classification Framework

  下面我们接着看第3节,该节主要描述的是网络中训练和评估的细节。我们先从 3.1 的 Training 开始。

3.1 Training

在这里插入图片描述

以上几段主要介绍了在训练过程中参数的设置以及初始化,以及扩充数据集的方法。总结如下:

  • batch_size = 256

  • momentum = 0.9

  • L 2 L_2 L2 正则项: 5 ⋅ 1 0 − 4 5·10^{-4} 5104

  • dropout:p = 0.5

  • learning rate:0.01(当验证集准确度不变时,learning rate 变为原来的 1/10)

  • 随机初始化权重,然后用模型 A 进行训练,然后将优化后得到的权重作为更深层的网络的前4层卷积层和最后3个全连接层的初始化权重,并且这些层的学习率不进行衰减。其余层进行进行随机初始化,权重初始化为均值为0,方差为0.01的正态分布,偏差为0。

  • 但是他们在论文提交之后发现,可以不用上面的方法初始化权重,直接使用 Glorot & Bengio(2010) 的随机初始化程序就能得到很好的效果。下面是 Glorot & Bengio 的初始化方法。
    在这里插入图片描述

  • 他们使用随即裁剪的方式将输入的图片大小固定在 224x224。为了扩充数据集,采用随机水平翻转和随机RGB颜色扰动

  
下面是对于训练图片大小的设置。
在这里插入图片描述
上面采取了两种方法来设置训练图片的大小 S。

  1. 第一种方法:固定 S,在实验中,评估模型用了两种图片大小:256 和 384。第一次训练固定图像大小 S = 256,为了加快 S = 384 的网络,将 S = 256 模型训练得到的参数作为 S = 384 模型的初始化权重,初始化学习率为 0.001
  2. 第二种方法:多尺度的训练。不固定训练图片的大小,将其固定在一个范围中 [256, 512],在训练时,考虑到不同尺度的图片作为训练集训练网络对训练是有益的,也可以看做通过尺度抖动增加训练数据集。这样训练出来的模型可以识别各种大小的图片,由于速度方面的原因,我们训练多尺度模型的方法是对相同配置的单尺度模型的所有层进行微调,预先用固定的S = 384进行训练。

3.2 Testing

下面让我们来看一下测试数据集。
在这里插入图片描述

总结如下:

  1. 用一张测试图片的不同大小进行测试,最后取这些结果的平均值作为该图片的结果,这样也会改善性能。
  2. 在最后一个卷积层的最后我们需要做一个最大/平均池化,为了使得能够和全连接层连接上,所以需要将最后一个卷积层的输出进行规定。

  举个栗子:假设输入的图片大小为 224x224x3,那么最后一个卷积层的输出为 7x7x512。那么如果输入图片大小为 448x448x3,那么最后一个卷积层的输出为 14x14x512。这样两个不同的尺度就不能连接同一个全连接层,所以需要对最后一个卷积层的输出做一个规定大小。那么只需要对他们做一个均值(最大)池化操作,7x7x512 池化之后就是 512,14x14x512 池化之后也是 512,这样就能与全连接层相连接了。

在这里插入图片描述

  1. 通过水平翻转图像增加扩充测试数据集,最后将原始图片和翻转后的图片的结果平均值作为该图片的最终结果。
  2. 我们在评估网络时,把每张图片变为3个尺寸,从每个尺寸的图片中随即裁剪出50个不同的图片,然后一张图片就变成了150张图片
      

3.3 Implementation Details

最后我们再来看看实现细节(3.3)
在这里插入图片描述

总结:

  网络进行训练和评价以及训练和评估全尺寸多尺度图像都是使用一个系统上的多个 GPU 。多 GPU 训练利用数据并行性,将每批训练图像分割成若干 GPU 批次,在每个GPU上并行处理。计算完 GPU 批处理梯度后,取其平均值,得到整个批处理的梯度。梯度计算是同步的跨 GPU,因此结果和单一 GPU 训练是完全相同的。

   网络在4个 NVIDIA Titan Black GPUs 训练单个网络花费了 2-3 周。


4. Classification Experiments

  在第4节中,主要呈现了在 ILSVRC-2012 数据集上的分类结果,分类表现主要有两种评价指标:top-1 and top-5 errro,top-5 error 是 ILSVRC 的主要评价指标。

4.1 Single Scale Evaluation

  单尺度评估。首先我们来看看4.1小节给出的表格。
在这里插入图片描述
  对于模型 A,A-LRN,B,它们都采用的是固定 S = 256,并且我们发现模型 A-LRN 的表现还没有模型 A 好,所以对于后面的模型,都没有使用 LRN(局部响应正则化),但是我们观察到从模型 A 到模型 B,随着深度的增加,top-1 和 top-5 error 也在下降

  再来观察模型 C、D、E,它们的 train 都测试了3种图片尺度,分别是 S=256,S=384,S=[256;512]。我们只看三个模型的 S=256 和 S=384,我们很容易发现不管哪一种模型,当 S=384,其模型的 top-1 和 top-5 是要优于 S=256 的。那是因为图片的分辨率越高,我们能够更容易捕捉到一些空间特征,所以其分类准确度就越高

  最后,我们再来看看的三种模型的 S=[256;512] 的这种情况,我们很容易发现这种情况的分类结果不管在哪一种模型中都是表现最好的。这也证明了通过尺度来扩充训练集确实有助于捕获多尺度图像统计

4.2 Multi-Scale Evaluation

  多尺度评估。主要评估在测试阶段尺度抖动对分类准确度影响。当用固定图片大小S进行训练得到的模型,会用一张测试图片的三种尺寸大小进行评估,那么三种图片大小分别为:S-32,S,S+32。当训练时不是使用的固定 S 进行训练,S 是一个变量,属于 [ S m i n S_{min} Smin, S m a x S_{max} Smax],那么我们在评估时,测试图片的大小分别是: S m i n S_{min} Smin, 0.5 ( S m i n + S m a x ) 0.5(S_{min} + S_{max}) 0.5(Smin+Smax), S m a x S_{max} Smax

  评估结果如下:
在这里插入图片描述
  根据表格我们可以得出结论:在测试阶段的尺度抖动相较于单尺度的相同模型会有更好的表现。其中模型 D 和 E 表现最好。表现最好的单个网络在验证数据集上 top-1 和 top-5 error 达到了 24.8%/7.5%,在测试数据集上,模型 E 达到了 7.3 % 的 top-5 error。

4.3 Multi-Crop Evaluation

  多裁剪评估。这里主要用到两种评估方法,一种是 dense,即评估时所使用的图片是整张图片,不经过任何裁剪。那么另一种就是 multi-crop,就是评估时使用的是裁剪后的图片。评估结果如下表:
在这里插入图片描述
  从评估结果来看,使用 multi-crop 要比使用 dense 的表现稍微好一些,而且两种方法结合使用的表现比单独使用任何一种方法的效果都要好,因为两种方法是互补的。
  

4.4 Convent Fusion

  模型融合。通过融合几种模型,最后取各个模型的 soft-max 结果的平均值作为模型的输出。下面是融合不同模型得到的实验结果。
在这里插入图片描述
  可以从实验结果发现,融合一个模型 D 和模型 E ,并且在评估时使用 multi-crop 和 dense 的方法得到的表现最好。

  

4.5 Comparison With The State Of The Art

  主要是和 ILSVRC 比赛中表现比较好的模型进行比较,下表是在挑战赛中表现比较好的模型。
在这里插入图片描述
  在 2014 年的挑战赛中,GoogLeNet 以 6.7% 的 error 夺冠,VGGNet 以 6.8% 的 error 获得第二名。但是如果从一个网络的分类准确度来看,VGG 是以 7.0% 的 error 要优于 GoogLeNet 的 7.9%。


论文总结

  在研究完每篇论文之后,我们都需要做一个总结。

  那么我们先来看一下这篇论文的总结是什么?
在这里插入图片描述
再次强调了深度确实能够增加分类准确度


下面就来进行自我总结。

  
创新点

  • 整个网络都采用 3x3 的卷积核,从而增加神经网络的深度。两个3x3卷积核的堆叠代替一个5x5卷积核,三个3x3卷积核代替一个7x7卷积核。这样一方面能够减少参数的数量,另一方面拥有更多的非线性变化。
  • 在卷积结构中引入1x1的卷积核,在不影响输入输出维度的情况下,引入非线性变换,增加网络的表达能力,降低计算量
  • 通过预训练的方式来更好的初始化权重,加快训练的收敛速度
  • 采用 Multi-Scale 的方式训练和预测,可以扩充数据集,防止过拟合,提升预测准确率。
  • 深层网络更适合于大的数据集

启发点

  • 深度能够提高网络的分类准确率
  • 为了加快收敛速度,可以使用预训练的方式初始化权重
  • 在更深层的网络中,LRN方法并没有什么用,反而会导致内存和时间的消耗
  • 通过堆叠小卷积核可以减少网络参数,增加网络深度,提升网络性能
  • 在训练和测试使用 Multi-Scale 可以扩充数据集,防止过拟合

  复现代码见 VGGNet

  最好分类准确度达到了 80% 左右。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值