VGGNet(Visual Geometry Group)可视化的几何学结构

一.简介

VGGNet是牛津大学计算机视觉组和DeepMind公司共同研发一种深度卷积网络,并且在2014年在ILSVRC比赛上获得了分类项目的第二名和定位项目的第一名。

VGGNet一共有六种不同的网络结构,但是每种结构都有含有5组卷积,每组卷积都使用3x3的卷积核,每组卷积后进行一个2x2最大池化,接下来是三个全连接层.在训练高级别的网络时,可以先训练低级别的网络,用前者获得的权重初始化高级别的网络,可以加速网络的收敛.,在ILSVRC中-2013中表现最好的ZFNet在第一卷积层使用更小的卷积(receptive window size)和更小的步长(stride)。另一种策略是多尺度地在整张图像上密集训练和测试。VGGNet则强调了卷积神经网络设计中另一个重要方面—深度。

二.卷积网络的配置

为了公平测试深度带来的性能提升,VGGNet所有层的配置都遵循了同样的原则。

2.1 结构

训练时,输入是大小为224*224的RGB图像,*预处理只有在训练集中的每个像素上减去RGB的均值。

图像经过一系列卷积层处理,在卷积层中使用了非常小的感受野(receptive field):3*3,甚至有的地方使用1*1的卷积,这种1*1的卷积可以被看做是对输入通道(input channel)的线性变换。(同时可以添加非线性,从而获得更丰富的特征)

卷积步长(stride)设置为1个像素,3*3卷积层的填充(padding)设置为1个像素。池化层采用max-pooling,共有5层,在一部分卷积层后,max-pooling的窗口是2*2,步长是2。

一系列卷积层之后跟着全连接层(fully-connected layers)。前两个全连接层均有4096个通道。第三个全连接层有1000个通道,用来分类。所有网络的全连接层配置相同。

所有隐藏层都使用ReLu。VGGNet不使用局部响应标准化(LRN),这种标准化并不能在ILSVRC数据集上提升性能,却导致更多的内存消耗和计算时间。

A网络(11层)有8个卷积层和3个全连接层,E网络(19层)有16个卷积层和3个全连接层。卷积层宽度(通道数)从64到512,每经过一次池化操作扩大一倍。

2.2讨论

与AlexNet和ZFNet不同,VGGNet在网络中使用很小的卷积。AlexNet和ZFNet在第一个卷积层的卷积分别是11*11 with stride 4和7*7 with stride 2。VGGNet则使用3*3的卷积。

VGG 的细节之 3x3 卷积核

两个连续的3*3的卷积相当于5*5的感受野,三个相当于7*7。使用三个3*3卷积而不是一个7*7的卷积的优势有两点:一,包含三个ReLu层而不是一个,使决策函数更有判别性;二,减少了参数。比如输入输出都是C个通道,使用3*3的3个卷积层需要3(3*3*C*C)=27*C*C,使用7*7的1个卷积层需要7*7*C*C=49C*C。这可看为是对7*7卷积施加一种正则化,使它分解为3个3*3的卷积。将近少了一般的参数量。

例如:两个3x3的卷积层叠加,等价于一个5x5的卷积核的效果,3个3x3的卷积核的叠加相当于一个7x7的卷积核,而且参数更少.大约是7x7卷积核卷积层的(3*3*3)/(7*7)=0.55.而且拥有和7x7卷积核一样的感受视野,三个卷积层的叠加,经过了更多次的非线性变换,对特征的学习能力更强.

VGG 的细节之 1x1 卷积核

堆叠后的 3x3 卷积层可以对比之前的常规网络的基础上,减少参数数量,而加深网络。

但是,如果我们还需要加深网络,怎么办呢?

堆叠更多的的卷积层,但有 2 个选择。

选择 1:继续堆叠 3x3 的卷积层,比如连续堆叠 4 层或者以上。

选择 2:在 3x3 的卷积层后面堆叠一层 1x1 的卷积层。

1x1 卷积核的好处是不改变感受野的情况下,进行升维和降维,同时也加深了网络的深度。

1*1卷积层主要是为了增加决策函数的非线性和增加深度,而不影响卷积层的感受野。虽然1*1的卷积操作是线性的,但是ReLu增加了非线性。同时减少参数。

与他人工作对比:Ciresan et al.(2011)也曾用过小的卷积,但是他的网络没有VGGNet深,而且没有在大规模的ILSVRC数据集上测试。Goodfellow使用深的卷积网络(11层)做街道数字识别,表明增加卷及网络深度可以提高性能。GoogLeNet(ILSVRC-2014分类任务冠军)与VGGNet独立发展起来,同样的是也使用了很深的卷积网络(22层)和小的卷积(5*5,3*3,1*1)。

VGG 的其它细节汇总

大家一般会听说 VGG-16 和 VGG-19 这两个网络,其中 VGG-16 更受欢迎。

16 和 19 对应的是网络中包含权重的层级数,如卷积层和全连接层,大家可以仔细观察文章前面贴的配置图信息。

所有的 VGG 网络中,卷积核的 stride 是 1,padding 是 1.

