【具身智能】论文系列解读-RL-ViGen

1. RL-ViGen:视觉泛化的强化学习基准

RL-ViGen: A Reinforcement Learning Benchmark for Visual Generalization

0 摘要与总结

视觉强化学习(Visual RL)与高维观察相结合,一直面临着分布外泛化的长期挑战。尽管重点关注旨在解决视觉泛化问题的算法,但我们认为现有的基准测试存在问题,因为它们仅限于孤立的任务和泛化类别,从而破坏了对智能体视觉泛化能力的综合评估。为了弥补这一差距,我们引入了 RL-ViGen:一种新颖的视觉泛化强化学习基准,它包含不同的任务和广泛的泛化类型,从而有助于得出更可靠的结论。此外,RL-ViGen 将最新的泛化视觉 RL 算法纳入统一的框架中,实验结果表明,没有任何一种现有算法能够跨任务通用。我们的愿望是 RL-ViGen 将成为该领域的催化剂,并为未来创建适合现实场景的通用视觉泛化 RL 代理奠定基础。 https://gemcollector.github.io/RL-ViGen/ 提供对我们的代码和实现算法的访问。

在4.2节中,如图 7 所示,所有算法的性能均未达到预期,这表明当前的视觉 RL 算法和泛化方法对场景结构变化的鲁棒性不够。必须进行更深入的研究,以增强经过训练的智能体感知不断变化的场景结构的泛化能力

1 引言

视觉强化学习 (RL) 在众多领域取得了显着的成功 [33,36,14]。人们采用了多种技术,不仅可以解决试错学习过程,还可以解决高维输入数据带来的复杂性。

尽管取得了这些成功,视觉强化学习智能体面临的一个根本挑战仍然存在——实现泛化。

为了克服这个障碍,出现了几个视觉 RL 泛化基准,包括 Procgen [6]、Distracting Control Suite [40] 和 DMC-GB [18]。虽然这些基准对于视觉 RL 泛化进展是不可或缺的,但它们并不能免除对进一步发展构成挑战的固有限制。 Procgen 提供多样化的环境配置和视觉外观分布。然而,它仅限于具有非真实图像和低维离散动作空间的视频游戏,导致其环境与现实世界场景之间存在显着差距。另一个例子,DMC-GB,有时被视为许多最先进的视觉泛化算法的黄金标准。

image-20230828101623839

**图 1:**用于视觉泛化的新颖 RL 基准。我们证明 RL-ViGen 支持具有不同泛化类别的广泛任务。可以更全面地评估算法并获得更有说服力的实验结果

然而,现有设置中任务类别和泛化类别范围狭窄,无法彻底、全面地评估智能体的泛化能力。此外,虽然Distracting Control Suite包含两种泛化类型,但它在多样性和复杂性方面存在不足。该领域的普遍趋势是展示所提出的算法在这些基准上的优越性,这不利地带来了促进对这些基准的过度拟合的一定风险,而不是发现可能有益于解决现实世界问题的算法。

在本文中,我们介绍了一种新颖的视觉泛化强化学习基准(RLViGen),与现有同行相比具有许多优点。我们的基准测试将一系列任务类别与真实图像输入相结合,包括桌面操纵、运动、自动驾驶、室内导航和灵巧的手部操纵,从而可以更全面地评估智能体的功效。此外,通过整合视觉 RL 泛化中的各个关键方面,例如视觉外观、光照变化、摄像机视图、场景结构和交叉实施例,RL-ViGen 能够全面检查智能体针对不同视觉条件的泛化能力。

值得注意的是,我们提供了一个统一的框架,其中包含各种最先进的视觉强化学习泛化算法,每种方法都具有相同的优化方案。该框架不仅促进公平的基准比较,而且还降低了设计新颖方法的准入门槛。

总之,我们的贡献如下:

  • 1)我们提出了一种新颖的视觉 RL 泛化基准 RL-ViGen,具有多样化、真实的渲染任务和众多泛化类型;
  • 2)我们在统一的框架内实现和评估各种算法,从而能够全面分析其泛化性能;
  • 3)我们进行了全面而广泛的实验,以证明现有方法在处理不同任务和泛化类型时的独特性能,并强调当前可泛化视觉强化学习算法的优点和局限性。综合所有贡献,RL-ViGen 可能为视觉 RL 泛化的进一步进步铺平道路,最终为现实世界的应用带来更强大、适应性更强的算法。

