VGG(2014),3x3卷积的胜利
博客:blog.shinelee.me | 博客园 | CSDN
写在前面
VGG(2014)网络出自paper《Very Deep Convolutional Networks for Large-Scale Image Recognition》,为ILSVRC2014 localization冠军和classification亚军方法(冠军为GoogLeNet),首次提交arXiv时间为2014年9月,后发表在ICLR2015,截止20191011引用量达27612。因为出自牛津大学Visual Geometry Group,所以网络被命名为VGG,根据层数不同,又分为VGG16、VGG19等。

论文的主要贡献:
- 探究了网络深度对性能的影响,通过叠加卷积层来增加深度,性能变好——“Our results yet again confirm the importance of depth in visual representations”。
- 只使用\(3\times 3\)的卷积核,通过多个\(3 \times 3\)卷积层叠加来获得与大卷积核相同的感受野,同时引入更多的非线性,减少了参数。若有\(C\)个channel,3个\(3\times 3\)的卷积层参数量为\(3(3^2C^2)=27C^2\),1个\(7\times 7\)卷积层的参数量为\(7^2C^2=49C^2\),两者的感受野相同。
网络结构
文中列举了配置不同的5个网络,分别命名为A、A-LRN、B、C、D、E,网络结构及参数量如下图所示,

这些网络配置的特点是:
- A-LRN与A相比,仅在第一个卷积层后加入LRN层,A和A-LRN含可学习参数的层数均为11层
- B比A多了2个\(3 \times 3\)卷积层,为13层
- C比B多了3个\(1\times 1\)卷积层,为16层
- D将C的3个\(1\times 1\)卷积层替换为\(3\times 3\)卷积层,仍为16层
- E在D的基础上又增加了3个\(3\times 3\)卷积层,为19层
- 每次maxpool后,feature map尺寸减半,紧随其后的卷积层会将feature map的数量加倍,64→128→256→512
B网络有个特点,每2个\(3\times 3\)卷积层一组,再接maxpool。实际上,在实验中还配置了另一个网络——将B的“each pair of \(3\times 3\) conv”替换为1个\(5\times 5\)卷积层,其性能要比B差7%,所以paper认为小卷积核深网络要比大卷积核浅网络好。
paper中的实验均在上述网络中进行,下面具体看一下。
multi-scale training and testing
在训练阶段,VGG的输入固定为\(224\times 224\),对尺寸不同的图像需要先scale再crop到\(224\times 224\),理论上只需要将图像最短的边scale到大于等于224即可进行crop,paper中设置了2种scale方式,第一种scale到256或384,第二种随机scale到\([256, 512]\)之间——384恰好位于256和512的中间,做了对比实验。
测试阶段,不再进行crop操作,而是采用了Overfeat中的一个技巧,将网络最后的3个全连接层在实现上转化成卷积层,以适应不同尺寸的输入,这个技巧在paper中称之为dense。全连接层的运算方式是输入向量与权重矩阵相乘,当权重矩阵的尺寸确定了,输入向量的长度就不可改变了,而卷积的运算方式是权重在输入上滑动内积,所以只需要输入的尺寸大于kernel的窗口即可。具体地,如果输入恰好为\(224\times 224\),经历过5次maxpool后,feature map尺寸变为\(7 \times 7\),当输入尺寸大于224时,这个feature map将大于等于\(7\times 7\)。将3个全连接层依次转化为\(7\times 7\)卷积和2个\(1\times 1\)卷积,这种转化并不改变权重,只是实现方式上的变化,此时整个网络为全卷积网络。如果输入图像大于\(224\times 224\),网络最后输出的class score map将大于\(1000 \times 1\),为了得到固定长度为1000的class score vetor,只需将其进行spatially average(sum-pooled),然后再softmax。更多可以参见Converting Fully-Connected Layers to Convolutional Layers的解释。
预测阶段的multi scale,即将输入图像做不同scale,分别输入网络,对预测结果取平均。
下图分别为single scale和mutiple scale测试的结果,测试库为ILSVRC-2012 dataset,


