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:大规模图像识别挑战 ...
随机推荐
- hdu 1176免费馅饼(记忆化搜索)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 题意不解释了 简单的记忆化搜索可以拿来练练手,注意要从pos = 5 开始搜索 #include ...
- 1014 装箱问题 CODE[VS]
1014 装箱问题 2001年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descripti ...
- 【JavaScript】ESlint & Prettier & Flow组合,得此三神助,混沌归太清
Flow Flow的意义 Flow是faceBook开源的一个JavaScript静态类型检查工具,作用类似TypeScript,但是它不像TS那样是一门独立的语言,而是作为一个babel-plugi ...
- U盘便携式hexo&博客搭建&极速纯净低bug主题推荐&部署到coding&SEO优化搜索
指南:U盘便携式hexo&博客搭建&极速纯净低bug主题推荐&部署到coding&SEO优化搜索 U盘便携式hexo随处写博客 简述:在任意一台联网的电脑上续写he ...
- git 生成密钥
1.本地安装好git: 2.桌面右键 Git Bash Here 打开git命令行: 3.ssh-keygen -t rsa -C "nideyouxiang@xxx.com" ...
- Python默认参数
在python函数中, 可以使用如下方式声明并初始化参数 def to_smash(total_candies, n_friends=3): """Return the ...
- 错误:java.lang.Exception: No tests found matching Method testPrePage1(egou_manager_web.TestEBrand) from org.junit.internal.requests.ClassRequest@4f3cc73c
今天测试分页时出现以下错误: java.lang.Exception: No tests found matching Method testPrePage1(egou_manager_web.Tes ...
- Java单元测试之JUnit 5快速上手
前言 单元测试是软件开发中必不可少的一环,但是在平常开发中往往因为项目周期紧,工作量大而被选择忽略,这样往往导致软件问题层出不穷.线上出现的不少问题其实在有单元测试的情况下就可以及时发现和处理,因此培 ...
- 宝锋UV-5R说明书下载
宝锋UV-5R说明书 百度网盘下载地址: 链接: https://pan.baidu.com/s/1QJXEJ2YyO7ovMAQG7Uur4A 提取码: j8d2 BI8EJM 73 ...
- 让你的AI模型尽可能的靠近数据源
来源:Redislabs作者:Pieter Cailliau.LucaAntiga翻译:Kevin (公众号:中间件小哥) 简介 今天我们发布了一个 RedisAI 的预览版本,预集成了[tensor ...