速度超快的单图像生成3D目标方案,创新的One-2-3-45++来了!

news2024/12/27 9:30:45

论文链接: https://arxiv.org/pdf/2311.07885

github链接: https://sudo-ai-3d.github.io/One2345plus_page/

Demo链接: https://www.sudo.ai/3dgen

最近在开放世界的3D目标生成方面取得了显著的进展,图像到3D的方法,比文本到3D的同类方法提供更高的细粒度控制。然而,大多数现有模型在同时提供快速生成速度和对输入图像的高保真度方面仍存在不足,而这两个特征对于实际应用至关重要。本文提出了一种创新方法 One-2-3-45++,该方法可以在大约一分钟内将单个图像转换为详细的3D纹理网格。该方法旨在充分利用嵌入在2D扩散模型中的广泛知识和有限的3D数据的先验。首先微调2D扩散模型以实现一致的多视角图像生成,然后借助多视角条件下的3D原生扩散模型将这些图像提升到3D来实现。广泛的实验评估表明,本文的方法能够生成高质量、多样化的3D资源,与原始输入图像非常相似。

引言

从单个图像或文本提示生成3D形状是计算机视觉中一个长期存在的问题,对许多应用至关重要。尽管在2D图像生成领域取得了显著进展,得益于先进的生成方法和大规模图像文本数据集,但将这一成功经验转移到3D领域受到了3D训练数据有限的限制。虽然许多工作介绍了复杂的3D生成模型,但大多数仅依赖于3D形状数据集进行训练。由于公开可用的3D数据集规模有限,这些方法通常难以在开放世界场景中泛化到未见过的类别。

另一方面,以DreamFusion 和Magic3D 为代表的一系列工作利用了2D先验模型(如CLIP 和Stable Diffusion )的广泛知识或强大生成潜力。它们通常为每个输入文本或图像从零开始优化3D表示(如NeRF或网格)。在优化过程中,将3D表示渲染成2D图像,并使用2D先验模型计算它们的梯度。尽管这些方法取得了令人印象深刻的成果,但每个形状的优化可能非常耗时,需要几十分钟甚至几小时才能为每个输入生成一个3D形状。此外,他们经常遇到“多面”或Janus问题,产生具有从NeRF或三平面表示继承的过饱和颜色和伪影的结果,并在不同的随机种子中产生不同的结果方面面临挑战。

最近One-2-3-45提出了一种创新的方法,利用2D扩散模型的丰富先验进行3D内容生成。它首先通过基于视图的2D扩散模型Zero123 预测多视图图像。然后,通过通用的NeRF方法 将这些预测的图像进行3D重建。虽然One-2-3-45可以在单个前馈传递中生成3D形状,但其有效性通常受到Zero123不一致的多视图预测的限制,导致3D重建结果受损。

本文介绍了One-2-3-45++,有效克服了One-2-3-45的缺点,显著提高了鲁棒性和质量。One-2-3-45++以任何目标的单个图像作为输入,并包括两个主要阶段:2D多视图生成和3D重建。在初始阶段,与其使用Zero123分别预测每个视图不同,One-2-3-45++同时预测一致的多视图图像。这通过将一组简洁的六视图图像平铺成单个图像,然后微调2D扩散模型以在输入参考图像的条件下生成此组合图像来实现。通过这种方式,2D扩散网络能够在生成过程中关注每个视图,确保在不同视图之间获得更一致的结果。在第二阶段,One-2-3-45++使用多视图条件下的基于3D扩散的模块以粗到细的方式预测带纹理的网格。一致的多视图条件图像充当3D重建的蓝图,促进了零样本幻想能力。同时,3D扩散网络在提升多视图图像方面表现出色,因为它能够利用从3D数据集中提取的广泛先验。最终,One-2-3-45++采用轻量级的优化技术,通过利用一致的多视图图像进行监督,高效地提高纹理质量。

如下图1所示,One-2-3-45++在不到一分钟内有效生成具有逼真纹理的3D网格,提供精确的细粒度控制。经过全面的评估,包括用户研究和对广泛测试集的客观指标,突显了One-2-3-45++在鲁棒性、视觉质量以及最重要的是对输入图像的忠实度方面的优越性。

