Feature Extractor[VGG]

时间:2021-10-14 19:29:07

0. 背景

Karen Simonyan等人在2014年参加Imagenet挑战赛的时候提出的深度卷积神经网络。作者通过对2013年的ILSVRC中最好的深度神经网络模型(他们最初的对应模型都是alexnet)进行研究,发现他们使用了更小的感受野,并且在第一层卷积层中使用了更小的stride,也就是这两点都有助于准确度的提升。所以本文就不去做无用功,从网络的深度去挖掘CNN模型的提升空间,并且发现当网络深度在超过16层时,有明显的提升效果,故而如果截取当前16层的网络,就被称之为VGG16。

从感受野角度来说,两个\(3*3\)的卷积核叠加,就等于一个\(5*5\)的卷积核的结果。可是从参数量上,前者明显会小于后者。而且从分层角度上看,因为之间会通过非线性激活函数的转换,所以\(3*3\)的卷积核叠加还能得到更非线性的特征提取结果

为了遵循单一变量的原则,除了深度外,其他涉及到的参数基本保持一致。

1. 模型

Feature Extractor[VGG]
图1.1 VGG不同深度时的网络结构
如图1.1所示,图片的输入都是\(224*224\),卷积核大小都是\(3*3\),滑动的步长stride=1,在某些卷积层后面跟上最大池化,其中池化的大小为\(2*2\),且每一层卷积都是保留尺寸的卷积(即卷积之后,feature map的大小不变),且为了降维、对通道的线性变换、增加决策函数的非线性等目的,采用了《network in network》中的\(1*1\)的卷积操作。其中FC层表示该层为全连接层。
作者通过试验发现alexnet中的LRN(Local Response Normalisation,LRN)不但不利于准确度提升,反而还会占用内存,所以都省略了该层。

Feature Extractor[VGG]
图1.2 不同深度VGG下参数量,单位为百万

2. 训练结果

作者在训练的时候,开始先训练模型A,然后在训练模型B的时候,将前面几层CNN和最后的全连接层的参数用模型A的权重来初始化,以此达到用小模型去预训练大模型的目的;
而且,作者用S表示对训练集图片做的一个缩放,用Q表示对测试集图片做的一个缩放,当然其中S和Q都不得小于224。

简单的训练过程如下:

  • 1 - 给定S和Q值,将图片进行各方向同性缩放到S和Q;
  • 2 - 然后用crop的方法对缩放后的图片进行采样到\(224*224\);
  • 3 - 将crop采样得到的图片放入VGG模型中训练。

Feature Extractor[VGG]
图2.1基于单尺度测试情况下的结果
Feature Extractor[VGG]
图2.2基于多尺度测试情况下的结果
从图2.1和图2.2中可以看出:从C模型与D模型对比,可以肯定深度的好处的确有助于准确度的提升;而从E模型与D模型的对比,发现还是E模型更好,作者认为深度有助于提升准确度,可是模型还是需要通过卷积核去抓取空间上下文信息。

因为大家通常都是直接将基于imagenet训练好的VGG拿来用,所以基本没多少人会从0开始训练VGG网络。而且论文中也显示4块卡,也需要小心的训练2-3个礼拜。本文只着重于VGG的网络结构,如有必要,后续再补全该博文。

参考文献:
[] - Zeiler M D, Fergus R. Visualizing and understanding convolutional networks[C]//European conference on computer vision. Springer, Cham, 2014: 818-833.
[] - Sermanet, P., Eigen, D., Zhang, X., Mathieu, M., Fergus, R., and LeCun, Y. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In Proc. ICLR, 2014[]