表 1:概括类别。

下表概述了每个任务中包含的泛化类型。除了被认为不适用 (N/A) 的类别(例如,对于运动,不需要场景结构的变化)之外,所有潜在类型都包括在内。

image-20230828124502654

2 RL-ViGen 框架

RL-ViGen 包含 5 个不同的任务类别,涵盖运动桌面操纵自动驾驶室内导航灵巧手操纵领域。与之前的基准相比,RL-ViGen 采用多种任务类别来评估智能体的泛化性能。我们相信,只有通过多角度综合检验,才能得出令人信服的结果。此外,如表1所示,我们的基准测试提供了广泛的泛化类别,包括视觉外观、摄像机视图、照明条件的变化、场景结构和跨实施例设置,从而提供了对算法的鲁棒性和泛化能力的全面评估。

2.1 实验环境

**灵巧的操作:**Adroit [37] 是一个复杂的环境,专门为灵巧的手操作任务而定制。由于环境的稀疏奖励性质和高维动作空间的复杂性,它需要大量的探索和细粒度的特征捕获。在 RL-ViGen 中,我们通过集成不同的视觉外观、相机视角、手型、光照变化和物体形状来丰富 Adroit 环境。

**自动驾驶:**CARLA [9]作为自动驾驶的真实高保真模拟器,研究动态条件下智能体的控制能力。在之前的研究中,它已成功部署在视觉强化学习设置上。与之前的工作[21]相反,RLViGen 在不同的场景结构中提供了更广泛的动态天气和更复杂的路况。此外,RL-ViGen 中还包含灵活的相机角度调整功能。

**室内导航:**作为一种高效且逼真的 3D 模拟器,Habitat [39] 结合了众多视觉导航任务。成功完成这些任务需要智能体拥有场景理解的能力。 RL-ViGen 以 skokloster 城堡场景为基础,并提出了具有不同视觉和照明设置的附加场景。此外,摄像机视图和场景结构被设计为可调节的。

**桌面操控:**Robosuite [57] 是一个旨在支持机器人学习的模块化仿真平台。它本质上包含旨在调整各种场景参数的界面。最近的工作[12]利用这个平台来测试智能体对视觉背景变化的泛化能力。 RL-ViGen 进一步结合了动态背景、自适应照明条件和实施例变化选项,改进了模拟,使其更接近现实世界。

Locomotion:DeepMind Control 是一种流行的连续视觉 RL 基准测试。 DMC-GB[19]是在其上开发的,并已成为广泛使用的评估泛化算法的基准。RL-ViGen 以 DMC-GB 为基础,引入了来自复杂的现实世界运动和操纵应用程序的对象和相应任务,例如 Unitree、Anymal 四足机器人和 Franka Arm。更重要的是,RL-ViGen 还提供了各种泛化类别来进一步丰富这个环境。

更详细的实现和修改可以在附录 B 和我们的代码库中找到。

image-20230828125253052

**图 2:**泛化过程。智能体首先在第一阶段使用特定的固定场景进行训练。随后,在第二阶段,以零样本的方式在各种视觉泛化场景中测试代理。智能体在第 2 阶段的各个场景中表现越好,其表现出的泛化能力就越强。

2.2 类别概括

在这里,我们强调 RL-ViGen 中使用的主要泛化类别: 视觉外观:在物体、场景或环境的视觉特征发生变化的情况下保持有效的性能至关重要,特别是对于视觉强化学习而言。

在我们的基准测试中,环境中的不同组件可以使用多种颜色进行修改。同时,还引入了动态视频背景作为具有挑战性的设置。

**摄像机视图:**在现实世界中,智能体必须应对可能与训练期间所经历的不一致的摄像机配置、角度或位置。我们提供将摄像机设置为不同角度、距离和视场的权限。此外,摄像机的数量也可以相应调整。

**照明条件:**现实世界中不可避免地会发生照明条件的变化。为了使代理能够适应这种变化,我们的基准测试提供了与照明相关的接口,例如不同的光强度、颜色和动态阴影变化。

**场景结构:**掌握理解和适应不同场景中不同空间安排和组织模式的能力对于真正可泛化的智能体至关重要。为此,我们的基准测试可以通过调整地图、图案或引入额外的对象来修改场景结构。

**跨实施例:**使学习到的技能和知识适应不同的物理形态或实施例对于代理在具有不同运动结构和传感器配置的各种平台或机器人上表现良好至关重要。因此,我们的基准还提供了在模型类型、大小和其他物理属性方面修改经过训练的代理的体现的途径。

