CNN——GoogLeNet

1.GoogLeNet简介

        GoogLeNet是谷歌推出的基于Inception模块深度卷积神经网络结构。L和N大写还是为了致敬LeNet。在随后的两年中一直在改进,形成了Inception V2、Inception V3、Inception V4等版本。GoogLeNet(Inception-V1),在ImageNet 2014年图像分类竞赛以top-5误差6.7%获得冠军(亚军为VGG)。

        一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,但一味地增加,会带来诸多问题:
1)参数太多,如果训练数据集有限,很容易产生过拟合;
2)网络越大、参数越多,计算复杂度越大,难以应用;
3)网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
        VGG虽然效果不错但参数量太大了,Inception希望在增加网络深度和宽度的同时减少参数,为了减少参数,自然就想到将全连接变成稀疏连接。Inception模块对传统的串行堆叠CNN充分分解、解耦,引入并行结构和不同尺寸的卷积核,对视觉信息多尺度并行分开处理再融合汇总。 

2.Inception-V1

         论文地址:Going Deeper with Convolutions (arxiv.org)

2.1 Inception-V1模块

        如同VGG一样,网络特征提取部分主要有多个的Inception模块所组成。原生的Inception模块如下,对于输入将1×1,3×3,5×5卷积和池化全部都用上各自分别处理得到不同尺度下的特征图,并使他们得到相同大小的尺寸,最终再堆叠在一起

  1. 1x1卷积核:适用于捕获的微小的局部信息和纹理特征

  2. 3x3卷积核:适用于捕获的局部信息和纹理特征。

  3. 5x5卷积核:更大的卷积核能够捕获更广范围的特征,对于较大的结构或模式有更好的感知能力。虽然5x5卷积核相对于3x3来说计算开销更大,但它能够更好地捕获图像中更广泛的特征。

  4. 池化操作:通过最大池化或平均池化,可以在一定程度上保留重要特征并减小特征图的尺寸。

为了使不同的操作得到相同大小的尺寸,参数如下

  • 1×1卷积核,padding=0,stride=1
  • 3×3卷积核,padding=1,stride=1
  • 5×5卷积核,padding=2,stride=1

        但是这个结构存在很多问题,是不能够直接使用的。首要问题就是参数太多,计算量太大,特征图厚度太大即通道数太多,越往后随着通道数增加这种情况会愈发严重。为了解决这个问题,作者在其中加入了1X1的卷积核,先降低维度减少通道数,改进后的Inception结构如下图

                

1×1卷积核想法来源于《NetWork in NetWork》一文,它在这里的作用如下:

  • 降维,减少参数量和运算量
  • 增加模型深度,提高非线性表达能力,因为1×1卷积会多一次激活

2.2 辅助分类器

        为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(辅助分类器)。辅助分类器是将中间某一层的输出用作分类,并按一个较小的权重(0.3)加到最终分类结果中,这样相当于做了模型融合,同时给网络增加了反向传播的梯度信号,也提供了额外的正则化,对于整个网络的训练不仅提高了模型的准确性还极大的减少了参数的数量。

                                ​​​​​​​        

两个辅助分类器的输入分别来自Inception(4a)和Inception(4d)。

  • 辅助分类器的第一层是一个平均池化下采样层,池化核大小为5x5,stride=3
  • 第二层是卷积层,卷积核大小为1x1,stride=1,卷积核个数是128
  • 第三层是全连接层,节点个数是1024
  • 0.7的dropout
  • 第四层是全连接层,节点个数是1000(对应分类的类别个数)

2.3 全局平均池化

        在特征提取完后不再简单使用Flatten而是使用全局平均池化

2.4 整个网络的结构

2.5 Inception-V1在Pytorch中使用

GoogLeNet — Torchvision 0.16 documentation (pytorch.org)

        比起前面的LeNet,AlexNet,VGG等,Inception搭建起来比较麻烦,推荐使用Pytorch官方实现的,还附带在ImageNet上的预训练权重。与原论文有一小点点不同

