【论文解读】基于神经辐射场NeRF的像素级交互式编辑(Seal-3D)

news2024/11/17 16:01:45

来源:投稿 作者:橡皮
编辑:学姐

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

项目主页:https://windingwind.github.io/seal-3d/

摘要:

随着隐式神经表征或神经辐射场(NeRF)的普及,人们迫切需要与隐式三维模型交互的编辑方法,以完成重建场景的后期处理和三维内容创建等任务。虽然以前的作品从不同角度探索了神经辐射场编辑,但它们在编辑灵活性、质量和速度方面受到限制,无法提供直接的编辑响应和即时预览。关键的挑战在于如何构想一种本地可编辑的神经表征,它能直接反映编辑指令并即时更新。为了弥补这一缺陷,我们提出了一种新的隐式表征交互式编辑方法和系统,称为 Seal-3D 1,它允许用户以像素级和自由的方式编辑 NeRF 模型,并可使用各种类似 NeRF 的骨干,还能即时预览编辑效果。为了实现这些效果,我们提出了将编辑指令映射到 NeRF 模型原始空间的代理函数,以及具有局部预训练和全局微调功能的师生训练策略。我们建立了一个 NeRF 编辑系统来展示各种编辑类型。我们的系统能以约 1 秒的交互速度实现引人注目的编辑效果。

图 1:Seal-3D:首个交互式像素级 NeRF 编辑工具。我们设计了一种交互式用户编辑方法和系统 Seal-3D,通过新颖的预训练策略实现即时(≈1 秒)预览(左图)。通过短时间(1 到 2 分钟)的微调,可以进一步获得高质量的编辑结果。我们所实现的编辑工具(右图)的编辑结果与原始表面(左图)上丰富的阴影细节(如阴影)一致。")

1.引言

隐式神经表征,如神经辐射场(NeRF),作为利用神经网络对三维场景进行建模的新型三维表征,受到越来越多的关注。NeRF 及其变体得益于较高的重建精度和渲染质量以及相对较低的内存消耗,已在三维重建、新颖视图合成和虚拟/增强现实等许多三维应用中展现出巨大潜力。

随着新的隐式表示法的普及和隐式三维模型数量的不断增加,人们迫切地需要便于人类使用的编辑工具来与这些三维模型进行交互。使用隐式神经表征进行编辑是全面增强表征能力所需的一项基本技术。由于采集数据的噪声和重建算法的局限性,从真实世界重建的物体很可能包含人工痕迹。在典型的三维扫描流程中,手动校正和细化以去除伪影是常见的阶段。另一方面,在 3D 游戏、动画和拍摄等 3D 内容创建应用中,艺术家通常需要根据现有 3D 模型创建新内容。

之前的工作已经尝试编辑 NeRF 表示的三维场景,包括对象分割 、对象移除 、外观编辑和对象混合等。这些现有的 NeRF 编辑方法主要侧重于粗粒度的对象级编辑,收敛速度无法满足交互式编辑的需求。最近的一些方法通过引入网格作为编辑代理,将 NeRF 编辑转化为网格编辑。这就要求用户在额外的网格工具上进行操作,从而限制了交互性和用户友好性。据我们所知,目前还没有一种方法能够支持以快速收敛速度对神经辐射场进行交互式像素级编辑,这主要是由于下面讨论的挑战所造成的.

现有的显式三维表示法(如点云、纹理网格和占位体积)存储了物体和场景的显式几何结构,与之不同的是,隐式表示法使用神经网络来查询三维场景的特征,包括几何和颜色。以基于网格的表征为例,现有的三维编辑方法可以通过移动与目标对象表面区域和对象纹理相对应的顶点来改变对象的几何形状。由于视觉效果和底层表示之间没有明确的可解释的对应关系,因此编辑隐式三维模型是间接和具有挑战性的。此外,很难在场景的局部区域找到隐式网络参数,这意味着网络参数的调整可能会导致不希望发生的全局变化。这给精细编辑带来了更多挑战。

