RoboVLM——通用机器人策略的VLA设计哲学:如何选择骨干网络、如何构建VLA架构、何时添加跨本体数据

news2025/1/31 8:18:31

前言

本博客内解读不少VLA模型了,包括π0等,且如此文的开头所说

前两天又重点看了下openvla,和cogact,发现

  • 目前cogACT把openvla的动作预测换成了dit,在模型架构层面上,逼近了π0
  • ​那为了进一步逼近,感觉可能会有人把cogACT中的VLM模块(dinov2+sigclip+llama2)换成paligemma

总之,各种vlm + 各种动作预测头/方法,会出来很多vla

当然,各种VLA我在本文的开头已经详细介绍过,可以参看《GRAPE——RLAIF微调VLA模型:通过偏好对齐提升机器人策略的泛化能力(含24年具身模型汇总)》

而适用于通用机器人策略的VLA也不是随意设计的,背后都有一整套的设计哲学、逻辑、方法论,本文便基于RoboVLMs——其对应的论文为《Towards Generalist Robot Policies: What Matters inBuilding Vision-Language-Action Models》,探讨这背后的设计哲学

尽管有的设计哲学——动作空间是连续的还是离散的,在之前诸多模型的效果PK上,我们早已看出来,但为系统起见,还是也放在本文的介绍中

第一部分 RoboVLMs

1.1 引言与相关工作

1.1.1 VLM骨干和结构的研究

在构建通用机器人策略的其中一种途径是基于VLM微调并进行一定的架构调整来学习机器人基础模型,从而最终成为VLA

而这个途径之所以广受欢迎,在于VLMs在通过对网络规模数据的广泛训练中展示了学习多模态数据(如文本、图像/视频)的通用且鲁棒的表示的强大能力。这种能力可以激发机器人基础模型的适应,以弥合高度多样化的开放世界场景和有限的机器人数据之间的差距

然而,大规模视觉-语言预训练在多大程度上促进通用机器人策略仍然是一个未解决的问题。此外,伴随着不同类型的LLM骨干、训练数据、模型规模、架构和训练方案,迅速涌现出大量多样化的不同VLMs

故,哪种VLM骨干更适合机器人操作也是成功开发VLAs的一个关键问题

除了不同骨架的多样性之外,对于通用机器人策略,包括VLA,其结构更加复杂且形式多样

基于现有的最流行的工作[4-π0,7-Rt-2,20-Vima,22-Openvla,24-Vision-language foundation models as effective robot imitators,34-R3m,35-Open x-embodiment,39-Octo,47-Unleashing large-scale video generative pre-training for visual robot manipulation,55-3d-vla]——这其中大部分的工作,都可以在此文 《GRAPE——RLAIF微调VLA模型:通过偏好对齐提升机器人策略的泛化能力(含24年具身模型汇总)》开头的总结里看到对应的介绍链接

作者提出了一种分类方法,基于

  1. 历史和动作信息如何在VLA中被整合
  2. 动作空间是连续的还是离散的

如下图图2所示,考虑了4种结构形式「根据两个主要层次对VLA结构进行分类:1)动作空间(纵轴);2)是否整合了历史信息(横轴)——比如左边是one-step 右边是historical。此外,对于涉及历史的VLAs,根据历史信息的组织模式将涉及历史的VLAs分为策略头和交错形式。请注意,这种分类不仅考虑了从预训练的VLMs中派生的模型,还包括那些虽然没有在VLMs上预训练(因此不被称为VLAs),但可以为将VLMs转变为VLAs提供见解的策略架构

对于历史信息建模,识别出两种形式:

  1. 一步建模one-step modeling——见上图左侧●,仅利用当前状态或观察来产生动作;
  2. 历史建模history modeling,处理历史状态或观察的滑动窗口

关于历史信息的聚合,将其分为两种方法:

  1. 交错建模interleaved modeling▲——见上图右上角、右下角,将历史观察和动作序列以交错格式整合
  2. 策略头policy head ▀——见上图中间偏右上,分别处理每个历史步骤,并在一个独立的策略头中融合信息以进行动作预测

