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

【论文阅读】Grounding Language with Visual Affordances over Unstructured Data

Abstract

最近的研究表明,大型语言模型(llms)可以应用于将自然语言应用于各种各样的机器人技能。然而,在实践中,学习多任务、语言条件机器人技能通常需要大规模的数据收集和频繁的人为干预来重置环境或帮助纠正当前的policies。在这项工作中,我们提出了一种新的方法,通过利用自我监督的视觉语言启示 visuo-lingual affordance模型,从现实世界中的非结构化、离线和无重置数据中有效地学习通用语言条件机器人技能,该模型只需要用语言注释总数据的1%。我们在模拟和现实世界的机器人任务中进行了广泛的实验,评估了我们的方法,在具有挑战性的calvin基准上实现了最先进的性能,并在现实世界中使用单个policy学习了25个不同的视觉运动操作任务。我们发现,当与llm结合使用,通过少镜头提示将抽象的自然语言指令分解为子目标时,我们的方法能够在现实世界中完成长时间、多层的任务,同时需要的数据比以前的方法少一个数量级。代码和视频可在http://hulc2.cs.uni-freiburg.de.        

I. INTRODUCTION

大规模语言建模的最新进展在将世界语义知识桥接到机器人指令跟随和规划[1]、[2]、[3]方面产生了有希望的结果。实际上,使用大型语言模型 (llm) 进行规划需要拥有大量不同的低级行为,这些行为可以无缝地组合在一起以智能地在现实世界中行动。学习这种感觉运动技能并以语言为基础通常需要大量大规模的数据收集工作[1],[2],[4],[5],频繁的人工干预,将技能限制为模板拾取和放置操作[6],[7],或在更简单的模拟环境[8],[9],[10]中部署policies。人类明显简单的任务,如将水倒入杯子中,很难教机器人做,也被称为moravec悖论[11]。这就提出了一个问题:我们如何以可扩展和数据高效的方式在现实世界中学习各种视觉运动技能,如下所示指令?

先前的研究表明,将机器人操作分解为语义和空间路径[12],[13],[6],提高了多模态信息的泛化、数据效率和理解。受这些路径架构的启发,我们提出了一种新颖的、样本高效的方法,通过利用自监督的视觉语言启示模型,从现实世界中的非结构化、离线和无重置数据中学习通用语言条件机器人技能。我们的主要观察结果是,我们可以用一个基于语义概念的高级流和一个基于3D空间交互知识的低级流来分层分解目标达成问题,而不是通过扩展数据收集来学习如何使用单个端到端模型从任何当前状态达到任何可实现的目标状态[14],如图1所示。

图1:当与大型语言模型配对时,hulc++能够从现实世界中的抽象自然语言指令中完成长期、多层任务,例如“整理工作空间”,而无需额外培训。我们利用视觉启示模型将机器人引导到语言所指的可操作区域附近。一旦进入这个区域,我们就会切换到一个7-dof语言条件视觉运动器policy,它是从离线、非结构化数据中训练出来的。

具体来说,我们提出了分层通用语言条件策略 Hierarchical Universal Language Conditioned Policies 2.0(hulc++),这是一个分层语言条件agent,它将hulc[10]的任务无关控制与vapo[13]的以对象为中心的语义理解相结合。hulc是一个state-of-the-art语言条件模仿学习agent,它学习7-dof目标,端到端达到policies。然而,为了共同学习语言、视觉和控制,它需要大量的机器人交互数据,类似于其他端到端agents[4]、[9]、[15]。vapo提取了非结构化数据的自监督视觉启示模型,不仅加速了学习,而且还被证明可以提高下游控制policies的泛化能力。我们证明,通过扩展vapo来学习语言条件启示,并将其与基于hulc的7-dof低级policy相结合,我们的方法能够直接从图像中连续跟踪多个长期操作任务,同时需要的数据比以前的方法少一个数量级。与之前的工作不同,之前的工作依赖于昂贵的专家演示和完全注释的数据集来学习现实世界中的语言条件agents,我们的方法利用了一种更具可扩展性的数据收集方案:非结构化、无重置且可能次优的远程操作游戏数据[16]。此外,我们的方法只需要用语言注释总数据的1%。大量实验表明,当与将抽象自然语言指令翻译成一系列子目标的llm配对时,hulc++可以在现实世界中完成长时间、多阶段的自然语言指令。最后,我们表明,我们的模型在具有挑战性的calvin基准[8]上设定了一个新的技术水平,通过7自由度控制,从高维感知观察中连续跟踪多个长期操纵任务,并通过自然语言指定。据我们所知,我们的方法是第一个明确旨在从现实世界中纯粹离线、无重置和非结构化数据中解决语言条件的longhorizon、多层任务的方法,同时只需要1%的语言注释。

