DexCap——斯坦福李飞飞团队泡茶机器人:更好数据收集系统的原理解析、源码剖析

前言

2023年7月,我司组建大模型项目开发团队,从最开始的论文审稿,演变成目前的两大赋能方向

  1. 大模型应用方面,以微调和RAG为代表
    除了论文审稿微调之外,目前我司内部正在逐一开发论文翻译、论文对话、论文idea提炼、论文修订/润色/语法纠错、论文检索
  2. 机器人(具身智能)方面,我们1月份开始攻机器人、Q1组建队伍、5月份成功复现UMI和DexCap后「是国内最早复现这两模型的团队或之一,为不断扩大整个大模型机器人的开发队伍,需要从课程中选拔更多人才,故推出:机器人二次开发线下营(线下提供价值20万的实体机器人 供线下实操)
    本月(即6月)总算要开始为工厂赋能了(目前已经谈好三个工厂的合作意向)

总之,经过过去近一年的努力,在今年创业的第十年,我司从教育为主,变成了「科技为主 教育为辅」,主做大模型应用、机器人(具身智能)、解决方案​​​

而对于其中的机器人,无论是我、我合伙人孙老师、Y博士(我司机器人方向的合伙人),还是整个机器人开发团队,对具身智能的发展都充满无比的信心,誓要全力加速赋能各个典型的工业场景,毕竟科技就是最直接的生产力

本文中的DexCap一开始是在此文《模仿学习的集中爆发:从Dobb·E、Gello到斯坦福Mobile ALOHA、UMI、DexCap、伯克利FMB》中的,考虑到

  • 一方面,经过我司七月的一系列实践得知,相较Moblie Aloha、UMI「其中,UMI详见:UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)」,DexCap在工厂的落地性更高,可以更好的结合企业特定的需求场景做定制开发
  • 二方面,我们准备把DexCap的源码也做下分析,以方便更广大的朋友

故把DexCap独立出来成本文

第一部分 斯坦福李飞飞团队DexCap:可扩展和便携的动作捕捉数据收集系统

1.1 项目背景:遇到的问题与解决方案

1.1.1 以前收集数据:从远程操作、基于视觉到运动捕捉

首先,对于数据的收集上,通过上面介绍的斯坦福mobile aloha/UMI可知,模仿学习最近在机器人领域取得了相当大的进展,特别是通过使用人类示范数据进行监督训练

  • 常用的一种收集数据的方法是通过远程操作机器人手执行任务 比如mobile aloha。 然而,由于需要真实的机器人系统和缓慢的机器人运动,这种方法在扩展上是昂贵的
  • 另一种方法是在操作过程中直接跟踪人手的运动而不控制机器人。 当前系统主要是基于视觉的,使用单视角摄像头。 然而,除了跟踪算法能否提供关键的准确的三维信息以供机器人策略学习之外,这些系统还容易受到在手-物体交互过程中经常发生的视觉遮挡的影响
  • 对于收集灵巧操纵数据,运动捕捉(mo-cap)是一种比基于视觉的方法更好的选择。 运动捕捉系统提供准确的三维信息,并且对视觉遮挡具有鲁棒性。 因此,人类操作员可以直接用双手与环境进行交互,这样做快速且更容易扩展,因为不需要机器人硬件

进一步,为了将手部运动捕捉系统扩展到机器人学习的日常任务和环境中进行数据收集,一个合适的系统应该具备便携性和长时间捕捉的鲁棒性,能够提供准确的手指和腕关节姿态,以及三维环境信息,可问题是

  1. 大多数手部运动捕捉系统不具备便携性,依赖于校准良好的第三视角摄像头,虽然电磁场(EMF)手套解决了这个问题,但无法跟踪世界坐标系中的6自由度(6-DoF)腕关节姿态,这对于末端执行器(比如手指)的策略学习很重要
  2. 像基于IMU(Inertial Measurement Unit,惯性测量单元,主要用来检测和测量加速度与旋转运动的传感器)的全身套装这样的设备可以监测腕关节位置,但容易随时间漂移

