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的更多相关文章

  1. 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015

    Large Scale Visual Recognition Challenge 2015 (ILSVRC2015) Legend: Yellow background = winner in thi ...

  2. VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition

    Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...

  3. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Kaiming He, Xiangyu Zh ...

  4. Very Deep Convolutional Networks for Large-Scale Image Recognition

    Very Deep Convolutional Networks for Large-Scale Image Recognition 转载请注明:http://blog.csdn.net/stdcou ...

  5. 2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译

    2014-VGG-<Very deep convolutional networks for large-scale image recognition>翻译 原文:http://xues ...

  6. 目标检测--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 ...

  7. SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    http://www.dengfanxin.cn/?p=403 原文地址 我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作.SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加 ...

  8. 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记

    <DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...

  9. 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...

随机推荐

  1. 1818: [Cqoi2010]内部白点

    Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1394 Solved: 625 [Submit][Status][Discuss] Descriptio ...

  2. 最长公共子序列&最长公共子串

    首先区别最长公共子串和最长公共子序列  LCS(计算机科学算法:最长公共子序列)_百度百科 最长公共子串,这个子串要求在原字符串中是连续的.而最长公共子序列则并不要求连续. 最长公共子序列: http ...

  3. Apache去掉index.php

    把 #LoadModule rewrite_module modules/mod_rewrite.so 前面的#去掉, 再把权限AllowOverride None都改为AllowOverride A ...

  4. jdk8中tomcat修改配置PermSize为MetaspaceSize 标签: tomcatPermSizeMetaspaceSize

    JDK8中用metaspace代替permsize,因此在许多我们设置permsize大小的地方同样需要修改配置为metaspace 将-XX:PermSize=200m;-XX:MaxPermSiz ...

  5. 算法练习——最长公共子序列的问题(LCS)

    问题描述: 对于两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列.X  Y   各自字符串有顺序,但是不一定需要相邻. 最长公共子串(Longest Common Subst ...

  6. 用kubeadm 搭建 高可用集群问题记录和复盘整个过程 - 通过journalctl -u kubelet.service命令来查看kubelet服务的日志

    1.根据  https://github.com/cookeem/kubeadm-ha/blob/master/README_CN.md  去搭建ha集群,遇到几个问题: runtime networ ...

  7. MHA实践操作

    1.MHA部署解读: 1.1MHA Manager可以部署在一台slave上.MHA Manager探测集群的node节点,当发现master出现故障的时候,它可以自动将具有最新数据的slave提升为 ...

  8. 【ui】amazeui前端框架

    amazeui Amaze UI是一款较全面的轻量级 (更适于mobile,但也可以用于web)的前端框架. 她综合了业界一些优良插件,直接拿来用而不用一个个去搜索

  9. jquery html 鼠标悬浮出现列表切换

    效果截图 HTML结构为: <div class="activityBox"> <ul class="activityTab"> < ...

  10. Scala-字符串操作

    package com.bigdata object StringO { def main(args: Array[String]): Unit = { val s1 = "Hello&qu ...