论文笔记:VGG模型
本篇博文主要是阅读Karen Simonyan的论文《VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION》的一些笔记,博文中的图表也均来自论文原文。详细的内容还是看论文的好。。。
摘要
在本文中,我们研究了在大规模图像识别任务中卷积神经网络的深度对准确率的影响。我们主要的贡献是利用带有很小卷积核(3*3)的网络结构对逐渐加深的网络进行评估,结果表明通过加深网络深度至16-19层可以极大地改进前人的网络结构。这些发现也是我们参加2014年ImageNet比赛的基础,并且在这次比赛中,我们分别在定位和分类跟踪任务中取得第一名和第二名。同时我们的模型对其他数据集也有很好的泛化能力,在这些数据上取得了最好的结果。为了促进计算机视觉领域深度视觉模型的进一步研究,我们公开了两个表现最好的卷积神经网络模型。
网络结构
模型结构中的一些细节说明:
- 输入均是裁剪过的224*224大小的RGB图片,并经过去均值处理。
- 卷积层中卷积核大小均是3*3,步长为1(stride = 1),补1圈0 (pad = 1)。
- 池化层均采用最大池化(max pooling),但不是所有的卷积层都有池化层,池化窗口为2*2,步长为2,即采用的是不重叠池化。
- 所有隐含层后都配有有ReLU层
- 参数数量(见下表):
选用3*3卷积核代替大卷积核的好处:
2个3*3的卷积核串联和用一个5*5的卷积核有相同的感知野,3个3*3的卷积核串联和用一个7*7的卷积核有相同的感知野。但前者相比于后者有更少的参数。
举个简单的例子,假设输入特征图(feature map)的大小为32*32*3(宽 * 高 * 通道数):
case 1: 采用1个5*5的卷积核,stride = 1, pad=2, 输出特征图的大小等于: (32+2∗pad−5)/1+1=32(32+2∗pad−5)/1+1=32,参数的数量为3∗(5∗5)=753∗(5∗5)=75个(每个通道25个,共3个通道);
case 2: 采用2个3*3的卷积核,stride = 1, pad=1, 第一次卷积后特征图大小等于:(32+2∗pad−3)/1+1=32(32+2∗pad−3)/1+1=32,第二次卷积输出特征图的大小等于: (32+2∗pad−3)/1+1=32(32+2∗pad−3)/1+1=32,总参数的数量为2∗3∗(3∗3)=542∗3∗(3∗3)=54个(每个通道9个,共3个通道,2个卷积层),比单独使用一个5*5的卷积核少了21个。
模型训练
除了从多尺度的训练图像中进行采样,其他基本和AlexNet模型的训练方法一致:
- 数据集扩充(data aumentation): 随机裁剪(crop)、水平翻转(horizontal flips)、RGB颜色变化(color shift)
- 训练采用小批量梯度下降法加上动量(mini-batch stochastic gradient descent + momentum),batch size = 256, momentum = 0.9;
- 正则化方法采用weight decay(L2罚函数乘子设为0.0005)和dropout(丢弃率设为0.5);
- 初始学习率(learning rate)为0.001,当在验证集上的准确率不再提高是学习率变为原来的0.1倍,一共降低了3次;
- 总迭代次数为370k (74 epochs), epochs指训练集完整遍历的次数
- 采用2种设置训练图像大小方法: (1)固定训练集图片大小,如256*256和384*384;(2)多尺度训练,让训练集的大小在一个范围内随机变化,如S∈[Smin,Smax]=[256,512]S∈[Smin,Smax]=[256,512],具体可以看论文。
模型测试
在测试阶段,首先选定一个测试集图片大小Q,然后在这个图片上应用训练好的卷积网络,在最后一个卷积阶段产生未经池化的特征图,然后利用滑动窗口的方法,每种池化窗口产生一个分类输出,然后融合各个结果,得到最终分类。这样做相对于取10个图片块的好处是更加高效,因为只需计算一次卷积过程。
参考文献
- Karen Simonyan, Andrew Zisserman. very deep convolutional networks for large-scale image recognition.