扒一扒神经网络--VGG

VGG

Title: Very Deep Convolutional Networks for Large-Scale Image Recognition

Author and affiliation: Andrew Zisserman;Oxford Visual Geometry Group Google DeepMind

Year: 2015

Honors: ImageNet Challenge 2014, 1st in localisation and 2nd in classification

Datasets: ILSVRC-2012 dataset

Main contributions: 

VGG旨在利用3*3小卷积加深网络的深度(16-19层,分别称为VGG16和VGG19),

两个3*3卷积的堆叠
两个3*3卷积的堆叠

大的卷积核固然有较大的感受野,但大卷积所带来的计算量也是更大的。是否存在一种方式,既可以保证大的感受野又不增大计算量呢?如上图所示,使用两个3*3卷积的堆叠,对应于最上层的单个像素而言,它的感受野映射到两层3*3卷积之前的图像是5*5。那这样操作的计算量呢?假设一个卷积层输入和输出的通道数都为C,则一个5*5的卷积带来的参数是5^2C^2=25C^2,而两个3*3的卷积堆叠带来的参数量是2*(3^2C^2)=18C^2。可见用两个3*3的卷积堆叠使用了更少的参数却与一个5*5的卷积拥有相同的感受野。同样的,如果使用三个3*3卷积堆叠,则可以达到7*7的感受野。同时,堆叠的卷积层也增加了激活函数的使用,使得模型的非线性表达能力更强。

作者在论文中用了A, A-LRN,B,C,D,E六种网络去进行对比论证,其中的卷积核都是3*3的小卷积,且在网络最后都是三个全连接层(具体层级配置见Architecture中的VGG网络结构图)。其中A是一个11层浅层网络,A-LRN是在A的基础上在第一层卷积后加上了Alexnet[1]中提出的LRN局部响应归一化,论证了LRN其实并没有改善网络性能,而且还增加了内存消耗和计算时间(在AlexNet v2[2]中也去掉了LRN)。B是一个13层的小网络,在A的基础上加了两层卷积,C除了用了3*3卷积外,还用了1*1的卷积增加了网络的非线性表达能力(不影响感受野)。D和E分别是VGG16和VGG19,细节将在下一部分详细介绍。

作者与Sermanet et al. [2]的工作进行了对比(参数数量见表格“overfeat参数对比”),Sermanet et al.他们所用的网络比VGG更浅, 且采用的是大卷积(11*11,4*4),他们的参数在精确版上达到144millions,与VGG16(138millions)和VGG19(144millions)相比,凸显了VGG的设计初衷--减少计算量的同时保持了一定的感受野。

overfeat参数比对

Architecture:

1. 预处理

对RGB的训练图像进行减均值的预处理

2. 网络模型

VGG网络结构图

在VGG16(D)和VGG19(E)中,全部使用3*3的卷积,且stride=1,保证了每个输入像素都参与计算。下面以VGG16为例,展示该网络结构的具体参数设置(VGG19为在VGG16的基础上增加了三个卷积层,蓝色行为VGG19所含层,两者使用的卷积参数是一样的)。需要注意的是,VGG不止使用了小卷积核,在池化核上也是用了2*2的小池化核,stride=2.

layerskernel size

feature maps

strideOutput sizeActivation
input(224*224*3)     
conv1-13*3641224*224*64ReLu
conv1-23*3641224*224*64 
max-pooling12*2-2112*112*64-
conv2-13*31281112*112*128ReLu
conv2-25*51281112*112*128ReLu
max-pooling22*2-256*56*256-
conv3-13*3256156*56*256ReLu
conv3-23*3256156*56*256ReLu
conv3-33*3256156*56*256ReLu
conv3-43*3256156*56*256ReLu
max-pooling32*2-128*28*256-
conv4-13*3512128*28*512ReLu
conv4-23*3512128*28*512ReLu
conv4-33*3512128*28*512ReLu
conv4-43*3512128*28*512ReLu
max-pooling42*2-114*14*512-
conv5-13*3512114*14*512ReLu
conv5-23*3512114*14*512ReLu
conv5-33*3512114*14*512ReLu
conv5-43*3512114*14*512ReLu
max-pooling52*2-27*7*512-