不同的结构以不同的方式利用预训练的VLMs。因此,当面临不同类型的环境和任务时,它们在鲁棒性、泛化能力和数据效率方面可能具有不同的特征

1.1.2 数据的质量、多样性、跨本体数据、训练方法的研究

除了VLA本身,用于开发VLA的训练数据的质量和多样性同样重要。随着著名VLA的近期进展[4-π0,7-Rt-2,22-Openvla,35-Open x-embodiment,39-Octo],来自不同来源的大规模数据对于在对抗分布外任务和环境的鲁棒性和泛化方面进一步提高性能非常重要

然而,它们在详细的训练方法上存在很大差异:一些利用额外的数据进一步预训练VLMs,使表示更接近机器人操作任务[4-π0],而另一些则与领域内任务共同训练VLA[7-Rt-2,22-Openvla,35-Open x-embodiment,39-Octo]

此外,通过充分预训练在多样化操作技能上,期望机器人策略能以最少的示范学习新技能[13]。因此,在开发高效VLA的情况下,何时利用大规模跨化身数据成为一个有趣的问题

为了彻底研究上述问题并找到VLA的最有效解决方案,作者的研究选择了4种VLA结构、8种不同骨架和3种不同的训练数据方案来训练VLA模型

1.1.3 RoboVLMs:使任何VLM能轻松集成到VLA中

在作者的实验中,他们提出了一个新的框架,RoboVLMs,将VLM转移到VLA,并提供了一个统一、灵活、易于使用的开源框架,使任何VLM能轻松集成到VLA中,几乎不需要额外努力,允许机器人从业者研究、比较和部署未来的VLA

此外,他们还在一个自收集的真实世界机器人操作数据集上训练和评估了建成的VLA,该数据集由100个操作任务和总共74K条轨迹组成

  1. 具体来说,他们最初选择了三个常用的VLMs——LLaVA、Flamingo和KosMos 作为骨架,将它们与四种VLA结构结合起来,检查动作空间、观察视野和历史聚合方法的效果

    对于应该如何制定VLA
    通过广泛的研究和实验,连续动作始终优于自回归离散动作,同时结合历史背景对于提高性能和解决部分可观测性至关重要

    发现连续动作空间的策略头建模表现最佳后,又比较了8种不同的VLMs作为骨架与策略头形式,以回答哪个骨架更适合

    对于哪种VLM骨干更适合用于VLA
    作者对8种不同的VLM骨干进行的广泛研究显示,两种杰出的VLM骨干,即KosMos [36]和Paligemma [3],显著优于其他骨干。这些结果强调,全面的视觉-语言预训练对于实现卓越的VLA性能至关重要
  2. 同时,比较了不同VLA结构的泛化和数据效率
    对于模型架构,直接与策略头集成的视觉-语言模型(VLM)表现优于其他形式,因为一致使用,即视觉-语言token应以其原始预训练格式进行处理,并添加策略头以整合过去的视觉和本体感知观察以进行有效决策

    对于数据效率
    更大的VLM进一步提高效率,需更少的数据即可实现更高的性能
  3. 对于何时利用跨化身数据的问题
    虽然普遍认为使用跨体数据进行预训练或后训练能提高性能,但这一观点尚未得到严格验证。他们的研究结果表明,使用跨体数据进行预训练并不总能显著改善最终性能。然而,在目标数据集上对跨体预训练模型进行后训练可以显著提高性能

    故作者比较了
    \rightarrow  预训练(使用Open X-Embodiment训练的VLA)
    \rightarrow  微调(使用目标数据集训练的VLA)
    \rightarrow  后训练(使用Open X-Embodiment预训练并进一步用目标数据集微调的VLA)——相当于预训练 + 微调
  4. 最后,为了确认具有最佳配置的VLA在真实世界中的适用性,作者在真实世界机器人操作场景中训练和评估了它们,展示了在
    1)未见的干扰物
    2)未见的背景
    3)未见的目标对象
    4)新技能描述方面的泛化能力