除了硬件挑战外,还存在算法挑战,用于机器人模仿学习的动作捕捉数据。 尽管灵巧的机器人手使得直接从人类手部数据中学习成为可能,但机器人手和人类手之间的尺寸、比例和运动结构的固有差异需要创新算法

1.1.2 DEXCAP如何解决:便捷式动作捕捉、学习算法DEXIL、人机交互校正

为了分别解决硬件层面、算法层面的挑战,24年3月,李飞飞团队分别开发了一种新的便携式手部动作捕捉系统DEXCAP,和一种模仿算法DEXIL(DEXIL允许机器人直接从人类手部动作捕捉数据中学习灵巧操纵策略)

  • 项目地址:DexCap | Scalable and Portable Mocap Data Collection System for Dexterous Manipulation
  • 论文地址:DexCap: Scalable and Portable Mocap Data Collection System for Dexterous Manipulation

对于系统,DEXCAP作为便携式手部动作捕捉系统,可以实时跟踪手腕和手指运动的6自由度姿态(60Hz),该系统包括

  1. 一个动作捕捉手套用于跟踪手指关节,每个手套上方安装一个相机用于通过SLAM跟踪手腕的6自由度姿态
  2. 并在胸部安装一个RGB-D LiDAR相机观察3D环境(注意,手部动作的精确3D信息,例如,6自由度手部姿态、3D手指定位等很重要)

对于算法,为了利用DEXCAP收集的数据来学习灵巧机器人策略,作者团队提出了基于动作捕捉数据的模仿学习方法DEXIL,它包括两个主要步骤——数据重定位和基于点云输入的生成式行为克隆策略训练(data retargeting and training generative-based behavior cloning policy with point cloud inputs),还可以选择性地进行人机交互式运动校正

  1. 在重定位过程中,我们使用逆运动学(inverse kinematics,简称IK)将机器人手指尖重定位到与人类手指尖相同的3D位置
    手腕的6自由度姿态用于初始化IK,以确保人类和机器人之间的手腕运动相同
  2. 然后,我们将RGB-D观测转换为基于点云的表示,继而使用基于点云的行为克隆算法,基于扩散策略[13]
  3. 在更具挑战性的任务中,当IK无法填补人类手和机器人手之间的体现差距时,我们提出了一种人机交互式运动校正机制,即在策略执行过程中,当出现意外行为时,人类可以佩戴DEXCAP并中断机器人的运动,这样的中断数据可以进一步用于策略微调

总之,不同于以下这些

  • DIME [3] 使用虚拟现实技术来远程操作灵巧手进行数据收集
  • Qin等人 [60] 使用单个RGB摄像头来跟踪手部姿态进行远程操作
  • DexMV [61]、DexVIP [45] 和 VideoDex [69]利用人类视频数据来学习运动先验知识,但通常需要在仿真或真实机器人远程操作数据上进行额外训练

DEXCAP专注于灵巧模仿学习,依赖于 DEXCAP 来收集基于三维点云观测的高质量手部动作捕捉数据,这些数据可以直接用于训练单手或双手机器人的低级位置控制

1.2 硬件设备:数据捕捉设备和机器人的设计

DexCap为了捕捉适合训练灵巧机器人策略的细粒度手部动作数据,DexCap的设计考虑了四个关键目标:

  1. 详细的手指运动跟踪
  2. 准确的6自由度手腕姿态估计
  3. 以统一坐标框架记录对齐的3D观察数据
  4. 在各种真实环境中具有出色的便携性以进行数据收集

1.2.1 追踪手指运动:使用Rokoko动作捕捉手套

经过实验得知,使用电磁场手套,相比于基于视觉的手指追踪系统,在手物交互中对视觉遮挡的鲁棒性方面具有显著优势(论文中对电磁场手套系统和最先进的基于视觉的手部追踪方法在不同操纵场景下进行了定性比较)

