首先论文中英文对照链接:传送门
VGGNet这篇论文最主要的贡献在于从网络深度这一角度出发,对卷积神经网络进行了改进。非常详尽的评估了网络深度所带来的影响,证明了网络的深度对于性能的提升具有举足轻重的作用。而且文中训练的两个16层和19层的网络由于其强大的泛化能力,在随后得到了非常广泛的应用。VGGNet的主要特点在于:(1)网络很深;(2)卷积层中使用的卷积核很小,且都是3*3的卷积核。
为了评估深度对于网络性能的影响,文中设计了好几种不同深度的网络结构。最浅的网络有11层,最深的有19层,其中,所有的网络模型最后三层都是全连接层,其余都是卷积层。这几种网络模型的结构如下图:
为什么使用3*3的卷积核?
3*3是能抓取局部信息的最小的尺寸。不难得到,两层3*3的卷积层便可以得到5*5的感受野,相当于一层5*5的卷积层。以此类推,三层3*3的卷积层相当于一层7*7的卷积层。那么为什么不直接使用大的卷积核,而是使用多层3*3的卷积层来起到类似的作用呢?原因主要有两点:
1*1的卷积核有什么作用?
在不影响卷积层的感受野的情况下,为模型引入更多的非线性。不影响感受野是显而易见的,非线性是怎么来的呢?是由于非线性激活函数的使用。
怎么进行各向同性缩放?
因为图片扭曲后,估计会对后续CNN的训练精度有影响,于是测试了“各向同性缩放”方案。这个有两种办法
A、直接在原始图片中,把bounding box的边界进行扩展延伸成正方形,然后再进行裁剪;如果已经延伸到了原始图片的外边界,那么就用bounding box中的颜色均值填充;如下图(B)所示;
B、先把bounding box图片裁剪出来,然后用固定的背景颜色填充成正方形图片(背景颜色也是采用bounding box的像素颜色均值),如下图(C)所示;
对于上面的异性、同性缩放,文献还有个padding处理,上面的示意图中第1、3行就是结合了padding=0,第2、4行结果图采用padding=16的结果。经过最后的试验,作者发现采用各向异性缩放、padding=16的精度最高,具体不再啰嗦。
在测试阶段,首先将图像各向同性的缩放,使得最短边缩放至Q。注意,Q没必要一定要和S相等。然后,使用两种不同的方式进行分类:dense evaluation和multi-crop evaluation,这两种方式分别借鉴于Overfeat和GoogLeNet。下面详细介绍一下这两种方式:
1. dense evaluation
它的设计非常巧妙,并不需要我们显式的在缩放后的图像上crop出224*224的图像。而是直接将缩放后的图像输入,再通过将最后的三层全连接层表达为卷积层的形式,来实现在缩放后的图像上密集crop的效果。最后将结果平均得到最终的分类结果。
首先来看为什么全连接层可以转变为卷积层的形式。假设一个神经网路前面都是卷积层,后面跟着三层全连接层f1、f2和f3,每个全连接层神经元的个数分别为n1、n2和n3,且经过前面所有的卷积层之后,得到的是m*m的C个通道的feature map。一般来说,进入全连接层之前,我们应该首先将这个feature map展成一维向量,再于f1全连接层相连接。但是实际上,我们可以将f1层看作是卷积核大小为m*m,通道数为n1的卷积层,这样卷积后得到的输出是1*1*n1的(不加padding),效果和全连接层一样。然后,再将f2层看作是卷积核大小为1*1,通道数为n2的卷积层;将f3层看作是卷积核大小为1*1,通道数为n3的卷积层......道理同f1层一样。
上面证明了可以将全连接层转变为卷积层,下面来讲一下这么做的效果,为什么能起到密集crop的效果。 如下图所示(图片来自于论文Overfeat),假设训练时网络接受的图像大小是14*14,最后输出的是它所属的类别。假设测试时缩放后的图片大小为16*16,在将全连接层转变成卷积层后 ,我们将这个缩放后的图像直接输入给网络,而不是crop出14*14的大小,可以发现,最后得到的是4个结果而不是它上面所示的1个。其实这4个结果分别相当于在缩放后的图像上crop出左上、右上、左下、右下4个14*14图像的分类结果。然后将多个位置的结果取平均作为整个图像的最终结果。相比于在缩放后的图像上crop出多个图像后再分别放入网络进行分类,这种操作省去了许多重复性的运算,所有的卷积操作只需要做一遍即可。值得注意的是,在这个例子中,相当于每滑动两个像素crop一个图像,这是因为中间有一个步长为2的2*2的pooling操作。所以有时当pooling操作较多时,这种方法可能反而没有直接多次crop得到的结果精细。
2. multi-crop evaluation
相当于AlexNet中所使用的crop方法的加强版。在GoogleLeNet中描述的详细过程如下:将图片缩放到不同的4种尺寸(纵横比不变,GoogleLeNet使用的4种尺寸为:缩放后的最短边长度分别为:256,288,320和352)。对于得到的每个尺寸的图像,取左、中、右三个位置的正方形图像(边长就是最短边的长度。对于纵向图像来说,则取上、中、下三个位置),因此每个尺寸的图像得到3个正方形图像;然后再在每个正方形图像的4个crop顶点和中心位置处crop处224*224的图像,此外再加上将这个正方形图像缩放到224*224大小的图像,因此每个正方形图像得到6个224*224的图像;最后,再将所有得到的224*224的图像水平翻转。因此,每个图像可以得到4*3*6*2=144个224*224大小的图像。将这些图像分别输入神经网络进行分类,最后取平均,作为这个图像最终的分类结果。
而VGG中则使用的是3种尺寸,每个尺寸在5个位置处取正方形图像(四个顶点加中心?),每个正方形图像crop出5个224*224大小的图像,最后水平翻转,即3*5*5*2=150。
1. 单尺度评估
评估上面提出的几个网络模型,测试时,对于固定的S,取Q=S;对于可变的S,取
Q=0.5 ( Smin+Smax)。实验结果如下:
2. 多尺度评估
多尺度估计,就是在测试时,将图像缩放到几个不同的尺度,即Q的取值有多个,再将每个尺度得到的结果取平均,得到最终的结果。对于固定的S,令Q={S-32,S,S+32};对于可变的S,令Q={Smin,0.5 ( Smin+Smax),Smax}。实验结果如下所示:
通过和单尺度的结果对比,可以发现在测试时使用多尺度(尺度抖动),可以提升准确率。
3. multi-crop评估
比较了上文提到的dense和multi-crop两种方法的性能,此外,还将这两种方法结合起来,得到了更高的准确率。结果如下:
4. 多个网络结合
论文还将训练的多个网络模型的结果相结合得到最终的分类结果,显然,这会提升分类的准确率以及稳定性,结果如下:
5. 与其余方法相比较
讨论
1, 小的卷积核的深层网络性能优于大卷积核的浅层网络
2,小的卷积核的卷积层连用(中间没有pooling)和大的卷积核单用的感受野是相同的,比如2个3x3的卷积层连用和一个5x5的卷积层的感受野一样,3个3x3的卷积层和一个7x7的卷积层感受野一样。
3,小的卷积核的连用可以让决策函数变得更有区分度,并且可以大大降低参数的数量,这就是文章里深层网络的参数却比浅层网络参数没多多少的原因
4,深层网络适合于大的数据集
5,关于1x1卷积核的作用:首先,增加决策函数的非线性,其次,对特征进行了转换,相当于“feature pooling”,比如把300x300x50的特征图可以降到300x300x20。
6,使用预训练好的参数初始化可以加速训练
引用:
https://www.jianshu.com/p/5412d1dec69d
http://noahsnail.com/2017/08/17/2017-08-17-VGG%E8%AE%BA%E6%96%87%E7%BF%BB%E8%AF%91%E2%80%94%E2%80%94%E4%B8%AD%E6%96%87%E7%89%88/
https://www.cnblogs.com/zlslch/p/6973143.html