版权声明:本文为博主原创文章,欢迎转载分享,请注明本文出处。文章内容如有侵权,请联系删除。
《Very Deep Convolutional Networks For Large-Scale Image Recognition》是牛津大学 Visual Geometry Group(VGG) K. Simonyan 和 A. Zisserman 于2014年撰写的论文。这篇文章主要研究了,在大规模图像的识别问题中,卷积神经网络的深度对准确率的影响。文中采用核宽度为 3 的卷积结构(3 × 3 convolution filter),构建了一系列不同深度的卷积网络。该模型在 ImageNet Large-Scale Visual Recognition Challenge 2014 (ILSVRC-2014)中,取得了定位项目第一名,分类项目第二名的成绩。
数据预处理工作
在模型的训练过程中,卷积网络的输入是大小为 224 × 224 的RGB图像。文中对每一幅图像的预处理工作仅有,对每一个像素减去RGB的均值(mean RGB value)。
卷积神经网络的配置
卷积部分(Convolutional Layers):卷积层使用大小为 3 × 3 的接受域(receptive field)(它是可以表示“左右”、“上下”、“中心”这些概念的最小单元),在结构C中也使用到大小为 1 × 1 的接受域(它可以被看作是对输入通道的线性变换;作用是在不影响输入输出维数的情况下,对输入进行线性变换,然后通过线性整流函数(ReLU)进行非线性处理,增加网络的非线性表达能力(引用自系统学习深度学习(十七)--VGG模型));卷积步长(stride)为 1 个像素;接受域大小为 3 × 3 的卷积层的填充(padding)为 1 个像素;部分卷积层后是池化(pooling)层,池化层采用最大池化(max-pooling)函数,共有五层,max-pooling的窗口大小为 2 × 2,步长为 2 个像素,池化层的作用在于特征加强,同时缩小Feature Map的尺寸(引用自VGG网络详解及代码实现)。
全连接部分(Fully-Connected Layers):文中提到的一系列卷积网络,均只有 3 个全连接层;前两个全连接层各有4096个通道(channel),第三个全连接层有1000个通道(在ILSVRC任务中,这1000个通道用于分类,每个通道对应一个类别);所有网络中的全连接层配置相同。
VGG 16 的微体系结构如图 1 所示(原图取自MACROARCHITECTURE OF VGG16)。
表 1 给出了全部卷积网络的配置,这些网络遵循上述设计原则,区别仅在于深度不同。VGG采用的是一种Pre-training的方式,这种方式在经典的神经网络中经常能够见到,就是先训练一部分小网络,然后在确定这部分网络达到稳定后,再在这基础上逐渐加深。表 1 从结构A到结构E体现的就是这个过程,并且当网络处于阶段D的时候,效果是最优的,因此阶段D的网络也就是最终的VGGNet了(引用自ConvNets Typical Architecture与VGGNet)。
文章中共构建了六个不同结构的网络。
结构 A:与AlexNet结构相似,存在5个卷积层和3个全连接层,不同的是,卷积层使用大小为 3 × 3 的接受域。
结构 A-LRN:保留AlexNet中的局部响应归一化层(Local Response Normalization, LRN),其他与结构A相同。
结构 B:在结构A的基础上,Stage1和Stage2分别增加了一个接受域大小为 3 × 3 的卷积层,共有10个卷积层,总计13层。
结构 C:在结构B的基础上,Stage3、Stage4和Stage5分别增加了一个接受域大小为 1 × 1 的卷积层,共13个卷积层,总计16层。
结构 D:在结构B的基础上,Stage3、Stage4和Stage5分别增加了一个接受域大小为 3 × 3 的卷积层,共13个卷积层,总计16层。
结构 E:在结构D的基础上,Stage3、Stage4和Stage5分别增加了一个接受域大小为 3 × 3 的卷积层,共16个卷积层,总计19层。
表 2 给出了不同网络模型中参数的数量。可见,虽然从A结构到E结构,网络深度由11层增加至19层,但参数的数量并未出现太大变化,这是因为在网络中,参数主要集中在全连接层(引用自VGG网络详解及代码实现)。
对卷积结构的讨论
与AlexNet(Krizhevsky et al., 2012)和ZFNet(Zeiler & Fergus, 2013; Sermanet et al., 2014)相比,VGGNet使用了更小的卷积结构。在第一个卷积层中,AlexNet使用了大小为 11 × 11、步长为 4 个像素的卷积结构,ZFNet使用了大小为 7 × 7、步长为 2 个像素的卷积结构,而VGGNet则使用了大小为 3 × 3、步长为 1 个像素的卷积结构。
可见,相邻的两个 3 × 3 的卷积和一个 5 × 5 的卷积拥有相同的有效接受域,两两相邻的三个 3 × 3 的卷积和一个 7 × 7 的卷积拥有相同的有效接受域。这让VGGNet包含了三个ReLU层而非一个,使得决策函数更具识别能力,同时减少了参数的数量。
模型训练
VGGNet的训练过程与AlexNet基本一致。
其中,优化方法采用含有动量的小批量梯度下降法(mini-batch gradient descent with momentum);批尺寸(batch size)设置为256;采用L2正则化,惩罚系数设置为 5e-4;同时为前两个全连接层添加“Dropout正则”,dropout比率设置为 0.5。
文中指出,尽管VGGNet比AlexNet拥有更多的参数和更深的层次,但是VGGNet只需要很少次迭代就能够收敛,作者猜想到两方面原因:第一,更深的层次与更小的卷积核尺寸起到了隐式正则化的作用;第二,特定层的预初始化(pre-initialisation)。
关于Pre-Initialisation。网络A的权值 W ~ (0, 0.01) 的高斯分布,偏差(bias)为0;由于存在大量的线性整流函数,不好的权值初始值对于网络训练影响较大。为了绕开这个问题,作者先通过随机的方式训练最浅的网络A;然后在训练其他网络时,把A的前4个卷积层和最后全连接层的权值当做其他网络的初始值,未赋值的中间层通过随机初始化的方式得到。(引用自Very Deep Convolutional Networks for Large-Scale Image Recognition(VGG模型))
文中通过对原始图像进行各向同性的放缩,并采取随机裁剪的方式,获得固定大小为 224 × 224 的输入图像。为了扩充数据集,对裁剪后的图像进行了随机的水平翻转及随机的RGB颜色转换。同时,文中采用了两种多规模(multi-scale)的训练方式。第一种方法是将原始图像依据不同的规模S放缩后进行裁剪训练(S = 256; S = 384),第二种方法是给定S的范围 [Smin, Smax],让每一幅图像随机选取区间内的S进行训练,相当于通过尺度抖动增强数据。
欢迎大家参与讨论!如有错误,请批评指正!