为了弥补这一差距,我们在本文中提出了一种用于三维场景隐式神经表征的交互式像素级编辑方法和系统,并将其命名为 Seal-3D。这个名称借用了流行的二维图像编辑软件 Adobe PhotoShop,因为它的封印工具提供了类似的编辑操作。如图 1 所示,该编辑系统由四种编辑方式组成: 1) 边框工具。它可以变换和缩放边界框内的事物,就像复制粘贴操作一样。2) 画笔工具。它可以在选定的区域涂上指定的颜色,还可以增加或减少表面高度,就像油画笔或画笔一样。3) 锚点工具。它允许用户自由移动控制点,并根据用户输入影响其邻近空间。4) 颜色工具。它可以编辑对象表面的颜色。

为了实现交互式 NeRF 编辑效果,我们解决了上述隐式表征的难题。首先,为了建立显式编辑指令与隐式网络参数更新之间的对应关系,我们提出了一种代理函数,将目标三维空间(由交互式图形用户界面中的用户编辑指令确定)映射到原始三维场景空间,并提出了一种师生提炼策略,利用代理函数从原始场景中获取的相应内容监督来更新参数。其次,为了实现局部编辑,即在非局部隐式表征下减轻局部编辑效应对全局三维场景的影响,我们提出了一个两阶段的训练过程:预训练阶段仅对编辑区域的位置嵌入网格进行局部损失更新,同时冻结后续的 MLP 解码器以防止全局退化;微调阶段对嵌入网格和 MLP 解码器进行全局光度损失更新。通过这种设计,预训练阶段更新局部编辑特征,微调阶段将局部编辑区域与未编辑空间的全局结构和颜色相融合,以实现视图一致性。这种设计的好处是可以即时预览编辑效果:预训练可以快速收敛,并在大约 1 秒钟内呈现局部编辑效果。

总之,我们的贡献如下:

  • 我们首次提出了针对神经辐射场的交互式像素级编辑方法和系统,其中体现了多种类型的细粒度编辑工具,包括几何(边界框工具、画笔工具和锚点工具)和颜色编辑;

  • 我们提出了一个代理函数来建立显式编辑指令与隐式网络参数更新之间的对应关系,并提出了一种师生提炼策略来更新参数;

  • 我们提出了一种两阶段训练策略,以便在不污染全局三维场景的情况下即时预览局部细粒度编辑。

2.方法

图 2:编辑框架示意图。左图:用户编辑后,目标空间的三维点和视角方向被映射到原始源空间,从而从教师模型 f T θ 中获得指导ct、σt,用于学生训练。右图:学生训练包括两个阶段:快速预训练,通过局部损失更新网络部分参数和全局损失进行微调,提供即时预览。

我们介绍了神经辐射场的交互式像素级编辑方法 Seal-3D。整个流程如图 2 所示,由像素级代理映射功能、师生训练框架和框架下学生 NeRF 网络的两阶段训练策略组成。我们的编辑工作流程从代理功能开始,该功能根据用户指定的编辑规则映射查询点和射线方向。然后是一个从 NeRF 到 NeRF 的教师-学生提炼框架,在这个框架中,具有几何和颜色编辑映射规则的教师模型监督学生模型的训练(第 3.2 节)。交互式精细编辑的关键是对学生模型进行两阶段训练(第 3.3 节)。在额外的预训练阶段,教师模型中的点数、射线方向和编辑空间内的推断地面实况会被采样、计算和缓存;只有具有局部性的参数会被更新,而导致全局变化的参数会被冻结。在预训练阶段之后,通过全局训练阶段对学生模型进行微调。

2.1 基于 NeRF 的编辑问题概述

我们首先简要介绍了神经辐射场,然后分析了基于神经辐射场的编辑问题所面临的挑战以及现有解决方案的局限性。