3. 视觉强化学习中泛化的算法基线

3.1 统一框架

我们工作的另一个重要贡献是实现了统一的代码库来支持各种视觉 RL 算法之间的比较。在之前的研究中,不同的算法采用不同的优化方案、RL 基线和超参数。例如,SRM [22] 和 SVEA [20] 依赖于基于 SAC 的 RL 算法,而 PIE-G [54] 采用基于 DDPG 的方法。此外,微小的不同实现都可能会对最终性能产生重大影响。因此,提供一个统一的框架在这个领域非常重要,可以通过一致的框架和不同的任务评估算法得出更有说服力的结论。

3.2 视觉强化学习算法

在我们的基准测试中,我们组装了八种领先的视觉强化学习算法,并应用相同的统一训练和评估框架。 DrQ-v2 [50] 就样本效率而言是现有最先进的基于 DDPG 的无模型视觉 RL 算法。 DrQ [27] 是另一种基于 SAC 的样本高效视觉 RL 算法,它是 DrQ-v2 的基础。 CURL [28] 利用 SimCLR 式 [5] 对比损失来获得更好的视觉表示。 VRL3 [43] 是具有人类演示的 Adroit 任务中最先进的算法。其他四种算法专注于实现稳健的表示。

SVEA[20]采用未增强图像的Q值作为目标,同时利用数据增强来减少Q方差; SRM[22]采用频域增强来选择性消除部分观测频率; PIE-G[54]结合ImageNet[8]预训练模型进一步提升泛化能力; SGQN [3] 通过与显着图集成来识别决策的关键像素。

4. 实验

在本节中,我们尝试研究所提出的 RL-ViGen 基准中不同方法的泛化能力。如图 2 所示,所有智能体都在相同的固定训练环境中进行训练,并以零样本的方式在各种未见过的场景中进行评估。训练样本效率和渐近性能如附录E.4所示。对于每项任务,我们评估超过 5 个随机种子并报告平均分数和 95% 置信区间。对于每个训练环境,我们给出了多个子任务的汇总分数。详细而广泛的实验结果可以在附录 B 和 E 中找到。每个环境和泛化类型的可视化如附录 D.1 所示。

4.1 视觉外观和灯光变化

4.1.1 室内导航

在 Habitat 平台中,我们选择 ImageNav 任务并修改 3D 扫描模型,以引入具有各种视觉外观和照明条件的新颖场景。我们对 10 个选定场景中的每一个进行 10 次评估(总共 100 次试验)。与大多数现有基准相比,Habitat 渲染的图像是由高性能 3D 模拟器从第一人称视角捕获的。因此,它可以提供更类似于现实世界场景的可视化效果。如图3所示,PIE-G的优越性能归功于与ImageNet预训练模型的集成,为PIE-G配备了丰富的真实图像,使其能够更有效地处理这些场景。相反,与第 4.1.2 节得出的结论一致,SGQN 旨在通过消除冗余背景来分割中心代理,但在这些对象丰富和第一人称视图任务中被证明是无效的。

image-20230828163057467

**图 3:室内导航的泛化得分。**我们展示了每种方法的成功率。结果表明PIE-G在Habitat上取得了更好的泛化性能。

4.1.2 自动驾驶

关于CARLA,我们采用Zhang等人[55]中的奖励函数设置,并应用第一人称视角来更好地模拟真实世界的驾驶条件。如附录D.1中的图11所示,该环境分为三个级别:简单、中等和困难。主要修改涉及不同因素,例如降雨强度、道路湿度和照明。训练场景的差异越大,难度就越大。在这项任务中,其独特之处之一是特点是输入图像频率发生相当大的变化。因此,在频域中应用数据增强的 SRM 方法表现出最佳性能,因为它可以适应不同频率的输入图像。虽然PIE-G采用了ImageNet预训练模型,但其源训练图像主要具有高频特征,因此在面对低频场景(例如黑夜)时泛化效果不佳。此外,提取显着信息的 SGQN 在面对视觉丰富的场景(其中受控代理不存在于观察帧中)时表现出性能下降。还应该指出的是,DrQ 在这种环境中获得了一定程度的泛化能力。我们的观察表明,由于 DrQ 是一种基于 SAC 的算法,因此它往往容易发生熵崩溃 [50]。这意味着经过训练的智能体仅针对不同的图像输入产生单一的动作分布