model = models.googlenet()
# model = models.googlenet(weights='DEFAULT')
print(model)

        卷积后使用了batch-normalization批量归一化,可以加快收敛速度

        辅助分类器第一层使用的是最大池化而不是平均池化

        此外最后全局的dropout概率是0.2而不是0.4

3.Inception-V2,V3

        Inception-V2,V3来自同一篇论文Rethinking the Inception Architecture for Computer Vision (arxiv.org)

        nception V2再达到Inception V1的准确率时快了14倍,并且模型在收敛时准确率的上限更高

3.1 卷积分解

        Inception-V2有四种不同的模块,均降低了计算量与参数和更多的非线性变换

1.Modele A

        在Inception-V1的基础上使用2个3×3卷积代替一个5×5卷积,来源于VGG

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        改进后的Inception模块如下

        ​​​​​​​        ​​​​​​​                

2. Modele B

        将对称的conv计算分解为非对称的conv计算,空间可分离卷积

        ​​​​​​​        ​​​​​​​                        ​​​​​​​

3.Module C

       扩增通道数。作者在实际中发现这种结构不适合较早的层,这一个结构在最后面

        

4.Grid Size Reduction

        不再直接使用max pooling层进行下采样,因为这样导致信息损失较大。一个可行方案是先进行卷积增加特征channel数量,然后进行pooling,但是计算量较大。所以作者设计了另外一种方案,即两个并行的分支,如图11 所示,一个是pooling层,另外一个卷积层,最后将两者结果concat在一起。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​ 

3.2 去除了浅层的辅助分类器

        作者发现辅助分类器并没有更快的帮助模型收敛,否定了之前的结论,而且删掉第一个辅助分类器对网络没什么影响

3.3 去除LRN

        VGG论文已经提出这个东西用处不大

3.4 引入BN

        卷积后批量归一化

3.5 整个网络结构

2.6 InceptionV3 

Inception v3 整合了前面 Inception v2 中提到的所有升级,还使用了:

  • RMSProp 优化器;
  • Factorized 7x7 卷积;
  • 辅助分类器使用了 BN;
  • 标签平滑(添加到损失公式的一种正则化项,旨在阻止网络对某一类别过分自信,即阻止过拟合)。

模型是一样的

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​

2.7 InceptionV3 在Pytorch中使用

model = models.inception_v3()
print(model)

         注意InceptionV3输入尺寸是299×299

4.InceptionV4,Inception -ResNet

        Inception v4 和 Inception -ResNet 在同一篇论文中提出https://arxiv.org/abs/1602.07261 Inception -ResNet使用了ResNet提出的残差连接,

1.Inception-v4

         Inception-v4整个网络结构如下,使用了三种不同的InceptionA,B,C和两种下采样模块,其中Stem结构如左图

        Inception-A

        ​​​​​​​        ​​​​​​​                

        Inception-B

        ​​​​​​​        ​​​​​​​                        

        Inception-C

        ​​​​​​​        ​​​​​​​        ​​​​​​​                

        Reduction-A

        ​​​​​​​        ​​​​​​​        ​​​​​​​                

        Reduction-B

2.Inception -ResNet-V1

       整体网络结构如如左图,stem部分如右图

        Inception-resnet-A 

        ​​​​​​​        ​​​​​​​                 

        Inception-resnet-B

        ​​​​​​​                                

        Inception-resnet-C

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

                Reduction-A

        ​​​​​​​        ​​​​​​​        ​​​​​​​                

                Reduction-B

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

3.Inception -ResNet-V2

        Inception -ResNet-V2网络结构和V1是一样的,V2参数更多

        Inception-resnet-A 

        ​​​​​​​        ​​​​​​​        

        Inception-resnet-B

        ​​​​​​​        ​​​​​​​                

        Inception-resnet-C

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

         Reduction-A

        ​​​​​​​        ​​​​​​​        ​​​​​​​        

         Reduction-B

        ​​​​​​​        ​​​​​​​                

