20_Inception V3深度学习图像分类算法

news2024/10/2 1:31:34

回顾GoogleNet:传送门

1.1 介绍

InceptionV3是Google开发的一种深度卷积神经网络架构,它是Inception系列网络中的第三代模型,由Christian Szegedy等人在论文《Rethinking the Inception Architecture for Computer Vision》中提出,该论文发表于CVPR 2016。Inception系列网络设计的主要目标是在不显著增加计算复杂度的情况下提高模型的识别精度,尤其是解决深度增加与模型性能之间的平衡问题。

(inceptionV2和V3在同一篇论文中)

主要特点:

  1. 模块化设计:InceptionV3的核心是其独特的“Inception模块”,这些模块由不同大小的卷积核(如1x1, 3x3, 5x5)以及最大池化操作组成,它们并行工作,然后将输出concatenate(连接)在一起。这种设计允许网络在同一层内捕获不同尺度的特征,提高了模型的表达能力。

  2. 卷积核分解:为了减少计算成本,InceptionV3引入了卷积核的分解思想,即将大尺寸的卷积核(如5x5)分解为两个连续的小尺寸卷积核(如一个1x5接一个5x1),这样做不仅减少了参数数量,还保持了模型的性能。

  3. 1x1卷积用于降维:在应用更大尺寸卷积核之前,Inception模块先使用1x1卷积进行降维,这有助于减少计算量而不会过多损失信息,因为1x1卷积可以看作是对输入通道的线性变换。

  4. Batch Normalization(批量归一化):InceptionV3在网络中广泛使用了批量归一化技术,它加速了训练过程,提高了模型的稳定性和泛化能力。

  5. Label Smoothing:在训练过程中,InceptionV3采用了标签平滑正则化技术,通过给正确标签分配接近但不完全是1的概率,从而减少过拟合,提升模型的泛化性能。

  6. 优化器选择:相较于早期版本,InceptionV3在训练时可能采用了更先进的优化器,如RMSProp,以替代传统的随机梯度下降(SGD),这有助于更快地收敛和找到更好的局部最小值。

应用领域:

InceptionV3因其高效的特征提取能力,在图像分类、物体检测、图像分割等多个计算机视觉任务中表现优秀。它也被广泛应用于迁移学习,即在预训练的InceptionV3模型基础上,微调特定任务的数据,以利用其学到的通用视觉特征,快速提升新任务的性能。

实现与实践:

该模型可以通过多种深度学习框架(如TensorFlow、PyTorch等)轻松实现,许多框架提供了预训练的InceptionV3模型,这些模型通常在ImageNet数据集上进行了预训练,可以直接用于特征提取或作为其他视觉任务的基础模型。

1.2  改进的Inception模块

nceptionV3中的Inception模块,也称为Inception块或Inception单元,是对原始Inception模块设计的进一步发展和优化。这一模块的设计初衷是为了在保持计算资源高效的同时,增强网络的表达能力,使其能够学习到更多层次的特征。以下是InceptionV3中Inception模块的关键特点:

  1. 并行多尺度卷积: Inception模块内部包含了多个平行的卷积路径,每个路径使用不同大小的卷积核(如1x1, 3x3, 5x5)。这样的设计允许网络同时从不同尺度上捕捉特征信息,增强了模型对尺度变化的鲁棒性。

  2. 1x1卷积进行降维: 在应用较大的3x3和5x5卷积之前,Inception模块首先使用1x1卷积核进行降维。这样做的目的是减少后续卷积的计算负担,而不会显著影响模型的表达能力。1x1卷积主要用于空间维度不变但减少通道数的操作。

  3. 池化操作: 模块中还包括最大池化操作,通常使用的是3x3的最大池化,步长为1,且边缘补零以保持输出尺寸与输入一致。这有助于引入更多的空间不变性特征。

  4. 深度 wise 和点 wise 分解: 特别地,InceptionV3中广泛采用了1x1卷积进行深度wise操作(减少或维持通道数),随后跟上更大尺寸的卷积核进行空间信息的提取,这是一种有效的参数量减少策略。

  5. 组合输出: 所有这些并行路径的输出被concatenate(连接)在一起,形成一个具有丰富特征信息的输出,这一输出将作为下一个模块的输入或者在模型末端用于分类。

  6. Batch Normalization: InceptionV3中的每一个卷积层后通常都跟着Batch Normalization层,这有助于加速训练过程,减少内部协变量转移,并提高模型的泛化能力。