image-20230828191834890

**图 4:**自动驾驶的综合泛化得分。我们展示了每种方法的汇总回报。 SRM表现出更好的性能,可以适应图像频率变化较大的场景。

4.1.3 灵巧的手部操作

在 Adroit 环境中,我们评估了每种方法在三个单视图任务中的性能:门、锤子和笔。由于 DrQ-v2 和 DrQ 在这些具有挑战性的环境中几乎没有表现良好,因此我们利用 VRL3 [43],这是该领域最先进的方法,因为 RL-ViGen 中的基本算法视觉 RL 方法是重新设计的。并以此为基础实施。

关于样本效率,人们普遍认为应用强增强会对样本效率产生负面影响。然而,如附录 E.4 中的图 5 所示,值得注意的是,由于 VRL3 专门设计了一种安全 Q 机制来防止该环境中潜在的 Q 发散,因此应用强增强的泛化算法可以实现与仅使用随机的泛化算法相当的性能转移。

image-20230828192122923

**图 5:**Adroit 的样本效率。每种算法的成功率。我们将训练步骤标准化为 (0, 1)。具有强增强能力的方法也可以获得可比的性能。

image-20230828194548509

**图 6:**灵巧操作的综合泛化得分。我们展示了每种方法的总体成功率。配备 ImageNet 预训练模型的 PIE-G 对需要细粒度信息捕获的 Adroit 任务表现出更好的适应性。

至于泛化,Adroit 任务要求智能体识别细粒度的特征,以进行灵巧而复杂的操作。因此,PIE-G 利用 ImageNet 预训练模型来捕获详细信息,展示了协助学习代理执行下游任务的有效性,特别是在困难环境中。此外,如图 6 所示,由于缺乏减轻视觉变化影响的额外目标,导致 VRL3 和 CURL 在这些要求较高的任务中难以适应新的视觉情况。

4.2 场景结构

能够在不同场景结构中提供强大性能的通用代理对于潜在的广泛现实应用至关重要。我们选择 CARLA 作为评估场景结构泛化能力的测试平台。这些代理在标准训练场景(高速公路)中进行训练,并在更复杂的结构设置中进行测试,包括狭窄的道路、隧道和 HardRainSunset 天气条件下的环形交叉口。如图 7 所示,所有算法的性能均未达到预期,这表明当前的视觉 RL 算法和泛化方法对场景结构变化的鲁棒性不够。必须进行更深入的研究,以增强经过训练的智能体感知不断变化的场景结构的泛化能力

image-20230828195521129

图 7:场景结构的泛化得分。在这一类泛化中,所有算法的性能都不尽如人意。

4.3 相机视图

我们继续评估 Adroit 环境中相机视图的泛化能力。如图 8 所示,在 Easy 设置下,PIEG 和 SGQN 在摄像机视图方面表现出领先的泛化能力,而其他算法由于使用随机移位增强也表现出一定程度的泛化能力。然而,在硬设置中,相机位置、方向和视场 (FOV) 发生了重大变化,除了 SGQN 之外,几乎所有算法都失去了泛化能力。 SGQN 的卓越性能主要是由于其严重依赖于生成显着图,从而增强了智能体的对物体几何形状和相对位置的自我意识。因此,即使面对相机视图发生重大变化,该属性也能增强其泛化性能。

image-20230828195750964

**图 8:**相机视图的泛化得分。 SGQN 表明相机视图泛化中不同级别的优势泛化能力。

4.4 交叉实施例

解决视觉输入中的实施例不匹配问题至关重要,因为实施例构成了图像的很大一部分,并显着影响机器人与世界交互的行为。为了研究这种类型的泛化,采用 Robosuite 作为评估平台。我们在训练期间利用 OSC_POSE 控制器 [35] 来促进动作空间维度及其各自含义的维护。然后,训练有素的智能体从 Panda Arm 转移到两种不同的形态:KUKA IIWA 和 Kinova3。如图 9 所示,所有算法的整体性能都不是最优的;然而,基于泛化的方法在训练期间包含更多样化的信息,与主要关注跨实施例设置中的样本效率的方法相比,表现出轻微的优势。

image-20230828195908796

**图 9:**交叉实施例的聚合泛化得分。目前还没有算法展示出管理跨实施例泛化的能力。

5 讨论