2.1.1 NeRF 预备知识

神经辐射场 (NeRF) 以 5D 函数的形式对三维场景进行隐式表示:f : (x, y, z, θ, φ) ̹→ (c, σ),其中 x = (x, y, z) 是三维位置,d = (θ, ϕ) 是视角方向,c 和 σ 分别表示颜色和体积密度。5D 函数的典型参数是 MLP fθ。

要渲染一个图像像素,需要根据摄像机的内在和外在特性,从摄像机位置 o 出发,经过像素中心,射出一条方向为 d 的射线 r。K 个点 xi = o + tid,i = 1, 2, . 沿射线对 K 个点进行采样,并通过网络 fθ 查询其对应的颜色和密度:

随后,通过体积渲染计算出预测的像素颜色 ˆC(r) 和深度值 ˆD(r):

其中,αi 是混合时的α值,Ti 是累积透射率,δi = ti+1 - ti 是相邻点之间的距离。NeRF 的训练方法是尽量减少像素预测颜色与地面真实颜色之间的光度损失。

在本文中,我们在 Instant-NGP的基础上构建了交互式 NeRF 编辑系统,该系统实现了近乎实时的 NeRF 渲染性能。虽然我们的即时交互式编辑实现依赖于 NeRF 的混合表示法,以达到最佳的速度性能,但我们提出的编辑框架并不依赖于特定的 NeRF 骨干,只要遵循上述体积渲染流水线,就可以移植到其他框架中。

2.1.2 基于 NeRF 编辑的挑战

类似 NeRF 的方法可实现最先进的场景重建质量。然而,三维场景是由网络参数隐式表示的,缺乏可解释性,难以操作。在场景编辑方面,很难找到显式编辑指令与隐式网络参数更新之间的映射关系。以前的作品试图通过几种限制性方法来解决这个问题:

NeRF-Editing和NeuMesh引入了网格支架作为几何代理来辅助编辑,从而将 NeRF 编辑任务简化为网格修改。虽然与现有的基于网格的编辑方法一致,但编辑过程需要提取额外的网格,非常麻烦。此外,编辑后的几何图形高度依赖于网格代理结构,因此难以编辑不容易或无法用网格表示的空间,而表示这些空间是隐式表示的一个主要特征。Liu 等人设计了额外的颜色和形状损失来监督编辑。然而,他们设计的损耗仅在二维光度空间中,这限制了三维 NeRF 模型的编辑能力。此外,他们的方法只支持简单对象中语义连续几何图形的编辑,而不支持任意像素级的复杂编辑。此外,据我们所知,现有方法还没有实现质量和速度兼顾的交互式编辑性能。Liu 等人[19]是现有方法中唯一能在一分钟内完成优化的方法(根据他们的论文,需要 37.4 秒),但他们的方法只支持极其简单的对象,而且不支持细粒度的局部编辑(详见图 10)。其他编辑方法(如 NeuMesh)通常需要数小时的网络优化才能获得编辑结果。

在本文中,我们实现了一个交互式像素级编辑系统,使用与传统显式三维表示编辑类似的编辑策略,可以轻松扩展到新的编辑类型。我们的方法不需要任何显式代理结构(取而代之的是代理函数,见第 3.2 节),无需显式几何代理即可定义各种像素级编辑效果。它还能实现即时预览(≈1 秒)(见第 3.3 节)。表格 1 比较了我们的方法和之前方法的编辑功能。

表 1:与最新方法在编辑能力方面的比较。我们的方法支持任意编辑,不需要任何显式几何代理,并能在数秒内实现交互式编辑。

2.2. 编辑生成指导

我们的设计将 NeRF 编辑作为一个知识提炼过程来实现。给定一个适合特定场景的预训练 NeRF 网络作为教师网络,我们用预训练的权重初始化一个额外的 NeRF 网络作为学生网络。教师网络 f T θ 根据用户输入的编辑指令生成编辑指导,而学生网络 f S θ 则通过从教师网络输出的编辑指导中提炼编辑知识进行优化。本小节将介绍学生模型监督的编辑指导生成,并在图 2 左侧进行说明。

