VGG卷积神经网络

一.背景

ILSVRC 2014的第二名是Karen Simonyan和 Andrew Zisserman实现的卷积神经网络,现在称其为VGGNet。它主要的贡献是展示出网络的深度是算法优良性能的关键部分。
他们最好的网络包含了16个卷积/全连接层。网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的汇聚。他们的预训练模型是可以在网络上获得并在Caffe中使用的。
VGGNet不好的一点是它耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层。
后来发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。
目前使用比较多的网络结构主要有ResNet(152-1000层),GooleNet(22层),VGGNet(19层)。大多数模型都是基于这几个模型上改进,采用新的优化算法,多模型融合等,这里重点介绍VGG。
(图片来自网络)

二.简介

模型的名称——“VGG”代表了牛津大学的Oxford Visual Geometry Group,该小组隶属于1985年成立的Robotics Research Group,该Group研究范围包括了机器学习到移动机器人。下面是一段来自网络对同年GoogLeNet和VGG的描述:
“GoogLeNet和VGG的Classification模型从原理上并没有与传统的CNN模型有太大不同。大家所用的Pipeline也都是:训练时候:各种数据Augmentation(剪裁,不同大小,调亮度,饱和度,对比度,偏色),剪裁送入CNN模型,Softmax,Backprop。测试时候:尽量把测试数据又各种Augmenting(剪裁,不同大小),把测试数据各种Augmenting后在训练的不同模型上的结果再继续Averaging出最后的结果。”
需要注意的是,在VGGNet的6组实验中,后面的4个网络均使用了pre-trained model A的某些层来做参数初始化。虽然提出者没有提该方法带来的性能增益。先来看看VGG的特点:

  • 小卷积核。作者将卷积核全部替换为3x3(极少用了1x1);
  • 小池化核。相比AlexNet的3x3的池化核,VGG全部为2x2的池化核;
  • 层数更深特征图更宽。基于前两点外,由于卷积核专注于扩大通道数、池化专注于缩小宽和高,使得模型架构上更深更宽的同时,计算量的增加放缓;
  • 全连接转卷积。网络测试阶段将训练阶段的三个全连接替换为三个卷积,测试重用训练时的参数,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽或高为的输入。

VGG19
(图片名来自网络)

VGG16

(图片来自网络)

三.VGG 特点

3.1 小卷积核

说到网络深度,这里就不得不提到卷积,虽然AlexNet有使用了11x11和5x5的大卷积,但大多数还是3x3卷积,对于stride=4的11x11的大卷积核,一开始原图的尺寸很大因而冗余,最为原始的纹理细节的特征变化用大卷积核尽早捕捉到,后面的更深的层数害怕会丢失掉较大局部范围内的特征相关性,后面转而使用更多3x3的小卷积核(和一个5x5卷积)去捕捉细节变化。
而VGGNet则清一色使用3x3卷积。因为卷积不仅涉及到计算量,还影响到感受野。前者关系到是否方便部署到移动端、是否能满足实时处理、是否易于训练等,后者关系到参数更新、特征图的大小、特征是否提取的足够多、模型的复杂度和参数量等等。
(图片来自网络)

(图片来自网络)

3.2 计算量

在计算量这里,为了突出小卷积核的优势,用同样conv3x3、conv5x5、conv7x7、conv9x9和conv11x11,在224x224x3的RGB图上(设置pad=1,stride=4,output_channel=96)做卷积,卷积层的参数规模和得到的feature map的大小如下图一:

(图片来自网络)

从上图一可以看出,大卷积核带来的特征图和卷积核得参数量并不大,无论是单独去看卷积核参数或者特征图参数,不同kernel大小下这二者加和的结构都是30万的参数量,也就是说,无论大的卷积核还是小的,对参数量来说影响不大甚至持平。
增大的反而是卷积的计算量,在表格中列出了计算量的公式,最后要乘以2,代表乘加操作。为了尽可能证一致,这里所有卷积核使用的stride均为4,可以看到,conv3x3、conv5x5、conv7x7、conv9x9、conv11x11的计算规模依次为:1600万,4500万,1.4亿、2亿,这种规模下的卷积,虽然参数量增长不大,但是计算量是惊人的。
总结一下,可以得出两个结论:
同样stride下,不同卷积核大小的特征图和卷积参数差别不大;
越大的卷积核计算量越大

其实对比参数量,卷积核参数的量级在十万,一般都不会超过百万。相比全连接的参数规模是上一层的feature map和全连接的神经元个数相乘,这个计算量也就更大了。其实一个关键的点——多个小卷积核的堆叠比单一大卷积核带来了精度提升,这也是最重要的一点。


(图片来自网络)

3.3 连续的卷积层

