当前位置: 首页 > news >正文

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模型复现

待更新

相关文章:

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

1.1 简介 GoogLeNet(有时也称为GoogleNet或Inception Net)是一种深度学习架构,由Google的研究团队在2014年提出,主要设计者为Christian Szegedy等人。这个模型是在当年的ImageNet大规模视觉识别挑战赛(ILSVRC&#xf…...

clickhouse高可用可拓展部署

clickhouse高可用&可拓展部署 1.部署架构 1.1高可用架构 1.2硬件资源 部署服务 节点名称 节点ip 核数 内存 磁盘 zookeeper zk-01 / 4c 8G 100G zk-02 / 4c 8G 100G zk-03 / 4c 8G 100G clikehouse ck-01 / 32c 128G 2T ck-02 / 32c 128G 2T ck-03 / 32c 128G 2T ck-04 /…...

QT中QDomDocument读写XML文件

一、XML文件 <?xml version"1.0" encoding"UTF-8"?> <Begin><Type name"zhangsan"><sex>boy</sex><school>Chengdu</school><age>18</age><special>handsome</special>&l…...

sql盲注

文章目录 布尔盲注时间盲注 布尔盲注 介绍&#xff1a;在网页只给你两种回显的时候是用&#xff0c;类似于布尔类型的数据&#xff0c;1表示正确&#xff0c;0表示错误。 特点&#xff1a;思路简单&#xff0c;步骤繁琐且麻烦。 核心函数&#xff1a; length()函数substr()函…...

星网安全产品线成立 引领卫星互联网解决方案创新

2024年6月12日&#xff0c;盛邦安全&#xff08;688651&#xff09;成立星网安全产品线&#xff0c;这是公司宣布全面进入以场景化安全、网络空间地图和卫星互联网安全三大核心能力驱动的战略2.0时代业务落地的重要举措。 卫星互联网技术的快速发展&#xff0c;正将其塑造为全球…...

Adam自适应动量优化算法

Adam&#xff08;Adaptive Moment Estimation&#xff09;是一种结合了动量法和自适应学习率思想的优化算法&#xff0c;特别适用于训练神经网络和深度学习模型。以下是对Adam调整学习率的详细介绍及具体例子。 一、Adam调整学习率介绍 自适应学习率&#xff1a; Adam算法的核…...

Mac OS系统中Beyond Compare 4破解方式

文章出处 https://blog.csdn.net/qq_42418042/article/details/137544113 前言 记录实操过程&#xff0c;以防以后找不到了~ 实际原理是启动时删除文件&#xff0c;实现无限试用 实操过程 下载安装包 官网链接 https://www.scootersoftware.com/download.php 解压、移动到应…...

6000元最好的家用投影仪:当贝X5S Pro六千元配置最高画质最强

数码家电品牌发展迅速&#xff0c;投影同样也是一种更新迭代较快的产品类型&#xff0c;有时候去年还比较火的产品&#xff0c;今年就会被别的产品取代&#xff0c;就比如之前灯泡投影一直被认为是好产品的代表&#xff0c;但是现在国产激光投影的销量反而更高。一般来说6000元…...

#### golang中【堆】的使用及底层 ####

声明&#xff0c;本文部分内容摘自&#xff1a; Go: 深入理解堆实现及应用-腾讯云开发者社区-腾讯云 数组实现堆 | WXue 堆&#xff08;Heap&#xff09;是实现优先队列的数据结构&#xff0c;Go提供了接口和方法来操作堆。 应用 package mainimport ("container/heap&q…...

OpenAI Gym Atari on Windows

题意&#xff1a;在Windows系统上使用OpenAI Gym的Atari环境 问题背景&#xff1a; Im having issues installing OpenAI Gym Atari environment on Windows 10. I have successfully installed and used OpenAI Gym already on the same system. It keeps tripping up when t…...

Java进阶----接口interface

接口 接口概述 接口是一种规范&#xff0c;使用接口就代表着要在程序中制定规范. 制定规范可以给不同类型的事物定义功能&#xff0c;例如&#xff1a; 利用接口&#xff0c;给飞机、小鸟制定飞行规范&#xff0c;让其都具备飞行的功能&#xff1b;利用接口&#xff0c;给鼠…...

【网络协议】ISIS

ISIS IS-IS&#xff08;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff09;协议是一种用于在自治系统&#xff08;AS&#xff09;内部进行路由选择的链路状态路由协议。它最初是为OSI&#xff08;开放系统互连&#xff09;网络设计的&…...

一.4 处理器读并解释储存在内存中的指令

此刻&#xff0c;hello.c源程序已经被编译系统翻译成了可执行目标文件hello&#xff0c;并被存放在硬盘上。要想在Unix系统上运行该可执行文件&#xff0c;我们将它的文件名输入到称为shell的应用程序中&#xff1a; linux>./hello hello, world linux> shell是一个命令…...

【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?

文章目录 卡顿一、可重现的卡顿二、不可重现的卡顿第一种方案: 基于 Looper 的监控方法第二种方案:基于 Choreographer 的监控方法第三种方案:字节码插桩方式第四种方案: 使用 JVMTI 监听函数进入与退出总结相关大厂的方案ArgusAPMBlockCanaryQQ空间卡慢组件Matrix微信广研参…...

C语言7 控制语句

目录 1. 条件语句 if 语句 if-else 语句 if-else if-else 语句 switch 语句 2. 循环语句 for 循环 while 循环 do-while 循环 3. 跳转语句 break 语句 continue 语句 return 语句 goto 语句 1. 条件语句 if 语句 if语句根据给定条件的真或假来决定是否执行某段…...

go mod 依赖管理补充2

依赖包的版本问题&#xff0c;别的开发语言有没有类似的问题&#xff1f;是怎么解决的&#xff1f; 举例&#xff1a;java java的依赖包的版本问题&#xff0c;通过Maven模块来操作&#xff0c;可以指定依赖包版本号&#xff0c;如下&#xff1a; go.mod 文件 go.mod文件是G…...

【Git】取消追踪多个文件或目录

文章目录 场景方法1. 添加到 .gitignore2. 从暂存区移除 示例1. 编辑 .gitignore 文件2. 从暂存区移除文件或目录 场景 清理&#xff1a;不再希望某些文件被 Git 追踪。配置忽略文件&#xff1a;通常配合 .gitignore 文件使用&#xff0c;以便以后这些文件不会被重新添加到索引…...

【Linux详解】进程等待 | 非阻塞轮询

引入&#xff1a; 为什么&#xff1f;是什么&#xff1f;怎么办 是什么&#xff1f; 进程等待是指父进程暂停自己的执行&#xff0c;直到某个特定的子进程结束或发生某些特定的事件。 为什么&#xff1f; 僵尸进程刀枪不入&#xff0c;不可被杀死&#xff0c;存在内存泄露…...

聊一下Maven打包的问题(jar要发布)

文章目录 一、问题和现象二、解决方法&#xff08;1&#xff09;方法一、maven-jar-pluginmaven-dependency-plugin&#xff08;2&#xff09;方法二、maven-assembly-plugin 一、问题和现象 现在的开发一直都是用spring boot&#xff0c;突然有一天&#xff0c;要自己开发一个…...

JavaScript中,正则表达式所涉及的api,解析、实例和总结

JS中正则的api包括以下&#xff1a; String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec 1. String#search 查找输入串中第一个匹配正则的index&#xff0c;如果没有匹配的则返回-1。g修饰符对结果无影响 var string "abbbcbc"; var r…...

【计算机】同步/异步

同步/异步 在计算机科学和编程中&#xff0c;“同步”&#xff08;Synchronization&#xff09;是一种机制&#xff0c;用于协调不同进程或线程之间的操作&#xff0c;以避免竞态条件&#xff08;race conditions&#xff09;、死锁&#xff08;deadlocks&#xff09;和其他并…...

谈大语言模型动态思维流程编排

尽管大语言模型已经呈现出了强大的威力&#xff0c;但是如何让它完美地完成一个大的问题&#xff0c;仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示&#xff08;Prompt&#xff09;。对于一个复杂的应用场景&#xff0c;编写一套完整的&#xff0c;准确无误的提示&am…...

工厂自动化相关设备工业一体机起到什么作用?

在当今的制造业领域&#xff0c;工厂自动化已成为提高生产效率、保证产品质量和降低成本的关键。在这一进程中&#xff0c;工业一体机作为一种重要的设备&#xff0c;发挥着不可或缺的作用。 工业一体机是自动化生产线上的控制中心。它能够整合和处理来自各个传感器、执行器和其…...

哈佛大学 || 概念空间中学习动态的涌现:探索隐藏能力

获取本文论文原文PDF&#xff0c;请在公众号【AI论文解读】留言&#xff1a;论文解读 今天主要看一个问题&#xff1a;在模型中的学习动态是如何涌现的。 在现代生成模型的研究与应用中&#xff0c;不断发现这些模型在处理训练数据时展现出了惊人的能力&#xff0c;这些能力很…...

Dockerfile打包部署常用操作

文章目录 1、Dockerfile部署java程序&#xff08;jar包&#xff09;1.1、创建Dockerfile1.2、将Dockerfile和要上传的jar包放到一个目录下&#xff0c;构建镜像1.3、创建启动容器 2、Dockerfile部署vue2.1、创建dockerfile文件2.2、将打包的dist文件放到dockerfile同文件目录下…...

ArcGIS:探索地理信息系统的强大功能与实际应用

ArcGIS是一款功能强大的地理信息系统&#xff08;GIS&#xff09;软件&#xff0c;由Esri公司开发。它广泛应用于各个领域&#xff0c;包括城市规划、环境保护、资源管理、交通运输等。作为一名长期使用ArcGIS的用户&#xff0c;我深感这款软件在数据分析、地图制作和空间信息管…...

Python 全栈体系【三阶】(二)

第一章 Django 五、模板 1. 概述 Django中的模板是指可以动态生成任何基于文本格式文件的技术&#xff08;如HTML、CSS等&#xff09;。 Django中内置了自己的模板系统&#xff0c;称为DTL(Django Template Language), Django模板语言。 2. 配置 settings.py中关于模板的…...

【VUE】 深入理解 Vue 动态路由:简介、实际开发场景与代码示例

深入理解 Vue 动态路由&#xff1a;简介、实际开发场景与代码示例 Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;它拥有丰富的生态系统&#xff0c;其中 Vue Router 是其官方的路由管理库。动态路由是 Vue Router 的一个强大特性&#xff0c;允许我们在应用运行时根…...

Linux x86_64平台指令替换函数 text_poke_smp/bp

文章目录 前言一、text_poke_early1.1 text_poke_early简介1.2 用途 二、text_poke_smp2.1 简介2.1.1 text_poke_smp函数2.2.2 stop_machine_text_poke简介2.2.3 text_poke函数 2.2 用途 三、text_poke_smp 内核hook 前言 Linux x86_64平台指令替换函数有两种类型&#xff1a;…...

海南云亿商务咨询有限公司口碑怎么样?

在数字化浪潮席卷全球的今天&#xff0c;电商行业正以前所未有的速度发展。抖音作为短视频领域的佼佼者&#xff0c;其电商功能更是为众多品牌和企业打开了全新的销售渠道。海南云亿商务咨询有限公司&#xff0c;作为抖音电商服务领域的佼佼者&#xff0c;正以其专业的服务和创…...