相关工作

3D生成

近年来,3D生成引起了广泛关注。在大规模预训练2D模型出现之前,研究人员通常深入研究直接从3D合成数据或真实扫描学习的3D原生生成模型,生成各种3D表示,如点云,3D体素,多边形网格,参数模型和隐式场。然而,由于3D数据有限,这些模型往往专注于一些特定类别(例如椅子、汽车、飞机、人类等),在开放世界中难以泛化到未见过的类别。

近期2D生成模型(例如DALL-E ,Imagen 和Stable Diffusion )以及视觉语言模型(例如CLIP)的出现为我们提供了关于3D世界的强大先验,从而推动了3D生成的研究热潮。值得注意的是,像DreamFusion ,Magic3D 和Prolific-Dreamer 等模型开创了一种面向每个形状优化的方法。这些模型旨在为每个独特的输入文本或图像优化3D表示,利用2D先验模型进行梯度引导。尽管它们取得了令人印象深刻的成果,但这些方法往往遭受长时间优化、"multi-face"问题、过饱和颜色和结果缺乏多样性的困扰。一些工作还集中在为输入网格创建纹理或材料上,利用了2D模型的先验。

一系列新的研究,如Zero123 等工作,突显了使用预训练的2D扩散模型从单一图像或文本中合成新视图的潜力,为3D生成打开了新的大门。例如,One-2-3-45 利用Zero123预测的多视图图像,能够在短短45秒内生成带纹理的3D网格。然而,由Zero123生成的多视图图像缺乏3D一致性。我们的研究与一些同时进行的研究一起致力于提高这些多视图图像的一致性,这是后续3D重建应用的关键一步。

稀疏视图重建

传统的3D重建方法,如多视图立体或基于NeRF的技术,通常需要大量输入图像以进行准确的几何推断,而许多最新的通用NeRF解决方案则努力学习场景之间的先验。这使它们能够从稀疏图像集中推断NeRF并推广到新的场景。这些方法通常采用少量源视图作为输入,利用2D网络提取2D特征。然后,这些像素特征被反投影并聚合到3D空间中,便于密度(或SDF)和颜色的推断。然而,这些方法可能要么依赖于具有准确对应关系的一致多视图图像,要么在超出训练数据集的泛化方面具有有限的先验。

最近,一些方法采用了扩散模型来辅助稀疏视图重建任务。然而,它们通常将问题框架为新视图合成,需要额外的处理,例如使用3D表示进行蒸馏,以生成3D内容。我们的工作利用了多视图条件下的3D扩散模型进行3D生成。这个模型直接从3D数据中学习先验,并且不需要额外的后处理。此外,一些同时进行的研究采用基于NeRF的场景优化进行重建,利用专门的损失函数。

方法

在传统的游戏工作室中,创建3D内容涵盖了一系列阶段,包括概念艺术、3D建模和纹理制作等。每个阶段都需要不同且互补的专业知识。例如,概念艺术家应该具备创造力、生动的想象力以及将3D资源可视化的技能。相反,3D建模师必须精通3D建模工具,并能够解释和将多视图概念图转化为逼真的模型,即使图纸中包含不一致或错误。

One-2-3-45++旨在利用丰富的2D先验和宝贵但有限的3D数据,遵循类似的哲学。如下图2所示,通过目标的单个输入图像,One-2-3-45++开始生成目标的一致多视图图像。

这是通过微调预训练的2D扩散模型实现的,并类似于概念艺术家的角色。然后,将这些生成的图像输入到多视图条件下的3D扩散模型中进行3D建模。在广泛的多视图和3D配对上进行训练的3D扩散模块擅长将多视图图像转换为3D网格。最后,生成的网格经过轻量级的细化模块,由多视图图像引导,进一步提高纹理质量。

一致的多视图生成

最近,Zero123展示了微调预训练的2D扩散网络以包含摄像机视角控制的潜力,从而从单个参考图像中合成目标的新视图。虽然先前的研究已经使用Zero123生成多视图图像,但它们往往在不同视图之间存在一致性问题。这种不一致性是因为Zero123在孤立地对每个视图建模条件边际分布,而在多视图生成过程中没有考虑视图间的相互通信。本文提出了一种创新方法,以生成一致的多视图图像,极大地有利于下游的3D重建。

