VGG——Very deep convolutional networks for large-scale image recognition
1. 摘要
在使用非常小(3×3)的卷积核情况下,作者对逐渐增加网络的深度进行了全面的评估,通过设置网络层数达 16-19 层,最终效果取得了显著提升。
2. 介绍
近来,卷积神经网络在大规模图像识别领域取得了巨大的成功,这一方面归功于大规模公开数据的出现,另一方面则是计算能力的提升。在 AlexNet 的基础上大家进行了很多的尝试来进行改进,一条线是在卷积层利用更小的感知窗口和更小的步长,另一条线则是在整张图片上进行训练然后测试的时候采用多尺度。在本文中,作者则集中于卷积神经网络的另一个方面——它的深度。
3. 网络结构
网络的输入是一个固定大小的 224×224 的 RGB 图像,唯一的预处理就是减去三个通道像素的均值。卷积核大小只有 3×3 和 1×1 两种,同时卷积的时候采用填充来保证卷积后空间分辨率保持不变。总共有 5 个最大池化层,它们分别跟在一些卷积层后面,池化的窗口大小为 2×2,步长也为 2。
一系列卷积层后最后是 3 个全连接层,它们的通道个数分别为 4096,4096 和 1000,最后一层采用 Softmax 来进行 1000 个类别的分类。在所有的模型中,全连接层的设置都是一样的。激活函数都选择 ReLU,如果某些层应用了 LRN,则和 AlexNet 中的参数保持一致。
作者设计了 A-E 总共六个模型,所有的模型设置都如上面所述,只是层数不同,从模型 A 有 11 层到模型 E 有 19 层。通道数从第一层的 64 逐渐增大到 512,在每一次最大池化后变为之前的两倍。

和以前的网络结构在第一层采用比较大的卷积核不同,作者在所有的卷积层都采用了 3×3 的卷积核,步长为 1。至于为什么要这样做呢?
两个 3×3 的卷积层叠加后(不经过池化)其感知野是 5×5,三个 3×3 的卷积层也就具有了 7×7 的感知野。那为什么要用几个 3×3 卷积层的叠加而不只用一个 7×7 的卷积层呢?
其一,三个卷积也就是三个非线性的叠加让决策函数比只有一个非线性更有判别性。
其二,这样会减少参数的数量。假设 3 个连续 3×3 卷积层的输入输出通道数都一样,为 \(C\),那么它们叠加后的参数量为 \(3*3^2C^2=27C^2\),而如果采用一个 7×7 的卷积层,参数量为 \(7^2C^2=49C^2\),后者比前者参数数量多了 81%。这就可以看作是对 7×7 卷积核强加了一个正则化,将它分解为几个 3×3 的卷积核,并且在其间插入非线性。

其中,1×1 的卷积核可以看作是在不改变感知野的情况下增加非线性的一种方法,作者在实验中设置它们的输入输出通道数一样。
4. 分类框架
4.1. 训练过程
训练采用带动量的梯度下降算法,以及 \(L_2\) 正则化和 Dropout 技术。其中,为了让模型快速收敛,作者先对比较浅的模型 A 随机初始化然后进行训练。在训练更深的网络时,对前四个卷积层和最后三个全连接层用网络 A 对应层的参数来初始化,中间层则使用均值为 0 方差为 0.01 的高斯分布来初始化,偏置参数初始化为 0。
固定大小的 224×224 输入图片,则是从调整后的训练图片中随机裁剪出来的,一张图片在一个迭代过程中只裁剪一次。为了扩充训练集,作者再对图片进行了随机水平翻转和随机 RGB 颜色偏移。
调整后的图片短边大小为 S,也称之为训练尺度,对此作者有两种设置。一种是单尺度,也即 S 是固定的,在实验中作者取 S=256 和 S=384。为了加速 S=384 网络的训练,先用 S=256 预训练网络的参数来对其进行初始化。另一种是多尺度,每张图片调整后的大小 S 是从一个范围内 \([S_{min},S_{max}]\)随机采样的,其中 $ S_{min}=256,S_{max}=512$。之所以这么做,是因为图片中的物体大小本来就不一样,这样一个模型就被训练为能够识别各个尺度规模的物体。
4.2. 测试过程
测试阶段调整后的图片大小为 Q,称之为测试尺度。测试尺度和训练尺度没有必要一样,而且作者发现针对每个 S 采取几个不同的 Q 会对结果有所提升。然后,作者将网络中的三个全连接层全部转化为了卷积。
网络的原始输入大小为 224×224×3,经过一系列卷积和 5 次最大池化后,输入全连接时的特征图大小为 7×7×512,然后第一个全连接层神经元个数为 4096,这一层的参数 W 的大小也即为 (7×7×512*4096)。将全连接转化成卷积的意思就是,可以将 W 看作是 4096 个 7×7×512 的卷积核,卷积后特征图也就变成了 1×1×4096。同理,第二个全连接层的权重可以看作是 4096 个 1×1×4096 的卷积核,第三个全连接层的权重可以看作是 1000 个 1×1×4096 的卷积核。
然后,重新调整后的测试图片便可以直接传入到网络中去,因为全都是卷积层,输入大小没有限制。但是,这样的话,最后得到的特征图可能不是 1×1×1000 的,而是 W×H×1000 的,为了得到一个 1000 维的向量,我们需要进行空间平均(求和池化)。作者也对测试图片进行了水平翻转,最终的结果则取它们的平均值。
因为作者是将整个测试图片输入到网络中进行测试,也就没有必要去多次裁剪多次计算,但是,为了对比,作者也进行了多次裁剪的实验和先前的工作进行对比。
5. 实验结果
5.1. 单尺度验证
对一张图片,只选取一个 Q 值运行一次模型进行测试。对于单尺度训练的模型,选取 Q=S,对于多尺度训练的模型,取 \(Q=0.5(S_{min}+S_{max})\),结果如下。

