19_谷歌GoogLeNet(InceptionV1)深度学习图像分类算法

1.1 简介

GoogLeNet(有时也称为GoogleNet或Inception Net)是一种深度学习架构,由Google的研究团队在2014年提出,主要设计者为Christian Szegedy等人。这个模型是在当年的ImageNet大规模视觉识别挑战赛(ILSVRC)中获得冠军(亚军为VGG)的网络结构,因其在图像分类任务上展现出了卓越的性能而备受瞩目。

主要特点与创新点:

  1. Inception模块:GoogLeNet的核心创新是引入了名为"Inception"的模块。这些模块通过并行地使用不同大小的卷积核(例如1x1, 3x3, 5x5)和最大池化操作(通常为3x3),能够在同一层级捕捉不同尺度的特征信息,从而显著增加了网络的宽度(即每层的特征通道数),同时保持了相对浅的深度,以控制过拟合风险和计算复杂度。

  2. 1x1卷积核的降维应用:为了减少计算成本和控制模型复杂度,Inception模块中巧妙地利用了1x1卷积核进行降维。这种操作在执行更复杂的卷积(如3x3, 5x5)之前减少输入数据的通道数,既降低了计算负担,又保持了模型的表达能力。

  3. 无全连接层:与早期的深度学习模型(如AlexNet、VGG)不同,GoogLeNet摒弃了传统的全连接层,转而使用全局平均池化(Global Average Pooling)来直接从特征图中提取分类信息。这一改变大幅减少了网络参数的数量,提升了模型的泛化能力和训练效率。

  4. 辅助分类器(Auxiliary Classifiers):为了改善梯度流并促进网络内部的训练,GoogLeNet还在网络中间位置加入了辅助分类器。这些辅助输出层有助于提供额外的正则化效果,并在训练过程中辅助主分类器学习,尽管在实际预测时通常不使用它们的输出。

  5. 参数效率:尽管具有较深的网络结构(共22层),GoogLeNet通过上述设计优化,成功地将模型参数数量控制在一个相对较低的水平,大约是AlexNet参数量的1/12,这对于计算资源和内存使用而言是一大优势。

GoogLeNet的成功不仅在于其在图像分类任务上的表现,还因为它所开创的设计理念影响了后续一系列深度学习模型的发展,包括后续的Inception V2、V3、V4等版本,这些版本不断优化了原始架构,提高了性能和效率。

该模型出自《Going deeper with convolutions》。

(注:inception这个名字取自盗梦空间,论文的题目也是取自盗梦空间的一句台词“we need to go deeper”,l论文的参考文献第一个就是引用了一个盗梦空间的meme图)

1.2 Inception 模块

Inception模块的设计初衷是为了解决深度学习网络中常见的几个问题,包括计算量大、参数过多导致的过拟合风险以及模型效率。以下是Inception模块的基本原理和设计理念:

原理概述

Inception模块的核心思想是同时使用多个不同大小的卷积核以及池化操作来提取特征,以此实现对图像特征的多尺度捕捉。具体来说,一个典型的Inception模块包含以下几种类型的层:

  1. 1x1卷积层:用作降维操作,减少后续层的计算负担。这一步骤在执行更大尺寸卷积之前进行,可以显著降低计算复杂度而不损失太多信息。

  2. 3x3和5x5卷积层:用于捕捉局部特征,其中3x3卷积核适合捕捉中等尺度的特征,而5x5卷积核适合捕捉更大范围的特征。这些卷积层在应用前通常也会经过1x1卷积降维。

  3. 最大池化层:通常使用3x3的最大池化操作,进一步增加网络对不同尺度特征的鲁棒性,并提供一定程度的平移不变性。

所有这些层的输出会在深度维度上被拼接(concatenated)起来,形成一个非常“宽”的特征图。这样的设计允许网络在不显著增加计算成本的情况下,探索多种不同的特征组合,从而提高模型的表达能力。

降维策略

特别值得注意的是,Inception模块中的1x1卷积核除了用于降维外,还能够实现通道间的交叉信息处理,有助于模型学习更复杂的特征关系。通过这种机制,Inception模块能够在增加网络宽度(即增加每层的特征图数量)的同时,保持或减少模型的总体参数量和计算量。

版本演进

从最初的Inception v1开始,Google团队继续优化这一模块,推出了Inception v2至v4等多个版本,每个新版本都在原有基础上进行了改进,比如引入Batch Normalization、优化卷积结构以减少计算成本等,使模型更加高效和强大。

总之,Inception模块通过并行使用多种尺寸的卷积和池化操作,实现了对图像特征的全面而高效的提取,是深度学习领域中一项重要的技术创新,对后续的网络设计有着深远的影响。

注意下图有一些不严谨,下图的四个结果厚度可以不一样,但是长宽是一样的。