「多视图平铺」

为了在单个扩散过程中生成多个视图,本文采用了一种简单的策略,即将一个稀疏的6个视图的集合铺设成一个具有3×2布局的单个图像,如下图3所示。

随后,微调一个预训练的2D扩散网络,以在单个输入图像的条件下生成组合图像。这种策略使多个视图能够在扩散过程中相互交互。

这里的问题在于定义多视图图像的摄像机姿势并不是一个微不足道的任务。考虑到训练数据集中的3D形状缺乏对齐的规范姿势,使用多视图图像的绝对摄像机姿势可能会对生成模型产生歧义。另外,如果将摄像机姿势相对于输入视图设置为与Zero123中相同,那么下游应用将需要推断输入图像的俯仰角以推断多视图图像的摄像机姿势。这额外的步骤可能会引入流程中的错误。为了解决这些问题,作者选择了固定的绝对俯仰角,配合相对方位角,来定义多视图图像的姿势,有效地解决了方向的歧义问题,而无需进一步的俯仰估计。更具体地说,六个姿势由交替的30°和-20°的俯仰角确定,与方位角从30°开始,每个后续姿势递增60°,如上面图3所示。

「网络和训练细节」:为了微调 Stable Diffusion,添加图像条件并生成一致的多视图组合图像,本文采用了三个关键的网络或训练设计:

  1. 局部条件:采用了参考注意力技术,以纳入局部条件。具体而言,使用去噪UNet模型处理参考输入图像,并将去噪多视图图像的相应自注意力的键和值矩阵附加到去噪多视图图像的相应注意力层。

  2. 全局条件:利用CLIP图像embeddings作为全局条件,替换了 Stable Diffusion 中最初使用的文本token特征。这些全局图像嵌入与一组可学习的权重相乘,为网络提供了对目标的整体语义理解。

  3. 噪声调度:原始的 Stable Diffusion 模型是使用缩放线性噪声计划进行训练的。发现在我们的微调过程中切换到线性噪声调度是必要的。

本文使用 Objaverse 数据集 中的3D形状对 Stable Diffusion2 v-mode 进行微调。对于每个形状,通过在指定范围内随机采样输入图像的摄像机姿势,并从一个策划的集合中选择随机的HDRI环境光照,生成三个数据点。最初,只微调了自注意力层以及使用 LoRA 的跨注意力层的键和值矩阵。随后,使用保守的学习速率微调整个UNet。微调过程使用了16个GPU,大约花费了10天。

具有多视图条件的3D扩散

虽然先前的工作利用了通用的 NeRF 方法进行3D重建,但它主要依赖于多视图图像的准确局部对应,并且对3D生成的先验知识有限。这限制了它们在提升由2D扩散网络生成的复杂且不一致的多视图图像方面的有效性。相反,本文提出了一种创新的方法,通过利用多视图条件的3D生成模型,将生成的多视图图像提升到3D。它通过在大量3D数据上训练表达丰富的3D原生扩散网络,试图学习在多视图图像条件下的可信3D形状流形。

「3D体积表示」:如前面图2所示,将有纹理的3D形状表示为两个离散的3D体积,即有符号距离函数(SDF)体积和颜色体积。SDF体积测量了每个网格单元中心到最近形状表面的有符号距离,而颜色体积捕获了相对于网格单元中心最近表面点的颜色。此外,SDF体积可以转换为离散的占据体积,其中每个网格单元存储一个二进制占据值,根据其SDF的绝对值是否低于预定义的阈值。

「两阶段 Diffusion」 为了捕获3D形状的细节,需要使用高分辨率的3D网格,但不幸的是,这会带来相当大的内存和计算成本。因此,采用 LAS-Diffusion 的方法,以一种粗到精的两阶段方式生成高分辨率体积。具体而言,初始阶段生成一个低分辨率(例如 n = 64)的完整3D占据体积 F ∈ ,以逼近3D形状的外壳,而第二阶段则生成一个高分辨率(例如 N = 128)的稀疏体积 S ∈ ,该体积在占据区域内预测细粒度的SDF值和颜色。

