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

IJCV-2025 | 深圳大学记忆增强的具身导航!ESceme:基于情景记忆的视觉语言导航

  • 作者:Qi Zheng 1 , 2 ^{1,2} 1,2, Daqing Liu 3 ^{3} 3, Chaoyue Wang 3 ^{3} 3, Jing Zhang 2 ^{2} 2, Dadong Wang 4 ^{4} 4, Dacheng Tao 2 ^{2} 2
  • 单位: 1 ^{1} 1深圳大学电子与信息工程学院, 2 ^{2} 2悉尼大学计算机科学学院, 3 ^{3} 3京东探索研究院, 4 ^{4} 4CSIRO,DATA61
  • 论文标题:ESceme: Vision-and-Language Navigation with Episodic Scene Memory
  • 论文链接:https://link.springer.com/article/10.1007/s11263-024-02159-8
  • 代码链接:https://github.com/qizhust/esceme

主要贡献

  • 论文首次提出Episodic Scene Memory(ESceme)场景记忆机制,通过记忆过去的访问场景来平衡泛化能力和效率。

  • 通过Candidate Enhancing方法,论文提供了一个简单而有效的ESceme实现,通过在每个位置增强可访问的视图,并在导航过程中逐步完成记忆来实现。

  • 在短视距(R2R)、长视距(R4R)和视觉-对话(CVDN)导航任务上验证了ESceme的优越性。实验结果表明,ESceme在这些任务中表现优异。

  • ESceme在CVDN排行榜上取得了第一名,展示了其在复杂导航任务中的强大能力。

研究背景

研究问题

  • 论文主要解决的问题是如何在视觉语言导航(VLN)中平衡泛化能力和效率。
  • 现有的方法在导航新环境方面取得了巨大进展,但在多步决策过程中,由于领域偏移和观察变化,VLN智能体的性能会受到显著影响。

研究难点

该问题的研究难点包括:

  • 如何在多步决策中有效地利用历史信息,
  • 如何在未见环境中进行有效的导航,
  • 以及如何在保证效率的同时提高导航的准确性。

相关工作

  • 视觉语言导航方法

    • 基础方法:自Anderson等人(2018b)定义VLN任务并提供基于LSTM的序列到序列(Seq2Seq)基线以来,许多方法被开发出来以提高导航性能。这些方法包括数据增强、特征表示和架构的改进等。
    • 数据增强:一些方法通过数据增强来提高导航能力,例如SF(Fried et al., 2018)、EnvDrop(Tan et al., 2019)和EnvEdit(Li et al., 2022a)。
    • 环境建模:Wang等人(2018)通过建模环境来提供导航计划信息。RCM(Wang et al., 2019)通过指令-轨迹匹配批评家提供内在奖励进行强化学习。
    • 多模态特征:许多方法探索了更有效的特征表示和架构,如PTA(Cornia & Cucchiara, 2019)、OAAM(Qi et al., 2020a)、NvEM(An et al., 2021)等。
    • 图构建与推理:一些方法在导航过程中构建和推理导航图,如NTS(Chaplot et al., 2020)和RECON(Shah et al., 2022)。
  • 探索策略

    • 预探索:为了提高在新环境中导航的能力,一些方法采用预探索策略,允许智能体在导航前预先探索未知环境。这些方法包括Wang等人(2019)的预探索和Ma等人(2019a, 2019b)的后悔模块。
    • 全局动作空间:Deng等人(2020)首次定义了全局动作空间,并构建了环境的图形表示以优雅地进行探索和回溯。
    • 结构化场景记忆:Wang等人(2021)扩展了EnvDrop(Tan et al., 2019)以使用外部结构化场景记忆(SSM)来促进全局动作空间中的探索。
  • 与其他方法的比较

    • 场景记忆与路径记忆:论文指出,ESceme与其他图构建或地图构建方法的主要区别在于,ESceme维护的是场景级别的记忆,而不是路径级别的记忆。ESceme通过增加每个节点的信息来改善导航,而不是通过扩展智能体的动作空间。

ESceme

