【论文阅读】PERCEIVER-ACTOR: A Multi-Task Transformer for Robotic Manipulation

Abstract

transformers凭借其对大型数据集的扩展能力,彻底改变了视觉和自然语言处理。但在机器人操作中,数据既有限又昂贵。通过正确的问题表述,操纵仍然可以从变形金刚中受益吗?我们使用peract来研究这个问题,peract是一种用于多任务6-dof操作语言条件行为克隆agent。peract使用感知器transformer[1]对语言目标和rgb-d体素观测值进行编码,并通过“检测下一个最佳体素动作”输出离散化动作。与在2d图像上操作的框架不同,体素化的3d观察和动作空间为有效学习6-dof动作提供了强大的结构先验。通过这个公式,我们从每个任务的几个演示中训练了一个多任务transformer,用于18个rlbench任务(有249个变体)和7个真实世界任务(有18个变体)。我们的结果表明,在各种桌面任务中,peract的表现明显优于非结构化图像到动作agents和3d convnet基线。

Keywords:Transformers, Language Grounding, Manipulation, Behavior Cloning

 1 Introduction

Transformers[2]已经在自然语言处理和计算机视觉中广泛应用。通过将问题作为序列建模任务,并对大量不同的数据进行训练,Transformers在多个领域取得了突破性的成果[3,4,5,6]。即使在通常不涉及序列建模的领域中[7,8],Transformers也被用作通用架构[9]。但在机器人操作中,数据既有限又昂贵。我们还能把Transformers的力量用正确的问题表述带到六自由度操纵吗?

语言模型对tokens序列进行操作[10],视觉transformers对图像patch序列进行操作[4]。虽然存在像素transformers[11,1],但它们的数据效率不如使用卷积或补丁 patches 来利用图像的二维结构的方法。因此,尽管transformers可能与领域无关,但它们仍然需要正确的问题表述来实现数据效率。在直接将2d图像映射到6-dof动作的行为克隆(bc) agents中也存在类似的效率问题。像gato[9]和bc-z[12,13]这样的智能体已经显示出令人印象深刻的多任务能力,但它们需要数周甚至数月的数据收集。相比之下,最近在强化学习方面的工作,如c2farm[14],构建了一个体素化的观察和动作空间,利用3d卷积神经网络有效地学习3d动作的视觉表征。同样,在这项工作中,我们的目标是利用transformers利用体素补丁的3d结构进行高效的6-dof行为克隆(类似于视觉transformers[4]利用图像补丁的2d结构)。

为此,我们提出了peract (perception - actor的缩写),这是一种语言条件bc agent,它可以学习模仿各种各样的6自由度操作任务,每个任务只需要几个演示。peract编码一系列rgb-d体素补丁,并预测离散的平移、旋转和夹持动作,这些动作在观察-行动循环中由运动规划器执行。peract本质上是一个经过监督学习训练的分类器,用于检测类似于cliport[16,17]等先前工作的动作,只不过我们的观察和动作是用3d体素而不是2d图像像素表示的

由于高维输入的缩放问题 scaling issues,在端到端bc方法中,体素网格不像图像那么普遍。但在peract中,我们使用percepver Transformer[1]来编码高达100万体素的高维输入,仅使用一小组潜在向量。这种基于体素的公式 formulation 提供了强大的结构先验,具有以下几个优点:融合多视图观察的自然方法,学习稳健的以行动为中心的表征[18,19],以及在6-dof中实现数据增强——所有这些都有助于通过专注于多样化而不是狭隘的多任务数据来学习可推广的技能。

为了研究这种公式 formulation 的有效性,我们在rlbench[15]环境中进行了大规模实验。我们在18个不同的任务上训练了一个多任务agent,这些任务有249个变体,涉及一系列可理解和不可理解的行为,如将酒瓶放在架子上和用棍子拖动物体(见图1-a-j)。每个任务还包括几个姿势和语义变化,对象的位置、颜色、形状、大小和类别各不相同。我们的结果表明,在不使用实例分割、对象姿势、内存或符号状态的任何显式表示的情况下,peract明显优于图像到动作agents(34倍)和3d convnet基线(2.8倍)。我们还使用franka panda验证了我们的方法,该多任务agent在7个真实任务上从头开始训练,总共只进行了53次演示(见图1 k-o)。

