π0.5:带开放世界泛化的视觉-语言-动作模型

25年4月来自具身机器人创业公司 PI 公司的论文“π0.5: a Vision-Language-Action Model with Open-World Generalization”。

为了使机器人发挥作用,它们必须在实验室之外的现实世界中执行实际相关的任务。虽然视觉-语言-动作 (VLA) 模型在端到端机器人控制方面已展现出印象深刻的效果,但此类模型在实际应用中的泛化能力仍是一个悬而未决的问题。本文提出一个基于 π0 的演进模型 π0.5,它利用异构任务的协同训练来实现广泛的泛化。π0.5 使用来自多个机器人、高级语义预测、网络数据和其他来源的数据,以实现泛化的现实世界机器人操作。该系统结合协同训练和混合多模态示例,这些示例结合图像观察、语言命令、目标检测、语义子任务预测和低级动作。实验表明,这种知识迁移对于有效的泛化至关重要,并且一个支持端到端学习的机器人系统可以在全新的家中执行长视野和灵巧的操作技能,例如清洁厨房或卧室。注:PI 公司在网站视频展示了在 AirBnB 搭建这种模型的机器人如何工作。

π0.5 如图所示:

请添加图片描述

开放世界的泛化是物理智能(PI)领域最大的开放性问题之一:机械臂、类人机器人和自动驾驶汽车等具身系统只有能够走出实验室,应对现实世界中发生的各种情况和意外事件时,才能真正发挥作用。基于学习的系统为实现广泛的泛化提供了一条途径,尤其是最近的进展,使得从自然语言处理 [79, 21, 10, 78] 到计算机视觉 [34, 66, 35, 43] 等领域的可扩展学习系统成为可能。然而,机器人在现实世界中可能遇到的情境千差万别,这不仅仅需要规模,还需要设计能够提供广泛知识的训练方案,使机器人能够在多个抽象层次上进行泛化。例如,如果一个移动机器人被要求清理一个它从未见过的厨房,如果数据中存在足够多的场景和物体(例如,拿起刀或盘子),某些行为很容易泛化;而另一些行为可能需要调整或修改现有技能,才能以新的方式或新的顺序使用它们;还有一些行为可能需要基于先验知识理解场景的语义(例如,打开哪个抽屉,或者柜台上哪个物体最有可能是晾衣架)。那么问题上:如何为机器人学习系统构建一个训练方案,使其能够实现这种灵活的泛化?

一个人可以借鉴一生的经验,综合出针对每个挑战的合适解决方案。并非所有经验都是第一手的,也并非所有经验都来自死记硬背——例如,可能会结合他人告知或从书中读到的信息,以及在不同情境下执行其他任务时获得的见解,并结合在目标领域的直接经验。类似地,可以假设,可泛化的机器人学习系统必须能够迁移来自各种信息源的经验和知识。其中一些来源是与当前任务直接相关的第一手经验,一些需要从其他机器人实例、环境或域迁移,还有一些则代表完全不同的数据类型,例如口头指令、基于网络数据的感知任务或高级语义命令的预测。这些不同数据源的异构性构成重大障碍,但幸运的是,视觉-语言-动作 (VLA) 模型的最新进展提供一个工具包,可以实现这一点:通过将不同的模态数据引入同一序列建模框架,VLA 可以适用于机器人数据、语言数据、计算机视觉任务以及上述数据的组合进行训练。

通才机器人操控策略。近期研究表明,将机器人操控策略的训练数据分布从狭窄的单任务数据集拓展到涵盖众多场景和任务的多样化数据集 [17, 25, 80, 63, 41, 6, 30, 67, 1],不仅可以使生成的策略开箱即用地解决更广泛的任务,还能提升其泛化到新场景和任务的能力 [9, 63, 62, 22]。训练此类通才策略需要新的建模方法,以应对通常涵盖数百个不同任务和场景的数据集的规模和多样性。视觉-语言-动作模型 (VLA) [23, 92, 42, 8, 83, 90, 55, 45, 3, 75, 64, 76, 84, 7, 37] 提供了一个颇具吸引力的解决方案:通过对用于机器人控制的预训练视觉-语言模型进行微调,VLA 可以利用从网络规模预训练中获得的语​​义知识,并将其应用于机器人问题。当与高表达力的动作解码机制(例如流匹配 [8]、扩散 [55, 84, 52] 或高级动作token化方案 [64])结合使用时,VLA 可以在现实世界中执行各种复杂的操作任务。然而,尽管 VLA 拥有印象深刻的语言跟随能力,但其评估环境通常仍与其训练数据高度匹配。虽然一些研究表明,只需在更广泛的环境中收集机器人数据,就能将拾取物体或打开抽屉等简单技能泛化到实际场景中 [14, 67, 28, 49, 64],但将相同方法应用于更复杂、更长期的任务(如清理厨房)却极具挑战性,因为通过强力扩展机器人数据收集来广泛覆盖所有可能场景是不可行的。

