博客:blog.shinelee.me | 博客园 | CSDNgit
VGG(2014)网络出自paper《Very Deep Convolutional Networks for Large-Scale Image Recognition》,为ILSVRC2014 localization冠军和classification亚军方法(冠军为GoogLeNet),首次提交arXiv时间为2014年9月,后发表在ICLR2015,截止20191011引用量达27612。由于出自牛津大学Visual Geometry Group,因此网络被命名为VGG,根据层数不一样,又分为VGG1六、VGG19等。github
论文的主要贡献:网络
文中列举了配置不一样的5个网络,分别命名为A、A-LRN、B、C、D、E,网络结构及参数量以下图所示,性能
这些网络配置的特色是:学习
B网络有个特色,每2个\(3\times 3\)卷积层一组,再接maxpool。实际上,在实验中还配置了另外一个网络——将B的“each pair of \(3\times 3\) conv”替换为1个\(5\times 5\)卷积层,其性能要比B差7%,因此paper认为小卷积核深网络要比大卷积核浅网络好。测试
paper中的实验均在上述网络中进行,下面具体看一下。spa
在训练阶段,VGG的输入固定为\(224\times 224\),对尺寸不一样的图像须要先scale再crop到\(224\times 224\),理论上只须要将图像最短的边scale到大于等于224便可进行crop,paper中设置了2种scale方式,第一种scale到256或384,第二种随机scale到\([256, 512]\)之间——384刚好位于256和512的中间,作了对比实验。.net
测试阶段,再也不进行crop操做,而是采用了Overfeat中的一个技巧,将网络最后的3个全链接层在实现上转化成卷积层,以适应不一样尺寸的输入,这个技巧在paper中称之为dense。全链接层的运算方式是输入向量与权重矩阵相乘,当权重矩阵的尺寸肯定了,输入向量的长度就不可改变了,而卷积的运算方式是权重在输入上滑动内积,因此只须要输入的尺寸大于kernel的窗口便可。具体地,若是输入刚好为\(224\times 224\),经历过5次maxpool后,feature map尺寸变为\(7 \times 7\),当输入尺寸大于224时,这个feature map将大于等于\(7\times 7\)。将3个全链接层依次转化为\(7\times 7\)卷积和2个\(1\times 1\)卷积,这种转化并不改变权重,只是实现方式上的变化,此时整个网络为全卷积网络。若是输入图像大于\(224\times 224\),网络最后输出的class score map将大于\(1000 \times 1\),为了获得固定长度为1000的class score vetor,只需将其进行spatially average(sum-pooled),而后再softmax。更多能够参见Converting Fully-Connected Layers to Convolutional Layers的解释。orm
预测阶段的multi scale,即将输入图像作不一样scale,分别输入网络,对预测结果取平均。
下图分别为single scale和mutiple scale测试的结果,测试库为ILSVRC-2012 dataset,
上面的对比实验,可得出如下结论:
对于multi scale对性能的改善,想来也是合理的,由于图像中目标的尺寸并不肯定,有大有小,在训练阶段经过scale jittering来增广数据,可以让网络在必定程度上cover这种变化,而在预测阶段,multi scale能够当作在输入数据上作的集成学习,亦是提高性能的常规操做。
论文中还有一些其余有意思的点,简单总结以下,
以上。