图1。语言条件操纵任务:peract是一个语言条件多任务agent,能够模拟各种6-dof操纵任务。我们在rlbench[15]中对18个模拟任务进行了实验(a-j;仅显示了10个),其中有几个姿势和语义变化。我们还用franka panda在7个真实世界的任务(k-o;只显示了5个)上演示了我们的方法,用53个演示训练了多任务agent。请参阅补充视频,了解模拟和现实世界的推出情况。

 总之,我们的贡献如下:

  • 一个用transformers来感知、执行和指定目标的新问题表述。
  • 一个有效的以行动为中心的框架,用于在6-dof行动中接地语言 grounding language。
  • 在一系列模拟和现实世界任务中调查多任务agents的实证结果。

2 Related Work

Vision for Manipulation.

传统上,机器人感知方法使用明确的“对象”表示,如实例分割、对象类别、姿势[20,21,22,23,24,25]。这些方法很难处理像布和豆子这样的可变形的颗粒状物品,因为这些物品很难用几何模型或分割来表示。相比之下,最近的方法[26,17,16,27]在没有任何“对象性”假设的情况下学习以动作为中心的表示,但它们仅限于具有简单拾取和放置原语的自上而下 top-down 的2d设置。在3d方面,james等人提出了c2farm[14],这是一种以行动为中心的强化学习(rl) agent,具有粗粒度到细粒度的3d- unet主干。从粗到细的方案有一个有限的接受域 receptive field,不能在最好的水平上观察整个场景。相比之下,peract通过transformer骨干学习具有全局接受域的以动作为中心的表示。此外,peract使用bc而不是rl,这使我们能够通过使用语言目标来轻松训练多任务agent来完成多个任务。

End-to-End Manipulation

方法[28,29,30,31]对对象和任务的假设最少,但通常被表述为图像到动作的预测任务。直接在RGB图像上进行6自由度任务的训练通常效率很低,通常需要几次演示或几集 episodes 才能学习像重新排列对象这样的基本技能。相比之下,PERACT使用体素化观察和动作空间,在6自由度设置中效率更高,鲁棒性更强。虽然其他关于6-DoF抓取的研究[32,33,34,35,36,37]使用了RGB-D和点云输入,但它们尚未应用于顺序任务或与语言条件反射一起使用。另一项工作通过使用预训练的图像表示[16,38,39]来引导BC来解决数据效率低下的问题。虽然我们的框架是从零开始训练的,但这种预训练方法可以在未来的工作中集成在一起,以获得更高的效率和对看不见的对象的泛化。

Transformers for Agents and Robots.

transformers已成为多个领域的流行架构。从nlp开始[2,3,40],最近在视觉[4,41],甚至rl[8,42,43]。在机器人技术中,transformers已被应用于辅助遥操作[44]、腿部运动[45]、路径规划[46,47]、模仿学习[48,49]、形态控制器[50]、空间重排[51]和抓取[52]。transformers在多领域设置中也取得了令人印象深刻的结果,例如在gato[9]中,单个transformer在16个领域domains上进行了训练,如字幕 captioning 、语言基础 language-grounding、机器人控制等。然而,gato依赖于非常大的数据集,比如15k集用于块堆叠 block stacking,94k集用于元世界[53]任务。我们的方法可能会补充像gato这样的agents,后者可以使用我们的3d配方来提高效率和鲁棒性。

Language Grounding for Manipulation.

