VGG

深度卷积神经网络VGG 学习笔记

VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION

Posted by Jiaqian Li on 2018-05-25


介绍

VGGNet是2014年 ImageNet Large-ScaleVisual Recognition Challenge(ILSVRC)竞赛的第二名实现的卷积神经网络,第一名是GoogLeNet(谷歌为了纪念LeNet)。它的主要贡献是解决了网络结构设计的一个重要方面——深度。
至于为什么这个网络叫VGG,是因为Andrew Zisserman是牛津大学Visual Geometry Group(视觉几何组)的,所以叫VGG。

结构

网络的输入图像时224*224RGB的图像,预处理是对于每一个像素减去它们的均值。整体使用的卷积核大小均为3*3,这是表示左/右/上/下/中心这些模式的最小单元。在其中的一层结构使用11的卷积核,相当于输入通道的线性变换。空间池化采用5个池化层max-pooling,大小为2\2。
前面几层是卷积层的堆叠,卷积层的后面加了3个全连接层,前两个大小为4096,最后一个为1000,即1000种类别,最后一层是soft-max。所有隐藏层的激活函数都是ReLU,论文中会介绍好几种网络结构,只有其中一种使用了局部响应归一化Local Response Normalisation (LRN)。这种归一化并没有提高网络的性能,反而增加了内存的消耗和计算时间。

网络结构

表1中主要介绍了从11层的网络A到19层的网络E6中不同的网络结构。
A:和AlexNet类似,使用了8个卷积层和3个全连接层,其中卷积层用的都是33的卷积核。
A-LRN:在第1层卷积的时候使用了局部响应归一化(LRN),实际并没有提高网络的性能。
B:在结构A的基础上,stage1和stage2中分别增加一个3
3的卷积层,一共是10个卷积层和3个全连接层。
C:在结构B的基础上,stage3,stage4,stage5分别增加一个11的卷积层,一共是13个卷积层和3个全连接层。
D:在结构C的基础上,stage3,stage4,stage5分别增加一个3
3的卷积层,一共是13个卷积层和3个全连接层。
E:在结构D的基础上,stage3,stage4,stage5分别增加一个3*3的卷积层,一共是16个卷积层和3个全连接层。

各个网络所需的参数所占的内存大小,单位(M),如下:

测试

单尺度评估的实验结果

第一,我们发现使用局部响应归一化的A-LRN在A的基础上性能并没有很大提升,所以在B-E的网络结构中不再使用;
第二,我们发现top-1和top-5的错误率随着神经网络的深度增加而下降。C中使用1 *1的卷积核,增加了额外的非线性,性能比B有所提高;D中33的卷积核比C中1\1的效果好。
最后,在训练时使用scale jittering进行数据增强能有效降低错误率。关于scale jittering的介绍,参考了大牛的讲解,简单来说,就是crop size是固定的,而image size是随机可变的。举例来说,比如把crop size固定在224×224,而image的短边可以按比例缩放到[256, 512]区间的某个随机数值,然后随机偏移裁剪个224×224的图像区域。
数据增强比较常用的有2种方法:一是使用Scale Jittering,VGG和ResNet模型的训练都用了这种方法。二是尺度和长宽比增强变换,最早是Google提出来训练他们的Inception网络的。我们对其进行了改进,提出Supervised Data Augmentation方法。
具体可以参考https://zhuanlan.zhihu.com/p/23249000

多尺度评估的实验结果

测试集同样使用scale jittering,若S为单一值,则 Q = {S − 32,S,S + 32}.若 S ∈ [Smin;Smax] ,则Q = {Smin,0.5(Smin + Smax),Smax}.

结论

本文主要展示了深度对于分类网络的重要性。
简单地对VGG和AlexNet做一个比较:
相同点:
最后3个全连接层的结构相同;都有5个stage,每个stage之间都使用maxpooling
不同点:
AlexNet每个stage只含有一个卷积层,且卷积核大小为7*7;VGG每个stage含有2-4个卷积层,卷积核大小为3*3。两个33的卷积层连在一起可视为5\5的filter,三个连在一起可视为7*7的filter,假设有C个通道,那么77的卷积需要77CC=49C2个参数,而3个3*3的只需要3(33CC)=27C2个参数,由此可见,小的filter具有更少的参数,所以可以增大其Channel。
虽然VGG比AlexNet有更多的参数,更深的层次,但是VGG只需要很少的迭代次数就开始收敛,原因如下:
(a)深度和小的滤波器尺寸起到了隐式正则化的作用;
(b)VGG采用了一些预处理,对结构A全部随机初始化;后面深层的网络用结构A的参数作为前四个卷积层(应该是每个stage中的第一个Conv)和三个全连接层的初始化值,中间层随机初始化。同时,对初始化的层不减小其学习率,使其在学习过程中改变。使用随机初始化的层weights服从均值为0,方差为0.01的正态分布,biases为0.

参考文章链接:
https://blog.csdn.net/wcy12341189/article/details/56281618
https://www.jianshu.com/p/9c6d90e4f20e
https://blog.csdn.net/Teeyohuang/article/details/75214758