可以发现,网络加深后错误率逐渐下降。模型 C 和 D 具有一样的层数,但是 C 中引入了一些 1×1 的卷积,D 的错误率比 C 低,说明非线性和捕获空间信息同样重要。同时,用 3×3 卷积核的深层网络比用 5×5 的浅层网络效果要好,也验证了作者的结论。最后,用多尺度训练的模型比单尺度训练的模型效果要好,说明捕获多尺度的图片特性是有帮助的。
5.2. 多尺度验证
对一张图片,选取不同的 Q 值多次运行模型取平均来进行测试。对于单尺度训练的模型,选取 Q={S-32,S,S+32},对于多尺度训练的模型,取 \(Q=\{S_{min},0.5(S_{min}+S_{max}),S_{max}\}\),结果如下。

5.3. 多裁剪验证
对测试图片多次裁剪,然后进行测试。

5.4. 多模型融合验证
对多个模型输出的结果进行平均作为最终的结果。

5.5. 与以前的方法对比

获取更多精彩,请关注「seniusen」!

VGG——Very deep convolutional networks for large-scale image recognition的更多相关文章
- 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015
Large Scale Visual Recognition Challenge 2015 (ILSVRC2015) Legend: Yellow background = winner in thi ...
- VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...
- Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Kaiming He, Xiangyu Zh ...
- Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition 转载请注明:http://blog.csdn.net/stdcou ...
- 2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译
2014-VGG-<Very deep convolutional networks for large-scale image recognition>翻译 原文:http://xues ...
- 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)
Spatial pyramid pooling in deep convolutional networks for visual recognition 作者: Kaiming He, Xiangy ...
- SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
http://www.dengfanxin.cn/?p=403 原文地址 我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作.SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加 ...
- 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记
<DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...
- 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...
随机推荐
- django下载excel,使用django-excel插件
django下载Excel,使用django-excel插件 由于目前的资料多是使用pandas或xlwt库实现的.其实没有那么的麻烦,因为django有相对应的插件django-excel. 该插件 ...
- ElasticSearch学习之——基本的文档CURD
一.文档的添加 POST http://127.0.0.1:9200/{index}/{type}/{id} { "key":"value", "ke ...
- eclipse中文乱码解决
1. 改变整个文件类型的编码格式 1) eclipse->window->preferences->General->Content Types 2) 找到要修改的文 ...
- JVM(三)调优工具
前言 给一个系统定位问题的时候,知识.经验是关键基础,数据是依据,工具是运用知识处理数据的手段.这里说的数据包括:运行日志.异常堆栈.GC日志.线程快照(threaddump/javacore文件). ...
- Jmeter之八大可执行元件及执行顺序
初步接触Jmeter,对比LoadRunner进行熟悉,╮(╯▽╰)╭.毕竟我对LoadRunner还是比Jmeter熟悉. 1.配置元件 用来提供对静态数据配置的支持.例CSV Data Set c ...
- for 循环使用 enumerate 以及yield生成器简单例子
>>>seq = ['one', 'two', 'three'] >>> for i, element in enumerate(seq): ... print i ...
- SQLite加密方式 [转]
关于SQLite SQLite是一个轻量的.跨平台的.开源的数据库引擎,它的在读写效率.消耗总量.延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如iOS.Android). ...
- linux iSCSI target/initiator配置
linux iSCSI target配置全过程一:Install iSCSI target for Linux1,操作系统:[root@rac2 ~]# cat /etc/issueEnterpris ...
- iOS裁剪,缩放图片白边问题解决办法
几年没来了,感觉还是要写点啥,以后碰见问题 解决就写这吧,当是一个随时的笔记也好. iOS裁剪,缩放图片的代码网上也很多了,但是笔者出现了右边和下边出现白边的情况.出现白边的原因是给的size中的CG ...
- 【数据结构与算法】001—栈与队列(Python)
栈与队列 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有先进先出 ...