我们为每个阶段使用单独的扩散网络。对于第一阶段,在UNet中使用正常的3D卷积来生成完整的3D占据体积F,而对于第二阶段,在UNet中加入了3D稀疏卷积,以产生3D稀疏体积S。这两个扩散网络都使用去噪损失进行训练:

其中,ε 和 t 是采样的噪声和时间步长, 是数据点(F 或 S), 是它的带噪声版本,c 是多视图条件,f 是 UNet。N 和 分别表示高斯分布和均匀分布。

「多视图条件」 训练传统的3D原生扩散网络在泛化方面可能会面临挑战,因为3D数据的有限可用性。然而,使用生成的多视图图像可以提供全面的指导,极大地简化了3D生成的难度。本文通过首先提取局部图像特征,然后构建一个条件3D特征体积(表示为C)的方式,将多视图图像整合到扩散过程中。这种策略遵循原生先验有助于更容易泛化的原理。

如下图4所示,给定m个多视图图像,首先使用预训练的2D骨干网络 DINOv2,为每个图像提取一组局部块特征。然后,通过使用已知的相机姿势将体积内的每个3D体素投影到m个多视图图像上,构建3D特征体积C。对于每个3D体素,通过一个共享权重的MLP进行m个关联的2D块特征的聚合,然后进行最大池化。这些聚合特征共同形成了特征体积C。

在扩散网络中,UNet包含多个级别。例如,在初始阶段的占用UNet中有五个级别:。最初,构建一个与起始分辨率匹配的条件特征体积C,如前所述。然后,将C应用于3D卷积网络,生成后续分辨率的体积。然后将生成的条件体积与UNet内的体积连接,以指导扩散过程。对于第二阶段,构建稀疏的条件体积并使用3D稀疏卷积。为了使颜色体积的扩散受益,还将2D逐像素投影的颜色连接到扩散UNet的最终层。此外,将输入图像的CLIP特征作为全局条件整合进来。

「训练和推理细节」本文使用 Obajverse 数据集中的3D形状训练两个扩散网络。对于每个3D形状,首先将其转换为一个封闭的流形,然后提取其SDF体积。将形状的多视图渲染解投影以获得3D彩色点云,用于构建颜色体积。在训练过程中,使用真值渲染作为多视图条件。由于两个扩散网络分别进行训练,我们对相机姿势引入了随机扰动,并对第二阶段的初始占用进行了随机噪声以增强稳健性。使用 8 个 A100 GPU 对两个扩散网络进行了约 10 天的训练。更多细节请参阅补充材料。

在推理过程中,首先使用高斯噪声初始化一个 网格,然后由第一个扩散网络去噪。然后,将每个预测的占用体素进一步细分为 8 个较小的体素,用于构建高分辨率的稀疏体积。稀疏体积使用高斯噪声初始化,然后通过第二个扩散网络去噪,得到每个体素的SDF和颜色的预测。最后,应用 Marching Cubes 算法提取纹理网格。

纹理细化

鉴于多视图图像具有比3D彩色体积更高的分辨率,我们可以通过轻量级的优化过程来优化生成网格的纹理。为此,在优化 TensoRF 表示的颜色场的同时固定生成的网格的几何形状。在每次迭代中,通过栅格化和query颜色网络将网格渲染为2D。利用生成的一致多视图图像使用 L2 损失指导纹理优化。最后,将优化后的颜色场"烘焙"到网格上,其中表面法线作为观察方向。

实验

基于图像到3D的比较

「基线」: 本文将 One-2-3-45++ 与基于优化和前馈方法进行比较。在基于优化的方法中,我们的基线包括 DreamFusion ,其使用 Zero123 XL 作为其骨干,以及 SyncDreamer 和 DreamGaussian 。