此外,利用相同机器人或任务的操作数据可以明显提升性能

例如,模块化方法利用预训练的视觉和语言模块来编码多模态输入的潜在表示 [6- Rt-1,31-What matters in language conditioned robotic imitation learning over unstructured data],而替代方法则依赖于使用多样化的机器人数据集进行直接训练 [39-Octo]。即使在VLA研究中,对于架构或训练方案也没有共识 [7-Rt-2, 8-Gr-2, 22-Openvla, 24-Vision-language foundation models as effective robot imitators]

1.2 主要结果及发现

利用RoboVLMs这个框架,作者进行了广泛的实验以解决几个关键问题

  1. 为什么更喜欢 VLA?
  2. 应该如何制定 VLA?
  3. 哪种 VLM 主干更适合 VLA?
  4. 应该何时利用跨实体数据集?

如下表 I 所示

作者进一步将 4 个基本问题分为 6 个研究问题,并实施 VLA 的连续实验以回答每个研究问题。使用适当的主干和结构构建的 VLA 模型可以大幅超越最新的通用机器人策略

为了全面评估 VLA 的性能,在这项工作中,作者对所有模型进行了基准测试,具体而言,如下图图 3 所示

选择了两个知名且广泛使用的模拟基准(CALVIN[32] 和 SimplerEnv[40])以及一个现实世界的机器人操作实验来评估 VLA 模型

  • CALVIN[32] 是一个用于多任务桌面操作的模拟基准,数据集根据不同的场景设置分为 A、B、C和 D 四个部分,并提供 34 个基本任务,总共包含 24K 人工远程操作演示,并附有语言指令注释
    评估指标包括完成1 ∼5 个连续任务的成功率,以及成功执行的任务平均数量(简称为Avg. Len.)
  • 真实机器人基准测试[8]包括超过70K的远程操作人类轨迹,用于微调机器人策略,涵盖105个操作任务
    为了评估模型在该基准测试上的性能,采用[23- Gr-mg: Leveraging partially annotated data via multi-modal goal conditioned policy]中概述的方法,在一个简单设置和四个具有挑战性的未见设置中测试每个模型

    这些设置的示例如下图图4所示

    总共,在20个任务中评估每个VLA,每个任务有5个设置,每个设置有3次执行,并报告每个设置的平均成功率。基准测试的详细描述见附录K和附录D。这些基准测试中包含的所有任务都由单臂机器人驱动,导致7个自由度的动作——夹持器的6D姿态和一维的开/关状态。机器人观测可以从本体感受器信息、视觉观测和语言输入中获得

1.2.1 为什么偏爱VLA?——是否合适构建通用策略、现实世界中的表现如何

1.2.1.1 是否合适构建通用策略

关于为什么需要VLA?可以先回答

问题1:VLA是否是构建通用机器人策略的合适选择?

具体来说,作者展示了研究中表现最好的VLA,它在CALVIN和SimplerEnv基准测试中创造了新的最先进成果,以明显优势超越了所有其他机器人策略

所有结果如表II和图5所示「在CALVIN基准上的模拟性能,所有模型均在拆分ABCD/ABC上训练,并在拆分D上评估。KosMos P.H.代表使用KosMos-2作为骨干和策略头作为架构的VLA,且使用RoboVLMs框架构建,最大训练5个周期——即KosMos P.H. represents the VLA utilizing KosMos-2 as backbone and policy head as architecture, built with theRoboVLMs framework, and is maximally trained for 5 epochs

从这些表格中,可以看到,RoboVLM大幅超越了现有的最先进通用策略,并为机器人操作任务在模拟和实际实验中建立了一个强有力的基准