下图为创新的Inception模块,图左侧将V1中的5x5卷积变为两个3x3卷积(7x7卷积可用3个3x3卷积),图右侧将7x7卷积变为1x3,3x1,1x3,3x1这种不对称的卷积(同理3x3也能用1x3和3x1替代)。

第三个模块是相当于把图右侧的不对称卷积按“宽度”展开(图右侧是按深度展开),这么做是为了增加表示维度。

Module A

将5x5卷积分解为两个3x3卷积的主要目的就是减少参数量。

Module B

不对称卷积,或者叫做空间可分离卷积。

Module C

下采样模块(Grid Size Reduction)

寸),同时尽量减少信息损失和计算成本。这是深度卷积神经网络(CNN)中一个重要的环节,因为在网络的深层,通常需要减小特征图的尺寸以捕获更抽象、更高层次的特征,同时控制模型的复杂性和计算需求。

在InceptionV3中,实现Grid Size Reduction的高效方法涉及到以下几点关键设计:

  1. stride卷积和最大池化结合:传统上,减少特征图尺寸常用的方法是最大池化(Max Pooling),但这可能导致信息丢失。InceptionV3采取了一种更为精细的方法,即在某些Inception模块的输出之后,不是单独使用池化层,而是结合stride为2的卷积层和最大池化层的结果。具体来说,它可能会将一个stride为2的卷积层(例如3x3卷积)与最大池化层(如3x3,stride为2)的输出进行concatenate(连接),这样既减少了空间尺寸,又保留了更多的特征信息。

  2. 使用1x1卷积进行降维:在执行上述操作之前,Inception模块通常会先使用1x1卷积进行通道数的降维,这有助于减少后续卷积操作的计算负担,同时保持模型的表达能力。

  3. 避免表达瓶颈:在进行Grid Size Reduction时,设计者特别注意避免“表达瓶颈”(representational bottleneck),这意味着即使在减少特征图尺寸时,也要确保有足够的通道数来保持信息的丰富性。因此,可能会在降维后紧接着增加通道数,确保模型的表达能力不受损。

  4. 平衡计算效率和信息保留:InceptionV3的Grid Size Reduction策略力求在减少计算成本的同时,最大化保留图像中的有用信息。通过上述设计,模型能够在不引入额外计算负担的前提下,有效地下采样特征图,从而促进模型对更复杂特征的学习。

下图左侧图为普通的下采样,右侧为grid size Reduction



1.3 Inception V2模型结构

1.4 Label Smooth

原理:

传统上,分类任务中使用的标签通常是“硬”标签,即对于一个样本,其正确类别的标签为1,而其他所有类别的标签均为0。但在实际应用中,这种绝对确定性的假设并不总是成立,模型可能会过分自信于训练数据中的硬标签,导致对未见数据的泛化能力下降。

Label Smoothing通过将硬标签转换为“软”标签来缓解这一问题。具体操作是,将原本的标签分布稍微平滑化,即将正确标签的概率略微减小(通常减小一个很小的比例,比如0.1),并将这部分概率平均分配给其他类别。这意味着正确标签不再是1,而是比如0.9,而每个错误类别分得一个非常小的概率份额(例如,如果总共有10个类别,每个错误类别得到0.01的概率)。

实现方式:

在PyTorch等深度学习框架中,可以很容易地实现Label Smoothing。通常,这涉及到修改损失函数计算的方式,使其能够接受经过平滑处理的标签。例如,可以使用如下方式实现:

import torch.nn.functional as F