「数据集和指标」: 使用 GSO 数据集中的全部 1,030 个形状来评估这些方法的性能,据众所知,这些形状在训练期间没有暴露给任何方法。对于每个形状,我们生成一个作为输入的正视图图像。与 One-2-3-45一致,采用 F-Score 和 CLIP 相似性作为评估指标。F-Score 评估了预测网格与网格真值之间的几何相似性。对于 CLIP 相似性度量,为每个预测和网格真值渲染了 24 个不同的视图,为每对相应的图像计算 CLIP 相似性,然后在所有视图上平均这些值。在计算指标之前,使用线性搜索和 ICP 算法的组合将预测的网格与网格真值对齐。

「用户研究」: 还进行了用户研究。对于每个参与者,从整个 GSO 数据集中随机选择了 45 个形状,并为每个形状随机抽样了两种方法。要求参与者从每对比较结果中选择出表现出更高质量并更好地与输入图像对齐的结果。然后基于这些选择计算了所有方法的偏好率。总共从 53 名参与者中收集了 2,385 对评估对。

「结果」: 如下表1所示,One-2-3-45++在F-Score和CLIP相似性方面均超过了所有基线方法。

用户偏好分数进一步突显了明显的性能差异,我们的方法在性能上明显优于竞争方法。请参考下图6,其中详细显示了混淆矩阵,说明了One-2-3-45++在92%的情况下优于One-2-3-45。

此外,与基于优化的方法相比,我们的方法表现出显着的运行时优势。下图5和下图7展示了定性结果。

文本到3D的比较

「基线」: 将 One-2-3-45++ 与基于优化的方法进行了比较,具体是 ProlificDreamer 和 MV-Dream ,以及前馈方法 ShapE 。对于 ProlificDreamer,我们使用了 ThreeStudio 实现 ,而对于其余方法,使用了它们各自的官方实现。

「数据集和指标」: 鉴于许多基线方法需要数小时才能生成一个3D形状,我们在从 DreamFusion 中抽样的50个文本提示上进行了评估。使用CLIP相似性进行评估,通过比较预测网格的24个渲染视图与输入文本提示,然后在所有视图上平均相似性分数。

「用户研究」: 与图像到3D评估类似,用户研究涉及每个参与者随机选择的30对结果。总共从53名参与者中收集了1,590对评估对。

结果: 如下表2所示,One-2-3-45++在CLIP相似性方面表现优越,超过了所有基线方法。

用户偏好分数进一步证实了我们的方法在性能上明显优于竞争技术。详细分析请参见前面图6。与次优方法MVDream 直接比较时,我们的方法具有70%的用户偏好率。此外,MVDream 需要大约2小时才能生成一个形状,而我们的方法提供即时结果。下图8显示了定性结果。

分析

整体流程的剖析研究: One-2-3-45++包括三个关键模块:一致的多视图生成、多视图条件的3D扩散和纹理优化。使用完整的GSO数据集对这些模块进行了剖析研究,结果详见下表3。

将一致多视图生成模块替换为Zero123XL 导致了明显的性能下降。此外,将3D扩散模块替换为One-2-3-45 中使用的通用NeRF导致性能显著下降。然而,包含纹理优化模块显著提高了纹理质量,得到了更高的CLIP相似性分数。

「3D扩散的剖析研究」: 下表4呈现了3D扩散模块剖析研究的结果。

该研究突显了多视图图像对模块有效性的重要性。当模块在没有多视图条件的情况下运行,仅依赖单个输入视图的全局CLIP特征时(a行和f行),性能显著下降。相反,One-2-3-45++方法通过使用已知投影矩阵构建3D特征体积,利用了多视图局部特征。仅从多个视图中连接全局CLIP特征也会损害性能(b行和f行),突显了多视图局部条件的价值。然而,输入视图的全局CLIP特征提供全局形状语义;它们的删除导致性能下降(c行和e行)。尽管One-2-3-45++使用预测的多视图图像进行3D重建,但在训练3D扩散模块期间合并这些预测图像可能导致性能下降(d行和e行),因为预测的多视图图像与实际3D真值网格之间可能存在不匹配。为了有效训练模块,我们使用了真值渲染。鉴于预测的多视图图像可能存在缺陷,在训练期间对投影矩阵进行随机扰动,以增强处理预测的多视图图像时的鲁棒性(e行和f行)。

