1. 导读

前面我们回顾了AlexNet,AlexNet的作者指出模型的深度很重要,而VGG最大的贡献就在于对网络模型深度的研究。

VGG原论文:《Very Deep Convolutional Networks for Large-Scale Image Recognition

VGG模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet。但是VGG其规律的设计、简洁可堆叠的卷积块,且在其他数据集上都有着很好的表现,从而被人们广泛应用,同时在多个迁移学习任务中的表现要优于googLeNet。而且,从图像中提取CNN特征,VGG模型是首选算法。

2. 网络结构

这是论文中作者给出的VGG的6种不同网络结构:

VGG-16示意图如下,整体来说整个网络可分为5个block,每个block由卷积+池化组成,然后进入3个全连接层再接softmax实现分类:

我们以VGG-16为例来解读其网络结构:

  • VGG-Block内的卷积层都是相同的结构,其中都是统一通过size为3×3的kernel size + stride1 + padding(same)实现,意味着输入和输出的尺寸一样,且卷积层可以堆叠复用。
  • MaxPool层统一的pool size=2,stride=2,起到的作用是将前面的卷积层的特征缩减一半,从224-112-56-28-14-7.
  • 输入层: 输入为224×224×3 三通道的图像。
  • Block1: 输入为224×224×3,2个卷积层分别经过64个kernel size为3x3×3的filter,stride = 1,padding=same卷积后得到shape为224×224×64;再经Max-pooling层:pool size=2,stride=2的减半池化后得到尺寸为112×112×64的池化层。
  • Block2:输入尺寸为112×112×64,2个卷积层分别经128个3×3×64的filter,stride = 1,padding=same卷积后得到shape为112×112×128;再经Max-pooling层:pool size=2,stride=2的减半池化后得到尺寸为56×56×128的池化层。
  • Block3:输入尺寸为56×56×128,3个卷积层分别经256个3×3×128的filter,stride = 1,padding=same卷积后得到shape为56×56×256;再经Max-pooling层:pool size=2,stride=2的减半池化后得到尺寸为28×28×256的池化层。
  • Block4:输入尺寸为28×28×256,3个卷积层分别经512个3×3×256的filter,stride = 1,padding=same卷积后得到shape为28×28×512;再经Max-pooling层:pool size=2,stride=2的减半池化后得到尺寸为14×14×512的池化层。
  • Block5:输入尺寸为14×14×512,3个卷积层分别经512个3×3×512的filter,stride = 1,padding=same卷积后得到shape为14×14×512;再经Max-pooling层:pool size=2,stride=2的减半池化后得到尺寸为7×7×512的池化层,该层后面还隐藏了flatten操作,通过展平得到7×7×512=25088个参数后与之后的全连接层相连。
  • FC:经过3个全连接层,神经元个数分别为4096,4096,1000。其中前两层在使用relu后还使用了Dropout对神经元随机失活,最后一层全连接层用softmax输出1000个分类。

3. 论文总结

  • 网络深度对模型分类性能有提高:作者做了实验,网络从11层19层,网络深度增加对top1和top5的错误率下降很明显。最佳模型:VGG-16

  • 多个小卷积核比单个大卷积核好:相较与AlexNet,VGG最大的改进或者说区别就是用小size的Filter代替大size的Filter。2个3x3的卷积层连接,就达到了5x5的效果,3个3x3的卷积层连接,就达到了7x7的效果;多个小卷积比单个大卷积好在两个方面:1:可以减少参数,例如使用3个3x3卷积参数个数:3(3x3xCxC),单个7x7卷积层参数个数,后者参数量大81%:7x7xCxC;2:这样做相当于进行了更多的非线性映射,可以增加网络的拟合和表达能力。

  • 删除了AlexNet中的LRN层:没有使用AlexNet中的LRN技术。这是因为后面的实验(如上图中的A和A-LRN)中证明了使用LRN对性能并没有提升作用,反而增加内存和时间消耗。

  • 图像预处理:在模型训练期间,作者所做的唯一预处理就是将输入的224×224×3通道的像素值,减去平均RGB值,为了增加数据集,和AlexNet一样,这里也采用了随机水平翻转和随机RGB色差进行数据扩增。对经过重新缩放的图片随机排序并进行随机剪裁得到固定尺寸大小为224×224的训练图像。

4. 代码实现

为了加深对VGG网络的理解,我基于pytorch框架使用了与我上一篇AlexNet博客中同样的数据集去对VGG16进行测试,其demo你可以点击这里在github上访问;