具体来说,可以轻松观察到以下事实

  • 在CALVIN 基准测试中,RoboVLM模型在所有指标上都达到了最高性能,并在从ABC 转移到D(一个在训练分割中未见过的新场景)时展示了卓越的泛化能力,单个任务执行的绝对提升为12.6 %,连续5 个任务的总提升为30.3 %
    平均而言,在零样本设置下,RoboVLM可以在每次单独展开中完成5 个任务中的4.25 个,超越了之前的SOTA 模型(GR-1)1.09 个任务
  • 在SimplerEnv 中,RoboVLM在WidowX + Bridge 和Google Robol 环境中都实现了最高的平均性能,展示了对不同设置和多样化操作任务的普遍有效性和鲁棒性

此外,作者还研究了视觉-语言预训练对泛化和数据效率的影响(图6和表IV),详细结果见附录H

  1. 在CALVIN的泛化中,作者采用官方设置:在ABC的分割上训练模型,并在D上验证性能
  2. 为了评估数据效率,我们在模型规模从3B到9B和各种数据规模上进行实验:10%的训练数据(0.1x ABCD),标准设置(ABCD),以及500%的训练数据(5x ABCD),额外的数据来自于官方发布的未标记数据集,遵循Wu等人[47]中介绍的设置,不同数据规模的详细结果见附录E

可以看到,视觉-语言预训练对于泛化和数据效率都是至关重要的。这个观察是直观的,因为对齐的视觉-语言表示提供了一个稳固的视觉理解基础,使策略能够专注于学习操作技能。因此,可以得出结论

发现1:VLA是通用机器人策略的有前途路径

1.2.1.2 VLA在现实世界的场景中的表现如何

然而,尽管VLA在模拟中表现良好,由于模拟到现实的差距[54],VLA是否适合实际机器人应用仍然是一个未解的问题,故,作者提出第二个开放问题

问题 2:在现实世界的场景中,VLA 的表现如何?

如上所述,作者在现实世界的场景中部署了表现最佳的RoboVLM模型,即基于仅解码器KosMos的模型,以验证其有效性

如下图图4所示,作者的实验涉及20个具有多种技能的任务,包括打开、关闭、按按钮、拾取和放置等任务

对于每项任务,我们评估五次执行,包含基本设置、新技能描述、未见过的干扰因素、未见过的目标对象和未见过的背景

  • 该机器人系统用于真实实验,基于一个7自由度的Kinova Gen3机械臂,配备Robotiq 2F-85夹爪,更多关于真实机器人的细节请参见第四节
  • 输入方面,分别获取机器人头部和手腕上的两台摄像机的RGB图像
    头部摄像机提供工作空间的概览,而夹爪摄像机则提供末端执行器与环境之间交互区域的近距离观察

在真实机器人基准上微调由RoboVLMs构建的Octo-Base、OpenVLA和KosMos P.H.,并比较它们的性能。结果如图7所示

他们观察到,由RoboVLMs构建的最佳VLA(KosMos P.H.)在所有评估设置中均表现最佳,尤其是在简单和未见过的背景上,展示了其有效性和泛化能力,这与SimplerEnv和CALVIN模拟中的结果一致

至于定性结果在附录K中展示,包括各种设置下的成功执行和一些具有代表性的失败案例。KosMos P.H.不仅在基本设置任务如打开抽屉、拾取茄子等方面优于基线模型,而且在未见过的物体、干扰物和背景上也能实现更好的性能

此外,如下图图8所示

KosMos P.H. 展现出自我纠正能力,它能够识别末端执行器的不正确位置,并纠正其未来的轨迹以成功完成任务。请注意,这种能力在其他测试的基线中没有出现,而这种数据不包含在训练数据集中

如此可以得到

发现2:由RoboVLMs构建的最佳设置的VLA在实际场景中表现出强大的有效性和鲁棒性

1.2.2 如何制定VLA?策略头结合历史观测和连续动作,且提高泛化和数据效率

1.2.2.1 如何对机器人操作任务中的观测、状态和动作进行建模

更具体地说,应该如何在VLA的背景下对机器人操作任务中的观测、状态和动作进行建模?

为了解决这个问题,作者实现了几种变体,利用了各种开源VLM骨干网络,如OpenFlamingo [35]、LLaVA [28]和KosMos [36-Kosmos-2: Grounding multimodal large language models to the world]