「多视图生成的比较」: 本文还评估了一致的多视图生成模块与现有方法的比较,即Zero123 及其缩放变体,以及两个并发工作:Sync-Dreamer 和Wonder3D 。使用GSO 数据集,对于每个目标,作者渲染一个单一的输入图像,并要求方法生成多视图图像。对于Zero123和Zero123 XL,使用与我们的方法相同的目标姿态。然而,对于Wonder3D和SyncDreamer,使用这些方法预设的目标姿态,因为它们不支持在推理期间更改相机位置。如下表5所示,我们的方法在PSNR、LPIPS和前景mask IoU方面超过了当前的方法。值得注意的是,Wonder3D 在其训练阶段使用正交投影,这在处理推理期间的透视图像时会损害其鲁棒性。SyncDreamer 仅在30°的仰角生成视图,这比我们的设置更简单。

结论

本文介绍了One-2-3-45++,这是一种创新的方法,可以将任何目标的单个图像转换为3D纹理网格。与现有的文本到3D模型相比,该方法通过提供更精确的控制,并且能够迅速生成高质量的网格,通常在60秒内完成。此外,生成的网格与原始输入图像具有很高的保真度。展望未来,可以通过从2D扩散模型和RGB图像中引入附加的引导条件,提高几何形状的鲁棒性和细节。

参考文献

[1]One-2-3-45++: Fast Single Image to 3D Objects with Consistent Multi-View Generation and 3D Diffusion

更多精彩内容,请关注公众号:AI生成未来

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

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

相关文章

Datawhale聪明办法学Python(task6字符串)及作业题解版

一、课程基本结构 课程开源地址: 课程进度列表 - 聪明办法学 Python 第二版 章节结构: Chapter 0 安装 InstallationChapter 1 启航 Getting StartedChapter 2 数据类型和操作 Data Types and OperatorsChapter 3 变量与函数 Variables and Functions…

在雷电模拟器中安装apk包使用charles抓包详细教程

背景 由于手头没有多余的平板,所以用模拟器来安装应用进行测试,有时候想要知道是前端问题还是后端问题,需要安装charles来进行抓包; 最终效果 模拟器上浏览应用,能抓到应用数据; 具体步骤 模拟器开启ro…

达梦兼容MySQL问题

问题 客户开发商 反馈 两台达梦数据库 执行相同SQL, 100.90.34.131上的 SQL语法 不支持。反馈是版本低导致的 分析 版本 100.90.34.131 10.74.28.22 发现 两个数据库大版本 一致,排除 版本原因。 开发环境 开发商 使用 10.74.28.22 的达梦。使用的是 …

MySQL增删改查(增加)

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:MySQL数据库和表操作🙉 🐹今日诗词:父兵诛卓起长沙,直取江东作帝家🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主&…

基于Java SSM框架实现咖啡馆管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现咖啡馆管理系统演示 摘要 2021是网络科技的时代 ,众多的软件被开发出来,给客户带来了很大的选择余地,而且客户越来越追求更个性的需求。在这种时代背景下,客户对咖啡馆管理系统越来越重视,使更好…

使用terraform 来创建GCP的instance template 和基于它的vm

本人在上一篇的文章中已经介绍了如何去创建 google cloud的 vm 的image 和 instance template了 url: 快速构建自定义配置好的VM - 使用GCP instance-template 和 custom-image 但是里面的操作是基于gcloud CLI的。 在实际项目上, 我们对google cloud …

Python:正则表达式---贪婪匹配

在正则表达式中,贪婪匹配是指匹配尽可能多的字符,而非贪婪匹配(也称为懒惰匹配或最小匹配)则是匹配尽可能少的字符。 .* 表示匹配任意数量的任意字符(除换行符外)。贪婪匹配会将尽可能多的字符都作为匹配结…

vue中监听Form表单值的变化

想要监听From表单中某个值的变化需要用到vue中的 watch watch: {inputForm.isHeating() {this.inputForm.otherHeating}}, isHeating是表单中的某个值,如果他变化就会清空另一个值

【SpringMVC】SpringMVC的请求与响应