在我们的系统中,手指运动使用Rokoko动作捕捉手套进行跟踪,如下图所示

  1. 每个手套的指尖都嵌入了一个微小的磁传感器(Each glove’s fingertip is embedded with a tiny magnetic sensor)
  2. 而信号接收器则放置在手套的背面(while a signal receiver hub is placed on the glove’s dorsal side)
  3. 每个指尖的三维位置是从接收器到传感器的相对三维位移来测量的(The 3D location of each fingertip is measured as the relative 3D translation from the hub to the sensors)

1.2.2 追踪6自由度手腕姿态:2个T265追踪相机和一个IMU传感器

除了手指运动外,了解机器人末端执行器在三维空间中的精确位置对于机器人操控至关重要。这需要DEXCAP用于估计和记录人手在数据收集过程中的6自由度姿态轨迹。 虽然基于相机和基于IMU的方法通常被使用,但每种方法都有其局限性

  • 基于相机的系统,通常不便携且在估计手腕方向能力上有限,不太适合用于操纵任务的数据收集
  • 基于IMU的系统,虽然可穿戴,但在长时间记录会话中容易出现位置漂移

为了解决这些挑战,故开发了一种基于SLAM算法的6自由度手腕跟踪系统,如上图(c)所示

该系统逐一通过

  1. 安装在每个手套背面的Intel Realsense T265相机「即两个鱼眼相机的图像(一篮、一绿)
    从而让其是便携的,可以在第三人称摄像机框架中无需手部可见的情况下跟踪手腕姿态
  2. IMU传感器信号(IMU传感器提供了训练机器人策略所需的关键手腕方向信息)
  3. SLAM算法构建环境地图
    SLAM可以自动根据建立的地图纠正位置漂移,以实现长时间使用(SLAM can autonomously correct position drift with the built map for long-time use)

以实现对手腕6自由度姿态的一致跟踪

1.2.3 记录3D观察和校准:一个RGB-D LiDAR摄像机和一个T265跟踪相机

捕捉训练机器人策略所需的数据不仅需要跟踪手部运动,还需要记录3D环境的观察作为策略输入

为此,DexCap团队设计了一个装载摄像机的背包「如上图(a)、(b)所示,为方便大家对照,特把上图再贴一下,如下

  • 在正前面,它通过胸部摄像机支架的4个插槽集成了4个相机,顶部是一台Intel Realsense L515 RGB-D LiDAR摄像机,顶部下面是3个Realsense T265鱼眼SLAM跟踪相机(分别为绿),用于在人类数据收集过程中捕捉观察结果

    其中
    \rightarrow  LiDAR相机和最上面的T265相机(红色)固定在相机支架上
    \rightarrow  而两个较低的(绿色蓝色)T265相机设计为可拆卸的,并可以固定在手套的背部进行手部6自由度姿态跟踪

  • 在正背面,一个Intel NUC(Intel NUC 13 Pro,相当于就是一台带有64GB RAM和2TB SSD的迷你电脑),和一个40000mAh的移动电源放在背包中,支持长达40分钟的连续数据收集

接下来的关键问题是如何有效地将跟踪的手部运动数据与3D观察结果进行整合

  1. 在数据收集开始时,所有跟踪摄像机都放置在支架槽中(即一开始时,所有摄像头都安装在胸前。 在启动程序后,参与者在环境中移动几秒钟,使SLAM算法构建周围环境的地图),以确保相机框架之间的恒定变换(如上图左侧所示)
  2. 然后,我们将跟踪摄像机从支架上取下(一绿一蓝),并插入到每个手套上的相机插槽中(如上图右侧所示)
    此外,为了在人体运动中确保稳定的观察结果,LiDAR摄像机下方安装了另一个鱼眼跟踪摄像机「在上图中标为红色

当然,DexCap的硬件设计模块化且成本低廉,不限制相机、动作捕捉手套和迷你PC的品牌或型号,总成本控制在4000美元的预算范围内(不包括机械臂)

1.2.4 双手灵巧机器人的设计:双机械臂、双LEAP机器手

为了验证通过数据训练的机器人策略是否OK,接下来建立一个双手灵巧的机器人系统