非机器人数据协同训练。许多先前的研究都试图利用多样化的非机器人数据来提升机器人策略的泛化能力。先前的方法包括从计算机视觉数据集初始化视觉编码器 [85, 58, 57, 18],或利用现成的任务规划器 [38, 48, 73, 81]。VLA 策略通常由预训练的视觉-语言模型初始化,该模型已接触过大量的互联网视觉和语言数据 [23, 92, 42]。值得注意的是,VLA 架构非常灵活,允许在多模态视觉、语言和动作 token 的输入和输出序列之间进行映射。因此,VLA 不仅支持在机器人动作模仿数据上,还支持在任何包含上述一种或多种模态的数据集上协同训练单一统一的架构,从而拓宽可能的迁移方法设计空间,使其超越简单的权重初始化。先前的研究已经证明,使用用于 VLM 训练的混合数据 [23, 92, 86] 协同训练 VLA 可以提升其泛化能力,例如在与新物体或未见过的场景背景交互时。

机器人运用语言进行推理和规划。许多先前的研究表明,通过高级推理增强端到端策略可以显著提升长周期任务的性能 [2, 36, 44, 74, 71, 4, 16, 11, 53, 88, 51, 59, 13, 70, 91, 65, 72, 47, 76, 89],尤其是当高级子任务推理能够受益于大型预训练的 LLM 和 VLM 时。

具有开放世界泛化的机器人学习系统。虽然大多数机器人学习系统在与训练数据高度匹配的环境中进行评估,但之前已有不少研究探索了更广泛的开放世界泛化能力。当机器人的任务仅限于一组较为狭窄的基本基元(例如拾取物体)时,允许特定任务假设的方法(例如,抓取预测或结合基于模型的规划和控制)已被证明能够实现广泛的泛化,甚至扩展到全新的家庭环境 [40, 20, 60, 56, 29]。然而,此类方法并不容易泛化到多面手机器人可能需要执行的所有任务。最近,来自多个领域的大规模数据集 [41, 68, 63, 67, 14, 49] 已被证明能够将简单但端到端学习的任务泛化到新环境 [33, 31, 67, 69, 26, 49, 28, 64]。然而,这些演示中的任务仍然相对简单,通常时长不到一分钟,而且成功率通常相对较低。

本文利用这一观察结果为 VLA 设计一个协同训练框架,该框架可以利用异构和多样化的知识源实现广泛的泛化。在 π0 VLA 的基础上,纳入一系列不同的数据源来创建 π0.5 模型(发音“pi oh five”),该模型可以控制移动机械手执行各种家务,即使在训练期间从未见过的家庭中也可以执行。如图所示:π0.5用于清扫一个新厨房

请添加图片描述

视觉-语言-动作模型 (VLA) 通常通过在不同机器人演示数据集 D 上进行模仿学习来训练,通过给定观察 o_t 和自然语言任务指令 l 来最大化动作 a_t(或更一般地,动作块 a_t:t+H)对数似然。

观察通常包含一个或多个图像 I1_t,…,I^n_t 和本体感受状态 q_t,用于捕捉机器人关节的位置。VLA 架构遵循现代语言和视觉语言模型的设计,具有特定于模态的token化器,将输入和输出映射到离散(“硬”)或连续(“软”)token 表征,以及一个大型自回归 transformer 主干,经过训练可从输入映射到输出 token。

这些模型的权重由预训练的视觉语言模型初始化。通过将策略输入和输出编码为 token 化的表征,上述模仿学习问题可以转化为一个简单的下一个 token 预测问题,针对一系列观察、指令和动作 token,可以利用现代机器学习的可扩展工具来优化它。在实践中,图像和文本输入的 token 化器的选择,遵循现代视觉语言模型的 token 化器。对于动作,先前的研究已经开发出有效的、基于压缩的 token 化方法 [64],在本文的预训练阶段使用这些方法。

