VGG16

作者: cv老顽童 | 来源:发表于2017-08-14 15:12 被阅读0次

    架构:

    1.input224X224 RGB

    2.每个像素subtracting减去RGB均值

    3.一系列CNN layer:3X3是能感知上下,左右的最小sizefilters,channels一般选32,62....,这种一方面是因为这种大小的Image volume最能表征信息,其次是因为cudnn计算时这种特定规格,便于优化gpu。

    4.一层1X1 convolution filter作为非线性输入channels的线性转换

    5.Convolution stride是1像素,stride 1 allows us toleave all spatial down-sampling to the POOL layers, with the CONV layers onlytransforming the input volume depth-wise.

    6.Spatial空域padding/pooling:空域的padding来达到改变输入整体大小从而控制输出大小,1像素for3X3 conv,max-pooling2X2,stride2。keepingthe spatial sizes constant after CONV, doing this actually improves performance。P = (F - 1) / 2

    7.卷积layers接着FC layers

    8.Conv layers前两个每个有4096channels

    9.第三层展现1000种的ILSVRC的分类,所以有1000channels,每一个对应每一类

    10.最后是softmax层

    11.隐藏层是激活函数RELU来非线性化,并且只有一个包含LRN(local responsenormalisation)来正则化

    结构:

    Conv<size of filter>-<channels>,不包含RELU

    A-E表示不同depth时的配置

    Why 3X3

    首先,用三层的非线性激活层而不是单个,提高了决策的更高判断力

    其次,减少了参数:3层3X3有C通道时,参数有3*(3*3*C^2)=27C^2,对于7*7则有7X7XC^2=49C^2

    然后,1*1的conv是用来增加决策功能的非线性并且不影响convlayers的感知区域,因而作为空域的线性投影

    13 conv depth时整体结构

    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对特征的学习能力更强

    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的卷积好,大一些的卷积核可以学习更大的空间特征。

    在训练的过程中,比AlexNet收敛的要快一些,原因为:(1)使用小卷积核和更深的网络进行的正则化;(2)在特定的层使用了预训练得到的数据进行参数的初始化。

    对于较浅的网络,如网络A,可以直接使用随机数进行随机初始化,而对于比较深的网络,则使用前面已经训练好的较浅的网络中的参数值对其前几层的卷积层和最后的全连接层进行初始化。

    相关文章

      网友评论

          本文标题:VGG16

          本文链接:https://www.haomeiwen.com/subject/xewylxtx.html