1.背景介绍

  GoogLeNet, 一个22层的深度网络,2014年ILSVRC挑战赛冠军,将Top5 的错误率降低到6.67%。论文地址:Going deeper with convolutions。
  
  据说起名为“GoogLeNet”而非“GoogleNet”,是为了向早期的LeNet致敬。


2.网络结构

  GoogLeNet网络的整体结构如下:

GoogLeNet清晰版本


3.主要创新点

一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但是这样会带来一些缺陷:

  • 参数太多,容易过拟合
  • 网络越大计算复杂度越大,难以应用
  • 网络越深,梯度越往后越容易消失

于是GoogLeNet针对这些问题给出了两个解决方案:

  • 深度方面:层数更深,文章采用了22层,为了避免上述提到的梯度消失问题,GoogLeNet巧妙的在不同深度处增加了两个loss来保证梯度回传消失的现象。

  • 宽度方面:采用了Inception结构,这是一种网中网(Network In Network)的结构,即原来的结点也是一个网络。

不同size的卷积核的目的

  • 采用不同大小的卷积核意味着不同大小的感受野,最后拼接意味着不同尺度特征的融合;

  • 之所以卷积核大小采用1、3和5,主要是为了方便对齐。设定卷积步长stride=1之后,只要分别设定pad=0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接拼接在一起了;

但是,使用3x3,5x5的卷积核参数大小仍然过于巨大

  • 为此为了降维改进如下:

1x1卷积层

  • 对特征降维,一方面可以解决计算瓶颈,同时限制网络的参数大小,可以将网络做的更「宽」和更「深」。如何降维,本文后面解释。

4.维度计算

注:#3×3 reduce,#5x5 reduce等表示在这之前使用了 1×1 的卷积核降维之后输出宽度。

第一层 convolution层

  • 输入(data):224×224×3
  • 卷积核size:7×7,滑动步长(stride)为 2,padding为 3
  • 输出维度:112×112×64,计算方式:(224 + 2×3 − 7 + 1) / 2 = 112 ,kernel size = 64

第 二 层 max pool层

  • 输入维度:112×112×64
  • pooling size:3×3,滑动步长(stride)为 2,padding为 1
  • 输出维度:56×56×64,计算方式:(112 + 2×1 − 3 +1 ) / 2 = 56

第三层 convolution层

  • 输入维度:56x56x64
  • 卷积核size:3x3,滑动步长(stride)为1,padding为1
  • 输出维度:56x56x192,计算方式:(56 + 2x1 - 3 + 1)/ 1 = 56,kernel size = 192

第四层 max pool层

  • 输入维度:56x56x192
  • pooling size: 3x3,滑动步长(stride)为2,padding为1
  • 输出维度:28x28x192,计算方式:(56 + 2x1 - 3 + 1)/ 2 = 28

第五层 Inception层

分为4条通道,每条通道的输入均为第四层的输出(28 x 28 x 192):

  • 通道1:1×1 卷积层,64个卷积核,输出大小为 28×28×64

  • 通道2:1×1 卷积层,96个卷积核,输出大小为 28×28×96;作为输入进入 3×3 卷积层,输出大小为 28×28×128

  • 通道3:1×1 卷积层,32个卷积核,输出大小为 28×28×32;作为输入进入 3×3 卷积层,输出大小为 28×28×32

  • 通道4:3×3 的 pooling 层,输出大小为28×28×192;作为输入进入 1x1卷积层,输出大小为28×28×32

Inception层的输出为这四个通道的输出和:64 + 128 + 32 + 32 = 256

这就是GoogLeNet增加宽度的方式


如何降维,以第五层第二个通道为例:

  • 如果没有那个 1×1卷积层,参数个数为 3×3×192×128=221,184 个;

  • 如果加了一个 1×1卷积层,参数个数为 1×1×192×96+3×3×96×128=129,024 个;

由此可以看出,这一通道节约了大于一半参数,其他的类似。