VGG中使用的都是3×3卷积核,并且使用了连续多个卷积层。这样做的好处:
使用连续的的多个小卷积核(3×3),来代替一个大的卷积核(例如(5×5)。
使用小的卷积核的问题是,其感受野必然变小。所以,VGG中就使用连续的3×3卷积核,来增大感受野。VGG认为2个连续的3×3卷积核能够替代一个5×5卷积核,三个连续的3×3能够代替一个7×7。
由于每个卷积层都有一个非线性的激活函数,多个卷积层增加了非线性映射。
(图片来自网络)

3.4 小池化核

使用的是2×2

3.5 通道数更多,特征度更宽

每个通道代表着一个FeatureMap,更多的通道数表示更丰富的图像特征。VGG网络第一层的通道数为64,后面每层都进行了翻倍,最多到512个通道,通道数的增加,使得更多的信息可以被提取出来。
(图片来自网络)

3.6 层数更深

使用连续的小卷积核代替大的卷积核,网络的深度更深,并且对边缘进行填充,卷积的过程并不会降低图像尺寸。仅使用小的池化单元,降低图像的尺寸。

(图片来自网络)

3.7 全连接转卷积

这也是VGG的一个特点,在网络测试阶段将训练阶段的三个全连接替换为三个卷积,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽或高为的输入,这在测试阶段很重要。
如本节第一个图所示,输入图像是224x224x3,如果后面三个层都是全连接,那么在测试阶段就只能将测试的图像全部都要缩放大小到224x224x3,才能符合后面全连接层的输入数量要求,这样就不便于测试工作的开展。
全连接转卷积的替换过程如下:
(图片来自网络)

例如7×7×512的层要跟4096个神经元的层做全连接,则替换为对7×7×512的层作通道数为4096、卷积核为1×1卷积。
这个“全连接转卷积”的思路是VGG作者参考了OverFeat的工作思路,例如下图是OverFeat将全连接换成卷积后,则可以来处理任意分辨率(在整张图)上计算卷积,这就是无需对原图做重新缩放处理的优势。

参考:
《深度学习》 花书
复旦大学 《深度学习》

《深度学习》之 VGG卷积神经网络 原理 详解相关推荐

  1. 《深度学习》之 前馈神经网络 原理 详解

    前馈神经网络 1. 深度学习: **定义:**深度学习是机器学习的一个研究方向,它基于一种特殊的学习机制.其特点是建立一个多层学习模型,深层级将浅层级的输出作为输入,将数据层层转化,使之越来越抽象.是 ...

  2. 《深度学习》 之 AlexNet卷积神经网络 原理 详解

    AlexNet卷积神经网络 一.背景介绍 (图片来自网络) lexNet 经常被认为是这一波人工智能浪潮的起点,该网络在 ImageNet 挑战赛中的错误率与前一届冠军相比减小了 10% 以上,比亚军 ...

  3. 深度学习-目标检测YOLOV3 YOLOv4原理详解

    2.YoloV3核心基础内容 2.1 网络结构可视化 Yolov3是目标检测Yolo系列非常非常经典的算法,不过很多同学拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络 ...

  4. 深度学习中的循环神经网络LSTM详解

    (一).什么是循环神经网络LSTM? LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络中最知名和成功的扩展.由于循环神经网络有梯度消失和梯度爆炸的问题,学 ...

  5. 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)

    上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...

  6. 【人工智能】图文详解深度学习中的卷积神经网络(CNN)

    [人工智能]图文详解深度学习中的卷积神经网络(CNN) 概念和原理 为什么要使用卷积神经网络? 卷积神经网络简介 卷积神经网络的数学公式 池化操作: 全连接层: 激活函数 卷积神经网络的 C++ 实现 ...

  7. [人工智能-深度学习-33]:卷积神经网络CNN - 常见分类网络- LeNet网络结构分析与详解

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  8. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-03-基于Python的LeNet之LR

    原地址可以查看更多信息 本文主要参考于:Classifying MNIST digits using Logistic Regression  python源代码(GitHub下载 CSDN免费下载) ...

  9. 深度学习算法中卷积神经网络的应用

    下面一起来探讨一下关于深度学习算法中卷积神经网络的基本概念和应用: 1.卷积神经网络基本概念 卷积神经网络也是在传统人工神经网络的基础上发展起来的,它与 BP 神经网络有很大的相似之处,但也有很大的区 ...

  10. 吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例

    吴恩达.深度学习系列-C4卷积神经网络-W2深度卷积模型案例 (本笔记部分内容直接引用redstone的笔记http://redstonewill.com/1240/.原文整理的非常好,引入并添加我自 ...

最新文章

  1. Redis入门到精通-Redis高级命令
  2. IntelliJ IDEA2016学习小结
  3. 物理Data Guard的日常维护
  4. git显示服务器所有分支,git 查看所有远程分支以及同步
  5. 14寸笔记本电脑推荐_2020笔记本电脑推荐(小米篇)
  6. java 金数据推送数据_基于JAVA的黄金数据接口调用代码实例
  7. HUSTOJ搭建后为了方便作为Judger调用进行的一些修改操作
  8. 笔记——数据归一化 scikit-learn中的Scaler
  9. 数字图像处理(18): 图像灰度变换——线性灰度变换 和 非线性灰度变换(对数变换 与 伽马变换)
  10. SpringBoot使用@Slf4j注解
  11. win10家庭版访问域文件服务器拒绝,解决Win10系统文件夹拒绝访问的方法
  12. 【考研英语语法】语篇标记
  13. 山东大学项目实训-地图圈系统-APP(2)
  14. 导数、偏导数、方向导数、梯度、梯度下降
  15. 【解决方案】企业远程行政会议协同办公视频会议EasyRTC如何实现远程办公?
  16. java环境搭建及概述
  17. Taro ui标签多选
  18. 计算机wps应用题题目,WPS Office模拟试题「附答案」
  19. 解放CPU!耕昇GTX460实战3款CUDA软件
  20. wan端口未连接怎么弄_wan口未连接怎么办?

热门文章

  1. python 词云图
  2. 最近整理电脑硬盘,分享几个小巧实用的软件下载,持续更新
  3. 博士申请 | 上海交通大学自然科学研究院洪亮教授招收深度学习方向博士生
  4. STM8单片机STVD环境新建工程笔记
  5. [Matlab]维纳滤波器设计
  6. Linux | Shell脚本从入门到实战
  7. Lua EmmyLua 注解详解
  8. MySQL笔记: B站宋红康最新教程 (持续更新中)
  9. linux ms08 067漏洞,MS08067攻击实验失败的原因是什么?
  10. 综述文章笔记——《A Survey on Traffic Signal Control Methods》等