II. RELATED WORK

在基础语言和视觉的进步推动下,机器人社区对构建语言驱动的机器人系统的兴趣日益浓厚[17],[19]。早期的工作侧重于定位引用表达式[20]、[21]、[22]、[23]、[24]中提到的对象,并使用预定义的运动基元遵循拾取和放置指令[25]、[6]、[26]。最近,端到端学习已被用于研究融合感知、语言和控制的挑战性问题[4]、[27]、[28]、[1]、[10]、[9]、[15]、[5]。由于其灵活性,从像素进行端到端学习是建模通用agents的一个有吸引力的选择,因为它对对象和任务的假设最少。然而,这种像素到动作模型通常具有较差的采样效率。在机器人操作领域,光谱的两个极端是cliport[6],另一方面是agents,如gato[5]和bc-z[4],其范围从需要几百个专家演示如何通过运动规划拾取和放置物体,到需要几个月的专家演示数据收集来学习视觉运动操作技能以实现连续控制。相比之下,我们取消了收集专家演示的要求以及手动重置场景的相应需求,以从非结构化、无重置、远程操作的播放数据中学习[16]。另一个正交工作线通过使用预训练的图像表示[29]、[6]、[30]来引导下游任务学习,解决了数据效率低下的问题,我们在这项工作中也利用了这一点。

我们提出了一种新的分层方法,结合了两种范式的优势,从高维相机观察中学习语言条件、任务无关、长视野policies。受将机器人操纵分解为语义和空间路径的工作思路的启发[12],[13],[6],我们提出利用非结构化数据的自我监督启示模型,将机器人引导到语言指令中提到的可操作区域附近。一旦进入这个区域,我们就会切换到一个单一的多任务7-dof语言条件视觉运动器policy,它也是从离线、非结构化数据中训练出来的。
 

III. METHOD

我们将方法分解为三个主要步骤。首先,我们从非结构化、远程操作的数据中训练一个语言条件启示模型,以预测提供输入语言指令的对象的3d位置(第iii-a节)。其次,我们利用基于模型的规划向预测位置移动,并切换到本地语言条件的、基于学习的policy与场景交互(第iii-c节)。第三,我们展示了如何将hulc++与大型语言模型(llm)结合使用,将抽象语言指令分解为一系列可行的、可执行的子任务(第iii-d节)。

从形式上讲,我们的最终机器人policy被定义为混合物:

具体而言,我们使用投影的末端执行器位置和来自启示模型的预测像素之间的像素距离来选择使用哪个policy。如果距离大于阈值,则预测区域远离机器人当前位置,我们使用基于模型的policy移动到预测位置。否则,末端执行器已经接近预测位置,我们继续使用基于学习的policy。因此,我们将α定义为:

由于启示预测以语言为条件,每次agent收到新指令时,我们的agent都会根据α(s,l)决定使用哪个policy。将无模型policy活动的区域限制在提供人机交互的区域附近具有使其更具采样效率的优点,因为它只需要学习局部行为。

A. Extracting Human Affordances from Unstructured Data

