深度学习经典网络解析图像分类篇(六):GoogLeNet

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:  GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如过拟合、梯度消失、梯度爆炸等。

GoogLeNet论文翻译详情见我的博客:


https://blog.csdn.net/muye_IT/article/details/123886132


1.背景介绍


 GoogLeNet是2014年Christian Szegedy提出的一种全新的深度学习结构,在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如过拟合、梯度消失、梯度爆炸等。Inception Architecture的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果。


 2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构,而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的20倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。


 GoogLeNet这个名字的诞生由两方面促成,一是设计者在Google工作,二是向LeNet致敬。GoogLeNet只是一个名字,它的核心是Inception Architecture。


afb13a2555304ef4844157159bd72e38.png


2.GoogLeNet创新点


 ➢ 提出了一种Inception结构,它能保留输入信号中的更多特征信息;

 ➢ 去掉了AlexNet的前两个全连接层,并采用了平均池化,这一设计使得

GoogLeNet只有500万参数,比AlexNet少了12倍;

 ➢ 在网络的中部引入了辅助分类器,克服了训练过程中的梯度消失问题。


 模型总览图如下:


0a5c4e1eea1b46a3b77b7f42e9c82357.png



01f437f470a24dae9cc9ed54d7f7a044.png


3.串联结构(如VGG)存在的问题


 —后面的卷积层只能处理前层输出的特征图;前层因某些原因(比如感受野限制)丢失重要信息,后层无法找回。


如何解决?


 每一层尽量多的保留输入信号中的信息。


4.GoogLeNet


4.1 网络架构


4.1.1 INPUT层


 原始输入图像为224x224x3,且都进行了零均值化的预处理操作(图像每个像素减去均值)。


4.1.2 Conv 1×1


 使用7x7的卷积核(滑动步长2,padding为3),64通道,输出为112x112x64,卷积后进行ReLU操作


 经过3x3的max pooling(步长为2),输出为((112 - 3+1)/2)+1=56,即56x56x64,再进行ReLU操作


4.1.2 Conv 3×3


 使用3x3的卷积核(滑动步长为1,padding为1),192通道,输出为56x56x192,卷积后进行ReLU操作


 经过3x3的max pooling(步长为2),输出为((56 - 3+1)/2)+1=28,即28x28x192,再进行ReLU操作


4.1.3 Inception 3a层


 分为四个分支,采用不同尺度的卷积核来进行处理


1.64个1x1的卷积核,然后RuLU,输出28x28x64


2.96个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x96,然后进行ReLU计算,再进行128个3x3的卷积(padding为1),输出28x28x128


3.16个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x16,进行ReLU计算后,再进行32个5x5的卷积(padding为2),输出28x28x32


4.pool层,使用3x3的核(padding为1),输出28x28x192,然后进行32个1x1的卷积,输出28x28x32。


 将四个结果进行连接,对这四部分输出结果的第三维并联,即64+128+32+32=256,最终输出28x28x256


4.1.4 Inception 3b层


1.128个1x1的卷积核,然后RuLU,输出28x28x128


2.128个1x1的卷积核,作为3x3卷积核之前的降维,变成28x28x128,进行ReLU,再进行192个3x3的卷积(padding为1),输出28x28x192


3.32个1x1的卷积核,作为5x5卷积核之前的降维,变成28x28x32,进行ReLU计算后,再进行96个5x5的卷积(padding为2),输出28x28x96


4.pool层,使用3x3的核(padding为1),输出28x28x256,然后进行64个1x1的卷积,输出28x28x64。


 将四个结果进行连接,对这四部分输出结果的第三维并联,即128+192+96+64=480,最终输出输出为28x28x480


 第四层(4a,4b,4c,4d,4e)、第五层(5a,5b)……,与3a、3b类似,在此就不再重复。


4.2 Inception模块


 首先得说一下Szegedy发明Inception Architectur的动机,他估计是在某天阅读了Provable Bounds for Learning Some Deep Representations这篇论文,又结合自己多年来的经验,发现传统的提高网络精度的方法(扩大网络规模或增大训练数据集)不可靠,而想从本质上提高网络性能,就得用sparsely connected architectures,即“稀疏连接结构”。


 我自己对“稀疏连接结构”的理解是这样的,用尽可能的“小”、“分散”的可堆叠的网络结构,去学习复杂的分类任务,怎么体现“小”、“分散”呢?如下图:


c997c4719e1d4c3da1b3146fbd7daed7.png


 原来造神经网络,都是一条线下来,比如AlexNet、VGG等网络,而IA是“分叉-汇聚”型网络,也就是说在一层网络中存在多个不同尺度的kernels,卷积完毕后再汇聚。汇聚就是简单的在kernel维度把矩阵concatenate起来。但是这么做有一个问题,会产生“维度爆炸”,也就是说假如1x1卷积、3x3卷积、5x5卷积都有256个kernels,加上pool的kernels(假定为256),经过concat操作,最终的kernels是256×4=1024个kernels!这没法接受啊!如果多层IA叠加起来,那kernels的数量岂不上天!!于是Szegedy就改进了一下也就是Inception V1,如下图:


d6c70e4858f44f628e6bc1b9a762bf69.png


 Inception V1加入了kernels数量控制方式,就是那些1×1的卷积层,这些1×1的卷积层输出kernels会比上一层要少,其实就是多了三个1×1的卷积层,这三个卷积层起到了降维的作用。这样即便在经过concat以后,总kernels数量不会增加太多。另外,这些1×1的卷积层还增加了网络的非线性程度。