下图左为原始版本,这种操作容易越摞越厚导致计算量的爆炸。为了避免这个问题就产生了下图右侧的版本:在进行3x3,5x5卷积之前进行1x1卷积进行降维,对于3x3最大池化的结果也用1x1卷积进行降维,把四路变薄的作业本摞在一起,就可以减少参数量和运算量。

9个inception模块堆在一起:

优化的Inception模块变体

1.3 1x1卷积

1x1卷积在深度学习尤其是卷积神经网络(CNN)中扮演着多种关键角色,以下是其主要作用:

  1. 降维(Dimensionality Reduction):1x1卷积可以显著减少网络中的参数量和计算负担。通过应用具有较少输出通道的1x1卷积,可以在不影响输入特征图的空间维度(高度和宽度)的情况下,减少特征图的深度(通道数)。这有助于降低模型的复杂性,减少过拟合的风险,并加速训练过程。

  2. 升维(Dimensionality Increase):与降维相反,1x1卷积也可以用来增加特征图的深度,即增加输出通道的数量。这对于扩展模型的表达能力,捕获更多样化的特征是有益的。

  3. 特征重校准(Feature Re-calibration):1x1卷积能够对输入特征图的每个通道进行线性变换,实现通道间的信息重组。这相当于在每个空间位置上对输入特征的各个通道进行加权求和,有助于强调或抑制某些特征,实现特征选择和优化。

  4. 跨通道信息整合(Cross-channel Information Integration):由于1x1卷积在每个输入通道上独立操作并聚合结果,它能够促进不同特征通道之间的相互作用,实现跨通道的特征融合,增强网络对复杂模式的学习能力。

  5. 计算代价低的深度操作:相比于较大的卷积核,1x1卷积的计算成本低,但在保持空间维度不变的同时,提供了对特征图深度的有效操作,因此常用于构建高效的网络结构,如Inception模块中。

  6. 替代全连接层(Fully Connected Layer Replacement):在全卷积网络(FCN)中,1x1卷积可以替代传统的全连接层,使得网络能够处理任意尺寸的输入图像,提高模型的灵活性和适应性,提高表示能力。

1.4 GAP(global average pooling)全局平均池化

全局平均池化(Global Average Pooling,简称GAP)是一种在深度学习,尤其是卷积神经网络(CNN)中的池化技术,它在模型的最后阶段被应用,发挥着重要作用。

  1. 减少参数数量:GAP通过替代全连接层(Fully Connected Layers, FC),显著减少了模型中的参数数量。在传统CNN结构中,全连接层往往包含大量的权重参数,容易导致过拟合并增加计算复杂度。GAP直接将每个特征图的所有元素平均,生成一个标量值,因此即使在多通道特征图的情况下,输出也是一个与通道数相等的向量,极大降低了模型复杂性。

  2. 正则化和防止过拟合:通过减少模型参数,GAP自然地起到了正则化的效果,有助于模型更好地泛化到未见数据,降低过拟合风险。GAP实际上对整个网络结构施加了一种形式的正则化,提高了模型的稳健性。

  3. 特征图到类别得分的直接映射:GAP使得每个特征图的平均值可以被视为该特征图代表类别得分的总体表示,从而赋予了特征图以类别层面的解释性。每个通道的平均值可以理解为对应类别的一个置信度值。

  4. 增强对空间变换的鲁棒性:GAP通过对特征图进行整体平均,降低了对特定空间位置信息的依赖,使得模型对输入图像的空间变换更加鲁棒。这有助于模型关注于全局特征而非局部细节,从而在一定程度上增强了对图像旋转、缩放等变换的不变性。

  5. 提高训练速度:由于参数量的减少,模型训练所需的计算资源和时间也随之减少,从而加快了训练速度。

  6. 挑战与改进:尽管GAP有效,但其简单平均的特性可能导致一些局部重要特征的丢失。为解决这个问题,研究人员引入了多种改进策略,比如结合全局最大池化(Global Max Pooling, GMP)和注意力机制(Attention Mechanism),以更细致地加权和保留特征图中的关键信息。

  7. 便于迁移学习和fine tunning

GAP作为一种有效的池化策略,通过简化模型结构、减少过拟合风险以及提高训练效率,对深度学习模型尤其是图像识别和分类任务的性能产生了积极影响。

GAP能将多通道的特征图变成一个一维向量,这样可以直接softmax或者构建全连接网络进行分类,大大减少参数量。如果不采用GAP而按照传统的CNN,我们需要把每一个channel的每一个元素用flatten进行展平,这样会导致全连接层都需要跟这个长向量都有权重,因此会带来参数量和计算量的爆炸。