综上所述,我们的实验表明,基于先前基准的研究结果可能无法准确反映实际进展,从而导致对情况的认知扭曲;这些先进的视觉 RL 算法以前被认为是最前沿的,但在 RL-ViGen 中显示出较低的效率。

我们将主要内容总结如下:

要点 1: 实验结果揭示了不同视觉 RL 算法在不同任务和泛化类别中的不同泛化性能,没有单一算法表现出普遍强大的泛化能力。

结论 2:仅仅提高训练性能并不能保证泛化能力的提高。尽管DrQ(v2)和CURL在训练过程中表现出较高的样本效率,甚至实现了更好的渐近性能(附录E.4),但它们在各种泛化场景中的表现尚未达到令人满意的水平。因此,当试图提高智能体的泛化能力时,引入额外的归纳偏差来帮助训练过程至关重要。

要点 3:有效的可泛化视觉 RL 代理必须在多个泛化类别中表现出卓越的性能。之前的工作主要集中在视觉外观的泛化上,而我们的实验揭示了现有算法在交叉实施例和场景结构设置中的相当大的缺点。这些表现不佳的泛化类别不仅仅改变了马尔可夫决策过程(MDP)中的观察空间;它们还对动作空间和转换概率进行修改,从而给智能体带来额外的挑战。

要点 4: 每种泛化算法都有其独特的优势。值得注意的是,PIE-G 在视觉外观和照明条件变化方面表现出卓越的性能,而 SRM 在显着的图像频率变化下表现出卓越的鲁棒性。当面临相当大的摄像机视图变化时,SGQN 保留其泛化能力。此外,SVEA不需要额外的参数,只需要很少的修改,就可以达到一定水平的泛化能力。我们假设通过融合不同的算法可能会获得更强的性能,例如利用带有基于频率的增强的预训练模型来进一步改进。

结合要点,我们希望算法在 RL-ViGen 中的成功能够表明其在更复杂和不可预测的现实场景中的潜在适用性。未来,涵盖场景结构、摄像机视图和交叉实施例等方面的整体和多维方法对于培养能够在各种动态现实环境中导航的真正通用代理至关重要。同样,设计更复杂、更现实的训练环境,能够反映现实世界条件的复杂性,也可以作为未来探索的关键领域。

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

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

相关文章

mysql 存储引擎系列 (二) Innodb 存储引擎 和 myisam 存储引擎

InnoDB 引擎 支持外键InnoDB是MySQL默认事务型引擎,它被设计用来处理大量的短期事务。可以确保事务的完整提交(commit)和回滚(Rollback)增加和查询,且数据量少的,MyIsam 高效, 除了…

Java“牵手”1688商品跨境属性数据,1688API接口申请指南

1688平台商品详情跨境属性数据接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取1688商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片,重量,详情描述等详细信息 。 获取商品详情接口API是一种用于…

私域流量的本质是什么?

私域流量的本质可以总结为以下几点: ①用户拥有权: 私域流量的关键是企业拥有对用户数据和互动的掌控权 ②长期价值: 建立持久的、互惠的关系,以便长期吸引、留住客户,并不断提高他们的价值。这与公域流量通常更侧重于短期转化的特性不同。…

双指针算法,基础算法实践,基本的算法的思想,双指针算法的实现

一,定义 双指针算法是一种常用于解决数组和链表问题的算法技巧。它的核心思想是使用两个指针在数据结构中按照一定的规则移动,从而达到快速搜索或处理数据的目的。这个技巧通常用于优化算法,降低时间复杂度,提高程序的执行效率。…

搭建微服务架构、实现服务调用

OpenFeign:Spring Cloud声明式服务调用组件 OpenFeign 全称 Spring Cloud OpenFeign,它是 Spring 官方推出的一种声明式服务调用与负载均衡组件,它的出现就是为了替代进入停更维护状态的 Feign。 OpenFeign 常用注解 使用 OpenFegin 进行远…

原生微信小程序使用 wxs;微信小程序使用 vant-weapp组件

1.原生微信小程序使用 wxs 1.内嵌 WXS 脚本 2. 定义外链 wxs 3. 使用外连wxs 在这里插入图片描述 2. 微信小程序使用 vant weapp 1.安装步骤 2. 安装包管理(package.json)文件的方法 操作顺序 :文档地址 如果使用 typescript 需要操作步骤3,否则不…

边缘计算网关是如何提高物联网的效率的?