首先,用户编辑指令作为像素级信息从交互式 NeRF 编辑器中读取。源空间 S ⊂ R 3 是原始 NeRF 模型的三维空间,目标空间 T ⊂ R 3 是编辑后 NeRF 模型的三维空间。目标空间 T 通过 F m : T ̹→ S 扭曲为原始空间 S。F m 根据下文举例说明的编辑规则变换目标空间内的点及其相关方向。利用该函数,可以通过查询教师 NeRF 模型 f T θ 来获取目标空间中每个三维点和视图方向的 "伪 "预期编辑效果 c T、σT:转换后的(源空间中的)点和方向被输入教师网络,从而获得颜色和密度。这一过程可表示为:

其中,x s , d s 表示源空间点的位置和方向,x t , d t 表示目标空间点的位置和方向。

为简洁起见,我们将整个过程定义为教师推理过程 F t := f T θ ◦ F m : (x t , d t ) ̹→ (c T , σT ) 。推理结果 c T , σT 模拟编辑后的场景并作为教师标签,其信息随后由学生网络在网络优化阶段进行提炼。

F m 的映射规则可根据任意编辑目标进行设计。具体来说,我们以 4 种编辑方式为例进行说明。

  • 边界形状工具,支持传统三维编辑软件的常见功能,包括复制粘贴、旋转和调整大小。用户提供一个边界形状来表示要编辑的原始空间 S,并旋转、平移和缩放边界框来表示目标效果。然后,我们的界面会解析目标空间 T 和映射函数 F m:

其中,R 为旋转,S 为比例,c s , c t 分别为 S、T 的中心。

有了这个工具,我们甚至可以支持跨场景对象转移,方法是将转移对象的 NeRF 作为额外的教师网络,负责目标区域内的部分教师推理过程。我们在图 7 中给出了结果。

  • 画笔工具,类似于传统 3D 编辑中的雕刻笔刷,可提升或降低绘制的表面。用户使用画笔涂鸦,S 是通过光线投射在刷过的像素上生成的。画笔法线 n 和压力值 p(-) ∈ [0, 1] 由用户定义,这决定了映射:

  • 锚定工具, 其中,用户定义了一个控制点 x c 和一个平移矢量 t。x c 周围的区域将被平移函数 stretch(-; x c , t)拉伸。那么这个映射就是它的逆映射:

关于 stretch(-; x c , t) 的明确表达式,请参阅补充材料。

  • 色彩工具,通过色彩空间映射(单一色彩或纹理)编辑色彩。在这里,空间映射是相同的,我们直接将网络输出的色彩映射到 HSL 空间,这有助于色彩的一致性。我们的方法能够保留修改后表面的阴影细节(如阴影)。我们通过将原始表面颜色的亮度(HSL 空间)偏移转移到目标表面颜色来实现这一点。有关这一阴影保留策略的实施细节,请参阅补充资料。

2.3 即时预览的两阶段学生训练

就蒸馏训练策略而言,学生模型 f S θ 是在上述教师推理过程 F t 生成的伪地面真值的监督下进行优化的。通过直接应用公式(2)中由教师推理和学生推理积累的像素值 ˆC、ˆD 之间的光度损失,将来自教师模型的编辑指导提炼到学生模型中。

然而,我们发现这一训练过程的收敛速度较慢(≈30 秒或更长),无法满足即时预览的需要。为了解决这个问题,我们设计了一种两阶段训练策略:第一阶段的目标是即时收敛(1 秒内),以便将粗略的编辑结果作为预览立即呈现给用户;第二阶段则对粗略预览进行进一步细化,以获得最终的细化结果。

图 3:画笔编辑示例: 使用颜色和厚度进行 3D 绘图。