一些工作已经提出了机器人动作中语言基础的方法[54,55,56,57,58,59,60,61,62,63,64,65]。然而,这些方法使用无纠缠的管道 disentangled pipelines (理解为非端到端方法) 进行感知和行动,语言主要用于指导感知[66]。最近,已经提出了一些端到端方法[13,12,67,68,69],用于用语言指令调节bc agents。这些方法需要在几天甚至几个月内收集数千个人类演示或自主情节。相比之下,peract只需要几分钟的训练数据就可以学习到鲁棒的多任务policies。对于基准测试,存在几种模拟环境[70,17,53],但我们使用rlbench[15],因为它具有6-dof任务的多样性,并且易于使用模板语言目标生成演示。

3 PERCEIVER-ACTOR

peract是一个用于6自由度操作的语言条件行为克隆agent。关键思想是学习以语言目标为条件的行为的知觉表征。给定场景的体素化重建,我们使用Perceiver transformer[1]来学习每体素特征。尽管有非常大的输入空间,percepver使用一组小的潜在向量来编码输入。然后使用每体素特征来预测下一个最佳动作,根据离散的平移、旋转和每个时间步的抓手状态。peract完全依赖于当前的观察来确定顺序任务的下一步要做什么。请参见图2了解概述。

第3.1节和第3.2节描述了我们的数据集设置。第3.3节描述了我们使用PERACT的问题公式,第3.4节提供了培训PERACT的详细信息。进一步的实施细节见附录B。

图2。peract概述。peract是一个经过监督学习训练的语言条件行为克隆agent,用于检测动作。peract以语言目标和由rgb-d传感器重建的体素网格作为输入。体素被分割成3d块,语言目标用预训练的语言模型进行编码。这些语言和体素特征作为一个序列附加在一起,并使用percepver transformer进行编码[1]。尽管输入序列非常长,但percepver使用一小组潜在向量对输入进行编码(见附录图6)。通过解码器将这些编码上采样回原始体素尺寸,并用线性层进行重塑,以预测离散化的平移、旋转、打开夹持器和避免碰撞动作。这个动作是用一个运动规划器执行的,之后新的观察被用来预测下一个离散的动作,在一个观察-行动循环中直到终止。

 3.1 Demonstrations

我们假设访问一个数据集(n个专家演示),每个演示与英语语言目标。这些演示由一位专家在运动规划器的帮助下收集,以达到中间姿势。每个演示ζ是一个连续动作的序列与观测值。动作由6自由度姿态、夹持器打开状态以及运动规划器是否使用碰撞避免达到中间姿态组成:。观测结果由来自任意数量的相机的RGB-D图像组成。我们在模拟实验中使用了四个摄像头,但在真实实验中只使用了一个摄像头

3.2 Keyframes and Voxelization

继James等人[14]之前的工作之后,我们通过关键帧提取和体素化构建了一个结构化的观察和动作空间。

训练我们的agent直接预测连续动作是低效和嘈杂的。因此,对于每个演示ζ,我们提取一组关键帧动作用一个简单的启发式方法捕捉动作序列中的瓶颈末端执行器姿势[71]:如果(1)关节速度接近于零且(2)夹持器打开状态没有改变,则动作是关键帧。演示中的每个数据点ζ可以被转换为“预测下一个(最佳)关键帧动作”任务[14,72,73]。参见附录图f,以了解该过程的说明。

为了在3d中学习以动作为中心的表征[18],我们使用体素网格[74,75]来表示观察空间和动作空间。观测体素v由rgb-d观测数据重建而成,通过三角剖分 triangulation  将观测体素v融合从已知的相机外内参。默认情况下,我们使用的体素网格,这相当于1.0m3的公制体积。关键帧动作k被离散化,这样训练我们的bc agent可以被表述为“下一个最佳行动 ”"next best action"分类任务[14]。平移 Translation 只是最接近抓手手指中心的体素。旋转离散成5度块为每三个旋转轴。夹持器打开状态是一个二进制值。collision也是一个二进制值,用于指示运动规划器是应该避免体素网格中的所有内容还是什么都不做;在这两种避碰模式之间切换是至关重要的,因为任务通常涉及基于接触的动作(例如,拉开抽屉)和非基于接触的动作(例如,到达手柄而不碰撞到任何东西)。

