VGG的网络参数


VGG与AlexNet对比
VGG基于AlexNet发展而来,特点在于使用的卷积核大小均为3*3,并将网络深度加深。
网络 | 不同之处 | - | - | - | - | 相同之处 |
---|---|---|---|---|---|---|
AlexNet | 多种大小的卷积核 | 深度为8 | 3层3*3最大池化层,stride=2,重叠池化 | 参数量60M | - | 激活函数ReLu,softmax分类 |
VGG | 卷积核多为3 * 3 ,C引入1*1卷积核 | 深度16-19 | 5层2*2最大池化层,stride=2,非重叠池化(重叠池化降低训练效率,提升的性能有限) | 参数量133+M | 更快收敛 | 激活函数ReLu,softmax分类 |
VGG优势
1. 采用多层3 * 3的卷积层代替5 * 5,7*7等大的卷积核
因为3 * 3是能抓取局部信息的最小的尺寸。两层3 * 3的卷积层便可以得到 5 * 5的感受野,相当于一层5*5的卷积层。使用多层3 * 3的卷积层,代替大的卷积核主要是因为:
- 层数越多,非线性因素(激活函数)就越多,决策函数的判断能力更强。
- 虽然层数更多,但是需要学习的参数更少了,可以将层数更多、卷积核更小看作是对大的卷积核强加了正则化。比如对于卷积核大小都为3* 3,通道数目都是C的三层卷积层来说,参数的数目是3 * (3* 3* C* C)=27* C* C;而卷积核大小为7* 7,通道数目也是C的一层卷积层来说,参数的数目为7* 7* C* C=49* C* C。
2. 引入1*1的卷积核
在不影响感受野的情况下引入更多非线性,非线性来源于非线性激活函数的使用。
3. 收敛更快
虽然和AlexNet相比,VGGNet的参数更多、深度更深,但是却收敛的更快。原因有两点,一是前面提到的更深的层和更小的卷积核相当于隐式的进行了正则化;二是在训练期间对某些层进行了预初始化。
4. 预初始化权重
对于深度网络来说,网络权值的初始化十分重要。为此,论文中首先训练一个浅层的网络结构A(网络结构见上图),训练这个浅层的网络时,随机初始化它的权重就足够得到比较好的结果。然后,当训练深层的网络时,前四层卷积层和最后的三个全连接层使用的是学习好的A网络的权重来进行初始化,而其余层则随机初始化。这也就是上一点提到的某些层的预初始化。(随机初始化权重时,使用的是0均值,方差0.01的正态分布;偏置则都初始化为0)。
5. 训练图像尺寸选择
S是训练图像的最小边。训练尺度
Q是测试图像的最小边。测试尺度
对原始图片进行等比例缩放,使得S大于224,然后在图片上随机提取224x224窗口,进行训练。
- 单一尺度训练:固定 S 的大小,对应了单一尺度的训练,训练多个分类器。训练S=256和S=384两个分类器,其中S=384的分类器用S=256的权重进行初始化;
- 多尺度(Multi-scale)训练(尺度抖动):直接训练一个分类器,每次数据输入的时候,每张图片被重新缩放,缩放的短边S随机从[256,512]中选择一个,也可以认为通过尺度抖动(scale jittering)进行训练集增强。图像中的目标可能具有不同的大小,所以训练时认为这是有用的。
6. 模型评估方式结果对比
- 单一尺度评估(single scale)
**即测试图像大小Q固定,若S固定,则Q=S;若S抖动,则Q=0.5(Smin+Smax) **
作者将深层次网络B与与具有5×5卷积层的浅层网络进行了比较,浅层网络可以通过用单个5×5卷积层替换B中每对3×3卷积层得到。测量的浅层网络性能比网络B差,这证实了具有小滤波器的深层网络优于具有较大滤波器的浅层网络。
训练时的尺度抖动(S∈[256;512])得到了与固定最小边(S=256或S=384)的图像训练相比更好的结果,即使在测试时使用单尺度。这证实了通过尺度抖动进行的训练集增强确实有助于捕获多尺度图像统计。 - 多尺度评估(multi-scale)
即评估图像大小Q不固定,Q = {S_{min}, 0.5(S_{min} + S_{max}), S_{max}
作者通过试验发现当使用固定值S训练时,Q的范围在[S−32,S,S+32]之间时,测试的结果与训练结果最接近,否则可能由于训练和测试尺度之间的巨大差异导致性能下降。
实验结果表明测试时的尺度抖动与在单一尺度上相同模型的评估相比性能更优,并且尺度抖动优于使用固定最小边S的训练。 - 多裁剪评估(multi-crop)
Dense(密集评估),即指全连接层替换为卷积层(第一FC层转换到7×7卷积层,最后两个FC层转换到1×1卷积层),最后得出一个预测的score map,再对结果求平均。
multi-crop,即对图像进行多样本的随机裁剪,然后通过网络预测每一个样本的结构,最终对所有结果平均。
多剪裁表现要略好于密集评估,并且这两种方法确实是互补的,因为它们的结合优于它们中的每一种。
多裁剪图像评估是密集评估的补充:当将ConvNet应用于裁剪图像时,卷积特征图用零填充,而在密集评估的情况下,相同裁剪图像的填充自然会来自于图像的相邻部分(由于卷积和空间池化),这大大增加了整个网络的感受野,因此捕获了更多的上下文。
由于全卷积网络被应用在整个图像上,所以不需要在测试时对采样多个裁剪图像,因为它需要网络重新计算每个裁剪图像,这样效率较低。使用大量的裁剪图像可以提高准确度,因为与全卷积网络相比,它使输入图像的采样更精细。
7. 模型融合
单个表现最好的模型误差为7.1%
表现最好的两个多尺度模型融合后,使用dense评估误差7.0%
表现最好的两个多尺度模型融合后,使用多裁剪以及dense结合评估,误差6.8%
8. Dense 的说明
它的设计非常巧妙,并不需要我们显式的在缩放后的图像上crop出224*224的图像。而是直接将缩放后的图像输入,再通过将最后的三层全连接层表达为卷积层的形式,来实现在缩放后的图像上密集crop的效果。最后将结果平均得到最终的分类结果。
首先来看为什么全连接层可以转变为卷积层的形式。假设一个神经网路前面都是卷积层,后面跟着三层全连接层f1、f2和f3,每个全连接层神经元的个数分别为n1、n2和n3,且经过前面所有的卷积层之后,得到的是mm的C个通道的feature map。一般来说,进入全连接层之前,我们应该首先将这个feature map展成一维向量,再于f1全连接层相连接。但是实际上,我们可以将f1层看作是卷积核大小为mm,通道数为n1的卷积层,这样卷积后得到的输出是11n1的(不加padding),效果和全连接层一样。然后,再将f2层看作是卷积核大小为11,通道数为n2的卷积层;将f3层看作是卷积核大小为11,通道数为n3的卷积层…道理同f1层一样。
上面证明了可以将全连接层转变为卷积层,下面来讲一下这么做的效果,为什么能起到密集crop的效果。 如下图所示(图片来自于论文Overfeat),假设训练时网络接受的图像大小是1414,最后输出的是它所属的类别。假设测试时缩放后的图片大小为1616,在将全连接层转变成卷积层后 ,我们将这个缩放后的图像直接输入给网络,而不是crop出1414的大小,可以发现,最后得到的是4个结果而不是它上面所示的1个。其实这4个结果分别相当于在缩放后的图像上crop出左上、右上、左下、右下4个1414图像的分类结果。然后将多个位置的结果取平均作为整个图像的最终结果。相比于在缩放后的图像上crop出多个图像后再分别放入网络进行分类,这种操作省去了许多重复性的运算,所有的卷积操作只需要做一遍即可。值得注意的是,在这个例子中,相当于每滑动两个像素crop一个图像,这是因为中间有一个步长为2的2*2的pooling操作。所以有时当pooling操作较多时,这种方法可能反而没有直接多次crop得到的结果精细。
参考文献
[1] VGGNet
[2] 在VGG网络中dense evaluation 与multi-crop evaluation两种预测方法的区别以及效果
[3] VGG论文中英文对照