图 4:边界形状编辑示例:灯泡缩放。

局部预训练,即时预览。 通常,与整个场景相比,编辑空间相对较小,因此对全局光度损失进行训练会造成浪费,并导致收敛缓慢。为了实现编辑的即时预览,我们在全局训练开始前采用了局部预训练阶段。局部预训练过程包括 1) 对目标空间内的一组局部点 X ⊂ T 和单位球面上的一组方向 D 进行均匀采样,并将其输入到教师推理过程 F t 中,以获得教师标签 c T、σT,并提前将其缓存;2) 通过局部相关损失 Llocal 对学生网络进行训练:

其中,c S、σS 是学生网络预测的取样点 x∈X 的颜色和密度,c T、σT 是缓存的教师标签。这个预训练阶段非常快:只需约 1 秒钟的优化,学生网络渲染的图像就能显示出与编辑指令一致的合理颜色和形状。

然而,由于非本地隐式神经网络的存在,只对编辑区域的局部点进行训练可能会导致与编辑无关的其他全局区域退化。我们注意到,在混合隐式表示法(如 Instant-NGP)中,局部信息主要存储在位置嵌入网格中,而随后的 MLP 则对全局信息进行解码。因此,在这一阶段,MLP 解码器的所有参数都被冻结,以防止全局退化。实验说明将在第 4.3 节和图 12 中介绍。

全局微调。 预训练结束后,我们继续对 f S θ 进行微调,将粗预览细化为完全收敛的结果。这一阶段与标准的 NeRF 训练类似,只是监督标签是由教师推理过程生成的,而不是图像像素。

其中,R 表示迷你批中的采样射线集,( ˆC T , ˆDT ),( ˆC S, ˆDS) 分别根据公式 (2) 沿着射线 r 按 (c T , σT ),(c S, σS) 进行累积。

值得一提的是,学生网络能够生成比教师网络质量更高的结果。这是因为教师推理过程中的映射操作可能会在伪地面真值中产生一些与视图不一致的伪影。但是,在蒸馏过程中,学生网络可以自动消除这些伪影,这是因为多视图训练可以增强视图一致性的鲁棒性。详见第 4.2 节和图 6。

3.实验和分析

图 5:锚点编辑示例:假牙。

3.1 实现细节

训练。 我们选择 Instant-NGP作为编辑框架 NeRF 骨干。我们的实现基于开源 PyTorch 实现 torchngp。所有实验均在一个 NVIDIA RTX 3090 GPU 上运行。请注意,我们对原始网络架构稍作修改。详情请参见补充材料。

在预训练阶段,我们设置 λ1 = λ2 = 1,学习率固定为 0.05。在微调阶段,我们设置 λ3 = λ4 = 1,初始学习率为 0.01。从一个预训练的 NeRF 模型开始,我们进行了 50100 个历元的局部预训练(约 0.5-1 秒)和约 50 个历元的全局微调(约 40-60 秒)。可以根据编辑类型和场景的复杂程度调整历元数和耗时。请注意,我们是在没有使用 tiny-cuda-nn的情况下测试我们的性能的,而 tiny-cuda-nn 的速度优于我们的主干系统,这表明我们的性能还有进一步优化的空间。

3.2 实验结果

图 6:真实场景编辑示例:大拇指向上到向下(DTU Scan 83)。

图 7:对象转移编辑示例:从乐高场景(NeRF Blender)到家庭场景(Tanks and Temples)。

定性 NeRF 编辑结果。 我们提供了我们设计的各种编辑类别的大量实验结果,包括边界形状(图 4 和图 6)、刷洗(图 3)、锚点(图 5)和颜色(图 1)。我们的方法不仅实现了性能的大幅提升,支持第二级即时预览,还能产生更逼真的编辑外观,如图 3 中抬起面的阴影效果和图 8 中凹凸面的阴影效果。此外,学生网络生成的结果甚至会优于教师标签,例如图 6 中的 F t 输出由于视图不一致而包含浮动伪影。正如第 3.3 节所分析的,蒸馏过程设法消除了这一问题。我们还提供了一个对象转移的示例(图 7):乐高场景(Blender 数据集)中的灯泡被转移到了坦克和寺庙数据集家庭场景中孩子的头部。