问题表述

  • ESceme的目标是解决视觉-语言导航(VLN)中的问题,其中智能体需要根据自然语言指令在环境中导航。
  • 给定一个指令和一个初始位置,智能体需要观察环境并选择合适的行动以达到目标。
  • ESceme通过引入场景记忆来增强智能体的导航能力。

场景记忆构建

  • 初始化:场景记忆以空图的形式初始化,表示智能体从未访问过该场景。当智能体首次进入一个场景时,它会开始导航并逐步更新记忆。
    G Y ( 0 ) = ( V Y ( 0 ) = ∅ , E Y ( 0 ) = ∅ ) \mathcal{G}_{Y}^{(0)} = (\mathcal{V}_{Y}^{(0)} = \emptyset, \mathcal{E}_{Y}^{(0)} = \emptyset) GY(0)=(VY(0)=,EY(0)=)
    其中 V Y ( 0 ) \mathcal{V}_{Y}^{(0)} VY(0) E Y ( 0 ) \mathcal{E}_{Y}^{(0)} EY(0) 分别表示场景 Y Y Y 的节点集合和边集合。

  • 更新机制:在每个时间步,智能体会更新其场景记忆。如果智能体到达一个新的位置,它会在记忆图中添加这个位置及其邻居。节点特征是其邻居特征的池化结果,池化函数可以是最大池化或平均池化。
    m V 1 = pooling ( f V 1 , i ) m_{V_{1}} = \text{pooling}(f_{V_{1, i}}) mV1=pooling(fV1,i)
    其中 f V 1 , i f_{V_{1, i}} fV1,i 是第 i i i 个邻居视点的特征, m V 1 m_{V_{1}} mV1 是节点 V 1 V_{1} V1 的特征。