1×1如何起到降维的作用?


4cb70786e1b84b09957dc9436750b818.png


 如果有一个特征矩阵是channels是512,如果不使用1×1的卷积核,直接使用64个5×5的卷积核进行卷积的话,那么总参数为5×5×512×64=819200,如果使用24个1×1卷积核进行降维,再使用64个5×5的卷积核进行卷积,则所需要的参数就会变为50688,在上图b中加入1×1的卷积结构其目的就是为了减小特征矩阵的深度从而减小卷积参数。


为什么Inception Architecture可以有更好的性能呢?


 它拥有多个不同尺度的kernels,每一个尺度的kernel会学习不同的特征,把这些不同kernels学习到的特征汇聚给下一层,能够更好的实现全方位的学习。


259101fac34c4138ab4f524e6a7e60ee.png


4.3 取消全连接层


 首先看一下GoogLeNet与VGGNet的模型参数对比


c463c53f7d854572860c0eb0639e63ab.png


 VGG网络的参数那么多?就是因为它在最后有两个4096的全连层!为了压缩GoogLeNet的网络参数,他把全连层取消了!GoogLeNet网络详细配置如下:


4250049fa04044a4b487e332bb0eb871.png


d44fc90100a34d39a96d69423f522787.png


 网络的最后几层是AveragePool、Dropout、Liner和Softmax。可能是全连层参数太多,网络深度增加了以后,难以接受吧。但是去年来自谷歌大脑的研究团队在网络架构设计方面挖出新坑,提出 MLP-Mixer ,这是一个纯 MLP 构建的视觉架构。该架构无需卷积、注意力机制,仅需 MLP,在 ImageNet 数据集上就实现了媲美 CNN 和 ViT 的性能表现。所以说神经网络是个玄学~


4.4 辅助分类器


 原因——虽然ReLU单元能够一定程度解决梯度消失问题,但是并不能完全解决深层网络难以训练的问题。离输出远的层就不如靠近输出的层训练得好。

 结果——让低层的卷积层学习到的特征也有很好的区分能力,从而让网络更好地被训练,而且低层的卷积层学到了好的特征也能加速整个网络的收敛。


 当随着网络深度加深是,梯度消失是所有深层网络的通病,往往训练到最后,网络最开始的几层就“训不动了”!于是Szegedy加入了Auxiliary Classifiers(简称AC),用于辅助训练,加速网络收敛。这两个AC在训练的时候也跟着学习,同时把自己学习到的梯度反馈给网络,算上网络最后一层的梯度反馈,GoogLeNet一共有3个“梯度提供商”,它确实提高了网络收敛的速度,因为梯度变大了。但是,GoogLeNet在做预测的时候AC是要被摘掉的。


84aedfaeb22d447983916fde0aee57c3.png


5. 思考


5.1 平均池化向量化与直接展开向量化有什么区别?


 ➢ 特征响应图上每个位置的值反应了图像对应位置的结构与卷积核记录的语义结构的相似程度。

 ➢ 平均池化丢失了语义结构的空间位置信息。

 ➢ 忽略语义结构的位置信息,有助于提升卷积层提取到的特征的平移不变性。


5.2 利用1x1卷积进行压缩会损失信息吗?


1d5eaea8e67e4cb0991a5e61fd8de7fe.png


 如图,把一个64维的向量压缩成32维的向量,位置A的这个64维向量是一个非常稀疏向量,利用1x1卷积进行非线性压缩通常不会损失信息。


6.GoogLeNet相关论文及下载地址

[v1] Going Deeper withConvolutions, 6.67% test error,2014.9

[v2] Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift, 4.8% test error,2015.2


[v3] Rethinking theInception Architecture for Computer Vision, 3.5%test error,2015.12


[v4] Inception-v4,Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error,2016.2

目录
相关文章
|
14天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
97 30
|
8天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
18天前
|
SQL 安全 算法
网络安全之盾:漏洞防御与加密技术解析
在数字时代的浪潮中,网络安全和信息安全成为维护个人隐私和企业资产的重要防线。本文将深入探讨网络安全的薄弱环节—漏洞,并分析如何通过加密技术来加固这道防线。文章还将分享提升安全意识的重要性,以预防潜在的网络威胁,确保数据的安全与隐私。
35 2
|
20天前
|
安全 算法 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术深度解析
在数字信息的海洋中,网络安全是航行者不可或缺的指南针。本文将深入探讨网络安全的两大支柱——漏洞防御和加密技术,揭示它们如何共同构筑起信息时代的安全屏障。从最新的网络攻击手段到防御策略,再到加密技术的奥秘,我们将一起揭开网络安全的神秘面纱,理解其背后的科学原理,并掌握保护个人和企业数据的关键技能。
27 3
|
22天前
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
53 5
|
22天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
51 3
|
3天前
|
机器学习/深度学习 人工智能 算法
机器学习与深度学习:差异解析
机器学习与深度学习作为两大核心技术,各自拥有独特的魅力和应用价值。尽管它们紧密相连,但两者之间存在着显著的区别。本文将从定义、技术、数据需求、应用领域、模型复杂度以及计算资源等多个维度,对机器学习与深度学习进行深入对比,帮助您更好地理解它们之间的差异。
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
72 0
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
76 0

推荐镜像

更多