深度学习小白笔记:VGG篇

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

在学习了Alexnet之后,紧接着学习VGG,给我一个很直观的感受就是VGG是对Alexnet的全面升级(虽然不知道这样理解有没有问题),因为能感觉到相较于Alexnet,VGG可以说在其基础上做了更多的尝试和改进,并且取得了很好的效果。当然在此之前,先来看看VGG的网络构架图吧:
深度学习小白笔记:VGG篇_第1张图片

VGG的主要参数:

在这里插入图片描述

  • 网络结构:六种(A,A-LRN,B,C,D,E)

  • 结构层:
    A:11层(8conv+3FC)
    A-LRN:11层(8conv+3FC)
    B:13层(10conv+3FC)
    C:16层(13conv+3FC)
    D:16层(13conv+3FC)
    E:19层(16conv+3FC)

  • 输入尺寸:224 * 224 * 3

  • 卷积核:3 * 3,1 * 1

  • Max-pool:2 * 2 步长:2

  • 激活函数:RELU

VGG结构分析:
通过上面的框架图可以看出VGG的构建思路是分成五个大的卷积层和卷积之后的全连接组成的,整体可以看成5+3的结构,但是每个大的卷积层由多个3*3的小卷积核(有的有1 * 1的卷积核)组成(这也是之前认为VGG是Alexnet的升级版的原因之一)。
每一大层卷积层之后,通过一个2 * 2的max-pool,卷积层输出后通过3个全连接
层,与Alexnet相同,第二个全连接层为soft-max提供1000个标签

讲讲VGG本身与Alexnet相比所作出的升级吧:

1.小卷积堆叠代替大卷积:
在Alexnet中,第一层采用了11 * 11,第二层采用了5 * 5这样的大卷积核,而VGG做出的改变是利用3 * 3和1 * 1的小卷积堆叠来代替。我们可以发现,虽然Alexnet在第一第二层利用了大卷积核,但是在后面却清一色的换成了3 * 3的小卷积,而我认为在整个卷积过程中,后面的小卷积核能达到更好的提取信息的作用。(查了查相关知识,我的理解是Alexnet的目的是利用大卷积层进行初步的特征捕捉,提高效率,在后面利用小卷积层进行更细节和特征捕获)而VGG正是基于小卷积核能更有效地提取的特性,通过采用多个小卷积核堆叠代替一个大卷积核的方式让网络训练效果更好。
小卷积核堆叠的优势:
1.多个 3x3 的卷基层比一个大尺寸 filter卷基层有更多的非线性(更多层的非线性函数),使得判决函数更加具有判决性。
2.多个卷积层堆叠有能代替大卷积核,感受野不变
深度学习小白笔记:VGG篇_第2张图片
作者认为2个3 * 3的卷积核的堆叠所获得的感受野相当于一个5 * 5的卷积核,而3个3 * 3的卷积核的堆叠所获得的感受野相当于一个7 * 7的卷积核(在这个地方我一开始有点没看懂卷积核堆叠后感受野的计算逻辑,借用网友一张图
深度学习小白笔记:VGG篇_第3张图片
3.卷积层参数减少:相比11 * 11,7 * 7的大卷积核,3 * 3的小卷积核在同样的替代关系中能减少参数的计算,举一个例子:用2个3*3的卷积核代替5 * 5的卷积核,前者卷积层参数:2 * 3 * 3=18,后者卷积层参数:5 * 5=25。用3个3 * 3的卷积核代替7 * 7的卷积核:前者卷积层参数:3 * 3 * 3=27,后者卷积层参数:7 * 7=49。
4.采用1 * 1的卷积核在不影响感受野的情况下增加了模型的非线性特性,非线性激活函数起到非线性作用。
5.小卷积堆叠的分类精度比单个大卷积核要好。

2. 小池化核:
相比于Alexnet的池化核,VGG采用了更小的2 * 2,步数为2的池化核。(没有摸得很清楚这么做的好处o(╥﹏╥)o)
3. 训练方式:
网络权值的初始化非常重要,因为在深网中,由于梯度的不稳定性,初始化不好会导致学习停滞。 所以训练先从A开始,它足够浅显,可以用随机初始化进行训练。 然后,在训练更深入的架构时,用A层的训练结果初始化后面深层的网络(中间层是随机初始化的),这样使得训练结果能更好更有效率的收敛。

ConvNet训练和评估:

训练:
ConvNet训练过程一般遵循Krizhevsky et al.(2012)。 即利用小批梯度下降(基于反向传播(LeCun et al., 1989))优化多项式logistic回归目标,并有动量进行训练。 批量大小设置为256,动量设置为0.9。

为了进一步扩大训练集,作物进行了随机水平翻转和随机RGB颜色偏移。
训练图像大小:
设S为各向同性缩放后的训练图像的最小边,从该图像中裁剪出ConvNet输入(我们也将S称为训练比例尺),输入大小是固定的224×224,原则上可以取任何值不低于224:S = 224作物将捕获整幅图像的统计信息,完全跨越最小的训练图像; 224年代≫作物将对应于图像的一小部分,包含一个小物体或物体的一部分。
两种设置训练尺度S的方法:

  • 单尺度训练(固定S):S = 256(这在现有技术中已经得到了广泛的应用)(Krizhevsky et al., 2012; Zeiler & Fergus, 2013; Sermanet et al., 2014), S = 384。 给定一个ConvNet配置,我们首先使用S = 256对网络进行训练。 为了加快S = 384网络的训练速度,我们使用S = 256的权值进行初始化,初始学习率较小,为10 − 3 。
  • 多尺度训练:每一幅训练图像通过从一定范围内随机采样S进行单独的缩放[Smin,Smax](Smin = 256,Smax = 512)。 由于图像中的对象可以是不同大小的,因此在训练时考虑这一点是有益的。 这也可以看作是通过尺度抖动来增加训练集,即训练单个模型来识别大范围尺度上的物体。 为了提高速度,对多尺度模型进行了训练,对具有相同配置的单尺度模型的所有层进行了微调,用固定的S = 384进行了预训练。
    对比:
    单尺度预测:
    深度学习小白笔记:VGG篇_第4张图片
    多尺度预测:
    深度学习小白笔记:VGG篇_第5张图片
  • 网络越深,训练效果越好。
  • 随机scale jittering效果比固定S=256,384尺度,效果好。

总结:

  1. VGG采用多层小卷积核堆叠代替大卷积核的方式,在保证相同效果的前提下减少了参数计算量,提高了训练效率和对细节特征的提取。同时引入1 * 1的卷积核增强了模型的非线性特性。
  2. 训练方面,采用单尺度和多尺度训练的训练方式,增加了训练的数据量。同时先训练A层,用A的训练结果训练更深的网络,使得训练结果能更好更有效率的收敛。

关于训练和测试部分理解还不够o(╥﹏╥)o。。。。。
持续学习,更新中。。。。。
参考文献:

  • https://arxiv.org/pdf/1409.1556.pdf
  • https://www.sohu.com/a/214925396_633698

你可能感兴趣的:(深度学习小白笔记:VGG篇)