该系统由两个Franka Emika机器人臂组成,每个臂上配备有一个LEAP灵巧机器人手(一个有16个关节的四指手),如图(b)所示

为了进行策略评估,如上图图(b)所示,人类数据收集中使用的胸部LiDAR相机被从背心上取下,并安装在机器人臂之间的支架上(对于机器人系统,只使用LiDAR相机,不需要手腕相机。 机器人臂和LEAP手都以20Hz的控制频率运行,同时使用末端执行器位置控制和关节位置控制来控制两只机械臂和两只LEAP手,即use end-effector position control for both robot arms and joint position control for both LEAP hand)

1.3 学习算法DEXIL:数据的重定向与基于点云数据的策略预测

接下来,使用DexCap记录的人手动作捕捉数据来训练灵巧机器人策略,然后,我们会遇到这几个问题

  1. 我们如何将人手动作重新定位到机器人手上?
  2. 在双手设置中,当动作空间是高维的时候,什么算法可以学习灵巧策略?
  3. 此外,我们还希望研究直接从人手动作捕捉数据中学习的失败案例及其潜在解决方案

为了解决这些挑战,我们引入了DEXIL,这是一个使用人手动作捕捉数据训练灵巧机器人的三步框架

  1. 第一步是将DexCap数据重新定位到机器人的动作和观察空间中
  2. 第二步使用重新定位的数据训练(基于点云的扩散策略)
  3. 最后一步是一个可选的human-in-the-loop correction机制,旨在解决策略执行过程中出现的意外行为

1.3.1 数据和动作重定向:人手的动作重定向到机器手上

动作重定向

如上图(a)所示,由于人手和LEAP手的尺寸差异很大,而这种尺寸差异使得不好直接将手指运动转移到机器人硬件上,故需要先将人手动作捕捉数据重新定向到机器人实体上,这需要使用逆运动学(IK)将手指位置和6自由度手掌姿态进行映射

先前研究中的一个关键发现是,在与物体互动时,手指尖是手上最常接触的区域(如HO-3D [25]、GRAB [76]、ARCTIC [16]等研究所证明的)。 受此启发,我们通过使用逆运动学(IK)来匹配手指尖位置,重新定向手指运动

具体而言,我们使用一种能够实时生成平滑准确的手指尖运动的IK算法[63, 64, 79],以确定机器人手的16维关节位置。 这确保了机器人手指尖与人手指尖的对齐

  1. 考虑到LEAP手和人手不一样,其只有4个手指,故在人手到机器手的IK计算过程中排除了人手中小指的信息
    此外,在动作捕捉数据中捕捉到的6自由度手腕姿态作为IK算法中手腕姿态的初始参考

    \rightarrow  首先,把手腕的6自由度姿态\boldsymbol{p}_{t}=\left[\boldsymbol{R}_{t} \mid \boldsymbol{T}_{t}\right]和LEAP手的手指关节位置\boldsymbol{J}_{t},共同被用作机器人的本体感知状态\boldsymbol{s}_{t}=\left(\boldsymbol{p}_{t}, \boldsymbol{J}_{t}\right)
    \rightarrow  然后,使用位置控制,比如把机器人的动作标签被定义为下一个未来状态\boldsymbol{a}_{t}=\boldsymbol{s}_{t+1}We use position control in our setup and the robot’s action labels are defined as next future states at = st+1
  2. 观察和状态表示的选择对于训练机器人策略至关重要
    最终,他们将LiDAR相机捕捉到的RGB-D图像转换为3D点云(We convert the RGB-D images captured by the LiDAR camera in the DEXCAP data into point clouds using the camera parameter)

    且所有点云观测都被均匀地降采样为5000个点,并与机器人的感知状态和动作一起存储在一个hdf5文件中。 然后从整个录制会话(每个任务演示10分钟)中手动注释每个任务演示的起始和结束帧。 训练数据集中不包括重置任务环境的运动
    如下图所示, 初始列显示原始点云场景。 第2-7列提供右、中、左三组视图(两个视图一组),且三组视图中每一组视图中的蓝色背景列显示人体数据,黄色背景列显示机器人手部重定位

    与RGB-D输入相比,这种额外的转换有两个重要的好处
    \rightarrow  首先,由于DEXCAP允许人体躯干在数据采集过程中自然移动,而直接使用RGB-D输入需要考虑用于移动相机框架
    但通过将点云观测转换为一致的世界坐标系(在mocap开始时,红色主SLAM相机的坐标系定义为世界坐标系),便可隔离并消除了躯干运动,从而得到稳定的机器人观测
    \rightarrow  其次,点云在编辑和与机器人操作空间对齐方面具有更高的灵活性(过程中,通过比较PointNet[58]和Perceiver [35, 42]编码器来确定最适合点云输入的编码器)
    考虑到在野外捕捉到的一些动作可能超出机器人的可达范围,调整点云观测和运动轨迹的位置可以确保它们在机器人的操作范围内可行

    故,最终基于以上这些发现,将mocap数据中的所有RGB-D帧处理为与机器人空间对齐的点云,并排除与任务无关的元素(例如桌面上的点)
    因此,这些经过精细处理的点云数据成为输入到机器人策略π的观测输入