3.3 PERACT Agent

peract是一种基于transformer的[2]agent,它接受体素观察和语言目标(v, l),并输出离散化的平移、旋转和夹持器打开动作。这个动作由运动规划器执行,然后重复这个过程,直到达到目标。

语言目标 l 用预训练的语言模型进行编码。我们使用clip的[76]语言编码器,但任何预训练的语言模型都足够了[13,69]。我们对clip的选择为未来的工作开辟了可能性,即使用与语言对齐的预训练视觉特征,以便更好地泛化到看不见的语义类别和实例[16]。

体素观测v被分割成尺寸为5^3的3d块(类似于vit[4])。在实现中,这些斑块是用一个核大小和步长为5的3d卷积层提取的,然后被平面化成一个体素编码序列。语言编码通过线性层进行微调,然后添加体素编码形成输入序列。我们还将可学习的位置嵌入添加到序列中,以合并体素和token位置。

语言和体素编码的输入序列非常长。标准的Transformer具有自关注连接和个补丁的输入,很难适合商用gpu的内存。相反,我们使用Perceiver[1]Transformer。Perceiver是一个潜在空间Transformer,它不是关注整个输入,而是首先计算输入和一组更小的潜在向量(随机初始化和训练)之间的交叉注意。这些潜在信号是用自关注层编码的,对于最终输出,这些潜在信号再次与输入交叉关注,以匹配输入大小。参见附录图6的说明。默认情况下,我们使用2048个512维的潜在变量,但在附录g中,我们实验了不同的潜在大小。

 Perceiver Transformer使用6个自注意层对潜在进行编码,并从输出交叉注意层输出一系列补丁编码。这些补丁编码通过三维卷积层和三线性 tri-linear 上采样来解码64维体素特征。解码器包括从编码器的跳过连接(如unets[77])。然后使用每体素特征来预测离散的动作[14]。为了进行平移,将体素特征重塑为原始体素网格(1003),形成动作值的3d q函数。对于旋转、夹持打开和碰撞,特征被最大池化,然后用线性层解码形成各自的q函数。最佳行动t是通过简单地最大化q函数来选择的

其中(x, y, z)为体素在网格中的位置,(ψ, θ, φ)为欧拉角的离散旋转,ω为夹持器打开状态,κ为碰撞变量。有关q -prediction的示例,请参见图5。 

图5。q -预测示例:来自PERACT的 translation q -预测的定性示例以及专家行动,用虚线圈突出显示。左边两个是模拟任务,右边两个是真实世界的任务。更多示例参见附录J。

3.4 Training Details

peract是通过监督学习,使用来自演示数据集的离散时间输入动作元组进行训练的。这些元组由体素观察、语言目标和关键帧动作组成。在训练过程中,我们随机采样一个元组,并监督agent在给定观察值和目标(v,l)的情况下预测关键帧动作k。对于平移,真实动作真值表示为一个单热体素编码。旋转也用每个旋转轴一个 one-hot 编码来表示,r个旋转箱 R rotation bins (所有实验的R=5度)。同样,开合变量和碰撞变量是二进制一热向量。agent像分类器一样用交叉熵损失进行训练

其中, 。为了鲁棒性,我们还用平移和旋转扰动来增强v和k。详见附录E。

默认情况下,我们使用100^3的体素网格大小。我们通过重放具有离散动作的专家演示来进行验证测试,以确保100^3是足够的执行分辨率。agent在8个nvidia v100 gpu上以16的批量进行了16天的训练(600k迭代)。我们在Perceiver[1]之后使用lamb[78]优化器

对于多任务训练,我们只需从数据集中的所有任务中采样输入动作元组。为了确保在采样过程中,具有较长视野的任务不会被过度表示,每个批次都包含均匀分布的任务。也就是说,我们首先对一组大小为bs的任务进行均匀采样,然后为每个采样的任务选择一个随机的输入动作元组。通过这种策略,长距离任务需要更多的训练步骤来完全覆盖输入动作对,但在梯度更新过程中,所有任务都被赋予相等的权重

