论文阅读《Very Deep Convolutional NetWorks for Large-Scale Image Recognition》
介绍
这是卷积神经网络发展的一些主要网络
LeNet(3个卷积层+2个降采样层+1个全连接层)CNN雏形
AlexNet (5个卷积层+3个全连接层+1个softmax层
本文所讨论的VGG就是基于LeNet、AlexNet提出的更深的卷积神经网络
VGG主要采用增加卷积层的方法来加深网络,结果发现深度越深,网络学习能力越好,分类能力越强。当深度增加到16-19层时,识别效果有较大提升,即VGG-16,VGG-19。
在ILSVRC2014竞赛中定位第一,分类第二(第一是GoogleNet)。
将卷积层的概念提升到了卷积group概念上,每个卷积group中含有几层卷积层,不再像AlexNet中5个卷积层,而是5个卷积group组合,将AlexNet的8层深度推到了16-19层。
正文
1.摘要
文章主要研究了深度对卷积神经网络分类精度的影响。
在AlexNet的基础上主要做了两方面的改进:
1.使用了最小的3*3卷积核尺寸和最小间隔。
2. 在整个图片和multi-scale上训练和测试图片。
论文原句:1. Use smaller receptive window size and smaller stride of the first convolutional layer.
2.Training and testing the networks densely over the whole image and over multiple scales.
2.配置
采用较小的Filter尺寸-3*3,卷积的间隔s=1:
1:3*3是最小的能够捕获上下左右和中心概念的尺寸。
2:两个3*3的卷基层的有限感受野是5*5;三个3*3的感受野是7*7,可以替代大的filter尺寸。
3:多个3*3的卷基层比一个大尺寸filter卷基层有更多的非线性,使得判决函数更加具有判决性。
4:多个3*3的卷积层比一个大尺寸的filter有更少的参数,假设卷基层的输入和输出的特征图大小相同为C,那么三个3*3的卷积层参数个数3*(3*3*C*C)=27CC;一个7*7的卷积层参数为49CC;所以可以把三个3*3的filter看成是一个7*7filter的分解(中间层有非线性的分解)。
也使用过1*1 filter:
作用是在不影响输入输出维数的情况下,对输入进行线性形变,然后通过Relu进行非线性处理,增加网络的非线性表达能力。
Max-Pooling:2*2,间隔s=2;
3.分类
3.1 分类训练配置
Multi-scale 训练(多尺度训练)
多尺度的意义在于图片中的物体的尺度有变化,多尺度可以更好的识别物体。有两种方法进行多尺度训练。在不同的尺度下,训练多个分类器,参数为S,参数的意义就是在做原始图片上的缩放时的短边长度。 论文中训练了S=256和S=384两个分类器,其中S=384的分类器的参数使用S=256的参数进行初始化,且将步长调为10e-3。由0.01->0.001 另一种方法是直接训练一个分类器,每次数据输入时,每张图片被重新缩放,缩放的短边S随机从[min, max]中选择,论文中使用区间[256,384],网络参数初始化时使用S=384时的参数
把原始 image缩放到最小边S>224;然后在full image上提取224*224片段,进行训练。在训练的过程中,输入为224*224大小的RGB图像,预处理时计算这三个通道的平均值,在训练时减去这些平均值,这样处理网络可能更快的收敛。
训练时发现,尽管VGG比Alex-net有更多的参数,更深的层次;但是VGG需要很少的迭代次数就开始收敛。这是因为:
(1)深度和较小的filter尺寸起到了隐式的规则化的作用。
(2)在特定的层使用了预训练得到的数据进行参数的初始化。
参考Sermanet等人的做法(OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks)这也是一篇非常经典的文章
3.2分类测试
测试的时候也采用multi-scale。
同一张测试图片可以rescale成不同的大小,这样多个scale的同一张图片都在网络中进行测试,可以提升测试效果。
3.3分类实现细节
使用C++ Caffe toolbox实现 支持单系统多GPU 多GPU把batch分为多个GPU-batch,在每个GPU上进行计算,得到子batch的梯度后,以平均值作为整个batch的梯度。 论文的参考文献中提出了很多加速训练的方法。论文实验表明,在4-GPU的系统上,可以加速3.75倍。
3.4分类实现结果
以上的图分别是单尺度测试、多尺度测试、大量的crops测试、多模型投票的实验结果,
可以看出的是深度越深,实验结果越好,多尺度测试比单尺度测试结果要好,大量crops的测试结果可以进一步提高正确率,多模型融合也可以提高正确率。
3.5分类与其他网络比较
仅次于GoogleNet。
4.定位
使用模型D(参数最少,表现最好)通过回归函数来替换分类器,两种分类方法:SCR(single-classregression),用一个回归函数来学习预测所有类别的bounding box;PCR(per-class regression)每个类别有自己单独的一个回归函数。
训练:分别在S=256和S=384上训练两个模型,网络反馈学习时,探究了两种情况1,fine tuning整个网络;2,只调整全连接层。
测试:
第一种测试框架:定位网络只应用在图像的裁剪中心,用于比较不同的网络修改下性能。
1,发现fine-tuning整个网络的定位性能,比值调整全连接层权值的定位结果要好。
2,PCR比SCR结果好,这个和OverFeat的结果相反。
所以最好的定位方法是采用PCR,fine-tuning整个网络。
第二种测试框架:在整个图像上密集应用定位网络;首先根据softmax分类结果给定bounding box的置信得分,然后融合空间相似的bounding box,最后选取最大置信得分的bounding box。
在不同scale下,定位结果。
1,适当的scale对于定位结果有影响S=384好于S=256。
2,multi-scale比single-scale好。
3,multi-model fusion会更好。
定位网络与其他网络比较
5.结论
贡献
经过本文的研究发现,深度是获得好结果的关键。文章通过随机的方式训练最浅的网络A。然后在训练其他网络时在A上进行一些列的修改,一步一步地提高网络性能,进而探索好的网络设计应该是什么样的。
遗留问题
网络A是怎么提出来的并不知道?
文章中只是详细说明了使用3*3filter的原因,至于层数,阶段数,特征数的设计缘由,并没有说明?