下图,GAP保留了原来channel的信息,因此这个权重就能够反映这一个类别对每一个channel的关注程度,而下图是FCN(全卷积网络),空间信息没有丢失,channel又保留了原图上的空间信息,所以用这个图像分类的模型,我们就可以进行定位甚至是语义分割。


 

1.5 CS231N公开课的一些讲解

辅助分类器

GoogLeNet(特别是其Inception V1版本)中引入辅助分类器的设计,是为了克服深层网络训练中的一些挑战,特别是梯度消失问题,以及提高网络的训练效率。下面详细介绍辅助分类器的原理和细节:

原理

  1. 梯度消失问题的缓解:随着网络深度的增加,梯度在反向传播过程中可能会变得非常小,导致网络前面层的权重更新缓慢甚至停滞。辅助分类器位于主网络的中间层,它们的输出也参与到最终的损失计算中,这样可以为网络的早期层提供更多直接的梯度信号,帮助梯度更有效地反向传播,从而缓解梯度消失问题。

  2. 训练加速:辅助分类器提供了一个额外的监督信号,使得网络在训练初期就能得到关于中间层特征质量的反馈,有助于网络更快地学习到有意义的特征,加速训练过程。

细节

  1. 位置与结构:在Inception V1中,辅助分类器通常放置在网络较深的位置,例如在Inception(4a)模块之后。这些辅助分类器通常包括全局平均池化(Global Average Pooling, GAP)层,用于将特征图转换成固定长度的向量,随后是若干全连接层(也称为密集连接层),最终通过一个Softmax层输出分类概率。

  2. 权重分配:辅助分类器的输出通常会以一个小的权重(例如0.3)加入到最终的损失函数中。这样做是为了确保主分类器仍然是训练的主要目标,而辅助分类器则作为一个辅助性的指导,避免它们过度主导训练过程。

  3. 功能与输出:辅助分类器不仅有助于梯度流,还能评估网络中间层的特征表示能力。它们的输出虽然也是对图像类别的预测,但精度通常低于最终的分类器,因为它们基于相对较低级别的特征。

  4. 训练与测试阶段:在训练阶段,辅助分类器积极参与模型的训练过程;而在实际部署或测试阶段,为了减少推理时间,通常会移除这些辅助分类器,仅使用主分类器进行预测。

  5. 优化与调整:辅助分类器的设计(如位置、结构、权重分配等)可以根据具体任务和网络架构进行调整。后续的Inception版本(如Inception V3)虽然也可能包含辅助分类器,但设计细节可能有所不同,比如可能减少辅助分类器的数量或调整其结构以进一步优化性能。

总之,辅助分类器是GoogLeNet设计中的一项创新,它通过在深度网络中引入中间监督,提高了训练的效率和稳定性,同时也为深层网络的训练提供了一种实用的解决方案。

下图蓝框中的是一个辅助分类器,目的是为了进行梯度注入防止梯度消失。

2. pytorch模型复现

待更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/784664.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实用性提升百分之一百!!!【ONLYOFFICE 8.1版本】全方位深度性能测评

目录 【ONLYOFFICE 8.1 版本】全方位深度性能测评 一、界面与用户体验 二、文字处理功能 表格处理功能 演示文稿功能 协作与共享功能 性能与稳定性 总结 【ONLYOFFICE 8.1 版本】全方位深度性能测评 在当今数字化办公的时代,办公软件的选择对于提高工作效率和…

【HTML入门】第四课 - 换行、分割横线和html的注释

这一小节,我们继续说HTML的入门知识,包括换行、横线分割以及注释(html的注释)。 目录 1 换行 2 分割横线 3 html注释 1 换行 html中分为块元素和行内元素。这一小节呢,先不说这些元素们,我们先说一下换…

安装Gradle

官网文档 https://gradle.org/ 腾讯下载镜像:https://mirrors.cloud.tencent.com/gradle/ 文档:https://docs.gradle.org/current/userguide/userguide.html 命令行文档:https://docs.gradle.org/current/userguide/command_line_interface.…

Python提取视频文案

Python提取视频文案 1、背景描述2、视频转音频3、音频转文字 1、背景描述 在多媒体应用中,视频是一个信息量巨大的载体。然而,有时我们需要从视频中提取语音并转换为文本,以用于文本分析和机器学习训练 其中主要涉及到两个过程:视…

String类(STL开始)

相信大家都知道STL在C中的重要性,作为其模板库中的一部分,包含了常见的数据结构和算法,是C的标准库 而我们今天要讲的String类(String底层是一个字符顺序数组的顺序表对象,可以归类为容器),其实…

MySQL安装时initializing database失败

问题页面: 解决方法: 1.勾选红框中的选项: 2.将下图红框中全部改为英文: 然后一路next就可以了。

洛谷 P3613 学习用map代替大大大数组的好题