我们的目标是学习一个启示模型 affordance model ,该模型可以在给定自然语言指令时预测世界位置。与之前需要手动绘制分割掩码的启示学习方法不同[31],我们自动从非结构化、人类远程操作的游戏数据中提取启示[16]。利用游戏数据有几个优点:它收集起来既便宜又可扩展,包含一般行为,而且不是随机的,而是由人类的启示知识构建的。具体来说,游戏数据由一个长的未分段数据集D组成,该数据集D包含用户在没有特定任务的情况下远程操作机器人提供的语义上有意义的行为。全状态动作流被重新标记,以将前面的状态和动作视为达到访问状态的最佳行为[16]。此外,我们假设少数随机序列(不到数据集的1%)用描述序列中正在完成的任务的语言指令进行注释。

为了从非结构化数据中提取视觉启示,我们使用抓取器动作作为启发式方法来发现与任务完成相关的场景元素。考虑以下场景:一个随机序列τ=,其中k表示窗口大小,用语言指令注释。如果序列中的任何状态si,动作ai包含一个抓取器关闭信号,我们假设在末端执行器的位置有一个执行任务l所需的对象。为了学习视觉-语言启示模型,我们将endeffector世界位置投影到相机图像上以获得像素点,并用所述像素和语言指令l注释前面的帧,如图2所示。直观地说,这允许启示模型学习预测与完成任务l所需的对象相对应的像素。

图2:从人类远程操作的非结构化、自由形式的交互数据中提取语言条件视觉启示的过程的可视化。我们在遥操作期间利用夹具打开/关闭信号将末端执行器投影到相机图像中,以检测无向数据中的启示

在测试期间,给定预测的像素位置,假设现有的相机校准,需要深度信息来计算基于模型的policy应该移动到的3d位置。我们的模型不是依赖于感官深度观测,而是通过使用夹具闭合过程中端部执行器的位置作为监督来训练,以产生估计的深度。我们公式的一个关键优势是,通过从视觉语言特征预测深度,我们的模型可以更好地适应场景中可能发生的部分遮挡

B. Language-Conditioned Visual Affordances

我们的视觉语言启示模型,见图3,由一个带有两个解码器头的编码器-解码器架构组成。第一个头预测图像上的分布,表示每个像素成为提供点 afforded point 的可能性。第二个头预测高斯分布,从该分布中采样相应的预测深度。两个头共享相同的编码器,并以输入语言指令为条件。从形式上讲,给定一个由视觉观察I和语言指令l组成的输入,启示模型Fa产生一个输出o,即(1)逐像素热图,指示提供命令任务的区域,以及(2)相应的深度估计d。我们将这个映射表示为。 

图3:系统架构概述。hulc++首先处理语言指令和来自静态相机的图像,以预测提供的区域并将机器人引导到附近。一旦进入这个区域,我们就会切换到语言条件模仿学习agent,它从夹具和静态相机接收rgb观察结果,并学习端到端达到policies的7-dof目标。这两个模块都从相同的自由形式、非结构化数据集中学习,只需要1%的语言注释。

1) Visual Module:

视觉预测模块在给定输入的情况下生成热图A。为了训练它,我们在A的所有像素上应用softmax函数。这导致图像上的分布V,其中所有像素值的总和等于1。

同样,通过将所有值初始化为零,目标T的形状与V相同。然后,我们使用与当前状态输入对应的投影位置的像素生成一个二进制one-hot像素图。最后,我们利用交叉熵损失优化了视觉预测模块:

其中。该优化方案[32]允许视觉模块学习图像上的多模态置信度,其中具有最高值的像素表示给定输入的最可能的图像位置。在推理过程中,我们使用密集像素输出预测A来选择像素位置

启示性预测遵循U-Net[33]架构,在该架构中,我们从LingUNet[34]中汲取灵感,在瓶颈后对三个解码器层反复应用语言条件。

2) Depth Module:

如前所述,我们可以通过将感兴趣像素pt变换到相机帧来计算深度模块的目标,以获得,其中该点的z坐标对应于真实深度。虽然我们计算了真实值,但典型的深度传感器存在测量误差。因此,为了设计一个对深度误差进行建模的系统,我们使用地面真值深度信息通过最大化对数似然来训练高斯分布

如图3所示,深度模块由一组线性层组成,这些层将编码的视觉语言特征作为输入。在这里,语言调节是通过将自然语言编码连接到多层感知器的前两层来完成的。网络的输出是高斯分布d∼的参数,在推理过程中对其进行采样以获得深度预测d。用于训练完整启示模型的总损失函数被定义为启示模块和深度预测模块损失的加权组合

C. Low-Level Language-Conditioned Policy

为了与对象交互,我们学习了一个目标条件policy,它在环境动力学下,以当前状态和自由形式语言指令为条件,输出在的动作。我们注意到agent无法访问环境的真实状态,而是可以进行视觉观察。我们使用基于hulc[10]的通用目标达成policy对低级policy进行建模,并使用多上下文模仿学习[9]进行训练。我们利用了用户提供的语义上有意义的行为的长非结构化数据集d,这些数据集d是我们之前在第iii-a节中用来学习启示的。为了学习任务无关的控制,我们利用目标重新标记[35],将这些短期目标图像条件演示输入到一个简单的最大似然目标条件模仿目标中:

然而,当学习语言条件策略时,不可能将任何访问状态重新标记为自然语言目标,因为目标空间不再等同于观测空间。lynch等人[9]表明,将少量随机窗口与事后语言指令配对,可以学习一个单一的语言条件视觉运动器policy,该运动器可以执行各种各样的机器人操纵任务。这里的关键见解是,求解目标图像或语言目标的单个模仿学习policy,可以主要从未标记的游戏数据中进行学习控制,并将语言注释的负担降低到总数据的1%以下。具体来说,给定多个上下文模仿数据集,具有不同的任务描述方式,多上下文模仿学习在所有数据集上同时训练单个潜在目标条件的policy

D. Decomposing Instructions with LLMs

使用启示模型将机器人引导到语言指令提供的区域,然后利用低级policy执行任务,原则上可以将多个语言指令链接成一行。虽然自然语言为任务规范提供了一种直观和可扩展的方式,但要连续输入低级语言指令可能不切实际,例如“打开抽屉”、“现在拿起粉红色块并将其放在抽屉里”、“然后拿起黄色块并将它放在抽屉内”来执行整理任务。理想情况下,我们希望给机器人一个抽象的高级指令,比如“整理工作空间并关闭所有灯”。与zeng等人[7]类似,我们使用标准的预训练llm,将抽象语言指令分解为一系列可行的子任务,方法是用自然语言命令(格式为注释)的几个输入示例与相应的机器人代码(通过少量提示)配对。我们利用llm的代码编写能力[36],[3]生成可执行的python机器人代码,这些代码可以翻译成语言表达的操作技能。例如,api调用push_button('green')所表达的技能被翻译为“打开绿灯”,然后用于执行policy的推理。我们唯一的假设是,输入提示的场景描述与环境状态相匹配。我们在图4中显示了一个示例提示。

图4:将抽象指令分解为子任务序列的示例提示。提示上下文为灰色,输入任务命令为洋红色,生成的输出突出显示。

IV. EXPERIMENTS

我们的实验旨在回答以下问题:

1)与使用端到端模型相比,集成所提出的视觉语言启示模型是否可以提高以下语言指令的性能和数据效率?

2) 所提出的方法是否适用于现实世界?

3) 当与llm配对时,agent能否通过遵循llm提出的子目标来推广新的行为? 

A. Simulation Experiments

Evaluation Protocol.

我们使用calvin基准[8]的环境d设计我们的实验,该环境由6小时的远程操作无定向游戏数据组成,这些数据可能包含次优行为。为了模拟现实世界的场景,只有1%的数据包含众包语言注释。calvin中agent的目标是使用机载传感,通过自然语言指示5个不同的子任务,解决多达1000个独特的序列链。在推理过程中,只有当agent成功完成当前子任务时,它才会接收链中的下一个子任务。

Results and Ablations.

我们比较了我们将机器人控制学习划分为基于语义概念的高级流和基于3d空间交互知识的低级流的方法,hulc是一个state-of-the-art端到端模型,它从游戏数据中学习基于语言的一般技能。为了进行公平的比较,我们重新训练了原始的hulc agent,以微调语言编码器,因为这将平均序列长度从2.64提高到2.69。我们在表i中观察到,当与我们的启示模型结合时,性能增加到平均序列长度2.93。通过将控制解耦为层次结构,我们表明性能显著提高。此外,当使用预训练权重r3m[29]初始化我们的启示模型时,hulc++的平均序列长度为3.30,这是一项旨在学习用于学习机器人技能的可重用表示的工作。 

 为了研究我们提出的方法的数据效率,我们还将我们的模型与包含50%和25%总游戏数据的较小数据分割进行了比较。我们的结果表明,我们的方法比基线的样本效率高出50%。由于可能很难判断每个模块对整体样本效率提高的贡献程度,我们研究了将我们在25%数据上训练的启示模型与在完整数据集上训练的低级policy配对的效果。我们报告的差异很小,平均序列长度为2.92。

B. Real-Robot Experiments

System Setup.

我们在受模拟CALVIN环境启发的3D桌面环境中使用Franka Emika Panda机器人手臂验证了我们的结果。该环境由一张带抽屉的桌子组成,抽屉可以打开和关闭,木制底座上还有一个滑动门,这样末端执行器就可以触及手柄。此外,该环境还包含三个彩色灯开关和彩色块。我们使用来自并发工作的离线数据集[37],由9小时的非结构化数据组成,这些数据是通过要求参与者在不执行任何特定任务的情况下远程操作机器人而收集的。此外,我们通过要求人类注释者描述交互数据集中随机采样窗口的行为,用语言注释不到总数据的1%,具体为3605个窗口。该数据集包含超过25种不同的操作技能。我们注意到,在现实世界中学习如此广泛的各种技能,从非结构化、无重置和可能次优的数据中学习,再加上不到1%的数据被语言注释,是极具挑战性的。此外,此设置包含的数据比相关方法少一个数量级[4]。

Baselines.

为了研究我们的分层架构的有效性,我们以两个语言条件基线为基准:hulc[10]和bc-z[4]。第一条基线用于评估利用启示模型对控制回路进行分层分解的影响,因为低级policy是针对从非结构化数据中学习任务无关控制而定制的。另一方面,bc-z基线仅在包含语言注释的数据上进行训练,并包括拟议的辅助损失,该损失从视觉中预测语言嵌入,以更好地对齐视觉语言技能嵌入[4]。为了进行公平的比较,所有模型都有相同的观察和动作空间,并且它们的静态相机视觉编码器都用预训练的resnet-18 r3m特征初始化[29]。对于hulc++,这需要用于启示模型的视觉编码器和用于低级policy静态相机的视觉编码器。夹具相机的编码器是从头开始训练的。 

Evaluation

我们首先评估受语言制约的个人技能的成功率。在使用离线游戏数据集训练模型后,我们使用中性起始位置为每个任务执行了10次展开,以避免在机器人的初始姿势中偏置policies。这种中性初始化打破了初始状态和任务之间的相关性,迫使agent完全依赖语言来推断和解决任务。我们将每个模型的成功率记录在表2中。我们观察到,由于演示不足,bc-z基线在大多数任务中的性能接近于零。hulc的能力更强,因为它利用了完整的数据集,在10次推出中平均有42.4%,但在长期规划方面遇到了困难,大多数用模仿学习训练的端到端agents也是如此。总体而言,hulc++的能力更强,在25个不同的操作任务中平均成功率为65.2%,证明了在将控制解耦为层次结构之前结合语义-视觉-语言启示的有效性。 

最后,我们通过利用gpt-3为抽象语言输入生成子目标序列,例如“整理工作区并关灯”,来评估每种方法在现实世界中可以连续执行多少任务。我们报告说,我们的方法平均执行了6.4个子目标,而基线在完成2到3个子目标后往往会失败。请参阅补充视频,了解定性结果,这些结果展示了任务的多样性和不同方法的longhorizon能力。总体而言,我们的结果证明了我们的方法通过利用视觉语言启示从非结构化数据中学习样本高效、语言条件化的policies的有效性。

V. CONCLUSION AND LIMITATIONS

在这篇论文中,我们介绍了一种新的方法,可以从包含低至1%语言注释的非结构化、离线和免重置数据中有效地学习通用、语言条件机器人技能。关键思想是从不同的人类远程操作数据中提取语言条件启示,以学习在自然语言指令下,交互应该在环境中的何处发生的语义先验。我们将这些知识提炼为基于模型和无模型的policies之间的相互作用,允许对机器人控制学习进行样本高效的划分,大大超过了具有挑战性的语言条件机器人操纵calvin基准的最新技术。我们表明,当与llm结合将抽象的自然语言指令翻译成子目标序列时,hulc++能够完成现实世界中的长期、多层任务,同时需要的数据比以前的方法少一个数量级。虽然实验结果很有希望,但我们的方法有几个局限性。首先,在现实世界中对技能进行排序时,一个悬而未决的问题是跟踪任务进度,以便知道何时进入下一个任务。在这项工作中,我们以固定的时间范围对现实世界中的任务进行排序,隐含地假设所有任务都需要大约相同的时间步才能完成。其次,将抽象语言输入转换为子目标序列的代码生成模块假设提示的场景描述与环境状态相匹配,这可以通过集成感知系统来自动化[2]。最后,未来工作的一个令人兴奋的领域可能是,不仅要用语言模型为行动奠定基础,还要通过结合现实世界的机器人数据来探索改进语言模型本身[38]。

相关文章:

【论文阅读】Grounding Language with Visual Affordances over Unstructured Data

Abstract 最近的研究表明,大型语言模型(llms)可以应用于将自然语言应用于各种各样的机器人技能。然而,在实践中,学习多任务、语言条件机器人技能通常需要大规模的数据收集和频繁的人为干预来重置环境或帮助纠正当前的…...

目标检测:滑块验证

最近在做一些爬虫相关的任务,有时候在登录时候需要去做滑块验证,刚好自己是做AI这一块得,就想着使用目标检测去做检测,然后绕过滑块。...

Unreal Engine 5 C++: 编辑器工具编写入门01(中文解释)

目录 准备工作 1.创建插件 2.修改插件设置 快速资产操作(quick asset action) 自定义编辑器功能 0.创建编辑器button,测试debug message功能 大致流程 详细步骤 1.ctrlF5 launch editor 2.创建新的cpp class,derived from AssetAction…...

力扣上刷题之C语言实现-Day2

一. 简介 本文记录一下,力扣C语言逻辑题。主要涉及 数组方面的知识。 二. 涉及数组的 C语言逻辑题 1. 两数之和 给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target…...

Visual Studio 2022 - QT 环境中文字符乱码问题

Visual Studio 2022 - QT 环境中文字符乱码问题 一、Visual Studio 2022 - Qt 环境 在 QT 中使用中文字符串常会出现乱码现象&#xff0c;如下&#xff1a;以下提供了几个解决方法&#xff0c;仅供参考 QString str "百香果真是一直可爱的小猫咪"; qDebug() <…...

获得ASPICE认证需要满足哪些条件?

要获得ASPICE认证&#xff0c;需要满足以下条件&#xff1a; ( 要明确的是&#xff1a;在ASPICE行业中专业来说&#xff0c;ASPICE项目是没有认证&#xff0c;而只有评估。不过&#xff0c;为了方便沟通&#xff0c;人们常将这一评估过程称为认证。&#xff09; 一、基础条件…...

鸿蒙_异步详解

参考详细链接&#xff1a; 鸿蒙HarmonyOS异步并发开发指南...

linux日志查询搜索view

view 命令实际上是 vim 编辑器的一个只读模式。当你使用 view 打开一个文件时&#xff0c;实际上是在用 vim 查看该文件&#xff0c;只是不能编辑内容。因此&#xff0c;view 下的搜索操作与 vim 类似。 以下是如何在 view 模式下进行搜索&#xff1a; 启动 view 并打开文件&a…...

性能测试工具——JMeter

目录 一、JMeter介绍 1、下载安装JMeter 2、打开JMeter 方式一&#xff1a; 方式二&#xff1a; 3、JMeter基础设置 4、JMeter基本使用流程 &#xff08;1&#xff09;启动JMeter &#xff08;2&#xff09;在测试计划下添加线程组 &#xff08;3&#xff09;在 “线…...

1.《DevOps》系列K8S部署CICD流水线之部署K8S集群~version1.28.2

架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G 操作系统&#xff1a;Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 一、环境准备 关…...

c/c++八股文

c基础 一、指针和引用的区别 定义方式: 指针是通过 * 操作符定义的变量,用于存储另一个变量的地址。例如: int* p &x;引用是通过 & 操作符定义的别名,直接引用另一个变量。例如: int& r x; 内存占用: 指针是一个独立的变量,占用一定的内存空间。引用不是独立的…...

Docker配置代理解决pull超时问题

操作系统: CentOS Linux 8 Docker版本: 26.1.3 前置&#xff1a;你需拥有&#x1f431; 1. 配置 proxy.conf 1.1 创建配置文件目录 创建 docker.service.d&#xff0c;进入到 docker.service.d 中打开 proxy.conf (没有文件打开会自动创建)。 注意&#xff1a;每个人的路径可…...

ECharts的特点

ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;由百度团队开源&#xff0c;并于2018年初捐赠给Apache基金会&#xff0c;成为ASF孵化级项目。ECharts提供了直观、生动、可交互、可个性化定制的数据可视化图表&#xff0c;广泛应用于数据分析和展示领域。以下是关于…...

JVM OutOfMemoryError 与 StackOverflowError 异常

目录 前言 堆溢出 虚拟机栈和本地方法栈溢出 方法区溢出 前言 JVM规范中规定, 除了程序计数器之外, 其他的运行时数据区域, 例如堆栈, 方法区, 都会出现OutOfMemoryError异常. 那么到底是怎么样的代码, 才会引起堆溢出, 栈溢出, 或者是方法区的溢出呢? 如果遇到了又该如何…...

linux防火墙学习

Linux 防火墙配置&#xff08;iptables和firewalld&#xff09; Linux 防火墙配置&#xff08;iptables和firewalld&#xff09;_iptables配置文件位置-CSDN博客 Linux查看防火墙状态及开启关闭命令_linux 查看防火墙-CSDN博客...

Java面试篇基础部分- Java中的阻塞队列

首先队列是一种前进后出的操作结构,也就是说它只允许从队列前端进入,从队列后端退出。这个前端和后端看个人如何理解,也就是通常所说的入队和出队,队头和队尾。 阻塞队列和一般队列的不同就在于阻塞队列是可以阻塞的,这里所说的并不是说队列中间或者队头队尾被拦截了,而是…...

Go语言并发编程之Channels详解

并发编程是Go语言的一大特色,而channel(通道)则是Go语言中用于实现并发的核心工具之一。它源于CSP(Communicating Sequential Processes)的概念,旨在让多个goroutine之间能够高效地进行通信和同步。本文将深入探讨channel的用法、原理和最佳实践,通过丰富的示例代码和详…...

【Java集合】LinkedList

概要 LinkedList是用链表结构存储数据的&#xff0c;很适合数据的动态插入和删除&#xff0c;随机访问速度比较慢。另外&#xff0c;他还提供了 List 接口中没有定义的方法&#xff0c;专门用于操作表头和表尾元素&#xff0c;可以当作堆栈、队列和双向队列使用。 链表 链表是…...

大模型之基准测试集(Benchmark)-给通义千问2.0做测评的10个权威测基准测评集

引言 在去年(2023)云栖大会上&#xff0c;阿里云正式发布千亿级参数大模型通义千问2.0。据现场介绍&#xff0c;在10个权威测评中&#xff0c;通义千问2.0综合性能超过GPT-3.5&#xff0c;正在加速追赶GPT-4。以下是通义千问在MMLU、C-Eval、GSM8K、HumanEval、MATH等10个主流…...