def cross_entropy_with_label_smoothing(logits, targets, epsilon=0.1, num_classes=10):
    """
    计算带有标签平滑的交叉熵损失
    :param logits: 模型输出的logits
    :param targets: 真实标签(通常是硬标签)
    :param epsilon: 平滑因子
    :param num_classes: 类别总数
    :return: 标签平滑后的交叉熵损失
    """
    one_hot_targets = F.one_hot(targets, num_classes=num_classes)  # 将硬标签转换为one-hot形式
    one_hot_targets = one_hot_targets.float() * (1 - epsilon) + (epsilon / num_classes)  # 应用标签平滑
    log_probs = F.log_softmax(logits, dim=-1)
    loss = -(one_hot_targets * log_probs).sum(dim=-1).mean()
    return loss

效果:

通过引入Label Smoothing,模型在训练时被鼓励学习到更加稳健的决策边界,因为它不再过度依赖于严格正确的标签,而是考虑到了一定程度的不确定性。这有助于提高模型在测试数据上的表现,尤其是在类别边界模糊或者存在噪声的数据集上。InceptionV3等深度学习模型在使用Label Smoothing后,往往能在图像分类等任务上获得更好的泛化性能。

1.5 Inception V3模型结构

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

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

相关文章

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验17 开放最短路径优先OSPF

一、实验目的 1.验证OSPF协议的作用; 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容 1.构建网络拓扑; 2.验证OSPF协议的作用。 四、实验步骤 1.构建网…

文件操作和IO流

前言👀~ 上一章我们介绍了多线程进阶的相关内容,今天来介绍使用java代码对文件的一些操作 文件(file) 文件路径(Path) 文件类型 文件操作 文件系统操作(File类) 文件内容的读…

C语言-预处理详解

文章目录 🎯引言👓预处理详解1.预定义符号1.1 __FILE__1.2 __LINE__1.3 __DATE__1.4 __TIME__1.5 __STDC__ 2.#define定义常量2.1 定义数值常量2.2 定义字符串常量 3.#define中使用参数3.1**使用示例**3.2注意事项 4.宏替换的规则5.宏函数和函数的对比5.…

基于Netty的自研流系统缓存实现挑战: 内存碎片与OOM困境

01 前言 Kafka 作为流处理平台,在实时流计算和在线业务场景,追尾读追求端到端低延迟。在离线批处理和削峰填谷场景,数据冷读追求高吞吐。两个场景都需要很好的数据缓存设计来支撑,Apache Kafka 的数据存储在本地文件&#xff0c…

从零开始学习嵌入式----C语言框架梳理与后期规划

目录 一、环境搭建. 二、见解 三、C语言框架梳理 四、嵌入式学习规划流程图(学习顺序可能有变) 一、环境搭建. C语言是一门编程语言,在学习的时候要准备好环境。我个人比较喜欢用VS,具体怎么安装请百度。学习C语言的时候,切忌…

Qt:12.输入类控件(QSpinBox-整数值输入的小部件、QDateEdit、QTimeEdit、QDateTimeEdit- 日期和时间输入的控件)

目录 一、QSpinBox-整数值输入的小部件: 1.1QSpinBox介绍: 1.2属性介绍: 1.3通用属性介绍: 1.4信号介绍: 二、QDateEdit、QTimeEdit、QDateTimeEdit- 日期和时间输入的控件: 2.1QDateEdit、QTimeEdit…

一、YOLO V10安装、使用、训练大全

YOLO V10安装、使用、训练大全 一、下载官方源码二、配置conda环境三、安装YOLOV10依赖四、使用官方YOLO V10模型1.下载模型2.使用模型2.1 图片案例 五、制作数据集1.数据集目录结构2.标注工具2.1 安装标注工具2.2 运行标注工具2.3 设置自动保存2.4 切换yolo模式2.5 开始标注2.…

【C++ | 继承】C++的继承详解 及 例子源码演示

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰: 本文未经允许…

C++视觉开发 七.模板匹配

模板匹配是一种基于图像处理的技术,用于在目标图像中寻找与给定模板图像最相似的部分。通过设定的模板,将目标图像与模板图像比较,计算其相似度,实现对目标图像的判断。 目录 一.手写数字识别 重要函数: 1.cv::glob…

