概要

本篇文章的重点就是主要介绍GoogLeNet的网络架构,这个网络架构于2014年由Google团队提出。GoogLeNet的论文为:Going deeper with convolutions。

同时GoogLeNet也在经历了从v1、v2、v3、v4几个版本的改进过程。由于内容较多,因此将我也将在之后几篇博客中进行详细叙述。在本篇博客中主要将介绍GoogLeNet v1的网络架构。


一、背景与动机

在2012年,AlexNet在ImageNet图像分类竞赛中获得了冠军,这也使得深度学习与卷积神经网络开始了快速发展。在2014年的ImageNet图像分类竞赛中,GoogLeNet取得了第一名的成绩,其模型参数参数但只有AlexNet的112\frac{1}{12}121​。GoogLeNet的成功主要得益于Inception模块,整个GoogLeNet的主体架构可以看成多个Inception模块堆叠而成。

在GoogLeNet之前的卷积神经网络基本都是由多个卷积层与池化层堆积而成,然后接入一个或者多个
全连接层来预测输出。在卷积神经网络的在全连接层之前的卷积层和池化层的目的提取各种图像特征,这些图像特征为了适应全连接层的输入都会拉成一维向量,通常这就导致了网络模型参数主要集中在全连接层,因此为了避免过拟合,在全连接层通常会使用dropout来降低过拟合的风险。

同时,池化层主要分类平均池化层和最大池化层两种。平均池化层主要保留图像的背景信息,最大池化层最要保留纹理信息没,池化层的主要目的是减少特征和网络参数,在目前GoogLeNet之前通常使用的最大池化层。但是最大池化层可能会导致空间信息的损失,降低模型的表达能力。因此为了解决这个问题,Lin等人在2013年提出了Inception——“Network in Network”。Inception模块主要在CNN中添加一个额外的1X1卷积层,使用Relu作为激活函数,其主要作用是在不牺牲网络模型性能的前提下,即实现网络特征的降维、减少大量计算量,这有利用训练更深更广的网络。


二、GoogLeNet详解

提高深度网络模型性能的常用方法就是提高网络模型大小,网络模型大小包括网络深度与网络宽度。在有足够的有标签数据的前提下,这是简单和保险的训练高性能模型的方法,但这会加大网络模型参数,加大了模型过拟合的风险。同时这也大大降低的训练周期,带来了大量的计算开销,尤其是在全连接层。解决上述两个问题的可行方式就是利用稀疏连接来代替全连接层。

在《Provable bounds for learning some deep representations》这篇论文中提到对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。所以,为了既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能,这篇论文提出了Inception的结构,这也是GoogLeNet的基础模块。

因此在这里有必要对原始的Inception结构进行详细叙述。Inception 结构的主要思路是用密集成分来近似最优的局部稀疏结构。原始Inception 结构如下图所示。

显然从上图中可以看出,原始Inception 结构采用1×11\times11×1、3×33\times33×3和5×55\times55×5三种卷积核的卷积层进行并行提取特征,这可以加大网络模型的宽度,不同大小的卷积核也就意味着原始Inception 结构可以获取到不同大小的感受野,上图中的最后拼接就是将不同尺度特征进行深度融合

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

最后文章说很多地方都表明pooling挺有效,所以原始Inception结构里面也加入了最大池化层来降低网络模型参数。特别重要的是网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,GoogLeNet中3x3和5x5卷积的比例也要增加。

但是原始Inception结构中5×55\times55×5卷积核仍然会带来巨大的计算量。降低5×55\times55×5卷积核带来的计算量,GoogLeNet中借鉴了NIN(Network in Network)的思想使用1×11\times11×1卷积层与5×55\times55×5卷积层相结合来实现参数降维。

对于1×11\times11×1卷积层与5×55\times55×5卷积层实现参数降维,在这里也举一个简单的例子进行说明。假如上一层的输出为100×100×128100\times100\times128100×100×128,经过具有256256256个输出的5×55\times55×5卷积层之后(stride=1,pad=2),输出数据为100×100×256100\times100\times256100×100×256。其中,那么卷积层的参数为128×5×5×256128\times5\times5\times256128×5×5×256。此时如果上一层输出先经过具有323232个输出的1×11\times11×1卷积层,再经过具有256256256个输出的5×55\times55×5卷积层,那么最终的输出数据仍为为100×100×256100\times100\times256100×100×256,但卷积参数量已经减少为128×1×1×32+32×5×5×256128\times1\times1\times32 + 32\times5\times5\times256128×1×1×32+32×5×5×256,相比之下参数大约减少了4倍。

因此在3×33\times33×3和5×55\times55×5卷积层之前加入合适的1×11\times11×1卷积层可以在一定程度上减少模型参数,那么在GoogLeNet中基础Inception结构也就做出了相应的改进,改进后的Inception结构如下图所示。