这些变体结合了不同的历史信息建模策略和动作空间,如在Sec.I中讨论和分类的那样。CALVIN中各种VLA结构的性能总结在表III中

根据这些结果,我们得出以下关键观察:

  1. 连续动作很重要
    通过比较两种类型的动作空间,连续和离散,如表III所示,观察到在单帧公式下,连续动作空间始终优于离散动作,尤其是在任务时间跨度增加时
    这一发现是直观的:连续动作可以表示高精度的浮点值,而离散动作仅限于索引动作区间。对于长时间跨度任务,累积的复合错误显著降低了离散动作的性能
  2. 历史观察事项
    如表 III 所示,在相同的 VLM 结构下(无论是编码器-解码器还是仅解码器),将历史观察作为输入的模型始终优于一步模型,在所有任务中均实现了显著更高的成功率。这种改进不受历史融合策略的影响
    此外,增加可观察历史的长度可以提高性能,尽管会带来更高的计算开销
  3. 策略头改进历史融合
    在利用历史的公式中,交错历史公式的表现不如通过额外的策略头合并历史。假设策略头保留VLM 的原始视觉-语言融合能力,同时有效地整合历史信息
    此外,交错的公式在训练和推理过程中会导致显著更高的内存和 FLOP 成本。这表明,通过附加的策略头来结合历史信息对于 VLAs 是一种更有效和高效的方法

发现3:VLA在使用多步骤的历史观测作为输入和连续动作作为输出时,其性能最佳。为了将历史与连续动作空间结合,策略头结构表现更佳

1.2.2.2 不同的公式化如何影响VLAs的泛化和数据效率?

然而,除了性能本身之外,现代VLA面临的最重要挑战之一是实现对新对象和环境设置的泛化,这对于在各种机器人和场景中的实际部署至关重要

因此,VLA应在开放世界环境中继承VLM的泛化能力,同时在有额外域内训练样本可用时保持高数据效率。因此,他们进一步探讨以下问题

问题4:不同的公式化如何影响VLAs的泛化和数据效率?

为了解决这个问题,作者对各种VLA公式的泛化和数据效率进行了实证研究和评估,旨在为训练高性能的VLA提供实用见解

具体来说,他们通过在不同数据规模上使用CALVIN数据集训练不同架构和公式的模型,评估由RoboVLMs构建的不同VLA的泛化和数据效率

如前所述,他们重点比较交错和策略头公式——使用OpenFlamingo和KosMos骨干网络,这些配置在所有配置中显示出强大的潜力

请注意,交错的公式只能与仅解码器结构配对。图9和表IV中展示的结果导致以下观察

  • 关于泛化性能(图9),作者的最佳模型基于KosMos骨干网络,并利用策略头进行历史融合,在零样本设置中仅表现出轻微的性能下降

    相比之下,其他公式化方法则经历了显著的性能下降。这个发现强调了模型架构对泛化的显著影响
    这一结论在图5的结果中得到了进一步支持,其中评估集中的任务与新指令配对;
    以及在图7中,他们的最佳模型在所有未见任务上大幅领先于其他模型
  • 对于数据效率,他们观察到与泛化类似的趋势
    他们的最佳模型在训练数据缩减时始终实现最高性能,并且与其他公式相比,性能下降速度显著较慢
    此外,不同规模的编码器-解码器VLA比较显示,较大的模型往往更具数据效率

如此,得出

发现4:在泛化能力和数据效率方面,利用策略头进行历史融合是最好的

1.2.3 哪种VLM骨干网络更适合VLA?KosMos和Paligemma表现更好

在大规模视觉-语言数据集上训练VLMs需要极高的资源。因此,他们基于多样化选择的预训练大规模视觉-语言骨干进行VLAs,它们具有不同的架构、训练数据规模、模型大小和潜在嵌入

这些包括

  1. Flamingo模型家族[1](编码器-解码器)
  2. 以及一系列仅解码器的VLMs,包括LLaVA[28]、Qwen-VL[2]、MoonDream[44]、UForm[41]、Paligemma[3]和KosMos[36]