max-pooling 的滑动窗口大小是 2x2 ,stride 也是 2.

三.分类框架

3.1 训练

除了从多尺度的训练图像上采样输入图像外,VGGNet的训练过程与AlexNet类似。

优化方法(optimizer)是含有动量的随机梯度下降SGD+momentum(0.9)。 
批尺寸(batch size)是256. 
正则化(regularization):采用L2正则化,weight decay是5e-4。dropout在前两个全连接层后,p=0.5。

尽管相比于AlexNet网络更深,参数更多,但是我们推测VGGNet在更少的周期内就能收敛,原因有二:一,更大的深度和更小的卷积带来隐式的正则化;二,一些层的预训练。

参数初始化:对于较浅的A网络,参数进行随机初始化,权重w从N(0,0.01)中采样,偏差bias初始化为0。然后,对于较深的网络,先用A网络的参数初始化前四个卷积层和三个全连接层。但是后来发现,不用预训练的参数而直接随机初始化也可以。

为了获得224*224的输入图像,要在每个sgd迭代中对每张重新缩放(rescale)的图像随机裁剪。为了增强数据集,裁剪的图像还要随机水平翻转和RGB色彩偏移。

训练图像

1、固定尺寸,即缩放图像最小边S到256或者384,然后裁剪得到输入数据是224*224,进行训练。 
2、多尺度,即缩放图像最小边到[256,512]之间,然后裁剪训练,该方法有效的考虑了图像中目标大小的不一致,有利于训练。并且考虑到速度原因,本文在单尺度(S=384)的基础上,进行微调得到多尺度模型。

3.2 测试

测试阶段步骤:1,对输入图像各向同性地重缩放到一个预定义的最小图像边的尺寸Q; 2. 网络密集地应用在重缩放后的测试图像上。也就是说全连接层转化为卷积层(第一个全连接层转化为7*7的卷积层,后两个全连接层转化为1*1的卷积层) ,然后将转化后的全连接层应用在整张图像上。结果就是一个类别分数图(class score map),其通道数等于类别数量,依赖于图像尺寸,具有不同的空间分辨率。3. 为了获得固定尺寸的类别分数向量(class score vector),对class score map进行空间平均化处理(sum-pooled)。

测试图像

1、将图像缩放到预定义的最小图像边Q,Q不一定与S相等。 
2、将全连接层转换为卷积层,第一FC层转换到7×7卷积层,最后两个FC层转换到1×1卷积层,已达到任意大小的输入,同时避免重复裁剪带来的时间浪费。 
3、采用FC变换到CONV后,会得到多个输出,本文对多个输出取平均,以及对镜像图像进行处理,取平均,得到最终的结果。

3.3 实现

基于C++ Caffe,进行一些重要修改,在单系统多GPU上训练。 
在装有4个NVIDIA Titan Black GPUs的电脑上,训练一个网络需要2-3周。

四.分类实验

4.1 单一尺度评估

  • 数据集:ILSVRC-2012数据集上实现的图像分类结果。
  • 单尺度测试,Q=S,S∈[S_min,S_max],Q=0.5(S_min+S_max)。

实验对比结果分析 
1、对比采用LRN后,并未对网络效果进行改善 
2、分类误差随着深度的增加而减小 

3、C比B好,说明增加1*1的非线性卷积,对提高分类效果具有一定作用。 
4、C比D差,说明,增大感受野到3*3具有更好的效果。 
5、19层以上错误率达到饱和,再加深需要更大数据集。 
6、B网络与5*5卷积核对比,利用5*5替换2个3*3卷积,发现3*3具有更好的效果。 
7、训练时的尺寸抖动,具有更好的效果,说明有用啊。

4.2多尺度评估

1.多尺度测试,Q=S−32,S,S+32 ; Q= {Smin,0.5*(Smin+Smax),Smax}

2.相对于单一尺度评估,多尺度评估提高了分类精度。

3.多尺度抖动优于使用固定最小边S的训练

4.3 多裁剪评估

多裁剪(multi-crop)评估比起密集(dense)评估,效果更好。而且两者具有互补作用,结合两种方式,效果更好

4.4 卷积网络融合

如果结合多个卷积网络的sofamax输出,分类效果会更好。 
在ILSVRC-2014中,我们结合7个网络(表6),实现测试误差7.3%。之后,结合最好的两个模型(D&E)并使用密集评估(dense evaluation),测试误差降低到7.0%,而使用密集评估和多裁剪评估相结合,测试误差为6.8%。最好的单一模型验证误差为7.1%。

4.5 与其他网络对比

与ILSVRC-2012和ILSVRC-2013最好结果相比,VGGNet优势很大。与GoogLeNet对比,虽然7个网络集成效果不如GoogLeNet,但是单一网络测试误差好一些,而且只用2个网络集成效果与GoogLeNet的7网络集成差不多。

五.总结

我们的结果再次证明网络深度在计算机视觉问题中的重要性。而且,我们的网络在不同的任务和数据集上有很多好的泛化能力。

VGG 在深度学习的历史上还是很有意义的,它在当时证明了神经网络更深表现会更好,虽然后来 ResNet 进一步革命了,不过那是后话,最重要的是 VGG 向世人证明了更小的卷积核尺寸的重要性。

