博客: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%区间。

以上。

参考

VGG(2014),3x3卷积的胜利的更多相关文章

  1. 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络Vgg

    上周我们讲了经典CNN网络AlexNet对图像分类的效果,2014年,在AlexNet出来的两年后,牛津大学提出了Vgg网络,并在ILSVRC 2014中的classification项目的比赛中取得 ...

  2. 利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)

    源码地址 https://github.com/stephen-v/tensorflow_vgg_classify 1. VGG介绍 1.1. VGG模型结构 1.2. VGG19架构 2. 用Ten ...

  3. 从LeNet到SENet——卷积神经网络回顾

    从LeNet到SENet——卷积神经网络回顾 从 1998 年经典的 LeNet,到 2012 年历史性的 AlexNet,之后深度学习进入了蓬勃发展阶段,百花齐放,大放异彩,出现了各式各样的不同网络 ...

  4. 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 ...

  5. 论文笔记:CNN经典结构1(AlexNet,ZFNet,OverFeat,VGG,GoogleNet,ResNet)

    前言 本文主要介绍2012-2015年的一些经典CNN结构,从AlexNet,ZFNet,OverFeat到VGG,GoogleNetv1-v4,ResNetv1-v2. 在论文笔记:CNN经典结构2 ...

  6. 关于VGG网络的介绍

    本博客参考作者链接:https://zhuanlan.zhihu.com/p/41423739 前言: VGG是Oxford的Visual Geometry Group的组提出的(大家应该能看出VGG ...

  7. CNN-3: VGGNet 卷积神经网络模型

    1.VGGNet 模型简介 VGG Net由牛津大学的视觉几何组(Visual Geometry Group)和 Google DeepMind公司的研究员一起研发的的深度卷积神经网络,在 ILSVR ...

  8. CNN-4: GoogLeNet 卷积神经网络模型

    1.GoogLeNet 模型简介 GoogLeNet 是2014年Christian Szegedy提出的一种全新的深度学习结构,该模型获得了ImageNet挑战赛的冠军. 2.GoogLeNet 模 ...

  9. VGG Net 论文细读

    论文地址:<Very Deep Convolutional Networks for Large-Scale Image Recognition> 一.背景 LSVRC:大规模图像识别挑战 ...

随机推荐

  1. 如何将idea工程打包成jar文件

    如何将idea工程打包成jar文件 近日在工作中遇到了一个问题,需要把本地的java文件打成jar包,传到云服务器上运行.于是学习了一下如何在intellij idea中将java工程打成jar包. ...

  2. Mybatis系列(三)XML

    Mybatis系列(三)XML 1.pom.xml依赖: <?xml version="1.0" encoding="UTF-8"?> <pr ...

  3. Invalid bound statement(not found):cn.e3mall.mapper.TbItemMapper.selectByExample.....

    1.出现如下问题: 说明mapper接口和mapper.xml映射文件没有在一个文件夹下面 2.解决方法: 在dao层的pom.xml中配置一下: <!-- 如果不添加此节点mybatis的ma ...

  4. sqlserver 用户定义表类型

    有时需要将内存中的表与数据库中的表比较,比如Datatable中有100行数据,需要判断在数据库中是否存在,这个时候我们就可以使用sqlserver中的[用户 定义表类型] 这里最最最重要的思路是把[ ...

  5. 浅入浅出 Java 排序算法

    Java String 源码的排序算法 一.前言 Q:什么是选择问题? 选择问题,是假设一组 N 个数,要确定其中第 K 个最大值者.比如 A 与 B 对象需要哪个更大?又比如:要考虑从一些数组中找出 ...

  6. WTM送书活动:向更遥远的星辰大海起航~

    是的,没错~ 这一篇不是大老刘写的.哈哈~ 啥?  你想知道为啥? 大老刘为了你们不加班,熬夜改BUG,姑娘不乐意了... 然后... 后面请自行脑补~ 哎~生活还要继续鸭.... 那么,接下来由我陪 ...

  7. 6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

    作者 |  元乙  阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11.双 12 考验. 导读:随着 K8s 不断 ...

  8. Airflow:TypeError an integer is required (got type NoneType) 一次诡异问题排查

    ​ 当使用rabbitmq作为airflow的broker的时候,启动scheduler,即执行airflow scheduler命令的时候抛出以下异常: Traceback (most recent ...

  9. 疑难杂症----udf提权无法导出.dll

    昨天进行测试一个网站,进行udf提权时候,没办法导出.dll, 起初以为是这个马的问题,后来用专用马,一样不行,但是有报错了,有上网找了半天,终于被我找到了. Mysql数据库从文件导入或导出到文件, ...

  10. linux 操作系统级别监控 TOP命令

    Top命令是Linux下一个实时的.交互式的,对操作系统整体监控的命令,可以对CPU.内存.进程监控. 是Linux下最常用的监控命令. 第一行是任务队列信息 1 user 当前登录用户数load a ...