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

简介:  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

目录
相关文章
|
5天前
|
监控 安全 网络性能优化
|
5天前
|
网络协议 物联网 网络安全
|
2天前
|
机器学习/深度学习 自动驾驶 安全
基于深度学习的图像识别技术在自动驾驶系统中的应用网络安全与信息安全:防御前线的关键技术与意识
【4月更文挑战第30天】随着人工智能技术的飞速发展,深度学习已成为推动多个技术领域革新的核心力量。特别是在图像识别领域,深度学习模型已展现出超越传统算法的性能。在自动驾驶系统中,准确的图像识别是确保行车安全和高效导航的基础。本文将探讨深度学习在自动驾驶中图像识别的应用,分析关键技术挑战,并提出未来的发展方向。
|
2天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
2天前
|
安全 算法 网络安全
构筑网络长城:网络安全漏洞解析与防御策略深入理解操作系统:进程管理与调度策略
【4月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、确保数据流通安全和保障用户隐私的关键。本文将深入探讨网络安全的核心问题——安全漏洞,并分享关于加密技术的最新进展以及提升个人和企业安全意识的有效方法。通过对常见网络威胁的剖析,我们旨在提供一套综合性的网络防御策略,以助力读者构建更为坚固的信息安全防线。 【4月更文挑战第30天】 在现代操作系统的核心,进程管理是维持多任务环境稳定的关键。本文将深入探讨操作系统中的进程概念、进程状态转换及进程调度策略。通过分析不同的调度算法,我们将了解操作系统如何平衡各进程的执行,确保系统资源的高效利用和响应时间的最优化。文中不仅剖析了先来先
|
2天前
|
SQL 安全 网络安全
构筑网络长城:网络安全漏洞解析与防御策略
【4月更文挑战第30天】 在数字化时代,网络安全已成为维护信息完整性、确保数据流通安全和保障用户隐私的关键。本文将深入探讨网络安全的核心问题——安全漏洞,并分享关于加密技术的最新进展以及提升个人和企业安全意识的有效方法。通过对常见网络威胁的剖析,我们旨在提供一套综合性的网络防御策略,以助力读者构建更为坚固的信息安全防线。
|
3天前
|
机器学习/深度学习 算法 计算机视觉
m基于Yolov2深度学习网络的智能零售柜商品识别系统matlab仿真,带GUI界面
MATLAB 2022a中展示了YOLOv2目标检测算法的仿真结果,包括多张检测图像。YOLOv2是实时检测算法,由卷积层和全连接层构成,输出张量包含边界框坐标和类别概率。损失函数由三部分组成。程序使用75%的数据进行训练,剩余25%作为测试集。通过ResNet-50预训练模型构建YOLOv2网络,并用SGDM优化器进行训练。训练完成后,保存模型为`model.mat`。
15 2
|
4天前
|
机器学习/深度学习 算法 TensorFlow
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
TensorFlow 2keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
|
4天前
|
机器学习/深度学习 算法 数据可视化
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
10 0
|
4天前
|
机器学习/深度学习 Python
【深度学习入门】- 神经网络
【深度学习入门】- 神经网络

推荐镜像

更多