那么GoogLeNet的整体网络架构如下:
显然从上图可以看出,GoogLeNet主体架构是利用改进之后的Inception结构堆积而成22层层卷积神经网络。同时GoogLeNet在全连接层之前采用了平均池化层来降低特征,该想法来自也NIN事实证明可以将TOP1 accuracy提高0.6%。从上图也可以看出GoogLeNet网络架构较深,如果梯度从最后一层传递到第一层,可能会出现梯度消失的情况。因此为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度。

下面是GoogLeNet的各个模块的参数示意表。从下图也可看出,相比于AlexNet,GoogLeNet的网络参数大幅度下降,只有AlexNet的112\frac{1}{12}121​。

下面是GoogLeNet在ImageNet分类竞赛相关指标的对比结果。可以看出,GoogLeNet在2014年ImageNet分类竞赛获得了6.67%的Top5的错误率,比VGG网络的性能好一点。


**

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=t0cl3g0ye684

**

【深度神经网络】五、GoogLeNet网络详解相关推荐

  1. GoogLeNet网络详解并使用pytorch搭建模型

    1.GoogLeNet网络详解 网络中的创新点: (1)引入了Inception结构(融合不同尺度的特征信息) (2)使用1x1的卷积核进行降维以及映射处理 (虽然VGG网络中也有,但该论文介绍的更详 ...

  2. GoogleNet网络详解与keras实现

    GoogleNet网络详解与keras实现 GoogleNet网络详解与keras实现 GoogleNet系列网络的概览 Pascal_VOC数据集 第一层目录 第二层目录 第三层目录 Incepti ...

  3. 深度学习网络模型——RepVGG网络详解、RepVGG网络训练花分类数据集整体项目实现

    深度学习网络模型--RepVGG网络详解.RepVGG网络训练花分类数据集整体项目实现 0 前言 1 RepVGG Block详解 2 结构重参数化 2.1 融合Conv2d和BN 2.2 Conv2 ...

  4. 卷积神经网络之AlexNet网络详解

    一  介绍 Alex Krizhevsky等人训练了一个大型的卷积神经网络用来把ImageNet LSVRC-2010比赛中120万张高分辨率的图像分为1000个不同的类别.在测试卷上,获得很高准确率 ...

  5. GoogLeNet网络详解与模型搭建

    文章目录 1 模型介绍 2 GoogLeNet详解 Inception模块 辅助分类器 3 GoogLeNet网络结构 4 Pytorch模型搭建代码 1 模型介绍 GoogLeNet是2014年Ch ...

  6. GoogLenet网络详解

    GoogLenet VGG在2014年由牛津大学著名研究组vGG (Visual Geometry Group)提出,斩获该年lmageNet竞赛中Localization Task (定位任务)第一 ...

  7. 深度神经网络压缩和加速详解

    目录 ​ 1.背景介绍 2.压缩方法概述 3.压缩方法详述 3.1参数剪枝 3.2参数量化 3.3低秩分解(张量分解) 3.4参数共享 3.5紧凑网络 3.6知识蒸馏 3.7混合模型 3.8不同压缩模 ...

  8. 【深度学习】ResNet网络详解

    文章目录 ResNet 参考 结构概况 conv1与池化层 残差结构 Batch Normalization 总结 ResNet 参考 ResNet论文: https://arxiv.org/abs/ ...

  9. 第十六章 ConvNeXt网络详解

    系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网 ...

最新文章

  1. MS SQL “ 无法启动分布式事务“问题的解决思路
  2. 项目管理生命周期各个阶段的文档
  3. php exchange,PHP SDK for digital currency exchange
  4. MyBatis是持久化层框架(SQL映射框架)-操作数据库
  5. requests(一): 发送一个json格式的post请求
  6. Azure App Service 如何在第一时间用上最新版 .NET Core
  7. alc236黑苹果驱动_台式机黑苹果独显驱动
  8. java数独最快解,Java解数独--世界最难数独
  9. 伽马校正(Gamma Correction)
  10. Python - 摄氏度华氏度转换
  11. spss标准差与标准偏差不一样
  12. 科研必备 | 谷歌学术高级搜索详解
  13. 联通数据能力开放平台介绍
  14. 开心的小明-动态规划算法
  15. 树莓派3b安装新系统的步骤和一些问题
  16. 可口可乐调研——案例分析
  17. 在Git for windows(MSYS2)中实现tmux和windows剪切板的共享功能
  18. 判断两个字符串是不是互为anagrams
  19. 自制Microbit图形化编程小车
  20. Vue(四十一)、Vuex的应用

热门文章

  1. 第140章 SQL函数 TO_CHAR(一)
  2. 51控制继电器的C语言程序,C51单片机红外遥控控制继电器源程序
  3. 2012年电子商务网站用户体验研究
  4. DCGAN 论文翻译
  5. 比特熊直播间一周年,英雄集结令!邀你来合影!
  6. 小米路由(OpenWrt)折腾记(二)-- 搭建LLMP服务
  7. FM非相干解调原理及Keil代码
  8. 用标签条码打印软件打印发货单标签
  9. 软件开发过程一般有几个阶段?每个阶段的作
  10. python简易计算器教程_python 实现简易计算器