GoogLeNet网络结构学习相关推荐

  1. 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)

    前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...

  2. 卷积神经网络模型之——GoogLeNet网络结构与代码实现

    文章目录 GoogLeNet网络简介 GoogLeNet网络结构 Inception之前的几层结构 Inception结构 Inception3a模块 Inception3b + MaxPool In ...

  3. 深入解读GoogLeNet网络结构(附代码实现)

    前言 七夕了,看着你们秀恩爱,单身狗的我还是做俺该做的事吧! 在上一篇文章中介绍了VGG网络结构,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而同年分类任务的第 ...

  4. GoogleNet 网络结构

    GoogleNet 网络结构 深度学习模型常常通过增加模型的深度或者宽度来获得更高的性能.本文将就深度学习常见的网络结构进行介绍. GoogLeNet是2014年Christian Szegedy提出 ...

  5. 贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)

    题目:贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现) 有关贝叶斯网络结构学习的一基本概念可以参考:贝叶斯网络结构学习方法简介 有关函数输入输出参数的解释可以参考:贝叶 ...

  6. 基于搜索的贝叶斯网络结构学习算法-K2

    部分内容取自:[Cooper and Herskovits, 1991] Cooper, G. and Herskovits, E. (January, 1991). A Bayesian metho ...

  7. 贝叶斯网络结构学习若干问题解释

    题目:贝叶斯网络结构学习若干问题解释 本篇主要为后续讲解具体结构学习算法打基础,共解释以下几个问题: 1.用于贝叶斯网络结构学习的数据集如何存储? 2.学得的贝叶斯网络结构如何存储? 3.什么是节点顺 ...

  8. 贝叶斯网络结构学习(基于BDAGL工具箱的MATLAB实现)

    题目:贝叶斯网络结构学习(基于BDAGL工具箱的MATLAB实现) 有关贝叶斯网络结构学习的一基本概念可以参考:贝叶斯网络结构学习方法简介 有关函数输入输出参数的解释可以参考:贝叶斯网络结构学习若干问 ...

  9. 贝叶斯网络结构学习之连续参数处理方法

    题目:贝叶斯网络结构学习之连续参数处理方法 注:本文有更新,参见<有关属性离散化算法CACC的补充说明>和<有关属性离散化算法CACC的再次补充说明>.以下为原文: 首先必须说 ...

最新文章

  1. 【P2774】方格取数问题(贪心+最大流,洛谷)
  2. Help Jimmy(递归)
  3. 软件概要设计和详细设计的区别
  4. OpenGL ES之GLSL自定义着色器编程实现粒子效果
  5. 最近找工作的面试经历
  6. .NET 5 自身就是一个 .NET Standard
  7. windows:(1)xmind常用快捷键
  8. 解决,文件上传到 ftp 服务器,中文出现乱码问题
  9. python 定义数组
  10. SAP License:把握好集成测试大关,ERP就成功了一大半
  11. 2008-05-23
  12. JavaWeb——Servlet(入门必备,web请求与响应的底层)
  13. thinkphp5引入调用外部类
  14. 【Foreign】Weed [线段树]
  15. js 生成二维码及打印
  16. 双硬盘双系统安装win10和centos7
  17. unshift() 方法php,unshift方法怎么使用
  18. 年薪30万IT精英 挥别都市回乡种田务农
  19. 渗透测试工具篇——sqlmap
  20. 龙芯中科官方宣布,龙芯中科企业办公信息化平台全面完成国产化替代

热门文章

  1. vscode安装和配置ESLint
  2. 重启电脑数据丢失怎么恢复?这篇指南很受用!
  3. HTML基础---01
  4. 【游戏开发渲染】Unity ShaderGraph使用教程与各种特效案例:Unity2022(持续更新)
  5. matlab 画图基本
  6. 洋洋背古诗(2021)
  7. java线程报时代码_什么?一个核同时执行两个线程?
  8. vue 中provide的用法_vue 中的 provide 和 inject 用法
  9. 简单粗暴清理C盘办法
  10. java 拼音首字母_java获取中文拼音首字母的实例