六.代码实现

代码可以参考这篇博客:https://blog.csdn.net/u014281392/article/details/75152809

转载自:https://blog.csdn.net/muyiyushan/article/details/62895202

卷积神经网络之4:VGG结构相关推荐

  1. (草履虫级别的精讲)卷积神经网络的基本组成结构

    目录 前言 卷积神经网络的基本组成结构 一.卷积层 1.标准卷积层 2.形变卷积 3.空洞卷积 二.池化层 1.最大池化层 2.平均池化层 三.激活函数 1.Sigmoid 2.Tanh 3.ReLU ...

  2. 【TensorFlow】TensorFlow从浅入深系列之十 -- 教你认识卷积神经网络的基本网路结构及其与全连接神经网络的差异

    本文是<TensorFlow从浅入深>系列之第10篇 TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法) TensorFlow从浅入深系列之二 -- 教你通过思维 ...

  3. 卷积神经网络CNN介绍:结构框架,源码理解【转】

    1. 卷积神经网络结构 卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表 ...

  4. 干货 | 深度学习之卷积神经网络(CNN)的模型结构

    微信公众号 关键字全网搜索最新排名 [机器学习算法]:排名第一 [机器学习]:排名第一 [Python]:排名第三 [算法]:排名第四 前言 在前面我们讲述了DNN的模型与前向反向传播算法.而在DNN ...

  5. 图卷积神经网络GCN原理+图结构学习+GAT+VGAE

    https://baijiahao.baidu.com/s?id=1678519457206249337&wfr=spider&for=pc GCN是一种卷积神经网络,它可以直接在图上 ...

  6. Exploring the Regularity of Sparse Structure in Convolutional Neural Networks(在卷积神经网络中探索稀疏结构的规律性)

    作者提出 基于论文Learning both weights and connections for efficient neural network修剪的方法在保留精度以及实现更高的压缩率方面确实很 ...

  7. 深度学习入门之PyTorch学习笔记:卷积神经网络

    深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...

  8. 4. 卷积神经网络CNN

    文章目录 4. 卷积神经网络CNN 4.1 概念 4.1.1 概念 4.1.2 用途 4.2 结构介绍 4.2.1 结构简介 4.2.2 卷积层 1) 基本概念 2) 前期准备 3) 参数共享 4) ...

  9. Python交通标志识别基于卷积神经网络的保姆级教程(Tensorflow)

    项目介绍 TensorFlow2.X 搭建卷积神经网络(CNN),实现交通标志识别.搭建的卷积神经网络是类似VGG的结构(卷积层与池化层反复堆叠,然后经过全连接层,最后用softmax映射为每个类别的 ...

  10. NNDL 实验六 卷积神经网络(1)卷积

    文章目录 前言 第5章 卷积神经网络 一.5.1 卷积 5.1.1 二维卷积运算 5.1.2 二维卷积算子 5.1.3 二维卷积的参数量和计算量 5.1.4 感受野 5.1.5 卷积的变种 5.1.5 ...

最新文章

  1. Curl操作es实践
  2. Linux启动nacos成功日志_Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
  3. MySQL分组函数使用的其他注意事项
  4. python播放在线音乐_Python实现在线音乐播放器
  5. 日志OLAP:在SQL中使用UDF, lambda函数使用案例
  6. UVa 12100 - Printer Queue
  7. matlab 将一堆文件名读到一个文本里面windows版本里
  8. AutoCAD 2010建筑土木制图高清实例视频教程
  9. Redis基础(四)——持久化
  10. SQLServer 2008 r2下载及安装
  11. 昆明职高计算机学校,昆明职高学校,昆明职高学校前十强,昆明职高学校哪些比较好一点 - IT教育频道...
  12. 基于java固定资产管理系统设计(含源文件)
  13. TOGAF9.2第I部分 第2章核心概念
  14. 计算机故障报警声2声,电脑开机报警声音2短4短是什么問題?
  15. 遗传算法优化SVM支持向量机分类预测的参数代码模型
  16. 医院HIS预约系统源码丨同城排队预约下单微信小程序公众号 his源码
  17. 智能网联公交的三大发展趋势
  18. STC51单片机16——将输入信号2倍频
  19. 同态加密中无符号数之间比较大小
  20. Spring Boot技术知识点:如何实现二维码生成工具

热门文章

  1. day15.1-结构体
  2. Terracotta 集群
  3. 自然语言处理-应用场景-文本生成:Seq2Seq --> 看图说话【将一张图片转为一段文本】
  4. python中复数的乘法_为什么复数乘法几乎与python中的整数乘法一样快?
  5. 2022原料药市场分析之前景趋势、规模份额、价格调研
  6. nowcoder20 A 柯朵莉
  7. 怎么插入html和书签,如何:在“设计”视图中插入 HTML 超链接和书签
  8. cdn服务器是什么意思?CDN服务器干什么的?
  9. 电脑插上耳机后有嗡嗡的声音
  10. 蓝桥杯第六届省赛试题——温度记录器