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

回顾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.mfbz.cn/a/788683.html

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

相关文章

在vue3中,手写父子关联,勾选子级父级关联,取消只取消当前子级,父节点不动

树形控件选择子级勾选父级,以及所有子级, 取消勾选仅取消子级 在项目中,可能会遇到这种场景,比如权限配置的时候,页面权限和菜单权限以tree的形式来配置,而且不用半选,菜单在页面的下面&#xf…

基于SpringBoot构造超简易QQ邮件服务发送 第二版

目录 追加 邮箱附件 添加依赖 编码 测试 第二版的更新点是追加了 邮箱附件功能 ( 后期追加定时任务 ) 基于SpringBoot构造超简易QQ邮件服务发送(分离-图解-新手) 第一版 追加 邮箱附件 添加依赖 <!-- 电子邮件 --><dependency><groupId>org.spri…

影视行业的人工智能与-【机器学习】:案例分析

欢迎关注小知&#xff1a;知孤云出岫 目录 引言AI和ML在影视行业的当前应用AI和ML对影视行业的未来影响案例研究&#xff1a;AI生成动画视频目标工具和库数据收集模型训练视频生成 结论参考文献 引言 人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09…

java如何实现一个死锁 ?

死锁(Deadlock)是指在并发系统中,两个或多个线程(或进程)因争夺资源而互相等待,导致它们都无法继续执行的一种状态。 一、简易代码 public class DeadlockExample {private static final Object lock1 = new Object();private

Сетунь的24条单播指令

1、Setun模拟器概述 真的&#xff0c;想搞懂一台电脑是怎么运行的&#xff0c;那就搞懂它的指今集是怎么跑的&#xff0c;感觉很离了个大谱的&#xff0c;先看由铁氧体磁芯上的器件组成的RAM&#xff0c;容量为162个9-trit单元&#xff0c;即每个单元为9-trit&#xff0c;每页有…

Kubelet 认证

当我们执行kubectl exec -it pod [podName] sh命令时&#xff0c;apiserver会向kubelet发起API请求。也就是说&#xff0c;kubelet会提供HTTP服务&#xff0c;而为了安全&#xff0c;kubelet必须提供HTTPS服务&#xff0c;且还要提供一定的认证与授权机制&#xff0c;防止任何知…

【PB案例学习笔记】-30动态打开窗口

写在前面 这是PB案例学习笔记系列文章的第30篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

Java | Leetcode Java题解之第225题用队列实现栈

题目&#xff1a; 题解&#xff1a; class MyStack {Queue<Integer> queue;/** Initialize your data structure here. */public MyStack() {queue new LinkedList<Integer>();}/** Push element x onto stack. */public void push(int x) {int n queue.size();…

用PlantUML和语雀画UML类图

概述 首先阐述一下几个简单概念&#xff1a; UML&#xff1a;是统一建模语言&#xff08;Unified Modeling Language&#xff09;的缩写&#xff0c;它是一种用于软件工程的标准化建模语言&#xff0c;旨在提供一种通用的方式来可视化软件系统的结构、行为和交互。UML由Grady…

HTML 标签简写和全称及其对应的中文说明和实例

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>HTML 标签简写及全称</title><style>…

WSL2编译使用6.6版本内核

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、有什么变化二、下载6.6内核三、开始编译1.安装环境2.开始编译 四、使用1.杀死虚拟机2.防止内核文件3.修改配置文件 总结 前言 最近出了一件不大不小的事&a…

Collection 和 Collections 的区别与用法

Collection 和 Collections 的区别与用法 1、Collection 接口1.1 主要特点1.2 常见方法 2、 Collections 工具类2.1 主要特点2.2 常见方法 3、示例代码3.1 使用 Collection 接口3.2 使用 Collections 工具类 4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收…

PostgreSQL 里怎样解决多租户数据隔离的性能问题?

文章目录 一、多租户数据隔离的性能问题分析&#xff08;一&#xff09;大规模数据存储和查询&#xff08;二&#xff09;并发访问和锁争用&#xff08;三&#xff09;索引维护成本高&#xff08;四&#xff09;资源分配不均 二、解决方案&#xff08;一&#xff09;数据分区&a…

神经网络构成、优化、常用函数+激活函数

Iris分类 数据集介绍&#xff0c;共有数据150组&#xff0c;每组包括长宽等4个输入特征&#xff0c;同时给出输入特征对应的Iris类别&#xff0c;分别用0&#xff0c;1&#xff0c;2表示。 从sklearn包datasets读入数据集。 from sklearn import darasets from pandas impor…

申请商标用什么颜色:企业和个人申请注册商标攻略!

在申请注册商标到底要用什么颜色&#xff0c;许多初次申请注册主体都不是特别清楚&#xff0c;普推知产商标老杨建议&#xff0c;在一般情况下建议尽量用黑白色&#xff0c;因为商标用黑白色在使用时可以着任何色。 在用黑色申请注册成功&#xff0c;别的主体用其它颜色要在同…

前端javascript中的排序算法之插入排序

插入排序&#xff08;Selection Sort&#xff09;基本思想&#xff1a; 插入排序每次排一个数组项&#xff0c;以此方式构建最后的排序数组。假定第一项已经排序了&#xff0c;接着&#xff0c; 它和第二项进行比较&#xff0c;第二项是应该待在原位还是插到第一项之前呢&#…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如&#xff1a; 某个视频下a写了条评论&#xff0c;那a的parent_id就是0;b回复了a&#xff0c;那b的parent_id就是a的id;c回复了b&#xff0c;那c的parent_id就是b的id; 这样&#xff0c;所有评论…

大话光学原理:1.“实体泛光说”、反射与折射

一、实体泛光说 在古希腊&#xff0c;那些喜好沉思的智者们中&#xff0c;曾流传着一个奇妙的设想&#xff1a;他们认为&#xff0c;我们的眼睛仿佛伸出无数触手般的光线&#xff0c;这些光线能向四面八方延伸&#xff0c;紧紧抓住周围的每一个物体。于是&#xff0c;当我们凝视…

Apache部署与配置

概述 介绍 Apache HTTP Server(简称Apache)是Apache的一个开源的网页服务器&#xff0c;它源自NCSAhttpd服务器&#xff0c;并经过多次修改和发展&#xff0c;如今已经成为全球范围内广泛使用的Web服务器软件之一 特点 跨平台&#xff1a;可以运行在几乎所有广泛使用的计算机平…

Java面试八股之描述一下MySQL使用索引查询数据的过程

描述一下MySQL使用索引查询数据的过程 1.解析查询语句与查询优化 用户提交一个 SQL 查询语句&#xff0c;MySQL 的查询解析器对其进行词法分析和语法分析&#xff0c;生成解析树。 查询优化器根据解析树、表结构信息、统计信息以及索引信息&#xff0c;决定是否使用 B树索引…