VGGNet
VGGNet: 2014 ILSVRC的亚军是VGGNet。VGGNet的贡献是:证明了深度对于卷积网络性能的重要性。他们最优的网络是16层的卷积/全连接层组成的结构,从输入到输出层结构相同,只使用3x3卷积核2x2池化。预训练模型可以在caffe上直接使用。
其缺点是计算非常耗资源和内存,参数数量大约为140 Million。大部分的参数位于第一个全连接层,后来发现可以移去这些全连接层,并且性能几乎不会收到影响,因此减少了参数个数。
论文链接:https://arxiv.org/pdf/1409.1556.pdf
1. 网络架构图
VGG通过全部使用3*3大小的卷积核和2*2大小的池化核,通过反复堆叠卷积层和池化层,不断加深网络结构来提高性能。
如下表所示,论文中一共给出六种网络结构:A,A-LRN,B,C,D,E。随着网络层数的加深,参数总量并没有太大的改变。这是因为参数量主要消耗在全连接层,而前面的卷积层虽然层数多,但是参数的总量并不大。但需要注意的是,卷积层的计算量较大,训练比较耗时。
其中,结构D和E就是常说的VGGNet-16和VGGNet-19。注意结构C,结构C只比结构B多了几个卷积核为1*1的卷积层,这些1*1的卷积的意义是可以在不影响卷积层的感知域的前提下提高非线性性;虽然1*1卷积计算相当于线性变换,但是后续的Relu可以为其添加非线性性;并且1*1大小的卷积核可以保证输出的通道数和输入的通道数保持不变,不降低其感知域的大小。
2. VGG网络的特点
- VGGNet使用5段(stage)卷积,每段卷积内有2-3个卷积层,同时每段卷积尾部都会跟着一个最大池化层,用来缩小图片
- 每段内的卷积网络使用相同数量的卷积核,越后面的段内使用的卷积核数量越多,一次为:64-128-256-512-512.
- VGGNet中,网络越深,效果越好
- 作者在论文中给出AlexNet使用的LRN层的作用不大
- 1*1的卷积也是有效的,但是没有3*3的卷积好;大一些的卷积核可以学习到更大的空间特征。
3. VGG为什么使用3*3大小的卷积核堆叠的方式?其优点是什么?
2个3*3大小的卷积层串联,相当于1个5*5的卷积层,即:一个像素会和5*5个相邻像素相关联,即感受野大小为5*5。3个3*3大小的卷积层堆叠可以与1个7*7大小的卷积层具有相同的感受野。并且,使用小卷积核进行堆叠会有如下好处:
- 多个小卷积层堆叠会比单个大卷积层具有更多的非线性特性,使得CNN对特征的学习能力更强。例如:2个3*3大小卷积层堆叠会比1个5*5大小的卷积层具有更多的非线性特性,这是因为前者可以使用多次Relu函数,而后者只有1次。
- 此外,使用3*3小卷积层堆叠可以具有更少的参数量。例如:3个3*3的卷积层堆叠等价于一个7*7大小的卷积层,但是前者的参数量为3*(3*3*C*C)= 27*C*C,而后者有7*7*C*C =49*C*C。
3. 训练过程
预处理:对输入图像的每个像素减去训练集平均RGB值。
数据提升:随机裁剪,水平翻转,RGB颜色通道变换
正则化:L2正则化,weight decay=5e-4,对前两个FClayer进行dropout (p=0.5)
参数初始化:对于较浅的A网络,参数进行随机初始化,权重 w 从 N(0,0.01) 中采样,偏差 bias 初始化为0。然后,对于较深的网络,先用 A 网络的参数初始化前四个卷积层和三个全连接层。但是后来发现,不用预训练的参数而直接随机初始化也可以。
收敛速度:相比于AlexNet,收敛速度更快
单一尺度和多尺度训练:
首先对原始图片进行等比例缩放,使得短边至少要大于224,然后在图片上随机提取224x224窗口,进行训练。
两种方式设置训练尺寸S:
(1)固定 S 的大小,对应了单一尺度的训练,训练多个分类器:参数S为短边长。训练S=256和S=384两个分类器,其中S=384的分类器用S=256的进行初始化;
(2)多尺度(Multi-scale)训练:直接训练一个分类器,每次数据输入的时候,每张图片被重新缩放,缩放的短边S随机从[256,512]中选择一个,也可以认为通过尺度抖动(scale jittering)增加了训练集的数量。
4. 参考
- VGGNet总结: https://blog.csdn.net/huangfei711/article/details/80484488
- 【深度学习】VGGNet原理解析及实现:https://blog.csdn.net/u012679707/article/details/80807406