论文日记二:VGG的更多相关文章

  1. 论文选读二:Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification

    论文选读二:Multi-Passage Machine Reading Comprehension with Cross-Passage Answer Verification 目前,阅读理解通常会给出 ...

  2. oracle入坑日记<二>认识oracle(含sqlplus基础使用)

    1.SID(数据库实例) 1.1. oracle安装的时候有一项叫[全局数据库名]的填写项,这个就是oracle的SID也是数据库的唯一标识符: 1.2.一个oracle数据库有且只有一个SID(一般 ...

  3. 【LaTeX排版】LaTeX论文排版<二>

    1.目录的生成     直接使用命令\tableofcontents即可.其默认格式如下: 我们会发现,这样的格式不一定是我们所期望的.比如说,我们也希望章标题与页码之间也有点连线,并且也希望将致谢. ...

  4. Linux学习日记(二)

    在linux上运行.Net程序 并安装Linux网站 一.环境 ubuntu14.10(桌面版 官网下载的最新版) jexus5.6.3 正式版 MonoDevloper (安装完后里面有个Ubunt ...

  5. AC日记——二叉堆练习3 codevs 3110

    3110 二叉堆练习3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给定N(N≤500,000)和N个整 ...

  6. 转:Google论文之二----Google文件系统(GFS)翻译学习

    文章来自于:http://www.cnblogs.com/geekma/archive/2013/06/09/3128372.html 摘要 我们设计并实现了Google文件系统,它是一个可扩展的分布 ...

  7. Linux管理日记(二)

    14  启动内网端口转发 ### 2. 查看IP以及网卡信息 # 可以发现, eth0 的地址 inet addr:10.144.7.195, 此为内网网卡 # 公网网卡, eth1 的地址 inet ...

  8. UnderWater+SDN论文之二

    ---- Software-defined underwater acoustic networking platform and its applications source: Ad Hoc Ne ...

  9. PS日记二(调色:色阶,曲线,色相/饱和度,色彩平衡,蒙板)

    基础知识一:在PS操作中为什么要复制图层(ctrl+J)? 答:复制图层主要是为了 备份原图层,在副本中进行操作 如果说你副本弄坏了,还有原来的PS复制图层一方面是保全原图.二是因为图层是ps操作的基 ...

  10. Python学习日记(二十八) hashlib模块、configparse模块、logging模块

    hashlib模块 主要提供字符加密算法功能,如md5.sha1.sha224.sha512.sha384等,这里的加密算法称为摘要算法.什么是摘要算法?它又称为哈希算法.散列算法,它通过一个函数把任 ...

随机推荐

  1. 【Java SE】网络编程

    1. 网络编程概述 网络编程的目的:直接或者间接地通过网络协议与其他计算机实现数据交换,进行通讯. 网络编程两个主要的问题: ①如何精准地定位网络上的一台或多台主机,并定位主机上的特定应用 ②找到主机 ...

  2. 如何在 .NET Core WebApi 中处理 MultipartFormDataContent

    最近在对某个后端服务做 .NET Core 升级时,里面使用了多处处理 MultipartFormDataContent 相关内容的代码.这些地方从 .NET Framework 迁移到 .NET C ...

  3. AI人工智能 机器学习 深度学习 学习路径及推荐书籍

    要学习Pytorch,需要掌握以下基本知识: 编程语言:Pytorch使用Python作为主要编程语言,因此需要熟悉Python编程语言. 线性代数和微积分:Pytorch主要用于深度学习领域,深度学 ...

  4. Comparator之用最少数量的箭引爆气球

    文章目录 前言 关于Comparator 原题 前言 今天刷个题,遇到一个很有趣的问题,关于Comparator的使用,感觉也是一个关于写代码的一些小细节的问题 关于Comparator Compar ...

  5. git仓库过渡,同时向两个仓库推送代码

    公司部门被大佬收购,产品项目迁移新公司仓库,过渡期间产品上线流程继续使用原公司的,新公司部署新系统后通过域名重定向逐渐将用户引流到新系统上完成切换,最后关闭原公司系统及上线流程. 过渡期间新功能代码需 ...

  6. 2022-12-23:portainer是docker的web可视化工具。如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml。请问部署在

    2022-12-23:portainer是docker的web可视化工具.如果根据docker部署去写yaml,默认local是k8s,而不是docker,这不符合需求,需要修改yaml.请问部署在 ...

  7. 爆肝一周,我开源了ChatGPT 中文版接口,官方1:1镜像支持全部 官方接口

    这里实现我之前文章承诺承接上文 人人实现ChatGPT自由,手把手教你零撸部署自己聊天私服 现在ChatGPT 提供了api接口 可以让我自己对接去实现我们自己想要gpt应用,但是由于一些原因,国内也 ...

  8. jdg安装及环境设置

    1.下载java8 java11 到默认路径 2.右击我的电脑,点击属性 3.点击高级系统设置 4.点击环境变量 5.点击新建 6. 按照提示新建条目 第一个 变量名填入: JAVA_HOME 变量值 ...

  9. linux PXE和无人值守

    目录 一.pxe概念 二.pxe相关服务 三.pxe装机流程 四.pxe四大文件 五.无人值守 六.实验 自动装机 一.pxe概念 概念:PXE(预启动执行环境)是由Intel公司开发的网络引导技术, ...

  10. web自动化06-键盘操作

    键盘操作 1.说明: 1). 模拟键盘上一些按键或者组合键的输入 如:Ctrl+C .Ctrl+V: 2). Selenium中把键盘的按键都封装在Keys类中 2. Keys类 导包:from se ...