1.3.2 基于点云的扩散策略

通过转换后的机器人状态 s_t、动作 a_t和相应的三维点云观测 o_t,我们将机器人策略学习过程形式化为轨迹生成任务

  1. 对于策略模型π,通过处理点云观测o_t和机器人当前的本体感知状态s_t,以生成一个动作轨迹\left(\boldsymbol{a}_{t}, \boldsymbol{a}_{t+1}, \ldots, \boldsymbol{a}_{t+d}\right)an policy model π, processes the point cloud observations ot and the robot’s current proprioception state st into an action trajectory (at, at+1, . . . , at+d)

  2. \mathbb{R}^{N \times 3}中给定具有N 个点的点云观测o_t,,然后将其均匀下采样为K 个点,并将每个点对应的RGB像素颜色连接到最终的策略输入中\mathbb{R}^{K \times 6}(Given point cloud observation with N points ot in RN ×3, we uniformly down-sample it into K points and concatenate the RGB pixel color corresponding to each point into the final policy input in RK×6)
  3. 为了弥合人手和机器人手之间的视觉差距,使用正向运动学将机器人模型的链接与本体感知状态s_t进行转换,并将转换后的链接的点云合并到观测o_t

    且在训练过程中,我们还通过在机器人的操作空间内对点云和运动轨迹应用随机的二维平移来进行数据增强(During training, we also use data augmentation over the inputs by applying random 2D translations to the point clouds and motion trajectories with in the robot’s operational space)

学习灵巧机器人策略的一个挑战,特别是对于双手灵巧机器人,是处理大维度的动作输出

  • 在对应的设置中,动作输出包括两个7自由度机器人臂和两个16自由度灵巧手在d个步骤中的动作,形成了一个高维回归问题(which forms a high-dimensional regression problem)
    类似的挑战也在图像生成任务中进行了研究,该任务旨在回归高分辨率帧中的所有像素值(which aim to regress all pixel values in a high-resolution frame)
  • 最近,扩散模型通过其逐步扩散过程,在建模具有高维数据的复杂数据分布方面取得了成功,比如AI绘画
    对于机器人技术,扩散策略「详见此文《UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)》的第三部分」遵循相同的思路

    从而将控制问题形式化为动作生成任务(For robotics, Diffusion Policy [ Diffusion policy: Visuomotor policy learning via action diffusion] follows the same idea and formalizes the control problem into an action generation task)

    总之,一方面,使用扩散策略作为动作解码器,经验证它在学习灵巧机器人策略方面优于传统的基于MLP的架构(比如基于MLP的BC-RNN策略),如下表中,后5行的效果均高于前4行的结果
    二方面,将DP-perc作为DEXIL的默认模型架构「其中,1 基于点云的学习算法(下表中最后三行的DP-point-raw,DP-point,DP-prec)不需要遮挡mask观测,且都实现了超过60%的任务成功率,2,即使不添加机器人手部点,下表中倒数第三行的DP-point-raw的性能也接近DP-point。这可能是因为点云输入的下采样过程降低了人类手套和机器人手之间的外观差距


    至于图像输入方法,使用ResNet-18 [29]作为图像编码器。 对于基于扩散策略的模型,则使用去噪扩散隐式模型DDIM进行去噪迭代

    至于其他模型的选择及其他参数详见下图

