0. 背景

Karen Simonyan等人在2014年参加Imagenet挑战赛的时候提出的深度卷积神经网络。作者通过对2013年的ILSVRC中最好的深度神经网络模型(他们最初的对应模型都是alexnet)进行研究,发现他们使用了更小的感受野,并且在第一层卷积层中使用了更小的stride,也就是这两点都有助于准确度的提升。所以本文就不去做无用功,从网络的深度去挖掘CNN模型的提升空间,并且发现当网络深度在超过16层时,有明显的提升效果,故而如果截取当前16层的网络,就被称之为VGG16。

从感受野角度来说,两个\(3*3\)的卷积核叠加,就等于一个\(5*5\)的卷积核的结果。可是从参数量上,前者明显会小于后者。而且从分层角度上看,因为之间会通过非线性激活函数的转换,所以\(3*3\)的卷积核叠加还能得到更非线性的特征提取结果

为了遵循单一变量的原则,除了深度外,其他涉及到的参数基本保持一致。

1. 模型


图1.1 VGG不同深度时的网络结构
如图1.1所示,图片的输入都是\(224*224\),卷积核大小都是\(3*3\),滑动的步长stride=1,在某些卷积层后面跟上最大池化,其中池化的大小为\(2*2\),且每一层卷积都是保留尺寸的卷积(即卷积之后,feature map的大小不变),且为了降维、对通道的线性变换、增加决策函数的非线性等目的,采用了《network in network》中的\(1*1\)的卷积操作。其中FC层表示该层为全连接层。
作者通过试验发现alexnet中的LRN(Local Response Normalisation,LRN)不但不利于准确度提升,反而还会占用内存,所以都省略了该层。


图1.2 不同深度VGG下参数量,单位为百万

2. 训练结果

作者在训练的时候,开始先训练模型A,然后在训练模型B的时候,将前面几层CNN和最后的全连接层的参数用模型A的权重来初始化,以此达到用小模型去预训练大模型的目的;
而且,作者用S表示对训练集图片做的一个缩放,用Q表示对测试集图片做的一个缩放,当然其中S和Q都不得小于224。

简单的训练过程如下:

  • 1 - 给定S和Q值,将图片进行各方向同性缩放到S和Q;
  • 2 - 然后用crop的方法对缩放后的图片进行采样到\(224*224\);
  • 3 - 将crop采样得到的图片放入VGG模型中训练。


图2.1基于单尺度测试情况下的结果

图2.2基于多尺度测试情况下的结果
从图2.1和图2.2中可以看出:从C模型与D模型对比,可以肯定深度的好处的确有助于准确度的提升;而从E模型与D模型的对比,发现还是E模型更好,作者认为深度有助于提升准确度,可是模型还是需要通过卷积核去抓取空间上下文信息。

因为大家通常都是直接将基于imagenet训练好的VGG拿来用,所以基本没多少人会从0开始训练VGG网络。而且论文中也显示4块卡,也需要小心的训练2-3个礼拜。本文只着重于VGG的网络结构,如有必要,后续再补全该博文。

参考文献:
[] - Zeiler M D, Fergus R. Visualizing and understanding convolutional networks[C]//European conference on computer vision. Springer, Cham, 2014: 818-833.
[] - Sermanet, P., Eigen, D., Zhang, X., Mathieu, M., Fergus, R., and LeCun, Y. OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks. In Proc. ICLR, 2014[]

