本文是由牛津大学的几何视觉组Visual Geometry Group(VGG) Karen Simonyan & Andrew Zisserman撰写的论文,其突出贡献主要证明了用很小的kernel size(3×3),并增加网络深度可以显著提高网络的性能。在ILSVRC上定位第一,分类第二。
⋅ · ⋅ input:224×224 RGB图像
⋅ · ⋅ pre-processing(预处理):每个像素减去在训练集上计算的均值
⋅ · ⋅ filter:3×3(能够捕获上下左右及中心概念的最小尺寸),有的地方使用了 \qquad \quad 1×1的卷积,这种1×1的卷积大小可以看成是对输入通道
\qquad \quad (input channel)的线性变换
⋅ · ⋅ stride: 1
⋅ · ⋅ padding: 1,池化层采用max-pooling的方式,一共有5层,在一些卷积层后(不是所有的卷积层后都有max-pooling层),max-pooling的窗口大小为
2×2,stride=2
一些卷积层之后跟着三层全连接层(Fully-Connected (FC) layers),前两层中每一层都有4096个通道,第三层是1000个通道,代表1000种分类
最后一层是softmax layer
所有隐藏层都使用ReLU,且该网络不使用LRN(局部响应标准),这种标准化不仅不会提升性能,而且还会增加内存的消耗及计算
结合这张图,有网络D的参数表格(图片来自CS231n的计算):
从A~E一共有五个网络,所有的配置都遵循1.1的配置原则,只是深度不一样,从A网络有11层(8个卷积层和3个FC层)到E网络有19层(16个卷积层和3个FC层),随着层数递增而逐渐忽略掉局部信息,feature map的width和height随着每个pool的操作减少一半,5个pool操作使得width和height逐渐变化:224->112->56->28->14->7,但是通道数(宽度),随着5次pool每次都增大一倍:3->64->128->256->512;由于卷积核比较小,所以即使网络很深也不会带来较大的参数量
与AlexNet(11×11 with stride 4)和ZFNet(7×7 with stride 2)不同,VGGNet使用较小的3×3 with stride=1的卷积核。
使用这么小的卷积核的原因是:在卷积层两个连续(串联)的3×3 with stride 1的filter可以替代5× 5 with stride 1的,而3个3×3串联可以替代7×7的,这样做有两个优点:
1.可以减少parameters的数量,假设输入输出通道都为C,使用3×3的3个卷积核需要的参数数量为3(3C×3C)=27 ×C×C,而使用7 × 7的单个卷积核所需要的参数数量为:7C ×7C=49 × C ×C,因此,使用3个3× 3的代替一个7×7的可以认为是对7 ×7卷积施加一种正则化,使它分解为3个3× 3的卷积。
2 引入了更多的非线性,多少个串联的小卷积核就对应着多少次非线性激活的过程,一个大的卷积核只有一次激活过程,而激活次数越多,决策函数越具判别行,也就意味着模型的表达能力会更强,可以去拟合更高维的分布。
还有一点值得注意的是,这里使用了1×1 的卷积核作用是在不影响输入输出维数的情况下,对输入进行线性变换,然后通过Relu进行非线性处理,增加网络的非线性表达能力
在训练阶段: \textbf{在训练阶段:} 在训练阶段:
优化方法:带动量(momentum)的小批量梯度下降
batch_size:256
momentum:0.9
learning rate:0.01
weight decay(L2惩罚乘子): 5 × 1 0 − 4 5×10^{-4} 5×10−4
dropout rate(前两个FC层):0.5
目标函数:SoftMax
迭代次数:37万次(74个epochs)
尽管相对于AlexNet网络层数更深,但是VGGNet需要很少的epoch便可以开始收敛,原因:
1.更深的网络层数和更小的卷积核起到了隐式的正则化效果,也就是说主要是小卷积核带来的优势,小卷积核需要的参数少,从训练样本学习到的参数自然也就少,而且backporp时涉及到前面的范围也就小,起到了一定正则化的作用,因而梯度更新下降的方向也就越趋近于极值点,收敛的也就更快。
2 一些层的pre-initialisation,为了防止不好的初始化导致训练过程的停止,作者用随机方式训练最浅层的网络A,然后在训练其它网络时,把A的前四个卷积层及最后的三个FC层的权值当作其它网络的初始值,而中间层则从均值为0,方差为0.01的正态分布中随机采样得到。
对于训练图像的尺寸: \textbf{对于训练图像的尺寸:} 对于训练图像的尺寸:
输入网络的图像尺寸是固定的224×224,这个大小的图是由rescale后的图像随机crop得到的,即使是同一张图像,每次SGD的iteration的crop都不同,且为了进一步的data augment,在crop后的图像上又进行了随机水平翻转及随机RGB颜色抖动,这两个小技巧来自于AlexNet。
在文章中讲的S是rescale后的训练图像的最短边,S也作为训练图像中的尺度,但是crop出来的尺寸是固定的,即:224×224,因为S>=224,所以当S=224时,crop的尺寸大体可以捕捉到整张图像,当S>>224时,crop出来的只对应图像的一小部分或者某些物体的一部分。
一共有两种方法来设置S:
在测试阶段,要先对输入图像resacle到预设尺寸Q(测试图像尺寸),测试图像尺度不一定等于训练图像尺度S,且对每个S,都有几个不同的Q去预测,这样性能更好。
这里有个点需要注意:
全连接转为卷积,最后成为全卷积网络;即作者在最后把三个全连接层依次变为一个conv7×7,两个conv1×1,这么转化是参考了OverFeat的做法,原因如下:当网络一旦训练好,weight和bias就定死了,那么输入的个数及图像尺寸大小也就定死了,而在有时图像并不能做到任意size,如果把所有图像全都弄成固定的size又太麻烦,于是就可以把FCN层->CNN层,这样网络就可以处理任意分辨率的图像,而无需对原图resize。
这一具体实现过程如下:第一个卷积后要得到1×1×4096的输出,那么就要对输入的7×7×512的feature map的width和height进行降维,由于是卷积操作,那么直接使用7×7的卷积核就ok,宽高解决掉后,该要对深度进行升维,用4096个filter就可以,这样就可以得到1×1×4096的feature map,后两个卷积的计算也是如此。
这里附上一个链接讲的很好:
https://www.cnblogs.com/liuzhan709/p/9356960.html
对六个网络进行单独评估,测试图像尺寸依照训练时的尺寸分为以下两种情况:
1.训练图像尺寸S固定时,测试图像尺寸Q=S
2. 训练图像的尺寸介于 [ S m i n , S m a x ] [S_{min},S_{max}] [Smin,Smax]中时, Q = 0.5 ( S m i n + S m a x ) Q=0.5(S_{min}+S_{max}) Q=0.5(Smin+Smax)
评估结果:
作者发现,即使是single scale,训练时采用尺度抖动(scale jittering)再crop图像 ( S ∈ [ 256 , 512 ] ) (S∈[256,512]) (S∈[256,512])的方式比固定最小边后crop图像 ( S = 256 或 384 ) (S=256或384) (S=256或384)的方式效果要好,也再次证明了对训练图像进行scale jittering来做data augmentation是有效果的。
结论: \textbf{结论:} 结论:
1.LRN没用
2.深度越深,分类效果越好(也就代表着非线性变换次数越多)
3.层数相同下,小卷积核的性能不如大卷积核 ⟹ \implies ⟹D网络采用3×3卷积核,C网络采用1×1卷积核,C,D两个网络层数相同,而D网络的性能要优于C
4.多个小卷积核的堆叠(串联)比具有同样感受野规模的大卷积核性能好 ⟹ \implies ⟹用一个conv5×5来代替两个conv3×3,性能下降,前面有提到为什么,这里就不说了
5.增加1×1filter,即增加额外的非线性确实提升效果
5.网络深度到达19层时错误率达到饱和,但更深网络有益于更大的数据集
多尺度是对输入图像上的几个尺度上跑网络,也就是对应于不同的Q值再crop后得到的softmax的结果取平均出来的,作者是用了三种不同的Q值
1.固定大小的S训练,用3种Q去评估, Q = [ S − 32 , S , S + 32 ] Q=[S-32,S,S+32] Q=[S−32,S,S+32]
2.尺度S随机方式训练: S ∈ [ S m i n , S m a x ] S∈[S_{min},S_{max}] S∈[Smin,Smax],评估时使用更大尺度范围 Q = S m i n , 0.5 ( S m i n + S m a x ) , S m a x Q= {S_{min},0.5(S_{min}+S_{max}),S_{max}} Q=Smin,0.5(Smin+Smax),Smax
结论: \textbf{结论:} 结论:
网络在单个scale上提取能力有限,而mutil-scale比固定尺度上训练的效果好
作者对比了dense ConvNet evaluation 和 multi-crop evaluation,发现multi-crop比dense ConvNet 的 evaluation 性能稍好,二者通过 averaging softmax output 结合起来使用效果比二者之一要好
这里的dense和multi-crop比较见如下链接,我感觉讲的不错:https://www.zhihu.com/question/270988169
多个模型融合是对融合的多个网络softmax输出结果的平均,因为模型的互补性,提升了性能
其中作者选用两个最好的多尺度模型(D,E)进行融合,并使用dense和multi-crop的evaluation,top-5 error降到6.8%