许多近期的 VLA 模型也提出通过扩散 [55, 84, 52] 或流匹配 [8] 来表示动作分布,从而为连续-值动作块提供更具表现力的表征。在模型的后训练阶段,将以 π0 模型 [8] 的设计为基础,该模型通过流匹配来表示动作分布。在此设计中,与动作对应的 token 接收来自上一步流匹配的部分去噪动作作为输入,并输出流匹配向量场。这些 token还使用一组不同的模型权重,称为“动作专家”,类似于混合专家架构。该动作专家可以专注于基于流匹配的动作生成,并且比 LLM 主干的其余部分小得多。

以下介绍π0.5 模型及其训练方案。

如图概述 π0.5 模型及其训练方案。模型权重由基于网络数据训练的标准 VLM 初始化,训练分为两个阶段:预训练阶段,旨在使模型适应各种机器人任务;后训练阶段,旨在使模型专门用于移动操作,并为其配备高效的测试-时推理机制。在预训练阶段,所有任务(包括包含机器人动作的任务)都用离散的 token 表示,从而实现简单、可扩展且高效的训练 [64]。在后训练阶段,调整模型使其也包含一个动作专家,就像 π0 模型一样,以便以更细的粒度表示动作,并实现更高效的实时控制推理计算。在推理阶段,模型首先为机器人生成一个高级子任务,然后基于该子任务,通过动作专家预测低级动作。

请添加图片描述

π0.5 架构

π0.5 架构可以灵活地表示动作块分布和 token 化文本输出,后者既可用于协同训练任务(例如问答),也可用于在分层推理过程中输出高级子任务预测。该模型捕获的分布可以写成π_θ(a_t:t+H,l|o_t,ˆl),其中 o_t = [I0_t, …, In_t, q_t],由所有摄像机的图像和机器人的配置(关节角度、夹持器姿势、躯干升降姿势和基本速度)组成,l 是整体任务提示(例如,“收起盘子”),ˆl 表示模型的(token 化)文本输出,可以是预测的高级子任务(例如,“拿起盘子”)或对网络数据中视觉语言提示的答案,a_t:t+H是预测的动作块。

该分布可以分解为高级和低级推理两部分,其中动作分布取决于ˆl 而不是 l,高级推理捕获π_θ(l|o_t, ˆl),低级推理捕获π_θ(a_t:t+H|o_t, ˆl),这两个分布都由同一个模型表征。

该模型对应于一个 transformer,它接受 N 个多模态输入tokens x_1:N(宽泛地使用术语 token,指的是离散输入和连续输入)并产生一系列多模态输出 y_1:N,可以将其写成 y_1:N = f(x_1:N, A(x_1:N), ρ(x_1:N))。每个 x_i 可以是文本 token(xw_w)、一个图像补丁(xI_I)或流匹配中机器人动作的中间去噪值(xa_i)。观测值 o_t 和 l 构成 x_1:N 的前缀部分。根据 token 类型(如 ρ(x_i) 所示),每个 token 不仅可以由不同的编码器处理,还可以由transformer 内的不同专家权重处理。例如,图像补丁通过视觉编码器输入,文本 token 嵌入到嵌入矩阵中。按照 π0 [8],将动作 token x^a_i 线性投影到 Transformer 嵌入空间,并在 Transformer 中使用单独的专家权重来处理动作 token。注意矩阵 A(x_1:N) ∈[0, 1] 表示一个 token 是否可以关注另一个 token。与 LLM 中的标准因果注意相比,图像补丁、文本提示和连续动作 token 使用双向注意。

由于希望模型同时输出文本(回答关于场景的问题或输出接下来要完成的任务)和动作(在世界中采取行动),因此 f 的输出被拆分为文本 token logits 和动作输出 token,分别为 yl_1:M 和 y^a_1:H。第一个 M 对应于可用于对 lˆ 进行采样的文本 token logits,后面的 H 个 tokens 由单独的动作专家生成,就像在 π0 中一样,并通过线性映射投影到用于获得 a_t:t+H 的连续输出。请注意,M + H ≤ N,即并非所有输出都与损失相关。机器人本体感受状态被离散化,并作为文本 token 输入到模型中。