值得注意的是,在本节中,为了公平比较,所有模型均使用静态图像进行训练,而非同时使用静态和手持相机。尽管这种方法可能无法提供完全受控的比较,但他们的广泛实验旨在提供关于不同VLM骨干对VLA影响的见解

结果如表V所示,揭示了以下观察

KosMos和Paligemma表现出明显更好的性能:从表V可以看出,这两个骨干比其他骨干有显著的优势。它们的优越性能得益于在大型视觉语言数据集上进行的充分视觉语言预训练——也从侧面解释了为何目前的vla sota模型π0,选择PaliGemma作为其中的VLM结构部分的原因

这一结果是直观的,因为广泛的预训练促进了视觉和语言特征之间更强的对齐——这种对齐对语言条件操控任务至关重要

从而也就说明了

发现5:VLAs从VLMs主干的“大型视觉语言数据集上进行的充分视觉语言预训练”中受益

1.2.4 应该何时利用跨实体数据集?大规模跨体预训练可提高机器人操作和泛化能力

在最近的研究中,利用大规模跨形态机器人操作数据集来提高VLAs的性能已成为一种主流趋势[4-π0, 7- Rt-2, 22-Openvla, 35- Open x-embodiment]。然而,是否真正有帮助仍不完全清楚,一个重要的问题仍然存在:

问题6:大规模跨形态数据集如何对VLAs做出贡献?

为了解决这个问题,作者将其分解为两个子问题:

  1. 从大规模跨载体数据集中获取哪些类型的数据对构建VLA最有利?
  2. 何时以及如何有效地利用这些数据?

在本节中,他们进行了一系列实验,以研究使用外部大规模跨实体数据集的不同策略。具体来说,作者探讨了两种主要的设置

  • 预训练:使用领域内操作数据和跨实体数据集对模型进行预训练。这种方法已在RT-2 [7]、OpenVLA [22] 和OCTO[39] 中进行探索
    ——如下图所示,该图来自此文《GRAPE——RLAIF微调VLA模型:通过偏好对齐提升机器人策略的泛化能力(含24年具身模型汇总)》的开头

  • 后训练:首先在跨实体数据集上训练VLMs,然后通过领域内操作任务进行微调。这一策略已被π0 [4] 采用

本节中的实验使用表现最佳的KosMos骨干网与用于历史融合的策略头作为基础模型。他们使用Open X-Embodiment (OXE) [35] 作为跨实体数据集,该数据集包含了全球收集的多种机器人操作数据,是最近研究中使用最广泛的[比如广泛应用于4-π0, 7- Rt-2, 22-Openvla, 39-Octo]

为了进行比较,他们还评估了一个基线设置Finetune,其中VLA仅在域内数据上进行训练

此外,对于Google Robot,包括了RT Partial Finetune和RT Finetune

  • 其中RT Partial Finetune仅涉及与评估任务相同任务类型的轨迹
  • 而RT Finetune涉及使用来自同一机器人在不同任务中的额外数据对策略进行协同微调
    and RT Finetune involves co-fine tuning the policy with additional data from the same robot across different task

对于Bridge,只评估Bridge Finetune,它使用整个Bridge-V2数据集微调策略,因为训练数据集中不包含具有相同评估任务指令的轨迹

为了更全面地评估跨体数据集的影响,他们还在CALVIN上进行了实验,CALVIN不属于OXE。对于CALVIN,他们省略了共同训练设置,主要关注跨体数据集是否有利于机器人操控在分布外任务上的少样本学习

因此,他们在CALVIN上仅使用每个任务10条轨迹进行实验(CALVIN少样本)

为了保持设置一致,他们仅使用来自静态头顶摄像头的图像作为输入。在不同训练阶段利用跨化身的比较如图10所示

从上到下,该图显示了SimplerEnv-Google Robot和SimplerEnv-Bridge的评估结果。此外,关于是否在CALVIN few-shot上整合跨化身预训练的比较如图11所示