上面的对比实验,可得出以下结论:
- 随着深度增加,性能变好
- 与A相比,A-LRN性能没有改善,LRN用途不大
- 无论是training还是testing,multiple scale均能改善性能,两者结合使用效果更佳
- 在当前数据集和网络结构配置上,VGG16(D)和VGG19(E)性能基本一样,接近饱和
对于multi scale对性能的改善,想来也是合理的,因为图像中目标的尺寸并不确定,有大有小,在训练阶段通过scale jittering来增广数据,可让网络在一定程度上cover这种变化,而在预测阶段,multi scale可以看成在输入数据上做的集成学习,亦是提升性能的常规操作。
其他有意思的点
论文中还有一些其他有意思的点,简单总结如下,
- 为了网络能正常收敛,权重的初始化很重要,原来是先训练浅层网络A,然后用A的权重初始化后面深层网络前4个卷积层和最后3个全连接层,其他层从高斯分布中随机初始化。在paper submission后发现,直接采用Understanding the difficulty of training deep feedforward neural networks中的初始化方法就可以,即Xavier方法。
- paper中评论,因为A-LRN中的Local Response Normalisation(LRN)没有效果,还增加了内存使用和计算量,所以后面的BCDE网络就不用了(微笑)。
- 在ILSVRC-2014 challenge中,VGG提交的是7模型融合结果,提交后他们测试2模型的融合结果要更好,top1 val好1%,top5 val好0.5%,不过是在multi-scale traing、multi-crop和dense一起加成下取得的结果。
- VGG (1 net, multi-crop & dense eval) 单网络比GoogLeNet单网络的性能要好约1%。
- 2014年,ImageNet竞赛Top5错误率首次进入0~10%区间。
以上。
参考
- arXiv: Very Deep Convolutional Networks for Large-Scale Image Recognition
- Large Scale Visual Recognition Challenge 2014 (ILSVRC2014)
- Review: VGGNet — 1st Runner-Up (Image Classification), Winner (Localization) in ILSVRC 2014
VGG(2014),3x3卷积的胜利的更多相关文章
- 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络Vgg
上周我们讲了经典CNN网络AlexNet对图像分类的效果,2014年,在AlexNet出来的两年后,牛津大学提出了Vgg网络,并在ILSVRC 2014中的classification项目的比赛中取得 ...
- 利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)
源码地址 https://github.com/stephen-v/tensorflow_vgg_classify 1. VGG介绍 1.1. VGG模型结构 1.2. VGG19架构 2. 用Ten ...
- 从LeNet到SENet——卷积神经网络回顾
从LeNet到SENet——卷积神经网络回顾 从 1998 年经典的 LeNet,到 2012 年历史性的 AlexNet,之后深度学习进入了蓬勃发展阶段,百花齐放,大放异彩,出现了各式各样的不同网络 ...
- CNN Architectures(AlexNet,VGG,GoogleNet,ResNet,DenseNet)
AlexNet (2012) The network had a very similar architecture as LeNet by Yann LeCun et al but was deep ...
- 论文笔记:CNN经典结构1(AlexNet,ZFNet,OverFeat,VGG,GoogleNet,ResNet)
前言 本文主要介绍2012-2015年的一些经典CNN结构,从AlexNet,ZFNet,OverFeat到VGG,GoogleNetv1-v4,ResNetv1-v2. 在论文笔记:CNN经典结构2 ...
- 关于VGG网络的介绍
本博客参考作者链接:https://zhuanlan.zhihu.com/p/41423739 前言: VGG是Oxford的Visual Geometry Group的组提出的(大家应该能看出VGG ...
- CNN-3: VGGNet 卷积神经网络模型
1.VGGNet 模型简介 VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILSVR ...
- CNN-4: GoogLeNet 卷积神经网络模型
1.GoogLeNet 模型简介 GoogLeNet 是2014年Christian Szegedy提出的一种全新的深度学习结构,该模型获得了ImageNet挑战赛的冠军. 2.GoogLeNet 模 ...
- VGG Net 论文细读
论文地址:<Very Deep Convolutional Networks for Large-Scale Image Recognition> 一.背景 LSVRC:大规模图像识别挑战 ...
随机推荐
- 调度系统Airflow的第一个DAG
Airflow的第一个DAG 考虑了很久,要不要记录airflow相关的东西, 应该怎么记录. 官方文档已经有比较详细的介绍了,还有各种博客,我需要有一份自己的笔记吗? 答案就从本文开始了. 本文将从 ...
- Mysql高手系列 - 第8篇:详解排序和分页(order by & limit),及存在的坑
这是Mysql系列第8篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符号分开的表示可选其一. 本章内容 详解排序查询 详解limit limit存在的坑 分 ...
- spring接口文档注解:@ApiOperation(转)
spring接口文档注解:@ApiOperation @ApiOperation不是spring自带的注解是swagger里的 com.wordnik.swagger.annotations.ApiO ...
- 如何设置java虚拟机参数
这两天在看java虚拟机,从书上看到可以自己设置java虚拟机的参数,可以方便开发人员进行系统调优和故障排查 Ecplise设置java虚拟机参数: window-->preferences-- ...
- MySql创建索引、删除索引、新增字段、删除字段、修改字段语句
--------------------------------------------------------- -- ALTER TABLE 创建索引 ---------------------- ...
- 我的MarkDown入门
目录 0.前言 1.软件准备 2.基本语法 2.1斜体&加粗 2.2分级标题 2.3分割线 2.4超链接 2.5列表 2.6引用 2.7插入代码 2.8插入图像 2.9插入表格 2.10目录 ...
- NLP(十七)利用tensorflow-serving部署kashgari模型
在文章NLP(十五)让模型来告诉你文本中的时间中,我们已经学会了如何利用kashgari模块来完成序列标注模型的训练与预测,在本文中,我们将会了解如何tensorflow-serving来部署模型 ...
- [中秋]宇宙第一 IDE Visual Studio 了解一下
官网 https://visualstudio.microsoft.com/zh-hans/vs/ 文档 https://docs.microsoft.com/zh-cn/visualstudio/d ...
- 14个Linux系统安全小妙招,总有一招用的上!
对于互联网IT从业人员来说,越来越多的工作会逐渐转移到Linux系统之上,这一点,无论是开发.运维.测试都应该是深有体会.曾有技术调查网站W3Techs于2018年11月就发布一个调查报告,报告显示L ...
- Servlet接口的实现
Servlet接口对Servlet进行了规范,定义了方法的主要范围. 1.public void init(ServletConfig servletConfig) (初始化) 参数的作用: (1)调 ...