4 Results

我们进行实验来回答以下问题:

(1)与非结构化图像到动作框架和3D卷积网络等标准架构相比,PERACT的有效性如何?影响PERACT性能的因素是什么?

(2) Transformers的全局感受野真的比具有局部感受野的方法有益吗?

(3) PERACT可以在有噪声数据的现实世界任务上进行训练吗?

4.1 Simulation Setup

为了可重复性和基准测试,我们在模拟中进行了初步实验。

Environment.

模拟设置在CoppelaSim[79]中,并通过PyRep[80]进行接口连接。所有实验都使用带有平行夹具的Franka Panda机器人。如附录图7所示,输入观测值是从位于前部、左肩、右肩和手腕上的四个RGB-D相机捕获的。所有相机均无噪音,分辨率为128×128。

Language-Conditioned Tasks.
我们在18个rlbench[15]任务上进行训练和评估。示例请参见peract.github.io,单个任务的详细信息请参见附录a。每个任务包括几个变体,范围从2到60种可能性不等,例如,在堆块任务中,“堆2个红色块”和“堆4个紫色块”是两个变体。这些变体在数据生成过程中随机采样,但在评估过程中保持一致,以便进行一对一的比较。一些rlbench任务被修改为包括额外的变体,以进行压力测试多任务和语言基础能力。18个任务中共有249个变体,提取的关键帧数量在2到17之间。一集中的所有关键帧都有相同的语言目标,该目标是由模板构建的(但针对真实世界的任务进行了人工注释)。请注意,在所有实验中,我们不测试对看不见的对象的泛化能力,也就是说,我们的训练对象和测试对象是相同的。然而,在测试期间,agent必须处理新的对象姿势、随机采样的目标和随机采样的场景,这些场景具有对象颜色、形状、大小和类别的不同语义实例化。这里的重点是评估在所有任务和变体上训练的单个多任务agent的性能

Evaluation Metric.

每个多任务agent都在所有18个任务上独立评估。评估得分为0分表示失败,100分表示完全成功。没有部分学分。我们报告了每项任务25次评估事件(25×18=450次总事件)的平均成功率,其中agents训练了n=10,100次演示。在评估过程中,agent会一直采取行动,直到预言机指示任务完成或达到最多25个步骤。

4.2 Simulation Results

表1报告了在所有18个任务上训练的多任务agents的成功率。由于训练18个个体agents的资源限制,我们无法调查单个任务agents。

表1。多任务测试结果。各种多任务agents任务的成功率(平均%),每项任务进行10或100次演示训练,并在每项任务25次发作时进行评估。每个评估事件的得分为0分(失败)或100分(成功)。peract的表现优于最具竞争力的基线c2farm-bc[14],在10个演示中平均提高了1.33倍,在100个演示中提高了2.83倍。

 Baseline Methods.

我们通过对比两个语言条件基线(Image-BC和c2farm-bc)来研究我们的问题公式的有效性。Image-BC是一个图像到动作agent,类似于bc-z[12]。在bc-z之后,我们使用FiLM[81]进行CLIP[76]语言特征的调节,但视觉编码器接收RGB-D图像,而不仅仅是RGB图像。我们还研究了cnn和vit视觉编码器。c2farm-bc是james等人[14]开发的一种3d全卷积网络,在rlbench任务上取得了最先进的成果。与我们的agent类似,c2farmbc也可以检测体素化空间中的动作,但它使用从粗到细的粒度方案来检测两个体素化级别的动作32^3个具有1m网格的体素,以及从第一级“放大”后具有0.15^3m网格的32^3个体素。请注意,在最高级别上,c2farm-bc的分辨率(0.47cm)高于peract(1cm)。我们使用与james等人[14]相同的3d convnet架构,但我们没有用rl训练它,而是用交叉熵损失进行bc(来自第3.4节)。我们还使用clip[76]语言功能在瓶颈处对其进行调节,如lingUNets[82,16]中所述。