Mac平台虚拟机 Parallels Desktop v19.4.1,支持M1/M2/M3芯片组

Parallels Desktop for Mac是功能强大灵活度高的虚拟化方案,无需重启即可在同一台电脑上随时访问Windows和Mac两个系统上的众多应用程序。从仅限于PC的游戏到生产力软件,Parallels Desktop都能帮您实现便捷使用。Parallels Desktop 是一款专业的Mac虚拟机…

虚拟机因断电进入./#状态解决办法

现象: 解决:先查看错误日志:journalctl -p err -b查看自己虚拟机中标黄部分的名字 之后运行:xfs_repair -v -L /dev/sda #这里sda用你自己标黄的 最后重启 reboot 即可。

ArcGIS的智慧与情怀

初识ArcGIS 在这个信息化的时代,ArcGIS如同一位智者,静静地伫立在地理信息系统的巅峰。初识它时,我仿佛走进了一片未知的领域,心中充满了好奇与期待。ArcGIS,这款专业的地理信息系统软件,凭借其强大的功能…

【k8s中安装rabbitmq】k8s中安装rabbitmq并搭建镜像集群-hostpath版

文章目录 简介一.条件及环境说明二.需求说明三.实现原理及说明四.详细步骤4.1.规划节点标签4.2.创建configmap配置4.3.创建三个statefulset和service headless配置4.4.创建service配置 五.安装完后的配置六.安装说明 简介 k8s集群中搭建rabbitmq集群服务一般都会用到pvc&#x…

传知代码-图神经网络长对话理解(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 情感识别是人类对话理解的关键任务。随着多模态数据的概念,如语言、声音和面部表情,任务变得更加具有挑战性。作为典型解决方案,利用全局和局部上下文信息来预测对话中每…

2024世界人工智能大会:AI产品技术与未来趋势的深度解析

随着2024年世界人工智能大会(WAIC 2024)在上海的圆满落幕,我们见证了人工智能技术的又一次飞跃。本次大会以“以共商促共享,以善治促善智”为主题,汇聚了全球顶尖的智慧,共同探讨了AI技术的未来趋势和应用前…

妙笔生词智能写歌词软件:创新助力还是艺术之殇?

在音乐创作日益普及和多样化的当下,各种辅助工具层出不穷,妙笔生词智能写歌词软件便是其中之一。那么,它到底表现如何呢? 妙笔生词智能写歌词软件(veve522)的突出优点在于其便捷性和高效性。对于那些灵感稍…

JVM内存泄露的ThreadLocal详解

目录 一、为什么要有ThreadLocal 二、ThreadLocal的使用 三、实现解析 实现分析 具体实现 Hash冲突的解决 开放定址法 链地址法 再哈希法 建立公共溢出区 四、引发的内存泄漏分析 内存泄漏的现象 分析 总结 错误使用ThreadLocal导致线程不安全 一、为什么要有Thr…

Test-Time Adaptation via Conjugate Pseudo-labels--论文笔记

论文笔记 资料 1.代码地址 https://github.com/locuslab/tta_conjugate 2.论文地址 https://arxiv.org/abs/2207.09640 3.数据集地址 论文摘要的翻译 测试时间适应(TTA)指的是使神经网络适应分布变化,在测试时间仅访问来自新领域的未标记测试样本。以前的TT…

【pytorch24】Visdom可视化

TensorboardX pytorch有一个工具借鉴了tensorboard pip install tensorboardX 有查看变量的数值、监听曲线等功能 如何使用 新建SummaryWriter()实例 要把监听的数据,比如说要监听dummy_s1[0](y 坐标)存放到data/scalar1中,…

普中51单片机:中断系统与寄存器解析(六)

文章目录 引言中断流程图中断优先级下降沿中断结构图中断相关寄存器IE中断允许寄存器(可位寻址)XICON辅助中断控制寄存器(可位寻址)TCON标志控制寄存器SCON串行口控制寄存器 中断号中断响应条件中断函数代码模板电路图开发板IO连接…