VGG学习总结

论文题目:Very Deep Convolutional Networks for Large-Scale Image Recognition
论文使用的VGG网络在ILSVRC2014图像分类比赛中获得了第二名的成绩,后来的许多网络结构也是在VGG网络的基础上进行改进,取得了很好的效果。论文主要是讨论了卷积神经网络(ConvNet)架构设计的另一个重要方面——深度,通过将深度增加到16-19层,分类效果得到了显著的提升。

注:为了方便理解,博文结尾给出了一些概念的链接以及一些重要的参考文献。

1 网络结构
文章分别使用了6种不同深度的网络进行对比,这6种网络的结构如下:

这里写图片描述

这几个网络都有一致的配置,只有层数不一样,用A,B,…E命名,输入的图像是224x224的RGB图像,做过的预处理是将图像的每个像素减去RGB均值。卷积层的步长是1,pooling层是2x2的,步长为2,最后连接三个全连接层后再接一个softmax进行分类,使用的激活函数为ReLU。这几个网络里只有A-LRN中使用了Local Response Normalisation (LRN) normalisation[1],由于使用了LRN效果没有提升,反而增加了计算时间,所以在B,C,D,E的对比中不再将LRN引入。
虽然加深了网络的深度,但是参数的数量并没有比浅层的神经网络的参数多太多(后边会讨论)

2 实验过程
训练过程
训练使用的是带有动量的mini-batch梯度下降的方法,batch大小为256,动量设置为0.9,训练正则项所乘的参数设置为5*10-4(10的-4次方),dropout率设置为0.5,learning rate设置为10的-2次方。实验训练了370k次(74个epochs)。
论文提到网络权重的初始化很重要,初始化不好了可能会让学习停止。论文是这样做的,先对A网络进行随机初始化参数进行训练,然后,将训练好的A网络的参数去初始化后边深层网络的前4层以及全连接层,剩下的层是用均值为0,方差为0.01的正态分布去随机初始化的,并且biases初始化为0。并且论文里提到,可能存在不需要预训练参数直接进行初始化参数的方法,需要进一步探索。
为了获得224x224的输入图像,论文里是对原图进行各向同性的放缩后,采取随机裁剪的方式获得的,使用S代表放缩后的图像的最短边,所以S>=224。为了扩充数据集,裁剪后的图像进行了随机的水平翻转以及随机的RGB颜色转换[1]
同时呢,论文的还采用了多种尺度的训练方式,就是将原始图片采用不同的S放缩后进行裁剪训练,比如让S=256,S=384分别训练,还有一种动态改变S的方式,就是给定S的范围[Smin,Smax],让每张训练图片随机选取S进行训练,这样相当于通过尺度抖动来增强数据。
测试过程
首先,图像的最小边被各向同性的缩放成预定义的尺寸,设为Q,Q并不一定要与训练尺寸S相同。然后,根据[2]中的方法将网络密集的应用在经过尺寸缩放的测试图像上。即先将全连接层转换成卷积层(第一个全连接层转换成7×7的卷积层,后两个全连接层转换成1×1的卷积层),再将这样得到的全卷积网络运用在整幅图像上(未裁切的)。输出是一个分类得分图,通道的数量和类别的数量相同,空间分辨率依赖于输入图像尺寸。最终为了得到固定尺寸的分类得分向量,将分类得分图进行空间平均化(求和——池化)。同样使用水平翻转来对测试集进行数据增强;在原始图像和翻转图像上的soft-max分类概率的平均值作为这幅图像的最终得分。

实验结果
实验使用的是 ILSVRC-2012数据集,分为三部分,训练集:1.3M images,验证集:50k images,测试集:100k images

这里写图片描述

Table3是单尺度的实验结果,从Table3可以看出,1,使用LRN并没有提升效果,2,从A中的11层到D中的16层,随着网络深度的增加,错误率下降,但是E中的19层却没有进一步的提升,说明已经饱和,可能需要更多的 数据集得以提升,3,C(加的1x1卷积核)比D(加的3x3卷积核)的效果要差,说明增加额外的非线性确实有效(因为C比B好,后边讨论1x1卷积的功能),但是使用卷积核捕捉图像的空间信息很重要。

这里写图片描述
Table4是一个多尺度的实验结果,可以看到,采用[256,512]抖动尺度的训练结果最好,将top5错误降低到了8.0%

这里写图片描述
此外,论文里最后还采用了一种网络融合的方式提高精度,通过计算多个模型不同尺度的soft-max分类概率的平均值来对它们的输出进行组合,可以看到error进一步下降

不同模型的比较
这里写图片描述
当然这是2014年的论文了,比较的是当时的成果,Google那个指的GoogleNet

关于论文剩下的部分是讲定位的,这里就不做笔记了,因为关于目标检测已经有了更好更新的技术,比如faster-rcnn,Yolo等等,但是VGG的网络却被这些先进的框架所应用,说明也是相当经典了,下边有一些关于论文中的一些问题的讨论,里边有一些是论文里的,一些是我的感悟,我想在设计网络的过程中很有启发意义,在此记录一下。


讨论
1, 小的卷积核的深层网络性能优于大卷积核的浅层网络
2,小的卷积核的卷积层连用(中间没有pooling)和大的卷积核单用的感受野是相同的,比如2个3x3的卷积层连用和一个5x5的卷积层的感受野一样,3个3x3的卷积层和一个7x7的卷积层感受野一样。
3,小的卷积核的连用可以让决策函数变得更有区分度,并且可以大大降低参数的数量,这就是文章里深层网络的参数却比浅层网络参数没多多少的原因
4,深层网络适合于大的数据集
5,关于1x1卷积核的作用:首先,增加决策函数的非线性,其次,对特征进行了转换,相当于“feature pooling”,比如把300x300x50的特征图可以降到300x300x20。
6,使用预训练好的参数初始化可以加速训练

一些链接:
1,关于1x1卷积核更详细的解释:http://iamaaditya.github.io/2016/03/one-by-one-convolution/
2,loss function和decision function的区别:https://stats.stackexchange.com/questions/104988/what-is-the-difference-between-a-loss-function-and-decision-function
3,Softmax的特点和作用:https://www.zhihu.com/question/23765351
4,神经网络激励函数的作用:https://www.zhihu.com/question/22334626/answer/21036590
5,CNN计算感受野:http://blog.csdn.net/bojackhosreman/article/details/70162018
6,迭代iteration和时期epochs之间的关系和区别:https://www.quora.com/What-is-the-difference-between-iterations-and-epochs-in-Convolution-neural-networks

参考文献
[1]A. Krizhevsky, I. Sutskever, and G. E. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, pages 1106–1114, 2012.
[2] P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In Proc. ICLR, 2014.

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值