图 8:NeuMesh与我们的方法在纹理/颜色绘制方面的比较。请注意,NeuMesh 需要数小时的微调,而我们的方法只需要几秒钟。

图 9:NeuMesh与我们的方法在质量和数量上的比较。PSNR 是根据编辑结果和应用相同编辑的地面真实网格的渲染结果计算得出的。

图 10:基线与我们的比较。

与基准比较。 现有方法对编辑类型有严格限制,主要集中在几何图形编辑或外观编辑,而我们的方法能同时进行这两种编辑。我们的 "刷 "和 "锚 "工具可以创建用户引导的代理外几何结构,而现有方法都不支持这种功能。我们对 NeuMesh和 Liu 等人所支持的颜色和纹理绘制进行了比较。

图 8 展示了我们的方法与 NeuMesh在涂鸦和纹理绘画任务中的两个比较。我们的方法明显优于 NeuMesh,后者在结果中存在明显的色彩偏差和人工痕迹。相比之下,我们的方法甚至能成功呈现几何凹凸造成的阴影效果。

图 9 展示了对来自 NeRF Blender的 Mic 进行同样的非刚性混合的结果。这清楚地表明:1)非刚性编辑可以在我们的框架中轻松实现。

其中,R、t 是根据预先定义的三维混合控制网格的三个最近坐标的变换矩阵插值而成,每个控制点都有位置和变换。2) 由于无网格,我们比 NeuMesh拥有更多的细节,不受网格分辨率的限制。

在图 10 中,我们还将我们的方法与 Liu 等人的方法进行了比较。在他们的论文中,Liu 等人的方法只支持无纹理的简单物体,但在我们的论文实验中,他们的方法在处理更复杂的物体时却失效了。他们的方法会导致编辑对象的整体色彩恶化,这是非常不利的。这是因为他们的潜在代码只模拟了场景的整体色彩特征,而不是细粒度的局部特征。相反,我们的方法由于采用了局部感知嵌入网格,因此支持细粒度的局部编辑。

图 11:两阶段训练策略的消融研究。放大查看 "无微调 "的细节。

图 12:MLP 固定的消融研究。

3.4消融研究

两阶段训练策略的效果。为了验证预训练和微调策略的有效性,我们在图 11 中对完整策略(第 3 行)、纯微调策略(第 1 行)和纯预训练策略(第 2 行)进行了比较。我们的预训练只需 1 秒钟就能产生粗略的结果,而光度微调在如此短的时间内几乎无法改变外观。预训练阶段还能加强后续的微调,在 30 秒内,我们的完整策略就能产生更完整的结果。不过,预训练也有局部过拟合和全局退化的副作用。因此,我们的两阶段策略在两者之间取得了很好的平衡,并产生了最佳结果。

在预训练阶段固定 MLP。在图 12 中,我们验证了在预训练阶段固定所有 MLP 参数的设计。结果证实了我们的分析,即 MLP 主要包含全局信息,因此如果不固定 MLP 解码器,就会导致全局退化。

4.结论

我们介绍了一种支持即时预览的神经辐射场像素级编辑交互框架。具体来说,我们利用师生提炼法提供编辑指导,并设计了一种两阶段训练策略来实现网络的即时收敛,从而获得粗略结果作为预览。与以往的研究不同,我们的方法不需要任何显式代理(如网格),从而提高了交互性和用户友好性。我们的方法还支持保留编辑表面的阴影效果。一个局限是,我们的方法不支持复杂的视图照明效果,如镜面反射,也不能改变场景光照,这可以通过引入内在分解来改进。此外,我们的方法无法处理原始 NeRF 网络的重建失败(如浮动伪影)。