离散与连续动作表示的结合

与 π0 类似,使用流匹配[50]来预测最终模型中的连续动作。给定a^τ,ω_ t:t+H = τa_t:t+H + (1−τ)ω, ω∼N(0,I),其中 τ ∈ [0,1] 是流匹配时间索引,训练模型预测流向量场 ω − a_t。然而,如[64]所示,当动作用离散 token 表示时,VLA 训练速度会更快,尤其是在使用一个能够有效压缩动作块的 token 化方案(例如FAST)时。遗憾的是,这种离散表示不太适合实时推理,因为它们需要昂贵的自回归解码才能进行推理[64]。因此,理想的模型设计应该在离散动作上进行训练,但仍允许使用流匹配在推理时生成连续动作。

因此,模型通过对 token 进行自回归采样(使用 FAST token 化器)和对流场进行迭代积分来训练以预测动作,从而结合两者的优点。用注意矩阵来确保不同的动作表征不会互相关注。模型经过优化以最小化综合损失:一个是文本 tokens 和预测 logits(包括 FAST 编码的动作 token)之间的交叉熵损失,另一个是流匹配误差的损失。其中ya_1:H = f^a_θ (a_t:t+H^τ, ω, o_t, l) 是来自(较小)动作专家的输出,α 是一个权衡参数。这种方案能够首先通过将动作映射到文本 token(α = 0)将模型预训练为标准 VLM Transformer 模型,然后添加额外的动作专家权重,以非自回归方式预测连续动作 tokens,以便在训练后阶段进行快速推理。遵循此流程可使 VLA 模型获得稳定的预训练效果和出色的语言跟踪能力。在推理时,对文本 token lˆ 使用标准自回归解码,然后以文本 token 为条件进行 10 个去噪步骤,最终生成动作 a_t:t+H。

预训练

在第一个训练阶段,π0.5 使用广泛的机器人和非机器人数据进行训练,其总结在下图说明。它被训练为一个标准的自回归 transformer,用于对文本、物体位置和 FAST 编码的动作 token 进行下一个 token 预测。

请添加图片描述

多样化的移动机械手数据 (MM)。用大约 400 小时的移动机械手数据,这些机械手在大约 100 个不同的家庭环境中执行家务,其中一些环境如下图所示,使用 PI 公司设计的机器人。这部分训练集与评估任务最直接相关,该评估任务包括在新的、未见过的家庭环境中执行类似的清洁和整理任务。

请添加图片描述

多样化的多环境非移动机器人数据 (ME)。还收集各种家庭环境中的非移动机器人数据,包括单臂或双臂机器人。这些手臂固定在表面或安装平台上,由于它们重量明显更轻且更易于运输,能够利用它们在更广泛的家庭中收集更加多样化的数据集。但是,这些 ME 数据来自与移动机器人不同的具身。

跨具身实验室数据 (CE)。在实验室中收集各种任务的数据(例如,收拾桌子、折叠衬衫),使用更简单的桌面环境和各种类型的机器人。其中一些任务与评估高度相关(例如,将碗碟放入垃圾桶),而其他任务则不相关(例如,研磨咖啡豆)。这些数据包括单臂和双臂机械手,以及静态和移动基座。还包括开源 OXE 数据集 [15]。该数据集是 π0[8] 使用的数据集扩展版。

高级子任务预测 (HL)。将诸如“打扫卧室”之类的高级任务命令分解为诸如“调整毯子”和“拿起枕头”之类的较短的子任务,类似于语言模型的思维链提示,可以帮助训练的策略推理当前场景并更好地确定下一步操作。对于MM、ME和CE中的机器人数据,如果任务涉及多个子任务,会手动使用子任务的语义描述对所有数据进行注释,并训练π0.5,使其基于当前观察结果和高级命令,联合预测子任务标签(以文本形式)和操作(以子任务标签为条件)。这自然会形成一个既可以充当高级策略(输出子任务),又可以充当执行这些子任务操作低级策略的模型。还标记当前观察结果中显示的相关边框,并在预测子任务之前训练 π0.5 对其进行预测。

多模态网络数据 (WD)。最后,在预训练中引入一组多样化的网络数据,涉及图像字幕制作(CapsFusion [87]、COCO [12])、问答(Cambrian-7M [77]、PixMo [19]、VQAv2 [32])和目标定位。对于目标定位,进一步扩展标准数据集,添加带有边框注释的室内场景和家用目标的网络数据。

