引入:本次学习内容基本来自于Karen Simonyan ,Andrew Zisserman 等编写的的《VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION》,以及部分VGG讲解视频,本学习记录仅为个人学习收获,部分内容存在纰漏烦请各位大佬批评指正。
(一)论文摘要:作者通过使用具有非常小(3×3)卷积滤波器的架构,对不断增加深度的网络进行了全面的评估,发现将深度推至16、19层权重层可以显著改善先前的配置。这些研究结果成为了作者团队在ImageNet Challenge 2014中提交作品的基础,该团队在定位和分类两个任务中分别获得了第一和第二名。
(二)发表时间:2014
(三)关键词:增加深度,经典卷积神经网络,ImageNet
(四)收获:VGG的设计灵感是来自AlexNet的,它对其做出了一些改进。而作者在论文中第一节中便提到了两种改进方式。一种是使用较小的感受野大小和第一个卷积层的较小步幅。另一种改进方法是在整个图像和多个尺度上密集地训练和测试网络。而他是对结构的深度进行了改良和设计,具体内容是连续使用了几个3×3的卷积核去代替AlexNet中的卷积核,而之所以使用3×3的卷积核是因为这是捕捉左/右、上/下、中心概念的最小尺寸。具体结构如下图所示,其中的D和E是VGG16与VGG19。
而这么做的好处便是增加了非线性次数,学习能力变得更好,同时感受野的范围与之前是一样的,而且一定程度上减少了参数的数量。论文中举了一个例子,假设有C个通道,那么改良后的参数个数就是27C*C(3×3(卷积核)×C(通道)×C(卷积核个数)×3(3层卷积)),而如果是7×7的卷积核,就会有49C*C个参数,足足提升了81%(论文原数据,我怎么看都是一半左右,但是作者是这样算的(49-27)/27,有一点讨巧,哈哈)。
相比于AlexNet训练前就只是裁剪尺寸,VGG做了预处理,即图像中的每个像素减去三通道的平均值,也是整体中的唯一预处理。
但是,如果我们看到VGG的三个全连接层的话会发现,它的第一个全连接层也是4096个量,已知第五个bolck(D模型)输出结果是7×7×512,经过三个全连接层,最终结果也是有大概138M个参数,E模型达到了144M的数量,似乎也挺大的。但是作者说到,芜湖,和Smeranel等人144M的参数量相比,我们算少的了(原文章节2.2)。
同时,论文中也提到了LRN(AlexNet中的技术)对训练没啥用。
而最让我觉得厉害的一点便是文中章节3.2提到的一个做法。以D模型为例子,第五个卷积层输出的结果是7×7×512,接下来是经过三个全连接层,而7×7×512展开后是25088个向量,全连接层中共4096个向量,且每一个向量都与25088个向量有关系,以此最后经过一层卷积层后,会有1000个具有相关信息的向量。这是正常的过程。而作者才测试时,将最后三个全连接层全部改为了卷积层,即7×7×512不再经过卷积层,而是被4096个7×7的卷积核卷积,最终也会得到1000个向量。可能你会疑惑,这样最终的结果不是一样的吗,有什么好惊奇的。但是,我想说的是,如果第五个卷积层的输出结果不是7×7×512呢,如果我是14×14×512,那么原来的全连接层就处理不下,但是如果是卷积层就可以,反正都是用7×7×512的卷积核去卷,14×14的我多移动一步就行了嘛。因此,后面一种方式,可以适应多尺寸的输入图像。
(五)总结:VGG读起来比AlexNet难许多,其中还包含了固定尺寸和范围尺寸的测试效果,以及定位的相关信息,我并没有记录。但总体来说它准确不错,甚至在更改后高于googleNet(论文中提到的,但是当年的比赛它输给了googleNet),并且VGG结构简单,复现也较为容易。但同时,不可避免的是它确实过于庞大了,并且针对的都是大数据集,对小数据集的效果如何,只有去验证才知道了。