深度学习经典卷积神经网络之VGGNet
VGGNet是牛津大学计算机视觉组(VisualGeometry Group)和GoogleDeepMind公司的研究员一起研发的的深度卷积神经网络。VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过重复堆叠3*3的小型卷积核和2*2的最大池化层,VGGNet告成地修筑了16~19层深的卷积神经网络。VGGNet对比之前state-of-the-art的网络布局,错误率大幅下降,并取得了ILSVRC 2014角逐分类项目的第2名和定位项目的第1名。同时VGGNet的拓展性很强,迁移到其他图片数据上的泛化性非常好。VGGNet的布局非常简洁,整个网络都使用了同样巨细的卷积核尺寸(3*3)和最大池化尺寸(2*2)。到目前为止,VGGNet依然经常被用来提取图像特征。VGGNet训练后的模型参数在其官方网站上开源了,可用来在特定的图像分类任务长进行再训练(相当于供给了非常好的初始化权重),因此被用在了很多处所。
VGGNet论文中全部使用了3*3的卷积核和2*2的池化核,通过不停加深网络布局来提升性能。图1所示为VGGNet各级另外网络布局图,图2所示为每一级另外参数量,从11层的网络一直到19层的网络都有详尽的性能测试。虽然从A到E每一级网络逐渐变深,但是网络的参数量并没有增长很多,这是因为参数量主要都消耗在最后3个全连接层。前面的卷积部分虽然很深,但是消耗的参数量不大,不过训练对照耗时的部分依然是卷积,因其计算量对照大。这此中的D、E也就是我们常说的VGGNet-16和VGGNet-19。C很有意思,对比B多了几个1*1的卷积层,,1*1卷积的意义主要在于线性调动,而输入通道数和输出通道数不乱,没有产生降维。
训练时,输入是巨细为224*224的RGB图像,预措置惩罚惩罚只有在训练集中的每个像素上减去RGB的均值。
图1 VGGNet各级别网络布局图
图2 VGGNet各级别网络参数量
VGGNet拥有5段卷积,每一段内有2~3个卷积层,同时每段尾部会连接一个最大池化层用来缩小图片尺寸。每段内的卷积核数量一样,越靠后的段的卷积核数量越多:64-128-256-512-512。此中经常呈现多个完全一样的3*3的卷积层堆叠在一起的情况,这其实长短常有用的设计。如图3所示,两个3*3的卷积层串联相当于1个5*5的卷积层,即一个像素会跟周围5*5的像素孕育产生关联,可以说感应熏染野巨细为5*5。而3个3*3的卷积层串联的效果则相当于1个7*7的卷积层。除此之外,3个串联的3*3的卷积层,拥有比1个7*7的卷积层更少的参数量,只有后者的(3*3*3)/(7*7)=55%。最重要的是,3个3*3的卷积层拥有比1个7*7的卷积层更多的非线性调动(前者可以使用三次ReLU激活函数,而后者只有一次),使得CNN对特征的学习能力更强。
图3 两个串联3´3的卷积层成果类似于一个5´5的卷积层
VGGNet在训练时有一个小技巧,先训练级别A的简单网络,再复用A网络的权重来初始化后面的几个庞大模型,这样训练收敛的速度更快。在预测时,VGG给与Multi-Scale的要领,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方法进行分类预测,将差别窗口的分类功效平均,再将差别尺寸Q的功效平均得到最后功效,这样可提高图片数据的操作率并提升预测准确率。在训练中,VGGNet还使用了Multi-Scale的要领做数据增强,将原始图像缩放到差别尺寸S,然后再随机裁切224´224的图片,这样能增加很大都据量,对付防备模型过拟合有很不错的效果。实践中,作者令S在[256,512]这个区间内取值,使用Multi-Scale获得多个版本的数据,并将多个版本的数据合在一起进行训练。图4所示为VGGNet使用Multi-Scale训练时得到的功效,可以看到D和E都可以到达7.5%的错误率。最终提交到ILSVRC 2014的版本是仅使用Single-Scale的6个差别品级的网络与Multi-Scale的D网络的融合,到达了7.3%的错误率。不过角逐结束后作者发明只融合Multi-Scale的D和E可以到达更好的效果,错误率到达7.0%,再使用其他优化计谋最终错误率可到达6.8%摆布,非常接近同年的冠军Google Inceptin Net。同时,作者在比拟各级网络时总结出了以下几个不雅概念:(1)LRN层感化不大(VGGNet不使用局部响应标准化(LRN),这种标准化并不能在ILSVRC数据集上提升性能,却导致更多的内存消耗和计算时间。);(2)越深的网络效果越好;(3)1*1的卷积也是很有效的,但是没有3*3的卷积好,大一些的卷积核可以学习更大的空间特征。
图4 各级别VGGNet在使用Multi-Scale训练时的top-5错误率
在训练的过程中,比AlexNet收敛的要快一些,原因为:(1)使用小卷积核和更深的网络进行的正则化;(2)在特定的层使用了预训练得到的数据进行参数的初始化。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30140.html