对于所有动作数据,训练模型预测目标关节和末端执行器的姿势。为了区分这两者,在文本提示中添加“<控制模式>关节/末端执行器<控制模式>”。使用单个数据集每个动作维度的 1% 和 99% 分位数,所有动作数据都归一化到 [-1, 1]。将动作 a 的维数设置为固定数,以适应所有数据集中最大的动作空间。对于具有低维配置和动作空间的机器人,对动作向量进行零填充。

后训练

在使用离散 token 对模型进行 28 万个梯度步长的预训练后,进行第二阶段的训练,称之为后训练。此阶段的目的是使模型针对用例(家庭中的移动设备操作)进行专业化,并添加一个能够通过流匹配生成连续动作块的动作专家。此阶段与下一个 token 预测联合训练,以保留文本预测能力,并为动作专家进行流匹配(在后训练开始时使用随机权重初始化)。优化前面组合损失的目标函数,使 α = 10.0,并额外训练 8 万个梯度步长。后训练动作数据集包含 MM 和 ME 机器人数据,并筛选出长度低于固定阈值的成功事件。加入网络数据 (WD) 以保留模型的语义和视觉能力,以及与多环境数据集对应的 HL 数据切片。此外,为了提升模型预测合适高级子任务的能力,收集口头指令演示 (VI)。这些演示由专家用户构建,提供“语言演示”,选择合适的子任务命令,逐步指挥机器人执行移动操作任务。这些示例是通过实时“遥操作”机器人,使用语言执行已学习的低级策略来收集的,本质上是为已训练策略提供良好的高级子任务输出演示。

机器人系统细节

如图展示在移动操控实验中使用的机器人系统。所有实验均采用两种类型的移动操控器。两个平台均配备两个 6 自由度(DOF)机械臂,机械臂配备平行钳口夹持器和腕式单目RGB摄像头、一个轮式完整基座以及一个躯干升降机构。基座的状态和动作空间分别对应线性(二维)和角(一维)速度,躯干升降机构则为一维(上下)或二维(上下和前后)。除了两个腕式摄像头外,机器人还在机械臂之间安装前后摄像头。用所有四个摄像头进行高级推理,腕式摄像头和前向摄像头进行低级推理。状态和动作空间的总维数为18或19,具体取决于平台。

请添加图片描述

控制系统非常简单:π0.5 模型直接控制手臂、夹持器和躯干升降的目标姿态,以及 50 Hz(带动作分块)的目标基准速度。这些目标通过简单的 PD 控制器进行跟踪,无需任何额外的轨迹规划或碰撞检测。所有操作和导航控制均为端到端。

π0.5 模型旨在泛化到新环境。虽然在与训练数据匹配的环境中评估 VLA 很常见,但所有的实验都是在训练中未曾见过的新环境中进行的。为了进行定量比较,使用一组模拟家庭环境来提供可控且可重复的设置,而最真实的最终评估是在三个不属于训练集的真实家庭中进行的(如图所示)。

请添加图片描述

π0.5 的泛化能力表明,这种协同训练方法能够促进有效的迁移,仅使用中等规模的移动操作数据集即可实现对移动机械手的高度泛化控制。π0.5 并非没有局限性。虽然 VLA 展现出泛化能力,但它仍然会犯错。某些环境会持续带来挑战(例如,不熟悉的抽屉把手,或者机器人难以打开的橱柜),某些行为会给部分可观测性带来挑战(例如,机械臂遮挡应该擦拭的溢出物),并且在某些情况下,高级子任务推理很容易分散注意力(例如,在收拾物品时多次打开和关闭抽屉)。通过更好的协同训练、迁移和更大的数据集来应对这些挑战,是未来工作的一个有希望的方向。

其他未来的工作方向可以解决方法的技术限制。虽然 π0.5 可以执行各种行为来清洁厨房和卧室,但它处理的提示相对简单。模型能够适应的提示的复杂度取决于训练数据,并且可以通过生成更复杂、更多样化的注释(使用人工标注器或合成方法)来整合更复杂的偏好和指令。该模型也使用相对有限的上下文,而融入更丰富的上下文和记忆,可以显著提升模型在部分可观测性更强的场景下的表现,例如需要在不同房间之间导航或记住物品存放位置的任务。更广泛地说,π0.5 探索的是异构数据源的特定组合,但具体的数据源可以进行更广泛的探索。例如,系统能够从口头指令中学习,这提供一种强大的新监督模式,未来的研究可以探索这种模式,以及人类能够为机器人提供额外上下文知识的其他方式。

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

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