在每次机器人动作之后,我们计算机器人当前自我感知与目标姿态之间的距离。 如果它们之间的距离小于一个阈值,认为机器人已经达到了目标位置,并将查询策略获取下一个动作


为了防止机器人变得空闲,如果它在规定的步数内未能达到目标姿态,将重新查询策略获取后续动作,一般在实验中将步数设定为10

1.3.3 人机协同校正

通过上述设计,DEXIL可以直接从DEXCAP数据中学习具有挑战性的灵巧操控技能(例如,拾取和放置以及双手协调),而无需使用机器人数据

然而,简单重定位的方法并未解决人机融合差距的所有方面。例如,使用剪刀时,稳定地握住剪刀需要将手指深入握柄。 由于机器手指与人手之间长度比例的差异,直接匹配指尖和关节运动并不能保证对剪刀施加相同的力

为了解决这个问题,我们提供了一种人在环路中的运动校正机制,包括两种模式-残差校正和远程操作。在策略执行过程中,我们允许人们通过佩戴DEXCAP实时向机器人提供校正动作(其中人类对策略生成的动作应用残差动作来纠正机器人行为。 纠正动作被存储在一个新的数据集中,并与原始数据集均匀采样,用于对机器人策略进行微调)

  • 在残差模式下,DEX-CAP测量人手相对于初始状态\left(\boldsymbol{p}_{0}^{H}, \boldsymbol{J}_{0}^{H}\right)在策略展开开始时的位置变化\left(\Delta \boldsymbol{p}_{t}^{H}, \Delta \boldsymbol{J}_{t}^{H}\right)
    位置变化被应用为残差动作\boldsymbol{a}_{t}^{r}=\left(\Delta \boldsymbol{p}_{t}^{H}, \Delta \boldsymbol{J}_{t}^{H}\right)到机器人策略动作\boldsymbol{a}_{t}=\left(\boldsymbol{p}_{t+1}, \boldsymbol{J}_{t+1}\right),通过\alpha\beta进行缩放

    然后可以将校正后的机器人动作形式化为\boldsymbol{a}_{t}^{\prime}=\left(\boldsymbol{p}_{t+1} \bigoplus \alpha \cdot \Delta \boldsymbol{p}_{t}^{H}, \boldsymbol{J}_{t+1}+\beta \cdot \Delta \boldsymbol{J}_{t}^{H}\right)
    且经验性地发现,设置小尺度的 β(< 0.1)可以提供最佳用户体验,避免手指移动过快
  • 在需要大幅度位置变化时,踩下脚踏板将切换系统到遥操作模式。则此时DEXCAP将不再使用之前的策略推理,而是直接将人类手腕变化应用于机器人手腕姿态(DEXCAP now ignores the policy rollout and applies human wrist delta directly to the robot wrist pose),机器人指尖现在直接跟随人类指尖,相当于直接遥控
    换句话说,机器人指尖将在各自的手腕坐标系中通过逆运动学追踪人类指尖。用户还可以通过再次踩下脚踏板来在纠正机器人错误后切换回剩余模式

    由于机器人已经学习了初始策略,还可以在一小部分回滚中进行校正,从而大大减少人力投入。 校正后的动作和观察结果存储在一个新的数据集D'中。 训练数据是从D'和原始数据集D中以等概率抽样的方式进行的,以微调策略模型,类似于IWR [Human-in the-loop imitation learning using remote teleoperation]

1.4 数据

最终,我们使用三种数据类型(分别得到了201、129和82个演示):

  1. DEXCAP数据捕捉机器人操作空间内的人手动作
    比如剪刀剪裁和泡茶任务分别获得了一个小时的DEXCAP数据,分别产生了104和55个演示
  2. 室外DEXCAP数据来自实验室外环境
    比如一个小时的室外DEXCAP数据提供了96个演示
  3. 使用脚踏板收集human-in-the-loop correction data,用于调整机器人动作或启用远程操作以纠正错误​​​
    human-in-the-loop correction data for adjusting robot actions or enabling teleoperation to correct errors, col-lected using a foot pedal

数据最初以60Hz记录,然后降采样到20Hz以匹配机器人的控制速度,纠错数据直接以20Hz收集

最后,对于机器人的控制而言,采用Position control,以分层结构的方式进行:

  1. 在高层次上,学习策略生成下一步的目标位置,该位置包括机器人双臂末端执行器的6自由度姿态和双手16维手指关节位置
  2. 在低层次上,操作空间控制器(OSC)[A unified approach for motion and force control of robot manipulators: The operational space formulation]连续地插值将机械臂轨迹移动到高层次指定的目标位置,并将插值的OSC动作传递给机器人执行

第二部分 DexCap的源码剖析

// 待更

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

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

相关文章

k8s:优雅关闭pod的简单例子

先通过Dockerfile创建一个image vim Dockerfie <<<< 内容如下&#xff1a; FROM centosRUN sed -i -e "s|mirrorlist|#mirrorlist|g" /etc/yum.repos.d/CentOS-* RUN sed -i -e "s|#baseurlhttp://mirror.centos.org|baseurlhttp://vault.centos.o…

Qsemaphore

Qsemaphore 实现 给while循环阻塞延时 基本思路就是&#xff1a; whlie循环里面 通过m&#xff3f;bthreadFlag&m_bStatus这两个标志位&#xff0c;判断是否进入while循环&#xff0c;再根据40行的acquire&#xff08;&#xff09;来阻塞循环&#xff0c;因为定时器的槽函数…

SQL Server数据库xp_cmdshell提权笔记

文章目录 一、简介二、搭建环境三、利用条件1、查询 xp_cmdshell 是否开启&#xff0c;返回为1则证明存在2、判断权限是不是sa&#xff0c;回是1说明是sa3、开启xp_cmdshell4、关闭xp_cmdshell 四、获取数据库权限1、成功获取sqlserver&#xff0c;进行登陆2、开启xp_cmdshell权…

代码随想录算法训练营第31天(py)| 贪心 | 455.分发饼干、376. 摆动序列、53. 最大子序和

455.分发饼干 力扣链接 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#…

Docker|了解容器镜像层(1)

引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践&#xff0c;最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单&#xff0c;同时又非常强大。在今天的帖子[1]中&#xf…

29网课交单平台 epay.php SQL注入漏洞复现

0x01 产品简介 29网课交单平台是一个专注于在线教育和知识付费领域的交单平台。该平台基于PHP开发,通过全开源修复和优化,为用户提供了高效、稳定、安全的在线学习和交易环境。作为知识付费系统的重要组成部分,充分利用了互联网的优势,为用户提供了便捷的支付方式、高效的…

继承-进阶

父子类成员共享 普通成员对象/父子间不共享&#xff0c; 成员独立 函数成员共享&#xff08;函数不存储在对象中&#xff09; 子类由两部分构成&#xff1a;父类中继承的成员和子类中新定义成员 继承方式 子类中存在父类private成员但不可直接访问&#xff08;及时在类中&am…

微信如何防止被对方拉黑删除?一招教你解决!文末附软件!

你一定不知道&#xff0c;微信可以防止被对方拉黑删除&#xff0c;秒变无敌。只需一招就能解决&#xff01;赶快来学&#xff01;文末有惊喜&#xff01; 惹到某些重要人物&#xff08;比如女朋友&#xff09;&#xff0c;被删除拉黑一条龙&#xff0c;那真的是太令人沮丧了&a…

加密经济浪潮:探索Web3对金融体系的颠覆

随着区块链技术的快速发展&#xff0c;加密经济正在成为全球金融领域的一股新的浪潮。而Web3作为下一代互联网的代表&#xff0c;以其去中心化、可编程的特性&#xff0c;正深刻影响着传统金融体系的格局和运作方式。本文将深入探讨加密经济对金融体系的颠覆&#xff0c;探索We…

机器学习实验----支持向量机(SVM)实现二分类

目录 一、介绍 (1)解释算法 (2)数据集解释 二、算法实现和代码介绍 1.超平面 2.分类判别模型 3.点到超平面的距离 4.margin 间隔 5.拉格朗日乘数法KKT不等式 (1)介绍 (2)对偶问题 (3)惩罚参数 (4)求解 6.核函数解决非线性问题 7.SMO (1)更新w (2)更新b 三、代…

此表单不安全,因此系统已关闭自动填充功能

问题截图&#xff1a; 截图就不放了&#xff0c;公司的系统不方便&#xff0c;就是form表单会有个提示“此表单不安全&#xff0c;因此系统已关闭自动填充功能” 解决思路&#xff1a; 1、问题原因 使用https访问&#xff0c;但表单提交地址是http的 2、查看表单配置 表单…

MSP430单片机控制流水灯,Proteus仿真

作品功能 本项目利用MSP430单片机控制一个简单的流水灯&#xff0c;通过按键切换流水灯的模式。用户可以通过按键控制LED灯的方向&#xff0c;从左向右或从右向左依次点亮。 作品的硬件材料 MSP430单片机 具体型号&#xff1a;MSP430G2553 LED灯 数量&#xff1a;8个类型&…

文本审核纠错

探索高效文本审查利器&#xff1a;Word Checker-CSDN博客 GitHub - shibing624/pycorrector: pycorrector is a toolkit for text error correction. 文本纠错&#xff0c;实现了Kenlm&#xff0c;T5&#xff0c;MacBERT&#xff0c;ChatGLM3&#xff0c;LLaMA等模型应用在纠错…

如何设置vue3项目中默认的背景为白色

方法1&#xff1a;通过CSS全局样式 在全局CSS文件中设置&#xff1a; 如果你的项目中有全局的CSS文件&#xff08;如App.vue或专门的CSS文件&#xff09;&#xff0c;你可以直接设置body或html标签的背景颜色。 在src/assets文件夹中&#xff08;或者任何你存放CSS文件的地方&a…

js解析成语法树以及还原

const {parse} require("babel/parser"); const traverse require("babel/traverse").default; const generator require("babel/generator").default;// 1.定义要处理的代码 const jscode function square(n) {return n * n; };// 2.使用ba…

【人工智能】流行且重要的智能算法整理

✍&#x1f3fb;记录学习过程中的输出&#xff0c;坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;指点&#x1f64f; 小记&#xff1a; 今天在看之前写的文档时&#xff0c;发现有人工智能十大算法的内容&#xf…

国标GB/T 28181详解:国标GBT28181-2022的客户端主动发起历史视音频回放流程

目录 一、定义 二、作用 1、提供有效的数据回顾机制 2、增强监控系统的功能性 3、保障数据传输与存储的可靠性 4、实现精细化的操作与控制 5、促进监控系统的集成与发展 三、历史视音频回放的基本要求 四、命令流程 1、流程图 2、流程描述 五、协议接口 1、会话控…

【Stable Diffusion】(基础篇二)—— Stable Diffusion图形界面介绍和基本使用流程

本系列笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 在上一篇博客中&#xff0c;我们成功…

【C++ | 拷贝构造函数】一文了解C++的 拷贝(复制)构造函数

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-07 2…

Android无障碍服务

Hi I’m Shendi Android无障碍服务 最近想制作一个记录点击操作并重复播放的工具&#xff0c;用以解放双手&#xff0c;因现在的Android高版本基本上难以Root&#xff0c;所以选择了使用无障碍来实现&#xff0c;在这里记录下来。 Android无障碍 可参考文档&#xff1a;https:…