fc1

7*7409611*4096dropout
fc21*1409611*4096dropout
fc31*11000(classes)11*1000+softmax

Implementation details:

1. Training

使用了小批量梯度下降,使用了L_2正则项学习率初始化为10^{-2},当验证机loss不再下降后,以10倍的速度减小学习率。在训练过程中,在74个epoch中,学习率一共下降了三次。

在初始化阶段,作者尝试先用A网络的以训练的权值来初始化初始的四个卷积层和最后三层全连接层,其余层采用随机初始化,但在论文提交后发现使用随机初始化也具有可行性。

作者采用两种图像采样方式来进行训练:

a.对于单尺度训练

使用固定尺寸256和384,使原始图像最小边分别缩放至256和384(为了加速训练,使用256*256尺寸训练的网络来初始化384*384输入的网络,让用较小的学习率10^{-3}

b.对于多尺度训练

在256~512之间随机裁剪,缩放最小边至最大最小值之间,因此网络的输入是不同尺寸大小的图像,因此可以学习到不同尺度的图像信息。为了加速训练,作者使用384*384的预训练网络进行训练。

2. Testing

两种预测方法:

a.multi-crop:

对图像进行多样本的随机裁剪,并对所有结果取平均。

b.densely:

采用了FCN的思想,将最后的三个全连接层改成了的卷积(7*7,1*1,1*1),以此形成一张预测的score map。由于输入尺寸不同,使得输出的包含了可变长度的空间尺度大小。因此,为了获得统一大小的分数向量,需要对score map然后对此结果取平均得到最终的预测值。

Results:

a.单尺度

在这个实验中,作者提出了一种scale jitter的方式来控制网络的输入。对于输入S_{min}=256,S_{max}=512, 作者除了使用了固定大小256或384作为输入,还使用了在S_{min},S_{max}之间抖动的尺寸作为网络的输入。然后我们也发现384其实就是取得S_{min},S_{max}的中间值。

作者用之前提到的六个网络去对单尺度的训练结果进行测试,从表格中可以看出层数越深效果越好,同时使用scale jitter的效果要比固定训练大小的效果要好,这种方式提供了多尺度的信息。

 

b.多尺度

这部分的实验将scale jitter用到了测试部分,结果发现,效果好了一丢丢。

 

c.预测方式

使用了之前提出的两种预测方式来进行对比实验,结果表明,两种方式结合的模式效果更好。

 

d.模型融合

作者甚至还尝试了将VGG16,VGG19,以及运用了1*1卷积的小网络,这三者进行各种融合的方式来测试模型的效果。结果可以看出将VGG16和VGG19进行融合并使用multi-crop和dense融合的预测方式所取得的效果很好。

需要注意的是,这里的模型融合的做法是将这些模型的softmax的预测结果取平均以得到最终的预测结果。

作者将单一的VGG网络(这里用的是VGG19)和使用了multi-crop和dense融合的预测方式的VGG19,以及刚刚提到的模型融合结果与目前方法进行了对比,结果确实有一定的优势。

最终结果官方提供的页面贴出了如下结果,好像这个表格能更简洁的对比出VGG不同层数效果。

Github:

Tensorflow中对VGG的实现

VGG论文官方提供的论文说明链接

Reference:

[1] Krizhevsky, A., Sutskever, I., and Hinton, G. E. ImageNet classification with deep convolutional neural networks. In NIPS, pp. 1106–1114, 2012.

[2] Sermanet P , Eigen D , Zhang X , et al. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks[J]. Eprint Arxiv, 2013.


作者:miya_xu 出处:https://blog.csdn.net/u012885745/article/details/84634898 欢迎转载或分享,但请务必声明文章出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值