Multi-Task Performance.

表1比较了Image BC和C2FARMBC与PERACT的性能。由于演示不足,Image BC在大多数任务上的性能几乎为零。imageBC在单视图观察中处于不利地位,必须从头开始学习手眼协调hand-eye coordination。相比之下,PERACT基于体素的公式自然允许集成多视图观察、学习6-DoF动作表示和3D数据增强,所有这些在基于图像的方法中都是不容易实现的。C2FARM-BC是最具竞争力的基线,但它的感受野有限,主要是因为粗粒到细粒的方案,部分是由于仅卷积的架构

在表1中的25/36项评估中,PERACT的表现优于C2FARM-BC,10次演示的平均改善率为1.33倍,100次演示的改善率为2.83倍。对于许多任务,C2FARM-BC实际上在更多的演示中表现较差,这可能是由于容量不足。由于额外的训练演示包括需要优化的额外任务变体,它们最终可能会损害性能

一般来说,10次演示就足以让peract在打开抽屉(3种变体)等变化有限的任务上取得>65%的成功。但是,具有更多变化的任务,如堆块(60个变化),需要更多的数据,有时只是为了涵盖所有可能的概念,如“青色块”,这些概念可能没有出现在训练数据中。请参阅补充视频中的模拟部署,以了解这些评估的复杂性。对于三个任务:插入钉子、堆叠杯子和放置杯子,所有agents都几乎没有成功。这些是非常高精度的任务,偏离几厘米或几度可能会导致不可恢复的故障。但在附录h中,我们发现专门针对这些任务训练单任务agents可以略微缓解这个问题

Ablations.

表1报告了PERACT w/o Lang,一个没有任何语言条件的agent。如果没有语言目标,agent就不知道底层任务,只能随意执行。我们还报告了图3中打开抽屉任务的额外消融结果。总结这些结果:(1)跳跃连接有助于更快地训练agent,(2)Perceiver transformer对于在全局感受野中实现良好性能至关重要,(3)提取良好的关键帧动作对于监督训练至关重要,因为随机选择或固定间隔的关键帧会导致零性能。

图3。消融实验。消融关键部件后PERACT的成功率。

 Sensitivity Analysis

在附录g中,我们研究了影响peract性能的因素:the number of Perceiver latents 隐变量数量、体素化分辨率和数据增强。我们发现,更多的潜在向量通常会提高agent对更多任务进行建模的能力,但对于简单的短期任务,更少的latents就足够了。同样,对于不同的体素化分辨率,一些任务可以用粗糙的体素网格(如32^3)来解决,但一些高精度任务需要完整的100^3网格。最后,数据增强中的旋转扰动通常有助于提高鲁棒性,主要是通过将agent暴露在对象的更多旋转变化中

4.3 Global vs. Local Receptive Fields

为了进一步研究我们的transformer agent的全局感受野,我们对打开抽屉的任务进行了额外的实验。打开抽屉的任务有三种变体:“打开顶部抽屉”、“打开中间抽屉”和“打开底部抽屉”,由于接受域有限,很难区分抽屉把手,因为它们在视觉上都是相同的

图4报告了peract和c2farm-bc agents经过100次演示的训练。虽然打开抽屉的任务可以通过较少的演示来解决,但在这里我们希望确保数据不足不是问题。我们包括具有不同体素化方案的几个版本的c2farm-bc。例如,[16,16]分别表示1m3和0.15m3的16^3个体素网格的两个级别。[64]表示64^3个体素网格的单层,没有粗粒度到细粒度方案。peract是唯一一个成功率超过70%的agent,而所有c2farm-bc版本的成功率都是约33%,这表明transformer的全局感受野对于解决任务至关重要
 

 图4。全局与局部受体场实验。PERACT与各种C2FARM-BC[14]基线的成功率

4.4 Real-Robot Results 

