本论文是牛津大学 visual geometry group(VGG)Karen Simonyan 和Andrew Zisserman 于14年在Alexnet基础上撰写的论文,主要探讨了深度对于网络的重要性;并建立了一个19层的深度网络获得了很好的结果;在ILSVRC比赛上定位第一,分类第二。
论文于此处下载
本网络从Alex-net发展而来主要修改了两个方面:
1.在网络结构上,于卷积层中使用更小的filter尺寸和间隔;
2.在数据处理中,于整个图片上使用multi-scale训练和测试;针对multi-scale的详解见于....
由作者提供的各级别网络结构图知,本结构有5个max-pooling层,是5阶卷积特征提取。每层的卷积个数从首阶段的64个开始,每个阶段增长一倍,直到达到最高的512个,然后保持。可以看到在每个阶段不再是单独的卷积,而是多个很小的卷积层(3*3)串联在一起的(在Alex-net中基本都是11*11),在每阶段末尾总是会有个1*1的14卷积层相连,而这些卷积层的变化正是该结构能取得更好的性能的原因.
基本结构A:
Input(224,224,3)→64F(3,3,3,1)→max-p(2,2)
→128F(3,3,64,1)→max-p(2,2)
→256F(3,3,128,1)→256F(3,3,256,1)→maxp(2,2)
→ 512F(3,3,256,1)→512F(3,3,512,1)→max-p(2,2) →512F(3,3,256,1)→512F(3,3,512,1)→max-p(2,2)
→4096fc→4096fc→1000softmax
8个卷积层,5个池化层,3个全连接层;作者只说明了使用3*3filter的原因,至于层数,阶段数,特征数为什么这么设计,作者并没有说明,对于这些属于结构的超参数问题很可能是在大量的实验结果的分析对比得出的。
1.3*3是能够捕获上下左右和中心区域信息的最小尺寸;ZFNet中说过,由于第一层中往往有大量的高频和低频信息,却没有覆盖到中间的频率信息,步长过长时,容易引起大量的混叠,因此滤波器尺寸和步长要尽量小;
2.多个3*3的卷积层串联不仅提升了判别函数的识别能力,而且还减少了参数;
两个卷积层的有限感受野是5*5;三个3*3的感受野是7*7,可以替代大的filter尺寸;大大减少了参数(三个3*3的卷积层参数个数3*(3*3*C*C)=27CC;一个7*7的卷积层参数为49CC;所以可以把三个3*3的filter看成是一个7*7filter的分解(中间层有非线性的分解));
多个3*3的卷基层比一个大尺寸filter卷基层有更多的非线性,使得判决函数更加具有判决性 ;为什么说多了更多的非线性就有更好的识别能力呢,在当初学习激活函数的时候,我们就知道引入激活函数(激活函数都是非线性的 )就是为了在数据的映射过程中变得更加非线性,这样一模型也就越复杂,换句话说,增加了非线性后,模型能够对更为复杂的关系进行映射.
本篇论文中作者加入1*1的卷积核的作用是在不改变输入输出维数的情况下,对输入增加非线性,增强网络的非线性表达能力,使得其对特征的学习能力更强.
但是其实此时也许作者还未意识到1*1卷积核的强大,在此处作者只是运用了其 可以增强非线性的能力,没有使用其降维能力,在之后的ResNet以及DenseNet中,我们可以看出大量运用了1*1的卷积核,其主要目的就是为了降维,随着网络深度 宽度的增加,模型就够很复杂,此时在宽度上就可以利用该卷积核来减少宽度.
测试阶段的方法和OverFeat测试方法相同,首先选定一个scale:Q,然后在这个图片上应用卷积网络,在最后一个卷积阶段产生unpooled FM,然后利用sliding window方法,每个pooling window产生一个分类输出,然后融合(取平均)各个pooling window的结果,得到最终分类。这样比10-view更加高效,只需计算一次卷积过程。(对这句话不是很明白)
为比较在训练和测试时对输入采取不同尺度的裁剪后,对分类性能的影响,采用不同的训练方法对模型进行训练,以便对结果进行分析.
观察表格中采取的训练和测试方法: 训练数据尺寸分三种:256 384 256-512之间随机抽取,测试数据则保持单一尺度.
对比得到分析结果:
A vs A-LRN A-LRN结果没有A好,说明LRN作用不大(LRN在后续的网络之中被弃用);
A vs B,C,D,E:越深越好;
A vs C:增加1*1卷积核,即增加额外的非线性确实提升效果;
*C vs D:**3*3的filter比 11 filter要好,使用较大的filter能够捕捉更大的空间特征;
训练方法:在scale区间[256;512]通过scale增益来训练网络,比在固定的两个S=256和S=384,结果明显提升。Multi-scale训练确实很有用,因为ZF论文中,卷积网络对于缩放有一定的不变性,通过multi-scale训练可以增加这种不变性的能力。
观察表格训练和测试方法: 训练的数据增益和上述一样,不过在测试时,对数据进行了 Multi-scale 增益,采取不同尺寸的数据进行测试.发现在训练和测试事都采取 Multi-scale 对数据进行增益,能大大提高准确率.
在采取不同的训练方法对模型进行训练时,我们能够得到不同的结果,最终对这些结果进行融合,得到新的结果.
对这里所提到的模型融合,来求平均不是很理解,搞不懂他这个模型融合是个什么意思,到底是指最后对分类的结果直接求平均值,还是说模型模型融合,准备带着问题继续探讨,学习.