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 标题翻译:用于视觉识别的深度卷积神 ...
随机推荐
- ansible--03
一. Ad-hoc命令简介 1. 格式:ansible <host> [opion] 2. option参数: -v:输出详细的执行过程, -vvv最详细的结果 -i:指定inventor ...
- 初识Qt鼠标、键盘事件及定时器和随机数
1.新建Qt Gui应用,项目名称为“myEvent”,基类名称为QWidget,类名称为Widget. 2.widget.h文件中添加以下代码,该段代码中包含了三个事件函数和一个槽函数 privat ...
- tp5简要
1.实例化模型 namespace app\web\controller; use think\Controller; use app\web\model\Member; use think\Load ...
- img底边空隙问题原因和解决方案(修改)
转载自:http://www.cnblogs.com/minelucky/p/4746071.html 练习切图时发现img和父级div之间总是有2px空隙(chrome),上网搜索解决. 图 ...
- AWR报告中Top 10 Foreground Events存在”reliable message”等待事件的处理办法
操作系统版本:HP-UNIX B.11.31 数据库版本:11.2.0.4 RAC (一) 问题概要 (1)在AWR报告的Top 10 Foreground Events中发现reliable mes ...
- iOS - dispatch_after解说
dispatch_after 是来延迟执行的GCD方法,因为在主线程中我们不能用sleep来延迟方法的调用,所以用dispatch_after是最合适的 dispatch_after 能让我们添加进队 ...
- 初学node.js-MongoDB安装和环境服务配置(4)
一.mongoDB安装: (1)官网下载,我的是windows64位系统,目前最新版mongodb-win32-x86_64-2008plus-ssl-4.0.9-signed.msi 安装步骤不说了 ...
- Mac编译安装swfTools
Mac编译安装swfTools Mac编译安装swfTools 下载源码 解压源码 安装依赖项 ./configure执行配置或者执行如下配置命令: 需要注意这里存在部分代码错误,需要修改解决后执行 ...
- php生成带自定义logo和带二维码跳转自定义地址的二维码
index.php<?phpheader('Content-type:text/html;charset=UTF-8');// 指定允许其他域名访问header('Access-Control- ...
- 七、Delphi10.3读取JSON数组
一.Delphi读取JSON数组是非常方便的,首先我们网上找一段JSON数据 { "error": 0, "status": "success&quo ...