我们还用franka emika panda上的真实机器人实验验证了我们的结果。设置细节见附录d。在没有任何模拟到真实的转移或预训练的情况下,我们从零开始在总共53个演示中的7个任务(有18个独特的变体)上训练了一个多任务peract agent。有关展示任务多样性和对场景变化鲁棒性的定性结果,请参阅补充视频。表2报告了小规模评估的成功率。与模拟结果类似,我们发现peract能够在简单的短期任务上实现>65%的成功率,例如从少数演示中按压洗手液。最常见的故障涉及预测不正确的夹具打开动作,这通常会导致agent进入看不见的状态。这可以在未来的工作中通过使用hg dagger风格的方法来纠正agent[12]来解决。其他问题包括agent像之前的工作一样利用数据集中的偏差[16]。这可以通过扩大具有更多不同任务和任务变体的专家数据来解决

 表2。多任务模型训练了7个现实世界任务的成功率(平均百分比)(见图1)。

 5 Limitations and Conclusion

我们提出了peract,一种基于transformer的多任务agent,用于6-dof操纵。我们对模拟和现实世界任务的实验表明,正确的问题公式,即检测体素动作,在数据效率和鲁棒性方面有很大的不同。

虽然peract功能强大,但将其扩展到灵巧的连续控制仍然是一个挑战。peract受制于基于采样的运动规划器来执行离散动作,并且不容易扩展到多指手等n-dof执行器。有关peract局限性的详细讨论,请参阅附录l。但总的来说,我们很高兴通过Transformers扩展机器人学习,专注于机器人操作的多样化而非狭隘的多任务数据。

附录

A Task Details

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

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

相关文章

Spring Boot利用dag加速Spring beans初始化

1.什么是Dag? 有向无环图(Directed Acyclic Graph),简称DAG,是一种有向图,其中没有从节点出发经过若干条边后再回到该节点的路径。换句话说,DAG中不存在环路。这种数据结构常用于表示并解决具有依赖关系的问题。 DAG的…

elasticsearch同步mysql方案

文章目录 1、1. 使用数据库触发器2. 使用定时任务3. 监听MySQL二进制日志(binlog)4. 使用数据管道5. 使用第三方工具或服务6. 编写自定义脚本注意事项 2、1. 使用Logstash步骤:示例配置: 2. 使用Debezium步骤: 3. 自定…

【Redis入门到精通三】Redis核心数据类型(List,Set)详解

目录 Redis数据类型 ​编辑 1.List类型 (1)常见命令 (2)内部编码 2.Set类型 (1)常见命令 (2)内部编码 Redis数据类型 查阅Redis官方文档可知,Redis提供给用户的核…

JavaScript - Document文档操作

1. 前言 ​​​​​​​ 编写网页时,我们需要时刻操作文档进而完成我们想要的效果。这就是通过文档对象模型实现,使用Document对象控制HTML以及样式信息的API 2. Document的树结构 在了解Document文档对象模型之前,我们先了解Dom的树结构 …

使用scp命令从本地往服务器传输文件失败

解决办法: 找到这个文件,打开,将里面的服务器ip对应的一行数据删掉即可。

(c语言+数据结构链表)项目:贪吃蛇

目录 1.项目背景 2.游戏效果演⽰ 3. ⽬标 4. 技术要点 5. Win32 API介绍 5.1 Win32 API 5.2 控制台程序 5.3 控制台屏幕上的坐标COORD 5.4 GetStdHandle 5.5 GetConsoleCursorInfo 5.5.1 CONSOLE_CURSOR_INFO 5.6 SetConsoleCursorInfo 5.7 SetConsoleCursorPositi…

d3dcompiler47dll丢失怎么解决,详细介绍6种解决方案

在电脑使用过程中,我们可能会遇到各种问题,其中之一就是系统提示某个文件缺失。其中,d3dcompiler_47.dll是许多用户经常遇到的问题之一。这个文件是DirectX组件的一部分,如果缺失,可能会导致游戏或应用程序无法正常运行…

Qt/C++ 多线程同步机制详解及应用