解决selenium爬虫被浏览器检测问题

文章目录 专栏导读1.问题解析2.代码解析(Edge/Chrome通用)2.1 设置Edge浏览器选项:2.2 尝试启用后台模式2.3 排除启用自动化模式的标志2.4 禁用自动化扩展2.5 设置用户代理2.6 实例化浏览器驱动对象并应用配置2.7 在页面加载时执行JavaScript代码 3.完整代码&#xff08;可直接…...

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-17 1. Large Language Models in Biomedical and Health Informatics: A Review with Bibliometric Analysis H Yu, L Fan, L Li, J Zhou, Z Ma, L Xian, W Hua, S He… - Journal of Healthcare …, 2024 生物…...

LLM - 理解 多模态大语言模型(MLLM) 的 幻觉(Hallucination) 与相关技术 (七)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142463789 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 多模态…...

如何在C++中实现RDP协议的屏幕更新功能?

在C++中实现RDP协议的屏幕更新功能涉及多个步骤,包括接收RDP服务器发送的屏幕更新PDU(协议数据单元)、解析这些PDU以获取图像数据,以及将这些图像数据渲染到本地显示设备上。以下是一个简化的流程,指导你如何在C++中处理这一功能: 1. 监听和接收屏幕更新PDU 首先,你的…...

Tornado 是一个 Python 异步网络库和 web 框架

Tornado 是一个 Python 异步网络库和 web 框架&#xff0c;它最初由 FriendFeed 开发&#xff0c;后来被 Facebook 收购并开源。Tornado 因其非阻塞的 I/O 操作和优秀的性能而广受欢迎&#xff0c;特别是在需要处理大量并发连接的应用中。Tornado 的底层实现主要依赖于 Python …...

鹏哥C语言49---第5次作业:选择语句 if 和 switch

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //---------------------------------------------------------------------------------第 5 次作业&#xff1a;选择语句 if 和 switch //-----------------------------------------------------------------1.输…...

通过 Flink 的火焰图定位反压

在 Apache Flink 中&#xff0c;Web UI 提供了丰富的监控工具来帮助用户分析和解决作业性能问题&#xff0c;其中火焰图&#xff08;Flame Graph&#xff09;是用于分析反压问题的一个强有力的工具。反压可能是由于作业中某些算子处理速度过慢&#xff0c;或者资源耗尽导致的。…...

初识爬虫8

1.selenium的作用和工作原理 2. 使用selenium&#xff0c;完成web浏览器调用 # -*- coding: utf-8 -*- # 自动化测试工具&#xff0c;降低难度&#xff0c;性能也降低 from selenium import webdriverdriver webdriver.Edge()driver.get("https://www.itcast.cn/")…...

Unity SRP 可编程渲染管线的基本用法

可编程渲染管线使用教程 SRP 可以处理Canvas为Screen Space - Overlay的渲染 安装插件 首先进入package manager&#xff0c;下载Core RP Lib组件 创建渲染管线 编写渲染管线逻辑脚本 新建脚本取名为MPipeLine&#xff0c;该脚本用于实现渲染管线的处理逻辑 using Unity…...

AutoX.js向后端传输二进制数据

android的JavaScript自动化软件用过Hamibot和AutoX.js 不过在向后端传输二进制数据时都有些限制&#xff0c;不如浏览器前端那么自由。Hamibot的http按文档应该时能支持传字节数组&#xff0c;但是实际上应该还没有支持。AutoX.js的http也是这样&#xff0c;但是AutoX.js还支持…...

lvgl学习笔记--基础对象1

【LVGL学习笔记】&#xff08;三&#xff09;控件使用_学习_煜个头头-GitCode 开源社区 LVGL 基础对象|极客笔记 #include "../../../lv_examples.h"void lv_ex_obj_1(void) {lv_obj_t * obj1;obj1 lv_obj_create(lv_scr_act(), NULL);lv_obj_set_size(obj1, 100, …...