题目链接:P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目截图: 题意分析: 非常简单的存入和取出操作 唯一的 “难点” 在于 数组开不到 a[100007][100007],会暴内存 非常巧妙的引入 map 来解决…

广州银行多份招股书数据货不对板:内控风险难平,IPO曲折前行

作者|芋圆 来源|贝多财经 6月29日,广州银行第五次更新了招股说明书。 作为制造业大省的头部城商行,广州银行的发展一直备受关注。拆解可知,广州银行2023年在盈利能力、内控、资本充足性、资产质量等方面的表现,凸显了该行接下来…

Linux三剑客(grep、awk和sed)操作及与管道结合使用

1. 总览 grep、sed和awk被称为Linux三剑客,是因为它们在文本处理和数据操作方面极其强大且常用。 Linux三剑客在文件处理中的作用: grep(数据查找定位):文本搜索工具,在文件中搜索符合正则表达式的文本内容…

小阿轩yx-Haproxy搭建Web群集

小阿轩yx-Haproxy搭建Web群集 Haproxy 简介 提供高可用性 能做出标准的负载均衡 支持虚拟主机 具备健康检查能力 能用于各式各样的代理 轻量级代理环境 解决方案优势 免费 快速 可靠 特性 特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或…

明明已经安装了python中的某个库,但是还是报错ModuleNotFoundError: No module named ‘sklearn‘

问题: 明明已经安装了python中的某个库,但是还是报错ModuleNotFoundError: No module named sklearn 解决方法: 卸载重新安装一下即可 pip uninstall scikit-learn pip install scikit-learn 成功解决!!&#xff…

高创新 | CEEMDAN-VMD-GRU-Attention双重分解+门控循环单元+注意力机制多元时间序列预测

目录 效果一览基本介绍模型设计程序设计参考资料 效果一览 基本介绍 高创新 | CEEMDAN-VMD-GRU-Attention双重分解门控循环单元注意力机制多元时间序列预测 本文提出一种基于CEEMDAN 的二次分解方法,通过样本熵重构CEEMDAN 分解后的序列,复杂序列通过VMD…

【Threejs进阶教程-着色器篇】1. Shader入门(ShadertoyShader和ThreejsShader入门)

ThreejsShader入门 关于本Shader教程认识ShaderShader和Threejs的关系WebGLShaderThreejsShaderShadertoyShader其他Shader 再次劝退数学不好的人从ShaderToy开始Shader的代码是强类型glsl的类型,变量,内置函数,关键字关于uv基于UV的颜色处理…

PCL 点云FPFH特征描述子

点云FPFH特征描述子 一、概述1.1 FPFH概念1.2 基本原理1.3 PFH和FPFH的区别二、代码实现三、结果示例一、概述 1.1 FPFH概念 快速点特征直方图(FPFH)描述子:计算 PFH 特征的效率其实是十分低的,这样的算法复杂度无法实现实时或接近实时的应用。因此,这篇文章将介绍 PFH 的简…

【java web 01】3小时快速学习前端知识(收藏备用)

3小时快速学习前端知识【全栈专用】 一、教程简介1.1 Java 开发为何学Web技术1.2 课程设计1.3 课前准备 二、HTML2.1 Html简介2.1.1 HTML、CSS、JS分别有什么作用2.1.2 什么是HTML2.1.3 什么是标记语言 2.2 Hello,Html2.2.1 HTML基础结构2.2.2 专业词汇2.2.3 语法细…

面试经典150题

合并两个有序数组 两个按非递减顺序排列的整数数组nums1和nums,另有两个整数m和n,分别表示nums1和nums2中的元素数组。 请合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。 直接合并后排序 class Solution { public:void merge(…

解码Python字符串:‘r‘、‘b‘、‘u‘和‘f‘前缀的全面指南

📖 正文 1 字符串前加’r’ 表示原始字符串,消除转义 print(abc\nde) # abc # deprint(rabc\nde) # abc\nde在下面这个列子中,如果不在路径字符串前面加r那么,路径中的空格就会出现问题 print(rD:\01 programming\09python\py…

【ARM系列】GIC600AE功能安全

GIC600AE功能安全 1.GIC600AE主要安全机制分布图:2.Fault Management Unit1.GIC block的错误如何上报到FMU?2.汇总到FMU的错误如何上报?3.Error Record format4.Safety Mechanism GIC600AE在原GIC600版本基础上增加了FuSa功能,所增…

RIP环境下的MGRE网络

首先将LSP的IP地址进行配置 其他端口也进行同样的配置 将serial3/0/1配置25.0.0.2 24 将serial4/0/0配置35.0.0.2 24 将GE0/0/0配置45.0.0.2 24 进行第二步 R1与R5之间使用ppp的pap认证 在R5中进行配置 在aaa空间中创建账号和密码 将这个账号和密码使用在ppp协议中 然后…