这篇文章重点分析了CNN深度对于其performance的影响,并且提出3×3的filter size可以大幅提升原先的CNN performance。同时,这篇文章提出了VGG的网络架构,获得了ImageNet Challenge 2014的冠军,同时该架构在其他数据集上的泛化能力也很强。
1 ConNet Configuration
2 Classfication framework
2.1 Training
在训练阶段,input size为固定的224×224的图片。
min-batch:256
momentum:0.9,L2 weight decay:0.0005;learning rate:0.01(当validation error rate不变动的时候缩小10倍)
filter size:3×3(有一个configuration中为1×1)
stride:1
max pooling:2×2;stride:2
其实,连续两层的3×3的filter相当于直接施加了一个5×5的filter;连续3层就相当于7×7的filter。使用两层的原因如下:1. 使用了3层非线性的activation函数,而不是1层;2. 减少了参数的数量(假设每层都有C个channel的话,那么3个3×3的layer一共有3×3×3×C×C=27C^2个参数,而一层7×7的layer就有49C^2个参数)。
使用1×1的filter视为了在不影响感受野大小的情况下提升非线性的性质。
用A网络的部分参数作为后面更深网络参数的初始值。
比起更浅的AlexNet收敛更快的原因:1. 更深的layer和更小的filter size起到了隐式的regularisation的作用;2. 初始的方式。
Training image size
假设S是一张image放缩之后最短边的长度(称为training scale),任何大于等于S的image都可以用作训练的image,如果是大于,就选用和S相同的一个crop进行训练。文中提到了两个具体的方法:
1. 固定training scale S的大小,即所有的training image的大小都是S的。文中测试所选用的大小为:S=224、384. 其中在训练S=384的网络的时候,参数的初始化是使用的S=224的网络的参数值;
2. 叫做multi-scale training,使用多个不同尺寸的图片进行training。比如设定[Smin, Smax],那么任何在这个区间中的尺寸都可以用作训练的图片。
2.2 Testing
在testing的时候,采用的方法和Overfeat中的方法非常的类似。
首先拿到一张image,rescale到一个pre-defined尺度Q,这个Q不一定要和training时候的S一样。然后将整张(没有crop的)image放到网络中,将最后的fc layer也视为卷积层(第一层为7×7卷积层,第二、三层为1×1卷积层),最终网络会得到一个有C-dimension的向量,但是中间的空间大小是视input size而定的。
相比之下,multi-crop的方法计算效率更低,因为multi-scale只用CNN一张image;同时,在padding的时候,multi-crop用的是zero-padding,而multi-scale使用的邻近部分的pixel,获得的信息会更加完整和准确一些。同时,文章认为用于multi-crop的额外的计算时间并没有带来相应的performance的提升。
2 Classification Experiments
2.1 Single scale evaluation
可以清晰地发现,使用jittering的训练方式,能够很大地提升performance。
2.2 Multi-scale evaluation
如果是用fixed size进行训练的话,那么test时候使用的是{S-32, S, S+32}的size进行inference;如果是jittering进行训练,那么测试的时候使用的是{Smin, 0.5(Smin + Smax), Smax}。实验证明,test时候的jittering可以很好地提升performance。