相关文章

使用 OpenCV 和 dlib 进行人脸检测

文章目录 1. 什么是 dlib2. 前期准备介绍2.1 环境准备2.2 dlib 的人脸检测器 3. 代码实现3.1 导入库3.2 加载检测器3.3 读取并调整图像大小3.4 检测人脸3.5 绘制检测框3.6 显示结果 4. 完整代码5. 优化与改进5.1 提高检测率5.2 处理 BGR 与 RGB 问题 6. 总结 人脸检测是计算机视…

spring 的PropertySource 类与 @PropertySource 注解详解与对比

PropertySource 类与 PropertySource 注解详解与对比 在这里插入图片描述 一、PropertySource 类详解 1. 类型与作用 类型&#xff1a;接口&#xff08;org.springframework.core.env.PropertySource&#xff09;作用&#xff1a;抽象配置数据源&#xff0c;提供统一的键值…

Java后端开发day37--源码解析:TreeMap可变参数--集合工具类:Collections

&#xff08;以下内容全部来自上述课程&#xff09; 1. TreeMap 1.1 须知 1.1.1 Entry 节点初始为黑色&#xff1a;提高代码阅读性 1.1.2 TreeMap中的成员变量 comparator&#xff1a;比较规则root&#xff1a;红黑树根节点的地址值size&#xff1a;集合的长度和红黑树…

基于Playwright的浏览器自动化MCP服务

一、服务定位与核心功能 github.com/executeautomation/mcp-playwright 是一个基于 Playwright&#xff08;微软开源的跨浏览器自动化测试框架&#xff09;的 Model Context Protocol (MCP) 服务&#xff0c;核心功能是将浏览器自动化能力集成到大语言模型&#xff08;LLM&…

OSPF网络协议

OSPF&#xff08;Open Shortest Path First&#xff09;是一种链路状态路由协议&#xff0c;属于IGP&#xff08;内部网关协议&#xff09;&#xff0c;用于在单一自治系统&#xff08;AS&#xff09;内动态分发路由信息。它通过计算最短路径&#xff08;基于Dijkstra算法&…

Ubuntu 22.04.4操作系统初始化详细配置

上一章节&#xff0c;主要讲解了Ubuntu 22.04.4操作系统的安装&#xff0c;但是在实际生产环境中&#xff0c;需要对Ubuntu操作系统初始化&#xff0c;从而提高系统的性能和稳定性。 一、查看Ubuntu系统版本和内核版本 # 查看系统版本 testubuntu:~$ sudo lsb_release -a Rel…

【Linux应用】开发板快速上手:镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互(RADXA ZERO 3为例)

【Linux应用】开发板快速上手&#xff1a;镜像烧录、串口shell、外设挂载、WiFi配置、SSH连接、文件交互&#xff08;RADXA ZERO 3为例&#xff09; 参考&#xff1a; ZERO 3 | Radxa Docs 大部分的Linux开发板等设备都大同小异 如树莓派、香橙派、STM32MP135的Linux开发板等 …

Redis使用总结

NoSQL 1.1为什么要用NoSQL 面对现在用户数据的急剧上升&#xff0c;我们需要对这些用户数据进行挖掘&#xff0c;传统的关系型数据库已经不适合这些 应用了.Nosql 的发展可以很了的处理这些大的数据. 1.2什么是NoSQL Not Only Sql->NoSQL(不仅仅是SQL) 非关系型数据库.随…

Unity ML-Agents + VScode 环境搭建 Windows

安装Unity 先去官网下载Unity Hub&#xff0c;然后安装在D盘就可以了&#xff0c;你需要手机上安装一个Unity Connect进行账号注册。 详细的注册可以参考&#xff1a; https://blog.csdn.net/Dugege007/article/details/128472571 注册好了以后登入电脑端的Unity Hub&#x…

Linux电源管理(2)_常规的电源管理的基本概念和软件架构