可以得出以下观察结果

  1. 使用跨体现数据进行预训练并没有显著帮助
    比较OXE Pre-train和RT-Partial Finetune可以发现,对于谷歌机器人和Bridge,使用跨体现数据进行共同训练并没有带来实质性的性能提升
    特别是对于谷歌机器人来说,使用额外的领域内数据进行训练(RT Finetune)——即便是来自不同任务的数据——也能实现更高的成功率(相比于RT-Partial Finetune)
    这表明领域内

    即使是与任务无关的数据,也比跨载体数据更有效地提高模型性能
  2. 在跨载体预训练后进行后训练显示出潜在的好处
    后训练模型的平均性能(在Google Robot 上为52 %,在Bridge 上为38 %)超过了仅在域内数据上微调的模型(在Google Robot 上为48 %,在Bridge 上为31 %)
    这表明跨载体预训练可以提供一个有用的初始化,从而有利于随后的微调
  3. 预训练提高了少样本学习性能
    在CALVIN 的少样本设置中,使用单视角头部摄像头,预训练显著提高了性能,单任务执行提高了17.2 %,每次回合多执行0.25 个任务
    可以得出结论,在大规模跨载体数据集上进行预训练有利于学习更有效的机器人操作表示,这可以快速适应包含未见过的物体和环境设置的新操作任务

从而得出发现6

发现6:即使来自不同任务的额外领域内数据也显示出有益,并且大规模跨体现预训练进一步提高了整体以及少样本性能

// 待更

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

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

相关文章

MySQL--》深度解析InnoDB引擎的存储与事务机制

目录 InnoDB架构 事务原理 MVCC InnoDB架构 从MySQL5.5版本开始默认使用InnoDB存储引擎,它擅长进行事务处理,具有崩溃恢复的特性,在日常开发中使用非常广泛,其逻辑存储结构图如下所示, 下面是InnoDB架构图&#xf…

SpringCloudAlibaba 服务保护 Sentinel 项目集成实践

目录 一、简介1.1、服务保护的基本概念1.1.1、服务限流/熔断1.1.2、服务降级1.1.3、服务的雪崩效应1.1.4、服务的隔离的机制 1.2、Sentinel的主要特性1.3、Sentinel整体架构1.4、Sentinel 与 Hystrix 对比 二、Sentinel控制台部署3.1、版本选择和适配3.2、本文使用各组件版本3.…

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置,实现点灯实验。 新建文件 LED.c、LED.h文件,将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件,这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…

MFC结构体数据文件读写实例