场景记忆导航

  • 候选增强(Candidate Enhancing, CE):在每个决策步骤中,智能体会检索其当前位置的记忆表示,并将其与原始观察特征结合,以增强候选视点的表示。
    m k = { m V j if the  k -th view is  V j ∈ V ( t − 1 ) 0 otherwise. m_{k} = \left\{\begin{array}{ll}m_{V_{j}} & \text{if the } k\text{-th view is } V_{j}\in\mathcal{V}^{(t-1)}\\ 0 & \text{otherwise.}\end{array}\right. mk={mVj0if the k-th view is VjV(t1)otherwise.
    这里的 m k m_{k} mk 是从记忆中检索的表示, f k f_{k} fk 是原始观察特征。通过拼接和多层感知机(MLP)投影,生成增强的候选视点表示。
    o k = MLP ( [ [ m k ; f k ] ] ) o_{k} = \text{MLP}([\text{[}m_{k}; f_{k}\text{]}]) ok=MLP([[mk;fk]])
    其中 [ ⋅ ; ⋅ ] [\cdot;\cdot] [;] 表示特征维度的拼接。

  • 输入到导航网络:增强的候选视点表示与历史特征和指令文本一起输入到交叉模态编码器中,以预测下一步的行动。智能体预测行动的概率分布如下:
    P ( a t = k ∈ { 1 , … , K , s } ) = e M L P ( o k ′ ⊙ x c l s ′ ) ∑ j ∈ { 1 , … , K , s } e M L P ( o j ′ ⊙ x c l s ′ ) , P\left(a_{t}=k\in\{1,\ldots, K, s\}\right)=\frac{e^{MLP\left(o_{k}^{\prime}\odot x_{cl s}^{\prime}\right)}}{\sum_{j\in\{1,\ldots, K, s\}} e^{MLP\left(o_{j}^{\prime}\odot x_{cl s}^{\prime}\right)}}, P(at=k{1,,K,s})=j{1,,K,s}eMLP(ojxcls)eMLP(okxcls),
    其中 ⊙ \odot 表示向量逐元素乘法, o k ′ o_{k}^{\prime} ok x c l s ′ x_{cls}^{\prime} xcls 是编码后的特征。

训练目标

ESceme通过模仿学习和强化学习的混合目标进行端到端训练。目标是最大化模仿学习的目标概率和最小化强化学习的回报与状态值的差异。
L = − α ∑ t = 1 T ∗ log ⁡ P ( a t = a t ∗ ) − ∑ t = 1 T log ⁡ P ( a ~ t ) ( r t − v t ) , \mathcal{L}=-\alpha\sum_{t=1}^{T^{*}}\log P\left(a_{t}=a_{t}^{*}\right)-\sum_{t=1}^{T}\log P\left(\tilde{a}_{t}\right)\left(r_{t}-v_{t}\right), L=αt=1TlogP(at=at)t=1TlogP(a~t)(rtvt),
其中 T ∗ T^{*} T 是标注路径的长度, T T T 是预测路径的长度, a ~ t \tilde{a}_{t} a~t 是采样的动作, r t r_{t} rt 是折扣奖励, v t v_{t} vt 是状态值。

实验

实验设置

数据集和指标
  • R2R数据集:用于评估短视距导航任务,包含7,189条直接到目标的轨迹。评估指标包括轨迹长度(TL)、导航误差(NE)、成功率(SR)和路径长度加权成功率(SPL)。
  • R4R数据集:用于评估长视距导航任务,通过连接R2R中的轨迹生成。评估指标包括NE、SR、SPL、覆盖率加权得分(CLS)、归一化动态时间规整(nDTW)和SDTW。
  • CVDN数据集:用于评估视觉-对话导航任务,要求智能体根据目标物体和对话历史进行导航。主要评估指标是目标进度(GP)。
实现细节
  • 模型架构:默认采用Chen等人(2021b)的编码器。单视图特征使用Chen等人(2021b)发布的微调ViT-B/16提取。
  • 训练参数:设置特征维度 d = 768 d=768 d=768,模仿学习损失比例 α = 0.2 \alpha=0.2 α=0.2,训练迭代次数为100,000次,批量大小为8,学习率为1e-5。
  • 硬件:所有实验在单个NVIDIA V100 GPU上进行。
公平比较
  • 公平性:确保在未见环境中部署智能体时,智能体从未见过环境。ESceme在初始化时为空,后续场景中逐步更新记忆。

与最新方法的比较

R2R数据集结果
  • ESceme在未见分割上实现了最高的SPL,超越了基线模型HAMT和其他最新方法。
  • 在验证和测试未见环境中,ESceme分别比HAMT高出约5%的SPL。

R4R数据集结果
  • ESceme在多个指标上大幅超越现有最先进方法,包括SPL、CLS、nDTW和SDTW。
  • 这表明ESceme不仅提高了导航成功率,还改善了路径保真度。

CVDN数据集结果
  • ESceme在目标进度(GP)上取得最佳成绩,领先于其他方法,特别是在未见环境中表现优异。
  • ESceme在验证未见和测试未见环境中分别提升了20.7%、5.7%和7.3%。

消融研究

不同的ESceme构建
  • 池化函数:评估了不同的池化函数对SPL的影响,发现最大池化在未见环境中效果更好。

不同的导航架构和推断策略
  • 架构兼容性:ESceme设计为模型无关,可以在任何具有观察输入的导航网络中使用。实验表明,ESceme在TDSTP架构上也能提升导航性能。
计算效率

ESceme在单个运行设置中引入了适度的额外参数和内存占用,但计算时间增加较少。

执行指令的顺序
  • 由于ESceme在导航过程中动态更新记忆,指令的执行顺序对整体性能影响较小。
  • 实验结果表明,即使在打乱指令顺序的情况下,ESceme仍然保持了稳定的性能。

推理过程中的成功率变化
  • 通过比较不同方法的成功率(SPL)和覆盖率加权得分(CLS)曲线,展示了ESceme在推理过程中的导航质量变化。
  • 结果表明,ESceme在短视距和长视距导航任务中均表现出较高的成功率,并且在长视距任务中保持稳定。

定性分析

  • 可视化示例:论文提供了定性分析,通过可视化导航过程展示了ESceme的优势。示例包括在R2R和R4R数据集上的导航情况,展示了ESceme如何更好地理解和遵循指令。

  • 失败案例:论文还分析了ESceme的失败案例,指出在某些情况下,ESceme可能难以理解更细粒度的指令或区分细微的视觉观察。这为未来的研究提供了方向。

总结

  • 本文提出了第一个具有情景记忆的VLN机制(ESceme),并通过候选增强实现了一个简单而有效的版本。
  • 实验结果表明,ESceme在短视距、长视距和视觉对话导航任务中均表现出色,超越了现有的最先进方法,并在CVDN排行榜上获得了第一名。
  • 该方法在保证效率的同时显著提高了导航的准确性,为未来的VLN和相关领域的情景记忆建模提供了新的思路。

相关文章:

IJCV-2025 | 深圳大学记忆增强的具身导航!ESceme:基于情景记忆的视觉语言导航

作者:Qi Zheng 1 , 2 ^{1,2} 1,2, Daqing Liu 3 ^{3} 3, Chaoyue Wang 3 ^{3} 3, Jing Zhang 2 ^{2} 2, Dadong Wang 4 ^{4} 4, Dacheng Tao 2 ^{2} 2单位: 1 ^{1} 1深圳大学电子与信息工程学院, 2 ^{2} 2悉尼大学计算机科学学院,…...

[第十六届蓝桥杯 JavaB 组] 真题 + 经验分享

A:逃离高塔(AC) 这题就是简单的签到题,按照题意枚举即可。需要注意的是不要忘记用long,用int的话会爆。 📖 代码示例: import java.io.*; import java.util.*; public class Main {public static PrintWriter pr ne…...

《分布式软总线:网络抖动下的数据传输“定海神针”》

在当下,智能设备之间的互联互通已成为生活与工作的刚需。分布式软总线作为实现这一愿景的关键技术,正日益凸显其重要性。然而,网络环境的复杂性,尤其是网络抖动频繁的情况,给分布式软总线的数据传输带来了严峻挑战。如…...

C++函数

函数 为什么要使用函数 已经有main函数,为什么还要自定义函数?:“避免重复制造轮子”,提高开发效率 函数的定义 函数的设计方法:先确定函数的功能、确定函数的参数、是否需要参数,参数的个数&#xff0c…...

FreeRTOS菜鸟入门(五)·空闲任务与阻塞延时的实现

目录 1. 实现空闲任务 1.1 定义空闲任务的栈 1.2 定义空闲任务的任务控制块 1.3 创建空闲任务 2. 实现阻塞延时 2.1 vTaskDelay()函数 2.2 修改 vTaskSwitchContext()函数 3. SysTick 中断服务函数 4. SysTick 初始化函数 通过之前我们了解知道,任…...

PCIe 学习笔记(一)

系列文章目录 【PCIe】链路测试,数字工程师也要会看高速信号眼图! 【PCIe】链路训练状态机(LTSSM) - PCIe链路建立过程概述 【PCIe】PCIe设备的BDF与系统枚举过程 文章目录 系列文章目录PCIe LTSSM**1. 链路训练状态(Training States&#…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——LED、按键测试

1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试4.1 LED…...

深度为16,位宽8bit的单端口SRAM——学习记录

链接&#xff1a; 【Verilog HDL 训练】第 13 天&#xff08;存储器、SRAM&#xff09;-云社区-华为云 module sram #(parameter ADDR_BITS4)(input clk,input [ 7:0] addr,input [ 7:0] din,input ce,input we,output reg [ 7:0] dout);localparam MEM_DEPTH 1<<ADDR_…...

面向对象编程

在面向对象编程中&#xff0c;除了通过创建类的实例来访问其属性和方法外&#xff0c;还可以通过在一个类里创建另一个类的属性&#xff08;本质上也是持有另一个类的实例引用&#xff09;的方式来访问该类的属性和方法。下面为你详细解释这两种方式&#xff1a; 1. 通过创建实…...

远程登录一个Linux系统,如何用命令快速知道该系统属于Linux的哪个发行版,以及该服务器的各种配置参数,运行状态?

远程登录一个Linux系统&#xff0c;如何用命令快速知道该系统属于Linux的哪个发行版&#xff0c;以及该服务器的各种配置参数&#xff0c;运行状态&#xff1f; 查看Linux发行版信息 查看发行版名称和版本&#xff1a; cat /etc/*-release或 lsb_release -a查看内核版本&#…...

简单socket通信,回显 服务器程序与客户端程序之间的通信。

Socket 通信编程是一种基于网络的通信方式&#xff0c;允许不同主机上的程序通过网络进行数据交换。 实现结构try catch&#xff1a; 前情了解&#xff1a; 1.如何创建服务器端 定义ServerSocket套接字&#xff0c;需要等待客户端连接&#xff0c;阻塞&#xff0c;直到接入连接…...

C# 基类型和派生类型之间的转型

1.什么是基类型和派生类 基类型&#xff1a;父类&#xff0c;所有子类都继承自它。 派生类型&#xff1a;子类&#xff0c;继承了父类的属性和方法&#xff0c;还可以添加自己的新功能。 例子&#xff1a; class Animal { }//基类型 class Dog : Animal { }//派生类型 这…...

深度学习--激活函数

激活函数通过计算加权和并加上偏置来确定神经元是否应该倍激活&#xff0c;它们将输入信号转换为输出的可微运算。大多数激活函数都是非线性的&#xff0c;由于激活函数是深度学习的基础&#xff0c;下面简要介绍一些常见的激活函数。 1 RelU函数 最受欢迎的激活函数是修正线性…...

MySQL 缓存机制全解析:从磁盘 I/O 到性能优化

MySQL 缓存机制全解析&#xff1a;从磁盘 I/O 到性能优化 MySQL 的缓存机制是提升数据库性能的关键部分&#xff0c;它通过多级缓存减少磁盘 I/O 和计算开销&#xff0c;从而提高查询和写入的效率。 1. 为什么需要缓存&#xff1f; 数据库的性能瓶颈通常集中在磁盘 I/O 上。…...

【项目管理】第17章 项目干系人管理-- 知识点整理

项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…...

编程语言到mysql ‘\‘到数量关系

在 MySQL 的模糊查询中&#xff0c;反斜杠 \ 的转义规则需要根据 转义层级 和 SQL 模式 来确定。以下是详细说明及示例&#xff1a; 一、默认模式下&#xff08;未启用 NO_BACKSLASH_ESCAPES&#xff09; 1. 规则说明 反斜杠转义&#xff1a;\ 是 MySQL 的默认转义字符。 转义…...

本地生活服务平台搭建方案详解:同城跑腿外卖系统源码一体化开发

在数字化浪潮不断推进的今天&#xff0c;本地生活服务平台正逐渐成为人们日常生活中不可或缺的一部分。从点餐外卖到同城帮买、帮送、帮取&#xff0c;用户对即时服务的需求愈发强烈。与此同时&#xff0c;创业者和本地商家也纷纷看好“同城服务 外卖配送”的一体化平台模式&a…...

索引语法SQL性能分析索引的使用

目录 准备: 一.索引语法 1). 创建索引 2). 查看索引 3). 删除索引 4).使用索引查询和普通查询的区别 二.SQL性能分析 1.SQL执行频率 2.慢查询日志 3.profile详情 4.explain 三.索引的使用 1.最左前缀法则 2.范围查询 3.索引失效情况 索引列运算 字符串不加引号…...

Docker技术基础新手入门教程

Docker技术深度解析:从架构到实战的运维指南 一、Docker核心架构与组件详解1. 什么是Docker?1. Docker引擎(Docker Engine)2. Docker对象模型二、关键技术深度剖析1. 容器隔离机制2. 容器网络模型网络驱动类型自定义网络实战3. 存储卷与数据持久化三种挂载方式对比示例:My…...

NO.93十六届蓝桥杯备战|图论基础-拓扑排序|有向无环图|AOV网|摄像头|最大食物链计数|杂物(C++)

有向⽆环图 若⼀个有向图中不存在回路&#xff0c;则称为有向⽆环图(directed acycline graph)&#xff0c;简称 DAG 图 AOV⽹ 举⼀个现实中的例⼦&#xff1a;课程的学习是有优先次序的&#xff0c;如果规划不当会严重影响学习效果。课程间的先后次序可以⽤有向图表⽰ 在…...

Rust泛型与特性

文章目录 泛型函数中的泛型结构体与枚举中的泛型特性&#xff08;trait&#xff09;默认特性Trait作为参数特性做返回值 给结构体实现方法 泛型 泛型编程是现代编程语言中重要的机制 C是通过模板来实现泛型的&#xff0c;而C语言中是没有泛型的 泛型是用来表达抽象类型的机制…...

Day08【基于预训练模型分词器实现交互型文本匹配】

基于预训练模型分词器实现交互型文本匹配 目标数据准备参数配置数据处理模型构建主程序测试与评估总结 目标 本文基于预训练模型bert分词器BertTokenizer&#xff0c;将输入的文本以文本对的形式&#xff0c;送入到分词器中得到文本对的词嵌入向量&#xff0c;之后经过若干网络…...

基于uniapp 实现画板签字

直接上效果图 代码 <template><view class"container"><!-- 签名画布 --><view class"canvas-container"><canvas canvas-id"signCanvas" class"sign-canvas"touchstart"handleTouchStart"touc…...

5.跳表(skiplist)

1. 什么是跳表 -skiplist skiplist 本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是一样的&#xff0c;可以作为key 或者 key/value 的查找模型。 skiplist &#xff0c;顾名思义&#xff0c;首先它是一个 list 。实际上…...

GitHub 封禁中国 IP:影响、原因及应对

在技术全球化的当下&#xff0c;代码托管平台如同开发者的 “数字仓库”&#xff0c;而 GitHub 无疑是其中最广为人知的一座。但在 2025 年 4 月 13 日&#xff0c;一则令人震惊的消息在国内开发者社群中炸开了锅 ——GitHub 疑似封禁中国 IP。一时间&#xff0c;这一事件迅速成…...

基于工业操作系统构建企业数字化生态的实践指南

一、工业操作系统选型策略 工业操作系统&#xff08;IIoT OS&#xff09;的选型需从功能适配性、技术成熟度、生态兼容性三个维度综合评估。以玉麟科技DIOS平台为例&#xff0c;其 "云端 终端" 架构支持全球设备管理&#xff0c;通过工业知识模型实现设备健康度预测…...

金能电力领跑京东工业安全工器具赛道 2025年首季度数据诠释“头部效应”

金能电力领跑京东工业安全工器具赛道 2025年首季度数据诠释“头部效应” 在2025年第一季度京东工业平台“电料辅件-安全工器具”热销品牌的激烈竞争中&#xff0c;金能电力以一组极具说服力的数据&#xff0c;向行业展示了何为“绝对头部”。从成交金额、销量到流量、客群覆…...

基于大模型的反流食管炎手术全流程风险预测与治疗方案研究报告

目录 一、引言 1.1 研究背景 1.2 研究目的 1.3 研究方法与创新点 二、反流食管炎概述 2.1 定义与发病机制 2.2 临床症状与诊断标准 2.3 流行病学现状 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 用于反流食管炎预测的优势 四…...

探索 C 与 Java/Kotlin 的语言差异:从指针到高阶函数

作为一名熟悉 Java 和 Kotlin 的开发者&#xff0c;初次接触 C/C 时常会遇到一系列概念上的“文化冲击”。本文将从几个关键点出发&#xff0c;帮助你更好地理解 C/C 与 Java/Kotlin 在语言设计上的核心区别。 1. 指向未知类型的指针 void*、结构体指针访问 ->、空指针常量 …...

Redis之缓存过期淘汰策略

面试切入点 Redis内存满了怎么办&#xff1f; redis的默认内存多少&#xff1f;在哪里查看&#xff1f;如何设置修改&#xff1f; 查看redis最大占用内存 打开redis配置文件&#xff0c;设置maxmemory参数&#xff0c;maxmemory是bytes字节类型&#xff0c;注意转换。 redi…...

Rust-引用借用规则

目录 一、概述 二、借用规则 三、详细解释 3.1 第一条规则 3.2 第二条规则 3.3 第三条规则 四、总结 Welcome to Code Blocks blog 本篇文章主要介绍了 [Rust-引用借用规则] ❤博主广交技术好友&#xff0c;喜欢文章的可以关注一下❤ 一、概述 Rust为确保程序在运行时不…...

【报错】解决pytorch出现RuntimeError: An attempt has been made to start a new process...

此错误是由于在 Windows 系统中使用多进程时&#xff0c;没有正确使用 if __name__ __main__: 语句块造成的。在 Windows 里&#xff0c;多进程的启动方式是 spawn&#xff0c;并非 fork&#xff0c;所以必须在主模块中使用 if __name__ __main__: 语句块来避免子进程重复执行…...

游戏引擎学习第228天

对上次的内容进行回顾&#xff0c;并为今天的开发环节做铺垫。 目前大部分功能我们已经完成了&#xff0c;唯一剩下的是一个我们知道存在但目前不会实际触发的 bug。这个 bug 的本质是在某些线程仍然访问一个已经被销毁的游戏模式&#xff08;mode&#xff09;之后的状态&…...

Pytorch Hook 技巧

通过 functools.partial 扩展 Pytorch Hook 机制 阅读 atom 文章源码时学习到的技巧&#xff0c;mark一下 通过 functools.partial&#xff0c;开发者无需修改原始函数或 PyTorch 的 Hook 机制&#xff0c;即可实现​​参数扩展与接口适配​​&#xff0c;这是 Python 函数式编…...

Python multiprocessing模块介绍

multiprocessing 是 Python 标准库中的一个模块&#xff0c;用于实现多进程并行计算&#xff0c;可以在多核 CPU 上显著提升程序性能&#xff0c;尤其适用于 CPU 密集型任务。Python 的多线程由于 GIL&#xff08;全局解释器锁&#xff09;限制&#xff0c;在进行 CPU 密集型任…...

[特殊字符] LoRA微调大模型实践:从MAC到Web的全流程指南

&#x1f680; 实践步骤概览 今天我们要在MAC上完成一个完整的AI项目闭环&#xff1a; 微调一个大模型 → 2. 导出模型并部署 → 3. 暴露API给web后端 → 4. 前端展示 &#x1f6e0;️ 微调模型准备 核心配置 框架&#xff1a;LLama-Factory &#x1f3ed; 算法&#xff1a…...

第二天 通过脚本控制物体移动和旋转

一、Unity脚本编程基础认知 1.1 为什么说脚本是Unity的灵魂&#xff1f; Unity引擎的核心架构采用ECS&#xff08;Entity-Component-System&#xff09;模式&#xff0c;脚本作为组件的具体实现&#xff0c;控制着游戏对象的所有行为。统计显示&#xff0c;一个中等规模的Uni…...

在SpringBoot中访问 static 与 templates 目录下的内容

目录 步骤一&#xff1a;添加 Thymeleaf 依赖 (处理 Templates 目录)步骤二&#xff1a;配置静态资源路径 (可选但建议了解)步骤三&#xff1a;访问不同目录下的 HTML 文件访问 static 目录下的 HTML 文件访问 templates 目录下的 HTML 文件 总结 在使用 Spring Boot 开发 Web …...

常见的 API 设计风格

在软件开发中&#xff0c;常见的 API 设计风格主要有以下几种&#xff0c;每种风格适用于不同的场景和需求&#xff1a; 1. RESTful API (主流) 特点&#xff1a; 基于 HTTP 协议&#xff0c;使用标准方法&#xff08;GET/POST/PUT/DELETE&#xff09;资源导向&#xff08;UR…...

Grass.io项目现状:DePIN亮眼明星,扩张中的AI数据银行

Grass.io项目现状:DePIN亮眼明星,扩张中的AI数据银行 Grass如何在DePIN项目丛林中脱颖而出? 答案在于其"零门槛"策略——用户是基石,其他一切皆为杠杆。 Grass通过"技术+模式"双轮驱动打破行业内卷:零知识证明技术与Solana Layer2架构确保数据真实…...

ERR_PNPM_DLX_NO_BIN No binaries found in tailwindcss

场景复现&#xff1a; 最近在vue3项目中安装了tailwindcss&#xff0c;但是它默认帮我安装的版本是4XX的&#xff0c;导致我执行 npx tailwindcss init -p报错了。 解决方案&#xff1a; 更改tailwindcss的版本为3 pnpm add -D tailwindcss3再次执行生成tailwindcss的初始…...

2025“钉耙编程”中国大学生算法设计春季联赛(6)(1001,1003,1008):1007

不知道为啥&#xff0c;感觉后面的联赛题目有挺多出的是模拟题目&#xff08;这三道题目难度依次递增&#xff09; 1001 #include<bits/stdc.h> using namespace std; #define int long long const int op1e97; const int o1e34;inline void solve(){int n,a,b,c;cin>…...

Leetcode 2814. 避免淹死并到达目的地的最短时间

1.题目基本信息 1.1.题目描述 现给定一个 n * m 的索引从 0 开始的二维字符串网格 land&#xff0c;目前你站在为 “S” 的单元格上&#xff0c;你需要到达为 “D” 的单元格。在这片区域上还有另外三种类型的单元格&#xff1a; “.”&#xff1a;这些单元格是空的。 “X”…...

4.15【A】pc homework3~

5 假设read_document函数可以实现读取第m个文件&#xff0c;并返回该文本文档的每行数据 那么考虑双层并行结构&#xff0c;外层为文档级并行&#xff0c;内层为每个文档内的行级并行 动态分配文档任务&#xff0c;避免线程闲置 #include <omp.h> int total_words …...

aslist和list的区别

‌Arrays.asList和List的主要区别在于它们的固定长度和不可变性、与原始数组的关系、性能以及使用场景。 一、固定长度和不可变性 ‌Arrays.asList‌&#xff1a;通过Arrays.asList方法创建的List是一个固定长度的List&#xff0c;其长度与原始数组相同。这意味着你不能通过添…...

Notepad++中将文档格式从Windows(CR LF)转换为Unix(LF)

在Windows中用记事本写了一个.sh的Linux运行脚本&#xff0c;是无法直接在Linux中执行&#xff0c;需要首先把文本编码格式转换为Unix的&#xff0c;特别是换行符这些&#xff0c;转换步骤如下&#xff1a; 1、打开文档 在Notepad中打开需要转换的文件。 2、进入文档格式转换…...

控制理论与应用Latex模版/中文Latex

报错1 ! Package CJK Error: Invalid character code. 解决方法&#xff1a; 用记事本打开tex文件 另存为&#xff0c;选择utf-8格式 ! paragraph ended before \mulearg was complete. 备注&#xff0c;控制理论与应用有个自己的模版内容&#xff0c;是通过导入方式调用…...

Linux指令和权限(10-3)

部分指令和权限 一丶指令 1.echo echo的基础作用向显示器输出。作用类似于C语言的printf&#xff0c;C的cout。 1.1 echo 输入内容 – 会显示输出到屏幕的下一行 echo "hello Linux"1.2 echo 输入内容>目标文件 – 向目标文件输出内容&#xff08;输出重定向&…...

算法堆排序记录

【算法】排序算法之堆排序 - 知乎 应用场景&#xff1a;获取第n个大或者小的数 操作步骤&#xff1a; 1、将数组构造成堆 2、调整根节点为最大堆 ->倒序对每个根节点执行最大化 ->根节点最大化过程中如果发生交换&#xff0c;需要保证子节点也为最大堆&#xff08;执行…...

2025年第十六届蓝桥杯省赛JavaB组真题回顾

第16届蓝桥杯省赛已经结束了&#xff0c;第一次参加也是坐牢了4个小时&#xff0c;现在还是来总结一下吧&#xff08;先声明以下的解法&#xff0c;大家可以当作一种思路来看&#xff0c;解法不一定是正解&#xff0c;只是给大家提供一种能够正常想到的思路吧&#xff09; 试题…...