原文&#xff1a; Linux电源管理(2)_Generic PM之基本概念和软件架构 1. 前言 Linux系统中那些常规的电源管理手段&#xff0c;包括关机&#xff08;Power off&#xff09;、待机&#xff08;Standby or Hibernate&#xff09;、重启&#xff08;Reboot&#xff09;等。这些…

机器学习基础理论 - 分类问题评估指标

几个定义:混淆矩阵 TP: True Positives, 表示实际为正例且被分类器判定为正例的样本数FP: False Positives, 表示实际为负例且被分类器判定为正例的样本数FN: False Negatives, 表示实际为正例但被分类器判定为负例的样本数TN: True Negatives, 表示实际为负例且被分类…

在线教育系统开发常见问题及解决方案:源码部署到运营维护

当下&#xff0c;越来越多的教育机构、企业培训部门以及创业者&#xff0c;选择开发属于自己的在线教育系统。然而&#xff0c;从源码部署到实际运营&#xff0c;整个过程中常常会遇到一系列技术与管理难题。今天&#xff0c;笔者将从在线教育系统源码维护、运营等几个方向为大…

RAG(Retrieval-Augmented Generation,检索增强生成)

RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;是一种结合 信息检索 和 文本生成 的技术&#xff0c;旨在提升大语言模型&#xff08;LLM&#xff09;生成内容的准确性和时效性。其核心思想是&#xff1a;先检索相关知识&#xff0c;再基…

项目实战 -- 状态管理

redux基础 还记得好久好久之前就想要实现的一个功能吗&#xff1f; 收起侧边栏折叠菜单&#xff0c;没错&#xff0c;现在才实现 因为不是父子通信&#xff0c;所以处理起来相对麻烦一点 可以使用状态树或者中间人模式 这就需要会redux了 Redux工作流&#xff1a; 异步就…

Go语言之路————指针、结构体、方法

Go语言之路————指针、结构体、方法 前言指针结构体声明初始化使用组合引用结构体和指针结构体的标签 方法例子结合结构体总结 前言 我是一名多年Java开发人员&#xff0c;因为工作需要现在要学习go语言&#xff0c;Go语言之路是一个系列&#xff0c;记录着我从0开始接触Go…

[创业之路-390]:人力资源 - 社会性生命系统的解构与重构:人的角色嬗变与组织进化论

前言&#xff1a; 人、财、物、信息、机制、流程、制度、方法共同组合了一个持续的消耗资源、持续的价值创造、持续面临生存与发展、遗传与变异的社会性生命系统。 "人"是所有社会性生命系统最最基础性的要素&#xff0c;它弥漫在系统中多维立体空间的不同节点上&am…

JS执行器在UI自动化测试中的应用

前言 在进行UI自动化过程会遇到滚动条下拉、隐藏元素定位、只读属性元素的编辑、富文本处理等&#xff0c;此时可以使用JS执行器简化我们的一些处理操作。 具体应用 JS执行器的使用步骤&#xff1a; 1.先写个JS脚本&#xff0c;如果需要获取操作后的值&#xff0c;JS脚本前面…

解析Suna:全球首款开源通用AI智能体

导语&#xff1a; 嘿&#xff0c;哥们儿&#xff0c;最近 AI Agent 这块儿挺火的&#xff0c;有个叫 Suna 的开源项目冒出来挺快&#xff01;听说只用了 3 周就开发出来了&#xff0c;但功能上感觉已经能跟那个商业版的 Manus掰掰手腕了。它能帮你搞定浏览器自动化、管文件、爬…

模板方法模式:定义算法骨架的设计模式

模板方法模式&#xff1a;定义算法骨架的设计模式 一、模式核心&#xff1a;模板方法定义算法骨架&#xff0c;具体步骤延迟到子类实现 在软件开发中&#xff0c;经常会遇到这样的情况&#xff1a;某个算法的步骤是固定的&#xff0c;但具体步骤的实现可能因不同情况而有所不…

浅谈Java 内存管理:栈与堆,垃圾回收

在Java编程世界里&#xff0c;内存管理是一项极为关键的技能&#xff0c;它就像程序运行背后的“隐形守护者”&#xff0c;默默影响着程序的性能与稳定性。今天&#xff0c;咱们就来简单学习一下Java内存管理中的两大核心要点&#xff1a;栈与堆的内存分配机制&#xff0c;以及…