4.Reduction-A参数取值

        对于V4,ResV1,ResV2他们的Reduction-A结构是一样的,但是几个卷积的通道数参数是不一样的

        ​​​​​​​        ​​​​​​​        

5.针对深网络结构设计的衰减因子

        文中指出如果卷积核的数量超过 1000,则网络架构更深层的残差单元将导致网络崩溃。即使使用更小的学习率和额外的bn也无法解决。因此,为了增加稳定性,作者通过 0.1 的比例缩放残差激活值,在下图中的Activation Scaling。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

6.性能

        1.带残差连接的Inception收敛速度会更快,最终精度差不多,带残差会略微高出一点点

        2.Inception-V3和Inception-ResNet-V1性能接近,Inception-V4和Inception-ResNet-V2性能接近,且由于参数更多,模型更复杂后两者优于前两者

       

​​​​​​​

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

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

相关文章

鸿蒙学习笔记

DevEco Studio, ArkTS, ArkUI, ArkCompiler, DevEco Testing是啥 DevEco Studio是华为开发的一款集成开发环境(IDE),用于开发基于华为鸿蒙操作系统(HarmonyOS)的应用程序。它提供了丰富的开发工具和功能,包…

武汉灰京文化:技术先锋辐射游戏行业,带来全新体验乐趣无穷!

科技的持续演进,给游戏产业打了强心剂,让这个领域变得前所未有的越来越好玩儿。今天我们将深入探讨如何利用虚拟现实(VR)和增强现实(AR)技术,让你玩得开心,玩得尽兴。 想象一下&…

在pycharm中jupyter连接上了以后显示无此库,但是确实已经安装好了某个库,使用python可以跑,但是使用ipython就跑不了

今天遇到一个事情,就是用pycharm的jupyter时,连接不上,后来手动连接上了以后,发现环境好像不对。 一般来说,这里会是python3,所以里面的环境也是普通python的环境,并没有我下载的库,…

计算机毕业设计-----SSM餐厅点餐收银管理系统

项目介绍 用于餐厅的收银管理系统,包含了四个模块 1.桌位模块 桌位模块主要是用于管理桌位的模块,包括点菜到结账的流程 将桌位人数设置为0可以滞空当前桌位 2.账单模块 账单模块记录了每一天的帐单汇总,同时提供了年月日账单的统计&#x…

mysql之CRUD和常见函数和UNION 和 UNION ALL

mysql之CRUD和常见函数和UNION 和 UNION ALL 一.CRUD1.创建(Create) - 插入数据2.读取(Read) - 查询数据3.更新(Update) - 修改数据4.删除(Delete) - 删除数据 二.函数1.字符串函数&…

二刷Laravel 教程(构建页面)总结Ⅰ

