CNN——GoogLeNet

news2024/11/17 7:27:54

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结构如左图。去掉了所有的辅助分类器,输入大小同样的为299×299×3。

        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性能接近,且由于参数更多,模型更复杂后两者优于前两者

       

​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务下多模块拆分,公用类调用与模块隔离性怎么兼得呢

前言 在一个微服务项目中,为了追求低耦合,会根据业务板块对主系统进行切分为一个个子模块,模块间相互隔离,但是这样子就会导致一个问题:对于一些在多个子模块中都适用的配置类、工具类、封装类等都需要拷贝冗余到各个模…

大数据本地环境搭建-Linux基础环境搭建

1.安装VMware 下载 VMware Workstation Pro | CN 2.配置虚拟网卡 3.Windows网络配置 4.安装centos7.9 Download (centos.org) 4.1 新建虚拟机 如果开机的时候电脑蓝屏使用WindowsR输入optionalfeatures 打开启用或关闭Windows功能->勾选打开以下两项 重启 继续安装ce…

静态网页设计——滑板官网(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频:https://www.bilibili.com/video/BV1Cw411u7hj/?vd_source5f425e0074a7f92921f53ab87712357b 源码:https://space.bilibili.com…

LeetCode 2807.在链表中插入最大公约数

【LetMeFly】2807.在链表中插入最大公约数 力扣题目链接:https://leetcode.cn/problems/insert-greatest-common-divisors-in-linked-list/ 给你一个链表的头 head ,每个结点包含一个整数值。 在相邻结点之间,请你插入一个新的结点&#x…

Kafka集群部署 (KRaft模式集群)

KRaft 模式是 Kafka 在 3.0 版本中引入的新模式。KRaft 模式使用了 Raft 共识算法来管理 Kafka 集群元数据。Raft 算法是一种分布式共识算法,具有高可用性、可扩展性和安全性等优势。 在 KRaft 模式下,Kafka 集群中的每个 Broker 都具有和 Zookeeper 类…

Springboot3(一、lambda、::的应用)

文章目录 一、使用lambda简化实例创建1.语法:2.示例:3.Function包3.1 有入参,有返回值【多功能函数】3.2 有入参,无返回值【消费者】3.3 无入参,有返回值【提供者】3.4 无入参,无返回值 二、类::方法的使用…

centos7上升级mysql8.0.21到mysql8.0.35版本

1、下载安装包 cd /home/soft/mysql8.0.35 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.35-1.el7.x86_64.rpm-bundle.tar 2、解压压缩包 3、停止掉mysqld服务 systemctl stop mysqld 4、强制安装新的版本包 rpm -ivh mysql-community-common-8.0.35-1.el…

富士康注资21亿元河南成立电动车公司 | 百能云芯

富士康在河南注册成立富士康新能源汽车产业发展有限公司,注册资本达人民币5亿元,展现了其在电动车产业的持续布局。这一全资子公司将致力于从事汽车零部件及配件制造、电机制造、新材料技术研发、新能源汽车整车销售等业务。作为鸿海集团的全资子公司&am…

基于Jackson封装的JSON、Properties、XML、YAML 相互转换的通用方法

文章目录 一、概述二、思路三、实现四、测试 一、概述 我们在 yaml转换成JSON、MAP、Properties 通过引入 实现了JSON、Properties、XML、YAML文件的相互转换,具体封装的类、方法如下: 上面的实现,定义了多个类、多个方法,使用…

FlinkAPI开发之数据合流

案例用到的测试数据请参考文章: Flink自定义Source模拟数据流 原文链接:https://blog.csdn.net/m0_52606060/article/details/135436048 概述 在实际应用中,我们经常会遇到来源不同的多条流,需要将它们的数据进行联合处理。所以…

关于程序员技术方面的一些思考

公司用的技术栈是 SpringBootVue,刚开始让我做的是后端开发,对一些简单的页面的 CRUD 进行开发。因为在学校自学的是 Java,而研发部门里面后端比较多,所以后端的活不缺人,领导建议我学学 Vue,分担一下前端的…

iOS 应用上架指南:资料填写及提交审核

摘要 本文提供了iOS新站上架资料填写及提交审核的详细指南,包括创建应用、资料填写-综合、资料填写-IOS App和提交审核等步骤。通过本指南,您将了解到如何填写正确的资料,并顺利通过苹果公司的审核。 引言 在开发iOS应用后,将其…

Pytorch从零开始实战16

Pytorch从零开始实战——ResNeXt-50算法的思考 本系列来源于365天深度学习训练营 原作者K同学 对于上次ResNeXt-50算法,我们同样有基于TensorFlow的实现。具体代码如下。 引入头文件 import numpy as np from tensorflow.keras.preprocessing.image import Ima…

传统 VC 机构,是否还能在 Fair launch 的散户牛市中胜出?

LaunchPad 是代币面向市场的重要一环,将代币推向市场,加密项目将能够通过代币的销售从市场上募集资金,同时生态也开始进入全新的发展阶段。而对于投资者来说,早期打新市场同样充满着机会,参与 LaunchPad 对于每一个投资…

通过iFrame嵌入Grafana页面或pannel

前言 在当前数据驱动的时代,有效地可视化和监控关键性能指标变得至关重要。Grafana,作为一个开源的监控解决方案,提供了强大的功能来呈现和分析数据,从而帮助用户及时洞察和响应各种情况。随着技术的不断发展,将这些信…

TOWE 65W智能快充插线板为家庭用电保驾护航

随着家用电器在人们生活中的普及,在给人们带来便利的同时,其安全性也日益引起人们的重视。延长线插座作为固定插座的补充,因其可移动、携带方便、灵活性强而成为家居和办公中不可或缺的用品。一般普通的塑料插排插座受额定电流和额定功率的影…

Unity 了解Input Manage下默认的输入轴

在Unity菜单Edit->Project Settings->Input Manager->Axes下有一些默认的输入轴,如 这些输入轴代表不同类型的输入,其中: Horizontal:水平移动输入轴。通常与键盘的左右箭头键、A和D键、游戏手柄的左摇杆水平轴等相关联…

经典目标检测YOLO系列(二)YOLOv2算法详解

经典目标检测YOLO系列(二)YOLOv2算法详解 YOLO-V1以完全端到端的模式实现达到实时水平的目标检测。但是,YOLO-V1为追求速度而牺牲了部分检测精度,在检测速度广受赞誉的同时,其检测精度也饱受诟病。正是由于这个原因,YOLO团队在20…

从零学Java 集合概述

Java 集合概述 文章目录 Java 集合概述1 什么是集合?2 Collection体系集合2.1 Collection父接口2.1.1 常用方法2.1.2 Iterator 接口 1 什么是集合? 概念:对象的容器,定义了对多个对象进行操作的常用方法;可实现数组的功能。 和数组区别&…

基于深度学习的果蔬检测识别系统(含UI界面、yolov5、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov5 yolov5主要包含以下几种创新:         1. 添加注意力机制(SE、CBAM、CA等)         2. 修改可变形卷积(DySnake-主…