程序功能将结构体内数组数据写入文件和读出 2Dlg.h中代码: typedef struct Student {int nNum[1000];float fScore;CString sss;}stu; class CMy2Dlg : public CDialog { // Construction public:CMy2Dlg(CWnd* pParent NULL); // standard constructorstu stu1; ... } 2Dl…

jemalloc 5.3.0的tsd模块的源码分析

一、背景 在主流的内存库里,jemalloc作为android 5.0-android 10.0的默认分配器肯定占用了非常重要的一席之地。jemalloc的低版本和高版本之间的差异特别大,低版本的诸多网上整理的总结,无论是在概念上和还是在结构体命名上在新版本中很多都…

编程题-最长的回文子串(中等)

题目: 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。示例 2: 输入:s &…

爱书爱考平台说明

最近我开发了一个综合性的考试平台,内容包括但不限于职业资格证考试、成人教育、国家公务员考试等内容。目前1.0版本已经开发完成,其他的功能陆续完善中。 微信小程序搜索"爱书爱考" 微信小程序图标如下图: 目前维护了java相关的面试题的考题…

JUC--ConcurrentHashMap底层原理

ConcurrentHashMap底层原理 ConcurrentHashMapJDK1.7底层结构线程安全底层具体实现 JDK1.8底层结构线程安全底层具体实现 总结JDK 1.7 和 JDK 1.8实现有什么不同?ConcurrentHashMap 中的 CAS 应用 ConcurrentHashMap ConcurrentHashMap 是一种线程安全的高效Map集合…

Sklearn 中的逻辑回归

逻辑回归的数学模型 基本模型 逻辑回归主要用于处理二分类问题。二分类问题对于模型的输出包含 0 和 1,是一个不连续的值。分类问题的结果一般不能由线性函数求出。这里就需要一个特别的函数来求解,这里引入一个新的函数 Sigmoid 函数,也成…

Spring Boot 自定义属性

Spring Boot 自定义属性 在 Spring Boot 应用程序中,application.yml 是一个常用的配置文件格式。它允许我们以层次化的方式组织配置信息,并且比传统的 .properties 文件更加直观。 本文将介绍如何在 Spring Boot 中读取和使用 application.yml 中的配…

1.2第1章DC/DC变换器的动态建模-1.2Buck-Boost 变换器的交流模型--电力电子系统建模及控制 (徐德鸿)--读书笔记

1.2 Buck-Boost 变换器的交流模型 Buck- Boost变换器是一种典型的DC/DC变换器,具有升压和降压功能其输出电压的极性与输入电压相反,见图1-4a。当电感L的电流i(t)连续时一个开关周期可以分为两个阶段。在阶段1,开关在位置1时,即&am…

数据结构:二叉树—面试题(一)

目录 1、相同的树 2、另一棵树的子树 3、翻转二叉树 4、平衡二叉树 5、对称二叉树 6、二叉树遍历 7、二叉树的分层遍历 1、相同的树 习题链接https://leetcode.cn/problems/same-tree/description/ 描述: 给你两棵二叉树的根节点 p 和 q ,编写一…

LangChain概述

文章目录 为什么需要LangChainLLM应用开发的最后1公里LangChain的2个关键词LangChain的3个场景LangChain的6大模块 为什么需要LangChain 首先想象一个开发者在构建一个LLM应用时的常见场景。当你开始构建一个新项目时,你可能会遇到许多API接口、数据格式和工具。对于…

Java基于SSM框架的互助学习平台小程序【附源码、文档】

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

lightweight-charts-python 包 更新 lightweight-charts.js 的方法

lightweight-charts-python 是 lightweight-charts.js 的 python 包装,非常好用 lightweight-charts 更新比较频繁,导致 lightweight-charts-python 内置的 lightweight-charts 经常不是最新的。 新的 lightweight-charts 通常可以获得性能改进和bug修复…

React第二十七章(Suspense)

Suspense Suspense 是一种异步渲染机制,其核心理念是在组件加载或数据获取过程中,先展示一个占位符(loading state),从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载:通过代码分包实现组件…

解决报错“The layer xxx has never been called and thus has no defined input shape”

解决报错“The layer xxx has never been called and thus has no defined input shape”(这里写自定义目录标题) 报错显示 最近在跑yolo的代码时遇到这样一个错误,显示“the layer {self.name} has never been called”.这个程序闲置了很久,每次一遇到…

【AI论文】FilmAgent: 一个用于虚拟3D空间中端到端电影制作自动化的多智能体框架

摘要:虚拟电影制作涉及复杂的决策过程,包括剧本编写、虚拟摄影以及演员的精确定位和动作设计。受近期基于语言智能体社会的自动化决策领域进展的启发,本文提出了FilmAgent,这是一个新颖的、基于大型语言模型(LLM&#…

hive:数据导入,数据导出,加载数据到Hive,复制表结构

hive不建议用insert,因为Hive是建立在Hadoop之上的数据仓库工具,主要用于批处理和大数据分析,而不是为OLTP(在线事务处理)操作设计的。INSERT操作会非常慢 数据导入 命令行界面:建一个文件 查询数据>>复制>>粘贴到新…

VUE之路由Props、replace、编程式路由导航、重定向

目录 1、路由_props的配置 2、路由_replaces属性 3、编程式路由导航 4、路由重定向 1、路由_props的配置 1)第一种写法,将路由收到的所有params参数作为props传给路由组件 只能适用于params参数 // 创建一个路由器,并暴露出去// 第一步…