关注下方《学姐带你玩AI》🚀🚀🚀

回复“NeRF”获取全部118篇神经辐射场论文

码字不易,欢迎大家点赞评论收藏!

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

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

相关文章

docker部署simpleDocker

1,安装docker,请参考 linux安装docker 2,安装docker-compose,请参考 Docker-Compose 3,安装simpleDocker 准备docker-compose.yml文件 version: 3 services:redis:container_name: redisimage: redis:latestweb:conta…

算法基础之二分与前缀和 day 6

文章目录 二分第一类第二类 前缀和原题链接题目描述输入格式输出格式数据范围输入样例:输出样例: 题目分析示例代码 二分 二分法是我们在高中数学就学习过的一种思想,他也是一种效率较高的查找算法,在编写代码的过程中&#xff0…

关于“Python”的核心知识点整理大全64

目录 20.2.15 确保项目的安全 settings.py 20.2.16 提交并推送修改 20.2.17 创建自定义错误页面 1. 创建自定义模板 500.html settings.py settings.py 注意 views.py 20.2.18 继续开发 往期快速传送门👆(在文章最后)&#xff1a…

基于 Python+Neo4j+医药数据,构建了一个知识图谱的自动问答系统

知识图谱是目前自然语言处理的一个热门方向。目前知识图谱在各个领域全面开花,如教育、医疗、司法、金融等。 本项目立足医药领域,以垂直型医药网站为数据来源,以疾病为核心,构建起一个包含7类规模为4.4万的知识实体,…

16.顺子日期(14)