随着物联网的持续发展,物联网应用的丰富和规模的扩大,带来了海量的数据处理、传输和计算需求。 传统的“数据中央处理”模式越来越难以适应物联网的扩展速度,在这一趋势下,边缘计算在物联网系统的部署运营中就发挥出了显著的增效…

React【React是什么?、创建项目 、React组件化、 JSX语法、条件渲染、列表渲染、事件处理】(一)

文章目录 React是什么? 为什么要学习React React开发前准备 创建React项目 React项目结构简介 React组件化 初识JSX 渲染JSX描述的页面 JSX语法 JSX的Class与Style属性 JSX生成的React元素 条件渲染(一) 条件渲染 &#xff0…

SpringMVC 写个 HelloWorld

文章目录 一、SpringMVC简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求控制器5、创建springMVC…

工作中你会使用到 grpcurl 吗?

在平时的开发过程中,我们一般是 http 接口对外, grpc 接口对内部微服务 相信对于如何去请求 http 接口,大家都很熟悉了 如果是 inux 里面使用 curl 命令 在 windows 里面我们可以使用 postman 来请求接口 如果对于一个云上开发的接口的话&a…

设计模式之建造者模式

文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼…

嵌入式通用硬件模块设计——串口音频播放模块

模块功能展示: 串口音频控制模块 一、简介 方案为串口音频播放芯片功放芯片,口音频播放芯片IC为my1690-16s,功放为PAM8406。 1、my1690-16s 迈优科技的一款由串口控制的插卡MP3播放控制芯片,支持串口控制播放指定音频、音量调节…

兼具传统和新锐基因的极氪,是怎么做用户运营的?|新能源车专题研究

主笔:浣芳黛 出品:增长黑盒研究组 近几个月来,新能源车势头强劲,众多车企纷纷传出连月增长和再创新高的捷报,在当下整体经济复苏缓慢的映衬下,显得格外耀眼。 于是,增长黑盒近期针对新能源车企展…

QGIS学习2-QGIS设置中文界面、导出地图、修改显示投影、自定义投影等

1、设置中文界面 参照官方给的提示: https://qgis.org/en/site/getinvolved/translate.html 2、QGIS功能介绍 QGIS支持功能还是很全面的。 而且提供了很全面的插件库 https://plugins.qgis.org/plugins/ 3、工程文档介绍 可以直接从菜单栏对工程文档进行操作…

2023.8.25 关于 Selenium 常用 API 详解

目录 引言 打开页面 查找页面元素 输入文本 点击操作 提交操作 清除文本 获取文本和属性值 ​编辑 选择多个元素 获取页面标题和URL 等待操作 浏览器操作 多层框架定位 窗口操作 屏幕截图 下拉框元素选择操作 ​编辑 执行脚本 文件上传 引言 本文讲的所有…

java属性映射使用MapStruct的坑

目录 1.实体类和映射类只加注解Data 2.将Data换成getter和setter后build 3.那么此时我把getter和setter换成lombok的getter和setter 1.实体类和映射类只加注解Data 映射关系类 这个时候运行 提示源参数中不存在 注意这个文件夹 2.将Data换成getter和setter后build package c…

【C# Programming】编程入门:数组、操作符、控制流

目录 一、数组 1、数组的声明 1.1 一维数组声明: 1.2 多维数组声明: 2、数组的实例化和赋值 2.1 数组在声明时通过在花括号中使用以逗号分隔的数据项对数组赋值, 例如: 2.2 如果在声明后赋值,则需…

【JS案例】JS实现手风琴效果

JS案例手风琴 🌟效果展示 🌟HTML结构 🌟CSS样式 🌟实现思路 🌟具体实现 1.绑定事件 2.自定义元素属性 3.切换菜单 🌟完整JS代码 🌟写在最后 🌟效果展示 🌟HTML…

Java课题笔记~ 综合案例

3.综合案例 3.1 功能介绍 以上是我们在综合案例要实现的功能。除了对数据的增删改查功能外,还有一些复杂的功能,如 批量删除、分页查询、条件查询 等功能 批量删除 功能:每条数据前都有复选框,当我选中多条数据并点击 批量删除 按…

PHP环境配置

1.服务器 简单理解:服务器也是一台计算机,只是比平时用到的计算机在性能上更强大,开发中通常都需要将开发好的项目部署到服务器进行访问,例如:我们可以访问百度、淘宝、京东等,都是因为有服务器的存在&…