文章目录 0. Tomcat环境的配置1. PostMan工具介绍创建WorkSpace建立新的请求 2. 请求映射路径案例结构与代码案例结构案例代码 案例存在问题解决方案方法方法升级版——配置请求路径前缀注解总结 3. Get请求与Post请求案例结构与案例代码案例结构案例代码 Get请求Post请求接收中…

HotRC DS600遥控器+F-06A接收机

PWM原理说明 DS600遥控器说明 DS600遥控器的默认高电平是1.5ms 1通道 左右 2通道 前后 3通道 接管 上电后是1ms ,按一下是2ms,1ms和2ms切换 DS600接收机说明 */ #include "ps2.h" #include "common.h"#define LEFT_RIGHT_CHAN…

工具系列:PyCaret介绍_多分类代码示例

👋 工具系列:PyCaret介绍_多分类代码示例 PyCaret 介绍 PyCaret是一个开源的、低代码的Python机器学习库,可以自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,可以大大加快实验周期并提高生产效率。 与其他开…

理解按需自动导入 unplugin-auto-import unplugin-vue-components

文章目录 unplugin-auto-import基础使用构建工具引入插件配置插件 import:配置自动导入规则使用预设自动引入第三方库自动导入 TypeScript 类型vue 预设的自动导入配置 dts:让编辑器环境识别 ts 类型eslintrc:解决 eslint 检查错误dirs&#…

AI 论文精读,中文视频讲解:剖析人工智能本质 | 开源日报 No.120

mli/paper-reading Stars: 21.8k License: Apache-2.0 深度学习论文精读是一个深度学习相关论文列表,包括计算机视觉、生成模型、自然语言处理等多个领域。 该项目的核心优势和特点包括: 提供了大量关于深度学习各领域热门文章内容对不同年份发表的有较…

数据类型,运算符,表达式复习

本章没太需要复习的,重点复习一下逗号表达式还有习题吧 总结 表达式1,表达式2 计算的过程为,先算表达式1,再算表达式2,整个表达式的值为表达式2的值 还可以无限套娃,像这样((a,b&…

03-JVM对象创建与内存分配机制深度剖析

文章目录 对象的创建对象创建的主要流程一、类加载检查二、分配内存划分内存的方法解决并发问题的方法 三、初始化零值四、设置对象头五、执行<init>方法 对象半初始化对象大小与指针压缩什么是java对象的指针压缩&#xff1f;为什么要进行指针压缩&#xff1f; 对象内存…

Linux常用的基础命令

一、通配符 1、定义&#xff1a; 有些符号不表示原来的意思&#xff0c;它代表了一类字符 " * "&#xff1a;代表任意长度的字符&#xff0c;不能显示隐藏文件 " ? "&#xff1a;代表任意一个字符 2、作用&#xff1a; 去匹配文件的名字。 例如&am…

『Linux升级路』基础开发工具——gdb篇

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、背景知识介绍 二、gdb指令介绍 一、背景知识介绍 在软件开发中&#xff0c…

用Go语言实现HTTP API的安全验证

HTTP API的安全验证&#xff0c;通常我们会使用诸如OAuth、API密钥、JWT&#xff08;JSON Web Tokens&#xff09;等方法。这里&#xff0c;我将向您展示如何使用JWT在Go语言中实现HTTP API的安全验证。 1. JWT简介 JWT是一种开放标准&#xff08;RFC 7519&#xff09;&#…

软件项目安全保证措施

一、 身份鉴别 二、 访问控制 三、 通信完整性、保密性 四、 抗抵赖 五、 数据完整性 六、 数据保密性 七、 应用安全支撑系统设计 软件开发全流程文档支撑下载&#xff1a;软件项目开发全套文档下载-CSDN博客

VScode 工作区配置 和 用户配置

一、工作区配置 通常不同的项目都有不同的配置&#xff0c;我一般都是使用eslint和prettier一起用&#xff0c;所以经常会有这几个文件&#xff1a; 这里简单介绍一下这几个文件的作用吧。 1.vscode文件夹下 一般有两个文件&#xff0c;extensions.json和settings.json。 e…