Feature Extractor[VGG]的更多相关文章

  1. Feature Extractor[inception v2 v3]

    0 - 背景 在经过了inception v1的基础上,google的人员还是觉得有维度约间的空间,在<Rethinking the Inception Architecture for Com ...

  2. Feature Extractor[ResNet]

    0. 背景 众所周知,深度学习,要的就是深度,VGG主要的工作贡献就是基于小卷积核的基础上,去探寻网络深度对结果的影响.而何恺明大神等人发现,不是随着网络深度增加,效果就好的,他们发现了一个违背直觉的 ...

  3. Feature Extractor[SENet]

    0.背景 这个模型是<Deep Learning高质量>群里的牛津大神Weidi Xie在介绍他们的VGG face2时候,看到对应的论文<VGGFace2: A dataset f ...

  4. Feature Extractor[content]

    0. AlexNet 1. VGG VGG网络相对来说,结构简单,通俗易懂,作者通过分析2013年imagenet的比赛的最好模型,并发现感受野还是小的好,然后再加上<network in ne ...

  5. Feature Extractor[Inception v4]

    0. 背景 随着何凯明等人提出的ResNet v1,google这边坐不住了,他们基于inception v3的基础上,引入了残差结构,提出了inception-resnet-v1和inception ...

  6. Feature Extractor[DenseNet]

    0.背景 随着CNN变得越来越深,人们发现会有梯度消失的现象.这个问题主要是单路径的信息和梯度的传播,其中的激活函数都是非线性的,从而特别是乘法就可以使得随着层数越深,假设将传统的神经网络的每一层看成 ...

  7. 图像金字塔(pyramid)与 SIFT 图像特征提取(feature extractor)

    David Lowe(SIFT 的提出者) 0. 图像金字塔变换(matlab) matlab 对图像金字塔变换接口的支持(impyramid),十分简单好用. 其支持在reduce和expand两种 ...

  8. Feature Extractor[googlenet v1]

    1 - V1 google团队在模型上,更多考虑的是实用性,也就是如何能让强大的深度学习模型能够用在嵌入式或者移动设备上.传统的想增强模型的方法无非就是深度和宽度,而如果简单的增加深度和宽度,那么带来 ...

  9. Feature Extractor[batch normalization]

    1 - 背景 摘要:因为随着前面层的参数的改变会导致后面层得到的输入数据的分布也会不断地改变,从而训练dnn变得麻烦.那么通过降低学习率和小心地参数初始化又会减慢训练过程,而且会使得具有饱和非线性模型 ...

随机推荐

  1. iphone怎么投屏到电脑屏幕上

    随着苹果手机的更显换代,苹果手机的功能越来越强大,其中iphone手机更新了airplay镜像功能,所以想要手机投屏电脑的小伙伴就更加方便了,但是iphone怎么投屏到电脑呢?大家不用着急,下面即将为 ...

  2. Java 线程方法

    线程标识相关 方法 描述 public Thread(Runnable target, String name)  带参数的构造方法, 第二个参数是线程名称 public static Thread ...

  3. 使用JDBC连接MySQL数据库的一个基本案例

    JDBC的概念(摘自百度百科) JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一 ...

  4. 章节七、6-Map集合的区别

    一.通过entrySet取出Map中的元素 package ZangJie7; import java.util.HashMap; import java.util.Map; public class ...

  5. Key Lookup开销过大导致聚集索引扫描

    以前总结过一篇文章SQL SERVER中什么情况会导致索引查找变成索引扫描 介绍了几种索引查找(Index Seek)变成索引扫描(Index Scan)的情形.昨天写一篇文章的时候,也遇到了一个让人 ...

  6. A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. No Java virtual machine was found after searching the following locations: /usr/local/eclipse/

    linux系统下jdk是已经安装好的情况之下软件出现 A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be av ...

  7. 自动化测试基础篇--Selenium弹出框alert

    摘自https://www.cnblogs.com/sanzangTst/p/7685304.html   不是所有的弹出框都叫alert,在使用alert方法前,先要识别出到底是不是alert.先认 ...

  8. 个人对于 Maven 的理解

    个人对于 Maven 的理解 Maven 一直都在使用, 但如果说是不是真的懂 Maven, 很难谈得上. 或许什么时候系统地学习一下, 但在那之前, 打算先记下自己目前对于 Maven 的理解, 之 ...

  9. C++实现第三方资源释放与载入过程(以DLL为例)

    简介 我们经常看见有一些程序开始执行时会释放一些文件,以便于后续操作.例如一些病毒为了便于传播和隐藏,经常把一些需要用的动态库或是驱动文件打包进一个可执行文件中,再由需要使用的时候,再临时释放和加载. ...

  10. sklearn使用——最小二乘法

    参考网页:http://sklearn.apachecn.org/cn/0.19.0/ 其中提供了中文版的文件说明,较为清晰. from sklearn.linear_model import Lin ...