L01 Laravel 教程 - Web 开发实战入门 ( Laravel 9.x ) 一、功能 1.会话控制(登录、退出、记住我) 2.用户功能(注册、用户激活、密码重设、邮件发送、个人中心、用户列表、用户删除) 3.静态页面(首页、关于、帮助&am…

五、Spring AOP面向切面编程(基于XML方式实现)

本章概要 Spring AOP基于XML方式实现(了解)Spring AOP对获取Bean的影响理解 根据类型装配 bean使用总结 5.6 Spring AOP基于XML方式实现(了解) 准备工作 加入依赖 <!-- spring-aspects会帮我们传递过来aspectjweaver --> <dependency><groupId>org.spr…

Langchain模板-LangChainTemplates 讲解及应用

langchain官方链接&#xff1a;https://github.com/langchain-ai/langchain/tree/master/templates 其他相关链接&#xff1a; https://python.langchain.com/docs/templates https://templates.langchain.com/ Langchain模板&#xff0c;提供一系列的易于部署的参考架构&a…

基于 Python+Django 技术栈,我开发了一款视频管理系统

学习过程中&#xff0c;遇到问题可以咨询作者 大家好&#xff0c;作为一名开发人员&#xff0c;平时比较愿意动手尝试各种有意思工具&#xff0c;因为笔者非常喜欢观看视频&#xff0c;尤其是YouTube、bilibili都是笔者非常喜欢的视频网站&#xff0c;所以想自己实现一个视频点…

Java/JDK下载安装与环境配置

Java由Sun Microsystems&#xff08;现在是Oracle的子公司&#xff09;于1995年首次发布。它是一种面向对象的编程语言&#xff0c;广泛应用于Web开发、移动应用程序开发、桌面应用程序开发和企业级应用程序开发等领域。 Java语言的主要特点是跨平台、可移植性强、安全性高和具…

代码随想录-刷题第四十八天

198. 打家劫舍 题目链接&#xff1a;198. 打家劫舍 思路&#xff1a;当前房屋偷与不偷取决于前一个房屋和前两个房屋是否被偷了。这里就更感觉到&#xff0c;当前状态和前面状态会有一种依赖关系&#xff0c;那么这种依赖关系都是动规的递推公式。动态规划五步曲&#xff1a;…

C#编程-实现继承

C#允许您通过扩展现有类的功能以创建新类来实现继承。 从基类创建派生类 使用以下语法在C#中创建派生类: class <derived_class>:<base_class>{...}确定继承的层次结构 要确定继承层次结构,必须检查派生类与基类之间的关系种类。确保派生类是一种基类。 请考虑以…

【深度学习】SDXL tensorRT 推理

stabilityai/stable-diffusion-xl-1.0-tensorrt 项目&#xff1a;https://huggingface.co/stabilityai/stable-diffusion-xl-1.0-tensorrt TensorRT环境&#xff1a; git clone https://github.com/rajeevsrao/TensorRT.git cd TensorRT git checkout release/9.2stabilitya…

数据结构—图(上)

文章目录 12.图(上)(1).图的基本概念#1.图的基本定义#2.边的分类#3.数据结构的一些规定#4.子图#5.完全图#6.路径#7.连通性和连通分量#8.度 (2).图的存储方式#1.邻接矩阵#2.邻接表 (3).图的遍历#1.深度优先搜索(Depth First Search)i.走个迷宫ii.DFS的思想iii.代码实现 #2.广度优…

基于SSM的图书商城(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书商城&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

word2019保存后的图片变模糊了怎么办?Word 2019 默认保存后压缩变模糊的问题,解决方案

Word 2019 默认保存后压缩变模糊的问题&#xff0c;解决方案 1&#xff0c;新建word 文件&#xff0c;插入一张原始图片&#xff0c;1080*1920&#xff0c;如下图&#xff1a; 2&#xff0c;保存时&#xff0c;word 2019默认选项&#xff0c;导致word 保存后&#xff0c;图片…

MySQL-DQL

DQL是数据查询语言&#xff0c;用来查询数据库中表中的数据。 DQL语句编写顺序和执行顺序&#xff1a; 编写顺序&#xff1a;由上至下 执行顺序&#xff1a; 基本查询 1. 查询多个字段&#xff1a;SELECT 字段1,字段2,字段3... FROM 表名; 查询所有字段&#xff1a; SELECT*FR…

【C程序设计】C数组

C 语言支持数组数据结构&#xff0c;它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据&#xff0c;但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量&#xff0c;比如 runoob0、runoob1、...、runoob99&#xff0c;而…

数据结构(JS实现)

目录 链表链表的特点链表中的常见操作单链表append(data)尾部追加新节点toString()输出链表的节点数据插入节点insert(position,data)get(position)获取链表指定位置节点的数据indexOf(data)查找对应数据节点的位置update(position, newData)更新指定位置节点数据removeAt(posi…

在 wsl 中运用 kubeconfig 实现自由管理 kubernetes 集群

本文来自我的博客地址 文章目录 k8s 集群配置理解 kubeconfig思路整理:在 wsl 上安装 kubectl配置自动补全 拷贝 kubeconfig登到 k8s 集群的 master 节点, 把 kubeconfig 拷贝到 wsl测试 kubectl k8s 集群配置 IPHost配置11.0.1.150master1 (keepalivedhaproxy)2C 4G 30G11.0.…