题目 public class Main {public static boolean isLegal(String date) {int l 0;int n date.length();while(l<(n-3)) {int t1 (int)Integer.valueOf(date.substring(l,l1));int t2 (int)Integer.valueOf(date.substring(l1,l2));int t3 (int)Integer.valueOf(date.s…

案例介绍|钡铼助力2023年全国职业院校技能大赛工业网络智能控制与维护赛项

如今&#xff0c;越来越多的企业开始意识到数字制造和工业物联网已经成为工业自动化中大规模生产的核心驱动力。这其中&#xff0c;工业网络作为基础设施&#xff0c;是实现工厂设备联网与数据采集&#xff0c;建设数字工厂的基础和前提&#xff0c;甚至成为关乎数字工厂能否真…

C++ 类的内存分布

文章目录 1 . 前言2 . 无继承&#xff0c;无虚函数3 . 无继承&#xff0c;有虚函数4 . 单一继承&#xff0c;无虚函数5 . 单一继承&#xff0c;有虚函数&#xff0c;虚析构6 . 多重继承7 . 菱形继承8 . 虚拟继承9 . 总结 【极客技术传送门】 : https://blog.csdn.net/Engineer_…

CentOS:docker容器日志清理

1.先查看磁盘空间 df -h 2.找到容器的containerId-json.log文件,并清理 find /var/lib/docker/containers/ -name *-json.log |xargs du -sh 3、可以根据需求清理对应日志也可以清理数据大的日志 $ cat /dev/null > /var/lib/docker/containers/dbaee0746cc6adad3768b4ef…

Java快速排序希尔排序归并排序

快速排序算法 快速排序的原理&#xff1a;选择一个关键值作为基准值。比基准值小的都在左边序列&#xff08;一般是无序的&#xff09;&#xff0c;比基准值大的都在右边&#xff08;一般是无序的&#xff09;。一般选择序列的第一个元素。 一次循环&#xff1a;从后往前比较&…

软件测试|什么是Python构造方法,构造方法如何使用?

构造方法&#xff08;Constructor&#xff09;是面向对象编程中的重要概念&#xff0c;它在创建对象时用于初始化对象的实例变量。在Python中&#xff0c;构造方法是通过特殊的名称__init__()来定义的。本文将介绍Python构造方法的基本概念、语法和用法。 什么是构造方法&…

Qt添加资源文件

ui->setupUi(this);//1. 使用本地文件&#xff1a;ui->actionasdasdas->setIcon(QIcon("本地绝对路径"));ui->actiona1->setIcon(QIcon("C:/Users/满满/Desktop/output/picture/1.jpg"));//2. 使用资源文件&#xff1a;ui->actionasdasd…

二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)

讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏): 抓紧刷题巩固一下了 目录 1.单值二叉树 题目描述 思路1 代码1 思路2 代码2 2.相同的树 题目描述 思路 代码 3.二叉树的前序遍历 代码 思路 1.单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCod…

NVM NodeJs版本管理 通关宝典

NVM NodeJs版本管理 通关宝典&#x1f3f9; 文章目录 NVM NodeJs版本管理 通关宝典&#x1f3f9;一、NVM是什么二、开始使用NVM三、NVM 命令速查四、手动安装特定Node版本(Windows)&#x1f644;4.1 NVM for windows 运行机制4.2 手动安装流程 五、切换 NVM 下载镜像源六、常见…

docker拉取镜像提示 remote trust data does not exist for xxxxxx

1、How can I be sure that I am pulling a trusted image from docker 2、docker: you are not authorized to perform this operation: server returned 401. 以上两个问题可以试试以下解决办法 DOCKER_CONTENT_TRUSTfalse 本人是使用jenkins部署自己的项目到docker容器出现…

【技巧】IDEA 使用小技巧(三)

IDEA 使用小技巧&#xff08;三&#xff09; 配置目录Ctrl 鼠标方法缩小字体 配置目录 IDEA 在使用的过程中会在 C 盘的用户目录下写入相关配置&#xff0c;目录如下&#xff1a; "C:\Users\个人用户名\AppData\Local\JetBrains" "C:\Users\个人用户名\AppDa…

在线制作假期承诺书,电子手写签名确认,一键导出打印。

假期将至&#xff0c;为积极落实安全管理规定&#xff0c;单位通常需要下发安全承诺书进行签字确认。 易查分可以实现网上下发安全承诺书通知&#xff0c;让查询者进行签名确认&#xff0c;还可以生成PDF&#xff0c;方便打印一人一张的纸质版承诺书&#xff0c;本次就来介绍如…

C#编程-实现函数重载

考虑一个示例&#xff1a;您必须编写一个程序来实现计算器的功能。计算器执行各种运算&#xff0c;例如数字的加、减及乘等。可以对任何类型的数据执行这些运算。这是否意味着您必须定义单独的函数名&#xff08;如addInteger、addFloat和addDoublie&#xff09;对每种此类数字…

扫码支付是怎么工作的?

扫码支付是怎么工作的&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 过去的几十年&#xff0c;支付技术发生了很大的改变。下图给我们显示了 POS 终端的进化。从一开始的纸钞收银机&#xff0c;到刷卡机&#xff0c;再到…

Python 教程 02:Python 编程环境的搭建与 IDE 的选择

目录 一、搭建 Python 环境 1.1 Python 官网 1.2 下载 Python 1.2.1 选择版本 1.2.2 选择平台 1.2.3 下载安装文件&#xff08;Windows & macOS&#xff09; 1.3 安装环境 1.3.1 Windows 平台 1.3.2 macOS 平台 1.3.3 Linux 平台 1.4 验证安装是否成功 二、选择…

OpenHarmony应用构建工具Hvigor的构建流程

前言 OpenHarmony 应用和服务使用 Hvigor 作为工程的构建工具。本篇文章将介绍 Hvigor 的构建流程&#xff0c;通过修改脚本配置使 Hvigor 执行自定义任务。 Hvigor 的构建流程 加载命令行参数和环境变量&#xff1b;初始化项目结构&#xff0c;创建 Project 和 Module 实例…