在多线程编程中,线程之间共享资源可能会导致数据竞争和不一致的问题。因此,采用同步机制确保线程安全至关重要。在Qt/C中,常见的同步机制有:互斥锁(QMutex、std::mutex)、信号量(QSemaphore&…

Ansbile-变量

文章目录 一、Ansible的常量(内置的变量)有哪些???????????????&#xff1…

vulnhub(11):derpnstink(hydra爆破用户名和密码、验证的文件上传)

端口 nmap主机发现 nmap -sn 192.168.159.120/24 ​ Nmap scan report for 192.168.159.120 Host is up (0.00020s latency). ​ 120是新出现的机器,他就是靶机 nmap端口扫描 nmap -Pn 192.168.159.120 -p- --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nma…

【论文笔记】Are Large Kernels Better Teacheres than Transformers for ConvNets

Abstract 本文提出蒸馏中小核ConvNet做学生时,与Transformer相比,大核ConvNet因其高效的卷积操作和紧凑的权重共享,使得其做教师效果更好,更适合资源受限的应用。 用蒸馏从Transformers蒸到小核ConvNet的效果并不好,原…

图的应用(关键路径)

基于你设计的带权有向无环图,写出所有合法的关键路径,并算出关键路径总长度 文字描述:关键路径总长度的现实意义是什么? 1.关键路径 总长度454316 2.现实意义 从源点到汇点的所有路径中,具有最大路径长度的路径称…

好的头戴式降噪耳机一定很贵吗?四款热门头戴耳机盘点及推荐!

在快节奏的现代生活中,噪音无处不在,它常常干扰着我们的工作、学习与休闲时光。而一款高性价比的降噪蓝牙耳机,就如同一个贴心的伙伴,能为我们营造出一片宁静的听觉空间。如今,耳机市场蓬勃发展,想要好的头…

Broadcast:Android中实现组件及进程间通信

目录 一,Broadcast和BroadcastReceiver 1,简介 2,广播使用 二,静态注册和动态注册 三,无序广播和有序广播 1,有序广播的使用 2,有序广播的截断 3,有序广播的信息传递 四&am…

如何在GitHub上克隆仓库:HTTPS、SSH和GitHub CLI的区别

GitHub是开发者的天堂,提供了丰富的工具和功能来管理代码和项目。在克隆GitHub仓库时,你可能会遇到三种常见的方法:HTTPS、SSH和GitHub CLI。每种方法都有其独特的优势和适用场景。本文将深入探讨这三种克隆方式的区别,帮助你选择…

C++--类的实例化

一、实例化的概念 用类类型在屋里内存中创建对象的过程,称为类实例化出对象 类是对对象进行一种抽象描述,是一个模型一样的东西,限定了类有哪些成员变量,这些成员变量只是声明,没有分配空间,用类实例化出…

java项目之编程训练系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的编程训练系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 编程训练系统的主要使用者管…

【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器(上)

文章目录 前言一、ArkTS基本介绍1、 ArkTS组成2、组件参数和属性2.1、区分参数和属性的含义2.2、父子组件嵌套 二、装饰器语法1.State2.Prop3.Link4.Watch5.Provide和Consume6.Observed和ObjectLink代码示例:示例1:(不使用Observed和ObjectLi…

未来通信抢先看!遨游通讯2024年中国国际信息通信展亮点剧透

2024年中国国际信息通信展览会将于9月25日-27日在北京国家会议中心举行,本届展会以“推动数实深度融合,共筑新质生产力”为主题。在通信技术日新月异的今天,卫星通信、人工智能、低碳节能等技术理念正引领着通信行业迈向新的高度。遨游通讯作…

【漏洞复现】Casbin casdoor static 任意文件读取漏洞

漏洞描述 Casdoor 是 Casbin 开源社区推出的基于 OAuth 2.0 / OIDC 的中心化的单点登录(SSO)身份验证平台。 Casdoor static 存在任意文件读取漏洞,攻击者通过发送特殊的请求包可以获取服务器中的敏感文件。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵…