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

突破空间限制!从2D到3D:北大等开源Lift3D,助力精准具身智能操作!

文章链接:https://arxiv.org/pdf/2411.18623
项目链接:https://lift3d-web.github.io/

亮点直击

  • 提出了Lift3D,通过系统地提升隐式和显式的3D机器人表示,提升2D基础模型,构建一个3D操作策略。

  • 对于隐式3D机器人表示,设计了一个任务感知的MAE(Masked Autoencoder),它掩盖了任务相关的可操作性区域,并重建了深度几何信息,从而增强了2D基础模型的3D空间感知能力。

  • 对于显式3D机器人表示,提出了一种2D模型提升策略,利用2D基础模型的预训练位置嵌入(PEs)来编码3D点云数据,用于操作模仿学习。

总结速览

亟需解决的问题:

  • 缺乏大规模的机器人3D数据:现有的3D数据资源不足,限制了机器人在复杂空间任务中的应用。

  • 空间几何信息的丢失:在处理和提取3D特征时,可能会丢失一些重要的空间几何信息,影响机器人对环境的感知与操作。

提出的方案:

  • Lift3D框架:该框架通过逐步增强2D基础模型,结合隐式和显式的3D机器人表示,来构建一个鲁棒的3D操作策略。
    • 任务感知mask自动编码器:首先设计了一个mask自动编码器,通过掩盖任务相关的可操作性区域,重建深度信息,从而增强2D基础模型的隐式3D机器人表示。

    • 2D模型提升策略:通过建立输入3D点与2D模型位置嵌入之间的映射关系,使Lift3D能够将3D点云数据直接编码到2D基础模型中,从而构建显式的3D机器人表示。

应用的技术:

  • 任务感知mask自动编码器:用于掩盖和重建任务相关的3D特征,增强模型对空间关系的理解。

  • 自监督微调:通过自监督学习的方式对2D模型进行微调,以增强其对3D空间的感知。

  • 2D模型提升策略:建立2D与3D的映射关系,将2D基础模型与3D点云数据结合,提取3D机器人表示。

达到的效果:

  • 提高3D操作策略的鲁棒性:Lift3D能够更好地处理和理解3D空间中的复杂配置,构建更加稳定的机器人操作策略。

  • 提升性能:在多个仿真基准和实际场景中,Lift3D的表现 consistently 优于现有的最先进方法,展示了在3D机器人操作中的优势。

这个框架通过增强2D模型的3D能力,减少了空间信息的损失,在实际应用中展现了显著的提升。

Lift3D Method

本节介绍了提出的Lift3D框架的问题陈述。接着详细介绍了任务感知的MAE和2D模型提升策略,这两者分别增强了隐式和显式的3D机器人表示。

问题陈述

对于隐式的3D机器人表示,遵循之前的MAE方法,首先将mask图像输入到2D基础模型中。然后将输出特征输入到解码器进行深度重建,,其中。这个过程增强了2D模型的3D空间感知能力,并有助于后续的3D模仿学习。

对于显式的3D机器人表示,直接利用2D基础模型来编码3D点云数据和机器人状态。然后使用一个简单的策略头来预测动作。遵循之前的操作研究,采用了7自由度(DoF)的动作表示机器人臂末端执行器的姿态,包括3自由度的平移,3自由度的旋转,以及1自由度的夹爪状态(开或关)。

任务感知masked自动编码器 (Task-aware Masked Autoencoder)

一些研究表明,2D基础模型在各种下游机器人任务中展示了强大的表示能力和泛化能力。在此基础上,Lift3D首先增强了2D基础模型中的隐式3D机器人表示。现有的机器人MAE重建方法采用了激进的mask策略,其中大量的输入图像补丁被随机mask。然而,这些mask的区域大多包含与任务无关的背景信息,阻碍了前景物体表示的有效学习。与之前的方法不同,Lift3D旨在掩盖任务相关的可操作性区域,并重建深度几何信息,从而增强2D基础模型的3D空间感知能力。

具体而言,利用来自机器人操作的大规模数据集来构建MAE训练数据集,该数据集包括从视频中随机抽取的100万个训练样本,包含配对的图像和深度数据。如下图2 a)所示,一旦获得数据,使用多模态模型(例如,CLIP)基于任务特定的文本描述生成图像关注图。例如,图2中提取关注图的文本提示是:“机器人臂将红色碗放入灰色碗中”。然后,这些关注图会被双线性缩放并反投影到输入图像上,用于引导MAE的mask策略。

为了区分任务相关的可操作性token和背景token,应用了一个阈值(即)来过滤所有token的关注值。注意,每个token的关注值是通过平均其像素级的值来计算的。与之前方法[28]中使用的mask比例一致,也随机掩盖背景token以达到所需的比例(即)。

可见的()token被输入到2D基础模型中,然后与masktoken()拼接,这些masktoken被送入解码器进行重建。重建目标在mask图像建模中起着至关重要的作用,直接影响特征表示的学习。之前的机器人MAE方法通常使用低级的RGB信息[52, 60, 62]作为重建目标。为了增强2D基础模型的3D空间感知能力,重建了任务相关的可操作性区域和随机选择的背景区域的深度信息()。最后,为了保持基础模型的固有能力,本文引入了蒸馏损失,约束本文模型的可见token输出与预训练的现成模型(2D)的对应特征之间的距离。如图2 a)所示,在阶段1的训练过程中,使用重建损失和蒸馏损失对注入的适配器和解码器进行微调,公式为:

2D模型提升策略 (2D Model-lifting Strategy)

在赋予2D基础模型隐式的3D机器人感知能力之后,提出了一种提升策略,使2D模型能够显式地理解点云数据。最近的研究,无论是将3D点云投影到多视图图像中,还是将2D特征提升到3D空间中,都面临着由于模态转换而丢失空间信息的问题。因此,高效地编码3D数据一直是3D机器人领域的关键研究方向。

对于基于Transformer的2D模型,位置嵌入(PEs)起着重要作用,因为它们为注意力机制中的输入token提供了位置信息。然而,直接创建新的3D位置嵌入来编码3D token可能会引入语义差异,这些差异源于预训练的2D基础模型与新添加的3D位置嵌入之间的不同,从而可能导致大规模预训练知识的丧失。

因此,受[23, 24, 71]启发,将3D token投影到多个虚拟平面上。与之前的工作不同,投影过程并不是为了构造模型的输入。相反,它建立了输入3D点与每个虚拟平面上的预训练2D位置嵌入之间的位置对应关系。然后,这些2D位置嵌入被用来直接编码3D token。

具体而言,如前面图2 b)所示,将原始点云转换到高维空间(即),通过轻量级的3D分词器获得(128)个3D token,遵循之前的方法[91, 97]。3D 分词器由最远点采样(用于下采样点的数量)、k-最近邻算法(用于局部聚合)和可学习的线性层(用于特征编码)组成。此外,使用来表示每个3D token的3D坐标。

随后,每个3D坐标被投影到个虚拟平面上,获得相应的3D到2D坐标。该投影机制是无参数的且高效的。采用具有6个面的立方体投影方法,有效地捕捉了空间信息。这些个虚拟平面对应于个原始的2D位置嵌入。使用3D到2D坐标,将每个3D token分配到个原始2D位置嵌入,记为。

在将每个3D token与个2D位置嵌入对齐后,简单地对它们进行平均,创建一个统一的位置信号,记为,其公式为:

将与3D token结合,并将其输入到2D基础模型中。通过这种方式,利用个结合的原始2D位置嵌入来编码3D token,有效地提供了2D空间中的多样化位置关系,并减轻了空间信息丢失。2D基础模型输出的特征(即)通过一个简单的策略头处理,以预测模仿学习的姿态。本文使用一个三层的多层感知器(MLP)来构建策略头。需要注意的是,Lift3D编码器可以很容易地适应不同的解码器或策略头;这里使用MLP头进行简单验证。

最后,监督损失的公式为:

其中,T、R和G分别表示7自由度末端执行器姿态中的平移、旋转和夹持器状态。如图2 b)所示,在第二阶段的模仿学习中,冻结2D基础模型的参数,仅更新3D分词器、注入适配器和策略头。Lift3D也可以在不注入适配器的情况下操作,这会导致操作性能略微下降。

实验

通过展示模拟任务和真实任务中的实验设置和结果,评估了Lift3D的操作能力。每个组件的有效性通过消融研究得到了验证。通过在不同的操作实例、背景场景和光照条件下测试模型,检验了Lift3D的泛化能力。最后通过逐步增加2D基础模型的参数来探索模型的可扩展性。

模拟实验

基准测试:从三个广泛使用的操作模拟基准中选择了30多个任务:MetaWorld 和 Adroit 在MuJoCo模拟器中的任务,以及 RLBench 在CoppeliaSim模拟器中的任务。点云数据通过使用相机外参和内参从单视图RGBD数据中获得。对于MetaWorld,选择了一个包含Sawyer臂和双指夹持器的桌面环境,并从不同难度级别中选择了15个任务。这些任务从两个角落摄像头视角捕捉,任务分类如下:

  • 简单任务:按钮按压、抽屉打开、到达、拉手柄、插头拔出、拉杆和旋钮转动。

  • 中等任务:锤子、清扫、垃圾桶取物、推墙和箱子关闭。

  • 难度较高任务:组装、手伸入和架子放置。

对于Adroit任务,重点是使用与[52]中相同摄像头视角的灵巧手操作,包括了三个任务:锤子、门和钢笔。对于RLBench,它使用Franka Panda机器人和前视摄像头。由于篇幅限制,RLBench的结果和详细信息已在附录B.1中提供。

数据收集:MetaWorld中使用了脚本化策略,收集了25个演示,每个演示包含200个步骤。对于Adroit任务,轨迹是通过强化学习算法训练的智能体获得的。具体来说,DAPG应用于门和锤子任务,而VRL3用于钢笔任务。研究者们收集了100个演示,每个演示包含100个步骤。RLBench中的演示是通过预定义的路径点和Open Motion Planning Library收集的,共收集了100集,每集包含若干个关键帧。

基线
Lift3D的创新之处在于系统性地增强了隐式和显式的3D机器人表示。为了评估其有效性,将Lift3D与来自三个类别的9种方法进行了比较:

  1. 2D 机器人表示方法:选择了CLIP(ViT-base),它是一个2D基础模型。此外,还包括了R3M和VC1,这两者都是2D机器人预训练方法。

  2. 3D 机器人表示方法:借鉴了[95],采用了基础的3D模型,包括PointNet、PointNet++和PointNext。此外,还检验了SPA ,这是之前的SOTA 3D机器人预训练方法。与[52]相同,所有机器人表示方法均使用与Lift3D相同的三层策略头和训练损失。

  3. 3D 策略方法:Lift3D与之前的SOTA 3D扩散策略(DP3)在MetaWorld和Adroit上进行了比较,并在RLBench上与RVT-2进行了比较。

训练和评估细节
为了公平比较,所有基线方法在相同配置下进行了训练和评估,而3D策略方法则遵循其原始设置。2D和3D视觉输入分别由RGB图像和具有1,024个点的单视图点云组成。机器人状态包括末端执行器姿态、关节位置和速度,这些信息与视觉特征一起连接。使用CLIP和DINOV2(ViT-base)作为2D基础模型。根据[52]的先前工作,使用Adam优化器,参数(, ) = (0.9, 0.999),学习率为1e-3。MetaWorld采用恒定学习率,而Adroit则应用带有0.1预热因子的余弦退火调度器。每种方法训练100个epoch,每10个epoch执行25次回合。本文报告最佳执行策略模型在整个训练过程中的平均成功率。对于MetaWorld,进一步对两个摄像头视角的得分进行平均。

定量结果 在下表1中,Lift3D(CLIP)在MetaWorld基准测试中达到了平均成功率83.9,其中中等任务的准确率为78.8,难度较大的任务准确率为82.0。与其他机器人表示方法相比,Lift3D在最顶尖的2D方法和3D方法基础上分别提高了8.8和14.4的平均成功率。此外,与之前的SOTA 3D策略(DP3)相比,Lift3D实现了18.6的准确率提升。这些结果表明,Lift3D有效地增强了2D基础模型的操作能力,通过利用大规模预训练知识,使其对机器人3D场景有更深入的理解。

此外,Lift3D在灵巧手任务上也表现出优越的性能,超过了以前的机器人表示和策略方法。需要注意的是,灵巧手的自由度在任务间有所不同,其中锤子、门和钢笔任务的自由度分别为26、28和24。结果证明,本文的方法对于更复杂的灵巧手操作任务也很有效,这得益于强大的3D机器人表示能力。

Lift3D(DINOV2)也显示出了良好的结果,证明了该方法对其他2D基础模型的实用性。

真实世界实验

数据集收集
在真实世界实验中,使用Franka Research 3臂进行实验,并通过Intel RealSense L515 RGBD摄像头从静态前视角捕捉图像。执行了十个任务:

  • 将瓶子放置到架子上
  • 倒水
  • 拔掉充电器
  • 堆积积木
  • 拾取并放置物品
  • 滑动积木
  • 给植物浇水
  • 擦拭桌面
  • 打开抽屉
  • 关上抽屉

这些任务涉及不同类型的交互对象和操作行为。对于每个任务,在不同空间位置收集了40个演示,轨迹以30fps的速度记录。选择了30个回合,并提取关键帧来构建每个任务的训练集。输入的点云数据和图像示例如图4所示。

训练与评估细节
实现细节与模拟实验中的相同。对每个任务从头开始训练每种方法。在训练过程中,使用世界坐标系下的点云数据和操作姿态作为输入和监督信号。评估时,使用最终epoch的模型,并在不同空间位置上进行20次评估。

定量结果 如下图3所示,将Lift3D(CLIP)与DP3、VC-1和PointNet进行了比较。结果表明,Lift3D在多个任务中表现出色。特别是在“将瓶子放置到架子上”任务中,该任务需要准确的3D位置和旋转预测,Lift3D达到了90%的成功率。结果表明,Lift3D能够有效理解3D空间场景,并在真实世界中做出准确的姿态预测。对于更复杂的任务(如擦拭桌面),由于需要操作可变形的物体,所有方法的精度都面临一定的局限性。尽管如此,Lift3D仍然达到了40%的成功率。

定性结果 如下图4所示,展示了六个真实世界任务的操作过程。本文的方法准确预测了连续的7自由度末端执行器姿态,使得任务得以沿着轨迹顺利完成。例如,在“给植物浇水”任务中,Lift3D首先准确抓住了浇水壶的手柄。接着,它平稳地抬起壶并将其定位到植物上方。最后,夹持器逐渐旋转以控制“水流”。

消融实验

在下表2中,针对MetaWorld仿真任务(包括装配和关箱任务)进行了一系列消融实验,并计算了平均操作准确率。

Task-aware MAE
在Ex2到Ex4中,观察到深度重建和RGB+深度重建相较于Ex1(仅RGB重建)分别提高了6%和5%的成功率,而仅使用RGB重建并未显示出显著改善。这突出了在操作任务中重建几何信息的重要性,因此选择将深度图像作为重建目标。通过比较Ex2和Ex5,发现基于任务的引导掩膜策略相比随机掩膜策略提高了4%的成功率,证明了专注于与任务相关的可操作区域来学习几何信息更加高效。

视觉token蒸馏
与Ex5相比,通过视觉token蒸馏进行预训练(Ex6)使成功率提高了8%,这表明防止灾难性遗忘已经预训练的知识对于将2D基础模型赋予隐式3D机器人意识至关重要。

2D模型提升策略
对于2D模型提升策略,与仅输入图像的Ex1相比,Ex7引入了显式点云编码的提升策略,显著提高了操作性能。这表明3D空间信息对于实现稳健的操作至关重要。Ex8相较于Ex7也展示了明显的提升,验证了隐式3D表示学习能够促进后续显式3D模仿学习。

位置编码(PE)影响 最后,与Ex8相比,Ex9采用了没有预训练的新增PE(位置编码),结果性能下降了6%,验证了提升策略最有效地利用了大规模的2D预训练知识。

泛化能力探索

通过利用2D基础模型的大规模预训练知识和全面的3D机器人表示,Lift3D展现了强大的现实世界泛化能力。正如下表3所示,设计了三种不同于训练场景的实际测试场景来验证其泛化能力。

  1. 不同的操作实例
    Lift3D在多种操作物体中展现了强大的鲁棒性,且表现出最小的准确率损失。这一成功主要归功于预训练的2D基础模型的语义理解能力。

  2. 复杂的背景场景
    背景干扰显著降低了所有方法的准确性,但Lift3D显示出最小的下降,操作成功率仍然保持在50%以上。这可以归因于在3D空间中有效利用了大规模预训练知识。此外,基于任务的引导掩膜策略通过重建增强了模型对前景区域空间几何的理解,同时减少了背景干扰的影响。

  3. 不同的光照条件
    光照变化影响2D图像的数据分布,同时也会影响深度捕捉,从而影响点云数据。在光照变化的影响下,Lift3D仅显示出平均20%的准确率下降,证明了其强大的3D机器人表示能力。

模型可扩展性探索

在计算机视觉中,随着2D基础模型参数的增大,通常会提高下游任务的性能 [56, 61]。基于这一点,探讨了Lift3D政策是否也表现出可扩展性。在非常困难的MetaWorld仿真任务——“置物架任务”上进行了实验。

对于这一复杂任务,Lift3D (DINOV2-ViTbase) 仅达到28%的准确率。ViT-base的参数数量为86M,而ViT-large和ViT-giant分别有304M和1B的参数。通过将2D基础模型替换为DINOV2-ViT-large和DINOV2-ViT-giant,Lift3D在“置物架任务”中分别达到了48%和58%的准确率,并且展现了更快的收敛速度,如下图5所示。这些改进证明了Lift3D政策模型的可扩展性,并且Lift3D框架能够通过更大的2D基础模型生成更强健的操作策略。

结论与局限性

本文提出了Lift3D,一种将大规模预训练的2D基础模型与强大的3D操作能力相结合的创新框架。首先,设计了一种任务感知的MAE(Masked Autoencoder),它通过掩盖与任务相关的有用区域并重建深度几何信息,增强了隐式的3D机器人表示。其次,提出了一种2D模型提升策略,通过利用预训练的2D基础模型显式地编码3D点云数据,用于操作模仿学习。Lift3D在仿真和实际实验中持续超越现有方法,并在多种实际场景中展现了强大的泛化能力。

局限性
然而,Lift3D框架专注于将2D视觉模型提升至3D操作任务,这意味着它无法理解语言条件。然而,本文的方法可以适应像CLIP这样的多模态模型,能够将Lift3D编码器与语言模型结合,为未来的3D视觉-语言-行动模型的实现铺平道路。

参考文献

[1] Lift3D Foundation Policy: Lifting 2D Large-Scale Pretrained Models for Robust 3D Robotic Manipulation

相关文章:

突破空间限制!从2D到3D:北大等开源Lift3D,助力精准具身智能操作!

文章链接:https://arxiv.org/pdf/2411.18623 项目链接:https://lift3d-web.github.io/ 亮点直击 提出了Lift3D,通过系统地提升隐式和显式的3D机器人表示,提升2D基础模型,构建一个3D操作策略。 对于隐式3D机器人表示&a…...

Android KEY的哪些事儿

目录 一、APK应用签名 1、什么是APK应用签名? 1.1 目的和作用? 1.2 长什么样子? 2、APK应用签名使用流程 步骤一:如何生成APK应用签名文件? 步骤二:如何集成APK应用签名文件? 步骤三&am…...

李宏毅深度学习-Pytorch Tutorial2

什么是张量? 张量(Tensor)是深度学习和机器学习中一个非常基础且重要的概念。在数学上,张量可以被看作是向量和矩阵的泛化。简单来说,张量是一种多维数组,它可以表示标量(0维)、向量…...

【译】为 SAP 表维护视图 (SM30) 创建选择屏幕

原文标题:Create Selection Screen for SAP Table Maintenance View (SM30) 原文链接: https://www.saphub.com/abap-dictionary/sap-abap-tmg-selection-screen/ 通常,带有单个屏幕的 SAP 表维护视图 (SM30) 会显示表中的所有记录&#xff…...

element Plus中 el-table表头宽度自适应,不换行

在工作中,使用el-table表格进行开发后,遇到了小屏幕显示器上显示表头文字会出现换行展示,比较影响美观,因此需要让表头的宽度变为不换行,且由内容自动撑开。 以下是作为工作记录,用于demo演示教程 先贴个…...

C语言程序设计P5-4【应用函数进行程序设计 | 第四节】——知识要点:数组作函数参数

知识要点:数组作函数参数 视频: 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 任务要求用选择法对数组中的 10 个整数按由小到大的顺序排序,前面在讲解数组时讲冒泡法排序曾提到选择法排序的思想。 所谓选择法就是…...

时间序列模型在LSTM中的特征输入

这里写目录标题 前言LSTM的输入组成时间步例子 实际代码解读特征提取处理成dataloader格式(用于输入到模型当中)对应到lstm的模型创建代码 总结 前言 本文章将帮助理解如何将一个时间序列的各种特征(年月日的时间特征,滚动窗口滞…...

Python_Flask02

所有人都不许学Java了,都来学Python! 如果不来学的话请网爆我的老师 连接前的准备 安装pymysql 和 flask_sqlalchemy,安装第三下面两个所需要的包才能连接上数据库 pip install pymysql pip install flask_sqlalchemy pymysql是一个Pyth…...

threejs相机辅助对象cameraHelper

为指定相机创建一个辅助对象,显示这个相机的视锥。 想要在场景里面显示相机的视锥,需要创建两个相机。 举个例子,场景中有个相机A,想要显示相机A的视锥,那么需要一个相机B,把B放在A的后面,两个…...

断点续传+测试方法完整示例

因为看不懂网上的断点续传案例,而且又不能直接复制使用,干脆自己想想写了一个。 上传入参类: import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProp…...

C#设计模式--状态模式(State Pattern)

状态模式是一种行为设计模式,它允许对象在其内部状态发生变化时改变其行为。这种模式的核心思想是将状态封装在独立的对象中,而不是将状态逻辑散布在整个程序中。 用途 简化复杂的条件逻辑:通过将不同的状态封装在不同的类中,可…...

Excel技巧:如何批量调整excel表格中的图片?

插入到excel表格中的图片大小不一,如何做到每张图片都完美的与单元格大小相同?并且能够根据单元格来改变大小?今天分享,excel表格里的图片如何批量调整大小。 方法如下: 点击表格中的一个图片,然后按住Ct…...

hadoop中导出表与数据的步骤

大家好,我是 V 哥。在Hadoop中导出表与数据,可以通过多种方式实现,包括使用Hive的EXPORT命令、MapReduce作业、Hive查询以及Sqoop工具。下面V 哥将详细介绍这些步骤和一些代码示例,来帮助大家更好理解。 1. 使用Hive的EXPORT命令…...

springBoot中的日志级别在哪里配置

在Spring Boot中,日志级别的配置可以通过多种方式来实现,主要包括在配置文件中设置、使用自定义的logback配置文件,以及在代码中动态配置等。以下是一些具体的配置方法: 一、在配置文件中设置日志级别 Spring Boot默认使用appli…...

17. Threejs案例-Three.js创建多个立方体

17. Threejs案例-Three.js创建多个立方体 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染 WebGL 场景的核心类。它负责将场景中的对象渲染到画布上。 构造器 new THREE.WebGLRenderer(parameters) 参数类型描述parametersObject可选…...

数据结构——有序二叉树的删除

在上一篇博客中,我们介绍了有序二叉树的构建、遍历、查找。 数据结构——有序二叉树的构建&遍历&查找-CSDN博客文章浏览阅读707次,点赞18次,收藏6次。因为数据的类型决定数据在内存中的存储形式。left right示意为左右节点其类型也为…...

力扣1401. 圆和矩形是否有重叠

用矢量计算&#xff1a; class Solution { public:bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {//矩形中心float Tx(float)(x1x2)/2;float Ty(float)(y1y2)/2;//强行进行对称操作&#xff0c;只考虑第一象限if(xCenter<Tx)…...

idea连接到docker出现 org.apache.hc.client5.http.ConnectTimeoutException 异常怎么办?

前情提要 我电脑是win11&#xff0c;我安装了centOS7虚拟机&#xff0c;配置linux环境 idea是2024社区免费版本 我就这一步步排查问题&#xff0c;终于发现了是因为我的2375端口没有ipv4开放&#xff0c;只在ipv6开放 踩坑提醒&#xff1a; 对了&#xff0c;一个一个问题排…...

一番赏小程序定制开发,打造全新抽赏体验平台

随着盲盒的热潮来袭&#xff0c;作为传统的潮玩方式一番赏也再次受到了大家的关注&#xff0c;市场热度不断上升&#xff01; 一番赏能够让玩家百分百中奖&#xff0c;商品种类丰富、收藏价值高&#xff0c;拥有各种IP&#xff0c;从而吸引着各个圈子的粉丝玩家&#xff0c;用…...

PHP语法学习(第六天)

&#x1f4a1;依照惯例&#xff0c;回顾一下昨天讲的内容 PHP语法学习(第五天)主要讲了PHP中的常量和运算符的运用。 &#x1f525; 想要学习更多PHP语法相关内容点击“PHP专栏” 今天给大家讲课的角色是&#x1f34d;菠萝吹雪&#xff0c;“我菠萝吹雪吹的不是雪&#xff0c;而…...

按vue组件实例类型实现非侵入式国际化多语言翻译

#vue3##国际化##本地化##international# web界面国际化&#xff0c;I18N&#xff08;Internationalization&#xff0c;国际化&#xff09;&#xff0c;I11L(International&#xff0c;英特纳雄耐尔)&#xff0c;L10N&#xff08;Localization&#xff0c;本地化&#xff09;&…...

2024年认证杯SPSSPRO杯数学建模B题(第一阶段)神经外科手术的定位与导航解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 B题 神经外科手术的定位与导航 原题再现&#xff1a; 人的大脑结构非常复杂&#xff0c;内部交织密布着神经和血管&#xff0c;所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术&#xff0c;通常需要…...

51c视觉~合集24

我自己的原文哦~ https://blog.51cto.com/whaosoft/11870494 #R-Adapter 零样本模型微调新突破&#xff0c;提升鲁棒性与泛化能力 论文提出新颖的Robust Adapter&#xff08;R-Adapter&#xff09;&#xff0c;可以在微调零样本模型用于下游任务的同时解决这两个问题。该方…...

idea启动tomcat服务中文乱码

在idea中启动tomcat服务后部分中文乱码 但是在tomcat日志部分正常 并且在tomcat中中文也是正常 查询大量资料修改idea编码&#xff0c;虚拟机编码、tomcat默认编码、终端默认编码&#xff0c;统统没有效果。 最终发现修改tomcat下文件夹 .\conf\logging.properties 网络上…...

android studio 读写文件操作(应用场景二)

android studio版本&#xff1a;2023.3.1 patch2 例程&#xff1a;readtextviewIDsaveandread 本例程是个过渡例程&#xff0c;如果单是实现下图的目的有更简单的方法&#xff0c;但这个方法是下一步工作的基础&#xff0c;所以一定要做。 例程功能&#xff1a;将两个textvi…...

【数据结构】【线性表】特殊的线性表-字符串

目录 字符串的基本概念 字符串的三要素 字符串的基本概念 串的编码 串的实现及基本运算 顺序串的实现 串的静态数组实现 串的动态数组的实现 顺序存储的四种方案 链式串的实现 基本运算 方案三 方案一 字符串的基本概念 数据结构千千万&#xff0c…...

【AWS re:Invent 2024】一文了解EKS新功能:Amazon EKS Auto Mode

文章目录 一、为什么要使用 Amazon EKS Auto Mode&#xff1f;二、Amazon EKS自动模式特性2.1 持续优化计算成本2.2 迁移集群操作2.3 EKS 自动模式的高级功能 三、EKS Auto 集群快速创建集群配置四、查看来自 API 服务器的指标五、EKS 相关角色权限设置六、参考链接 一、为什么…...

HTTPS的工作过程

1.HTTPS协议原理 1.1HTTPS协议的由来 HTTP在传输网络数据的时候是明文传输的&#xff0c;信息容易被窃听甚至篡改&#xff0c;因此他是一个不安全的协议&#xff08;但效率高&#xff09;。在如今的网络环境中&#xff0c;数据安全是很重要的&#xff08;比如支付密码又或者各…...

Java并发编程学习之从资本家的角度看多线程和并发性(一)

目录 前言前置知识一、单线程时代二、为什么要有多线程&#xff0c;多线程的优点&#xff1f;三、使用多线程会遇到什么问题&#xff1f;四、多线程和并发编程的关系总结 前言 这篇文章是打开Java多线程和并发编程的大门的开始&#xff0c;如标题《从老板的角度看多线程和并发…...

基于STM32设计的智能宠物喂养系统(华为云IOT)_273

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】设计意义【5】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 参考文献1.6 系统框架图1.7 系统原理图1.8 实物图1.9…...

Mybatis-Plus的主要API

一、实体类操作相关API BaseMapper<T>接口 功能&#xff1a;这是 MyBatis - Plus 为每个实体类对应的 Mapper 接口提供的基础接口。它提供了一系列基本的 CRUD&#xff08;增删改查&#xff09;操作方法。例如insert(T entity)方法用于插入一条记录&#xff0c;d…...

Pillow:强大的Python图像处理库

目录 一、引言 二、Pillow 库的安装 三、Pillow 库的基本概念 四、图像的读取和保存 五、图像的基本属性 六、图像的裁剪、缩放和旋转 七、图像的颜色调整 八、图像的滤镜效果 九、图像的合成和叠加 十、图像的绘制 十一、示例程序&#xff1a;制作图片水印 十二、…...

Springboot定时任务详解

文章目录 Springboot定时任务详解一、引言二、cron表达式三、使用Scheduled注解1、开启定时任务2、添加定时任务 四、使用TaskScheduler接口1、注入TaskScheduler实例 五、集成Quartz框架1、集成Quartz 六、实际使用示例七、总结 Springboot定时任务详解 一、引言 在现代软件…...

【Linux】环境ChatGLM-4-9B 模型之 openai API 服务

一、摘要 最近看到 Function Call 比较感兴趣,它的核心是赋予大模型能够调用外部API的能力,能够解决大模型功能扩展性问题,允许模型调用外部数据库或API,提供特定领域的详细信息;解决信息实时性问题,模型可以实时获取最新数据;解决数据局限性问题,大模型训练数据虽多但…...

mobi文件转成pdf

将 MOBI 文件转换为 PDF 格式通常涉及两个步骤&#xff1a; 解析 MOBI 文件&#xff1a;需要提取 MOBI 文件的内容&#xff08;文本、图片等&#xff09;。将提取的内容转换为 PDF&#xff1a;将 MOBI 文件的内容渲染到 PDF 格式。 可用工具 kindleunpack 或 mobi&#xff1…...

Linux---对缓冲区的简单理解--第一个系统程序

前序&#xff1a; 首先先理解一下什么是回车与换行&#xff1b;回车和换行是两个概念&#xff0c;它们不是一个东西&#xff1b; 回车:光标回到开始&#xff1b;换行:换到下一行&#xff1b; 如下图&#xff1a; 行缓冲区 如何理解缓冲区问题&#xff1f; 可以认为&#xff0…...

word poi-tl 表格功能增强,实现表格功能垂直合并

目录 问题解决问题poi-tl介绍 功能实现引入依赖模版代码效果图 附加&#xff08;插件实现&#xff09;MergeColumnData 对象MergeGroupData 类ServerMergeTableData 数据信息ServerMergeTablePolicy 合并插件 问题 由于在开发功能需求中&#xff0c;word文档需要垂直合并表格&…...

鸿蒙实现数据管理

目录&#xff1a; 1、鸿蒙实现数据管理的三种方式2、用户首选项3、键值型数据管理3.1、获取KVManager实例&#xff0c;用于管理数据库对象3.2、创建并获取键值数据库3.3、调用put()方法向键值数据库中插入数据3.4、调用get()方法获取指定键的值3.5、调用delete()方法删除指定键…...

图片上传HTML

alioss sky:jwt:# 设置jwt签名加密时使用的秘钥admin-secret-key: itcast# 设置jwt过期时间admin-ttl: 7200000# 设置前端传递过来的令牌名称admin-token-name: tokenalioss:endpoint: ${sky.alioss.endpoint}access-key-id: ${sky.alioss.access-key-id}access-key-secret: $…...

golang 代发邮件支持附件发送,outlook案列,其他邮箱需要替换对应邮箱服务域名

GPT问答实例 import pandas as pd from openai.embeddings_utils import get_embedding, cosine_similarity import openai import os import logging as logger from flask_cors import CORS import os openai.api_key os.getenv(OPENAI_API_KEY)class Chatbot():def parse_…...

输出绝对值

输出绝对值 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入一个浮点数&#xff0c;输出这个浮点数的绝对值。 输入 输入一个浮点数&#xff0c;其绝对值不超过10000。 输出 输出这个浮点数的绝对…...

docker desktop打包配置国内镜像地址

打包遇到无法访问外网资源&#xff0c;直接配置国内镜像地址 直接加入如下代码就行&#xff1a; {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-m…...

鸿蒙Next学习-监听指定页面显示/页面生命周期

自定义组件监听页面生命周期 使用无感监听页面路由的能力&#xff0c;能够实现在自定义组件中监听页面的生命周期。 // Index.ets import { uiObserver, router, UIObserver } from kit.ArkUI;Entry Component struct Index {listener: (info: uiObserver.RouterPageInfo) &g…...

计算机网络 —— HTTPS 协议

前一篇文章&#xff1a;计算机网络 —— HTTP 协议&#xff08;详解&#xff09;-CSDN博客 目录 前言 一、HTTPS 协议简介 二、HTTPS 工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.引入证书 三、HTTPS 常见问题 1.中间人能否篡改证书&#xff1f; 2.中间人能否调…...

Oracle之表空间迁移

问题背景&#xff1a;一个数据表随着时间的累积&#xff0c;导致所在表空间占用很高&#xff0c;里面历史数据可以清除&#xff0c;保留近2个月数据即可 首先通过delete删除了2个月以前的数据。 按网上的教程进行空间压缩&#xff0c;以下sql在表所在用户执行: -- 允许表重新…...

web组态可视化编辑器

随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说&#xff0c;将单机版软件转…...

SpringMVC纯注解快速开发

此文章适合具有一定的java基础的同学看哦&#xff0c;如果有看不懂的基本代码还是先补补java基础哦。 此教程带您不使用xml文件而是纯注解开发&#xff0c;易懂、快捷、迅速&#xff0c;从0开始搭建&#xff0c;很快就能构建起一个SpringMVC项目&#xff0c;能学到两种使用tom…...

[读论文] Compositional 3D-aware Video Generation with LLM Director

Abstract 近年来&#xff0c;通过强大的生成模型和大规模互联网数据&#xff0c;文本到视频生成领域取得了显著进展。然而&#xff0c;在生成视频中精确控制单个概念&#xff08;如特定角色的动作和外观、视角的移动&#xff09;方面&#xff0c;仍存在巨大挑战。为此&#xff…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发十八,ffmpeg解复用

为啥要封装和解封装呢&#xff1f; 1.封装就相当于将 h264 和aac 包裹在一起。既能播放声音&#xff0c;也能播放视频 2.在封装的时候没指定编码格式&#xff0c;帧率&#xff0c;时长&#xff0c;等参数&#xff1b;特别是视频&#xff0c;可以将视频帧索引存储&#xff0c;…...

ubuntu系统安装docker

1、 安装必要的依赖 sudo apt install apt-transport-https ca-certificates curl software-properties-common2、添加 Docker 的官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -3、添加 Docker 的 APT 源 sudo add-apt-repos…...