【论文解读】Edit-DiffNeRF:使用2D-扩散模型编辑3D-NeRF

news2024/12/24 2:26:37

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

论文链接:https://arxiv.org/abs/2306.09551

摘要

最近的研究表明,将预训练的扩散模型与神经辐射场(NeRF)相结合,是一种很有前途的文本到 3D 的生成方法。简单地将 NeRF 与扩散模型相结合会导致跨视图不一致和风格化视图合成的退化。为了应对这一挑战,我们提出了 Edit-DiffNeRF 框架,它由一个冻结的扩散模型、一个用于编辑扩散模型潜在语义空间的 delta 模块和一个 NeRF 组成。我们的方法不是为每个场景训练整个扩散模型,而是通过 delta 模块在冻结的预训练扩散模型中编辑潜在语义空间。对标准扩散框架的这一根本性改变使我们能够对渲染视图进行细粒度修改,并通过 NeRF 训练将这些指令有效地整合到三维场景中。因此,我们能够生成一个编辑过的三维场景,并忠实地与输入的文本指令保持一致。此外,为了确保不同视角下的语义一致性,我们提出了一种新颖的多视角语义一致性损失方法,该方法从输入视图中提取潜在语义嵌入作为先验,并在不同视图中进行重建。事实证明,我们提出的方法可以有效地编辑现实世界的三维场景,与之前的研究相比,所执行的三维编辑与文本指示的一致性提高了 25%。

1.引言

随着神经辐射场(NeRF)等高效三维重建技术的日益普及,生成真实世界三维场景的逼真合成视图变得越来越可行。与此同时,由于内容再创造用例的广泛性,对三维场景操作的需求也在迅速增加。最近的许多研究都引入了用于编辑 NeRF 的扩展功能,例如对显式三维表示进行操作,训练模型以实现颜色修改或移除某些对象,或利用扩散模型进行文本到三维的合成。这些进步扩展了隐式体积表示法的多功能性。不过,它们目前仅限于改变颜色和形状,或者每次编辑任务都需要复杂且计算成本高昂的训练程序。

编辑 NeRF 是一项重要而具有挑战性的任务。由于 NeRF 是按场景优化的隐式表示,因此不能直接使用用于编辑显式表示的标准工具。此外,二维图像编辑只需输入一张图像就能为操作提供足够的指导,而 NeRF 则需要多视图信息来指导其内容修改。EditingNeRF是对隐式辐射场进行编辑的首次尝试。为了学习各种模型的几何形状和外观,他们结合了形状代码和颜色代码,以更好地解除纠缠。然而,EditingNeRF 仅限于形状和颜色操作,或删除对象的局部。Yang 等人介绍了一种将 NeRF 与显式三维几何表示相结合的技术,以实现更高效、更精确的三维物体重建。Yuan等人通过让用户在三维场景中执行用户控制的形状变形,进一步提高了性能。然而,他们的渲染结果在逼真度和几何精度方面仍存在明显不足。

最近,有人提出将扩散模型作为一种有前途的方法,将类似 NeRF 的模型用于生成多视角一致图像。具体做法是通过预训练的扩散模型(如 DreamFusion)优化 NeRF,或通过可使用二维图像训练的无条件生成扩散模型。虽然这些方法可以根据任何给定的文本提示生成三维模型,但它们目前缺乏对合成视图的细粒度控制。更重要的是,它们不能直接用于编辑完全观察到的三维场景的真实捕获 NeRF。Haque 等提出了 Instruct-NeRF2NeRF,该方法从预先训练的二维扩散模型(即 InstructPix2Pix)中提取形状和外观特征,逐步编辑渲染图像,同时优化底层三维场景。然而,这种方法与 InstructPix2Pix有一些共同的局限性,例如多视角不一致和明显的渲染伪影(包括噪声和模糊)。

我们的方法: 为了解决上述问题,并利用预训练的 NeRF 进行高保真文本到三维编辑,我们提出了一个名为 Edit-DiffNeRF 的框架,用于根据输入提示在冻结的预训练扩散模型中编辑语义潜空间。这使我们能够对 NeRF 的渲染视图进行细粒度修改,从而在底层场景的优化过程中提供更强的控制力和准确性。我们的 Edit-DiffNeRF 由一个冻结的扩散模型、一个用于编辑扩散模型潜在空间的 delta 模块和一个 NeRF 组成。我们提出的文本到 3D 编辑框架包括两个关键步骤。首先,为了对渲染的视图进行编辑,我们利用扩散先验为每个视图生成一个潜在语义嵌入,然后应用我们提出的 delta 模块对嵌入进行编辑。该 delta 模块使用 CLIP 距离损失函数进行优化。经过训练后,它能够根据输入的文本指令生成经过编辑的图像。其次,我们利用通过 delta 模块进行的修改,使用这些经过编辑的图像对 NeRF 进行训练。为了确保三维场景的多视角一致性,我们提出了一种多视角语义一致性损失,以从不同视角重建潜空间中一致的潜特征。为了评估其有效性,我们在发布的各种真实捕获的 NeRF 场景上对 Edit-DiffNeRF 进行了评估。广泛的实验结果表明,与 Instruct-NeRF2NeRF相比,执行的三维编辑与文本说明的对齐度提高了 25%。

2.先验知识

2.1去噪扩散概率模型 (DDPM)

给定 3D 场景的一组训练视图  x i N i=1 ∈ I,生成模型(例如去噪扩散概率模型(DDPM)[5])的目标是优化紧密逼近模型的参数 θ数据分布 p(x)。 DDPM 提出通过将样本从易处理的噪声分布逐渐转变为目标分布来学习数据分布。

扩散模型通常包括确定性前向过程 q(xt|xt−1),该过程逐渐向样本添加噪声,以便:

其中 βt 是第 t 个方差表。然后,该模型使用神经网络 Dθ(xt, t) 学习相反的(去噪)过程,该网络通过逐步消除噪声来执行去噪步骤,并根据 xt 预测 x^0。去噪过程同样使用高斯分布:

其中 µθ 和 Σθ 分别是均值和方差。

2.2 潜在扩散模型

与 DDPM相比,潜在扩散模型 通过利用预训练变分自动编码器的潜在空间获得了效率提升。特别是,给定输入图像 x i ,前向过程向编码的潜在嵌入 z = ε(xi ) 添加噪声,其中 ε(·) 是编码器,zt 是时间步 t 处的噪声潜在嵌入。神经网络 Dθ(·) 经过优化,可以根据图像和文本指令调节输入来预测呈现的噪声。形式上,潜在扩散目标表达如下:

其中 CI 是条件图像,CT 是文本编辑指令,ϵˆt = Dθ(zt, t, ε(CI ), cT ) 是时间步 t 的预测噪声。训练完成后,可以使用噪声输入 zt 和时间步 t 处的预测噪声 ϵˆt 导出估计的潜在 zˆt−1。

3.方法

给定预训练的 NeRF 场景以及输入文本指令,我们的目标是通过操纵预训练和冻结的扩散模型作为评分函数估计器来编辑 NeRF 场景。这使我们能够生成与所提供的编辑指令相匹配的 NeRF 场景的编辑版本。我们的 Edit-DiffNeRF 流程如图 1 所示,它是一个两阶段框架。在第一阶段,我们训练所提出的 delta 模块来编辑预训练扩散模型的潜在空间。这使我们能够对渲染视图进行细粒度的修改,并通过第二阶段的 NeRF 训练有效地将这些指令整合到 3D 场景中。

图 1:我们的 Edit-DiffNeRF 流程,它是一个两阶段框架,由冻结扩散模型、建议的 delta 模块和 NeRF 组成。在第一阶段,我们训练 delta 模块 h(t) 来编辑预训练扩散模型的潜在空间。经过训练,它能够根据输入的文本指令生成编辑后的图像。然后我们冻结 delta 模块的权重,并使用这些编辑后的图像训练 NeRF,利用通过 delta 模块所做的修改。

3.1 问题

为了监督编辑 3D 场景的 NeRF 重建过程,许多研究人员建议利用 2D 扩散模型来合成编辑后的输出。或者,其他人通过学习 pθ(xt−1|xt, CT ) 来训练条件扩散模型。实验结果表明,μθ(xt,t,CT)比μθ(xt,t)更接近目标平均值μ θ(xt,t)。这一经验证据表明,合并条件输入有助于弥合预测后验平均值与相应的真实值之间的差距。然而,在图像空间中针对每种条件训练扩散模型可能是一项繁琐且不切实际的任务。

此外,编辑 x 的一个直观想法是简单地更新 xt 以基于分数蒸馏采样损失 ∇LSDS 优化 NeRF,如 DreamFusion中提出的。然而,它会导致 3D 场景出现更多伪影或视图扭曲(参见图 2)。我们认为这是由于具有固定语义潜在空间的预训练扩散模型可能无法在现实场景中获得可行的结果。

图 2:使用基于分数蒸馏损失的经过训练的 NeRF 渲染结果。编辑是通过文本指令“把他变成戴帽子的消防员”来进行的。

3.2 编辑扩散模型中的语义潜在空间

为了使用输入文本指令操纵潜在语义空间并绕过训练整个扩散模型的过程,我们建议利用 delta 模块 h(t),它在给定冻结和预训练的情况下学习移动的潜在语义空间 Δzt扩散模型并显着减少了计算需求。 h(t) 被实现为具有两个卷积层的小型紧凑神经网络。其通道数与扩散模型中 U-Net 的瓶颈层相同。形式上,给定 delta 模 h(·),μθ(xt, t) 的参数化变为:

本质上,通过将 cT 的信息引入带有 Δzt 的潜在语义空间,预测的 ϵˆ = Dθ(zt|Δzt, t, ε(CI ), cT ) 被修改。反过来,产生平移平均值 µθ(xt, t, Δzt) 以弥补差距并促进在样本中重建所提供的指导信息的逆过程。

我们利用CLIP的架构,其中包括图像编码器 εI 和文本编码器 εT,将输入投影到共享潜在空间。在此基础上,我们提出了一种跨模态 CLIP 距离函数来评估输入文本指令和编辑图像之间的余弦相似度:

其中输入图像及其文本描述由 xsrc 和 tsrc 表示。文本指令和编辑后的图像分别表示为ttgt和xtgt,〈·〉是余弦相似度算子。此外,我们添加 L1 损失来调节原始输入和编辑后的输入生成的 x0:

其中 xˆ0 是通过冻结扩散先验获得的,x xi0 是使用修改后的潜在嵌入生成的,并且 λreg 是超参数。

3.3 视角一致性渲染

使用 2D 扩散模型编辑 3D 场景时的另一个基本挑战是扩散模型缺乏 3D 感知,这会导致生成的 NeRF 视图不一致且扭曲。 Seo 等人试图通过利用来自粗糙 3D 结构的视点特定深度图来缩小这一差距。然而,这种嵌入需要为每个文本提示优化 3D 模型。这是一个计算密集型过程,尽管进行了优化,但仍然会产生模糊和扭曲的图像。

为了解决不一致的挑战,我们建议使用预训练的扩散模型和我们提出的 delta 函数 h(·) 对每个视图的潜在语义嵌入进行编码。具体来说,给定预训练的扩散模型和优化的 h(·),每个渲染图像都被编码为潜在嵌入 zi 。受条件 NeRF的启发,NeRF中的颜色 c 被扩展到潜在依赖的发射颜色 cz:

其中嵌入 zi 是条件输入,Fθ 是 NeRF 模型。

其中 λc 是超参数。通过利用这种策略,我们的方法确保了不同视图之间的一致性,同时还保留了底层潜在嵌入的完整性。

3.4 多视图语义一致性损失

为了实现我们的目标,优化的 delta 模块 h(·) 应该在不同的相机姿势中尽可能产生一致的潜在语义嵌入。因此,我们提出了一种新颖的多视图语义一致性损失,表示为 Lc。其中涉及使用从图像 x i 中提取的潜在嵌入 zi 作为条件输入来从不同视图重建图像。我们提出的损失 Lc 的正式表达式如下:

其中 Czi 是基于方程式的渲染输出。 (7)。因此训练 NeRF 的总损失变为:

其中 λc 是超参数。通过利用这种策略,我们的方法确保了不同视图之间的一致性,同时还保留了底层潜在嵌入的完整性。

4.实验

在本节中,我们首先介绍第 4.1 节中的数据集和实现细节。随后,我们在第 4.2 节中评估了我们的方法与其他方法的性能。最后,为了进一步了解关键设计的影响,我们在第 4.3 节中进行了消融研究。

4.1 实验设置

数据集。 我们对一组不同复杂程度的场景进行3D编辑,包括发布的环境和物体的360度场景、人脸和全身肖像。这些场景是使用两种类型的相机拍摄的:智能手机和无反光镜相机。我们使用通过 COLMAP提取的相机姿势。继 CLIP-NeRF之后,我们还在两个公开可用的数据集上评估了我们的方法的有效性:包含 15 万张椅子的 Photoshape和包含 10,000 辆汽车的 Carla。

实施细节。 我们选择官方的 InstructPix2Pix作为我们的扩散先验,其中包含一个大规模文本到图像的潜在扩散模型 StableDiffusion。在训练阶段,我们对所有实验统一采样从 t = 1 到 T = 1000 的时间步长。扩散过程的方差从 β1 = 0.00085 开始线性增加,达到 β1 = 0.012。我们对每个视图使用 50 个步骤来优化我们提出的 delta 模块 h(t)。训练过程大约需要 15 分钟,并在四个 RTX 3090 GPU 上执行。训练后,我们使用编辑后的图像作为监督来训练我们的 NeRF。作为底层 NeRF 实现,我们使用 NeRFStudio中的 nerfacto 模型,这是针对真实捕获而调整的推荐实时模型。我们遵循 NeRFStudio 中的训练策略,并且 NeRF 针对 30000 个步骤进行了优化,并具有L1 和定向 CLIP 损失。

指标。 应该指出的是,与动态 NeRF 方法不同,在编辑后获取视图合成结果的地面真实视图会带来重大挑战,特别是在使用真实场景执行时。这主要是因为作为用户操作产物的编辑视图实际上并不存在。按照 Instruct-NeRF2NeRF中采用的评估指标,我们评估两个关键的定量指标,即

(1) CLIP 文本-图像方向相似性,即编辑的 3D 视图与相应文本指令之间的对齐情况,

(2) CLIP方向一致性,跨多个视图的编辑的时间一致性。

此外,我们计算了编辑过程前后 2000 个渲染图像的 Fréchet Inception Distance (FID) 分数,这使我们能够定量评估编辑场景的质量和保真度。

4.2 量化评估

表 1 和表 2 显示了 Edit-DiffNeRF 在实际场景中相对于其他最先进方法的优越性。我们观察到,通过学习最佳的 delta 模块来编辑潜在语义空间,我们的 Edit-DiffNeRF 可以具有明显更高的 CLIP 文本-图像方向相似性和一致性。在图 3 中,我们还绘制了两个场景的 CLIP 方向一致性和 CLIP 文本-图像方向相似度之间的权衡。由于这两个指标相互竞争,当输出图像与所需编辑的对齐程度增加时,与输入图像的一致性会降低。从图 3 中可以看出,与最近最先进的方法 Instruct-NeRF2NeRF相比,我们的 Edit-DiffNeRF 获得的 CLIP 方向一致性明显更高,即使具有类似的 CLIP 文本-图像方向相似度价值观。此外,我们观察到,当场景的训练数据集较小(由少于 100 个图像组成)时,Instruct-NeRF2NeRF和我们的方法都会产生相似的结果,但方向相似性较低。

表1:实拍场景的定量评价

表2:FID 分数

图 3:我们绘制了 CLIP 方向一致性和 CLIP 文本-图像方向相似度之间的权衡。对于这两个指标来说,越高越好。

在表 2 中,我们报告了用于测量编辑前后合成视图的图像质量的 FID 分数。为了计算渲染图像的 FID 分数,我们使用了一组随机选择的 2000 个测试图像。随后,我们对这些图像应用类似于 CLIP-NeRF的各种编辑指令,并重新计算编辑结果的 FID 分数。在椅子数据集上,当在椅子数据集上进行评估时,EditNeRF在重建方面表现出比 CLIP-NeRF更高的性能。然而,值得注意的是,编辑后的图像质量明显下降。当在汽车数据集上进行评估时,CLIP-NeRF在编辑前后的重建质量方面比 EditNeRF表现出显着的改进。最后,与这两种方法相比,我们的Edit-DiffNeRF不仅大大提高了整体质量,而且还有效地保留了编辑过程后的图像质量。

编辑结果。 我们在图 4 中展示了从不同视图渲染的真实捕获场景的编辑结果。为了进行比较,我们还展示了编辑前相同视图下的原始 NeRF 渲染结果。在图4中,第一组是露营地场景。我们通过文本指令“让它看起来像刚下过雪”来编辑它。

图 4:与一系列最新最先进方法的视觉比较。

一方面,如图 4 所示,通过 InstructPix2Pix生成的结果对于到底要编辑什么内容存在模糊性,并且在不同视图之间表现出相当大的不一致。另一方面,虽然 Instruct-NeRF2NeRF似乎产生了可行的视图,但其中一些视图往往表现出显着的方差,导致 3D 场景模糊且高度扭曲。相反,通过我们的 Edit-DiffNeRF 获得的渲染多个视图显示了其有效编辑现实世界场景的能力,通过提供照片级真实感结果同时保持 3D 一致性,超越了以前的方法所取得的成就。在图4的第二组中,图像是通过“删除熊雕像和舞台”指令进行编辑的。从图中可以看出,InstructPix2Pix和Instruct-NeRF2NeRF都无法有效地获得预期的编辑结果。这种限制主要是由于 InstructPix2Pix 无法处理大型空间操作。

此外,我们在图 5 和图 6 中展示了额外的实验结果以及 NeRF 渲染结果,以进一步说明我们的发现。图 5 中的比较是通过文本指令“将其变成红色前轮和绿色后轮的汽车”进行的。值得注意的是,CLIP-NeRF无法处理细粒度的编辑。相反,我们编辑的结果(右栏)与指令非常一致。在图 6 中,我们可以进一步观察 Instruct-NeRF2NeRF中是否存在不一致的编辑,这些编辑无法在 3D 场景中整合(中间列)。相反,我们的模型提供了一个卓越的解决方案(右列),呈现一致的结果并允许进行重要的视觉操作。

图 5:CLIP-NeRF 和我们的 Edit-DiffNeRF 之间的编辑结果比较。

图 6:与 Instruct-NeRF2NeRF的比较。编辑是通过文本指令“给他一件格子夹克”进行的。

4.3 消融实验

我们通过在我们的方法和其他几个变体之间进行全面的比较分析来验证 Edit-DiffNeRF 的有效性。

Delta 模块的影响。 我们首先将我们的模型与 Instruct-NeRF2NeRF进行比较。我们使用发布的官方代码,并在InstructPix2Pix中微调整个UNet模型来编辑真实图像。表 3 表明我们提出的 Edit-DiffNeRF 在所有方面都优于 InstructPix2Pix。我们将这种优势归因于这样一个事实:针对每个场景微调整个模型具有挑战性,从而导致较差的结果。

多视图语义一致性损失的影响。 此外,我们还进行了排除一致性损失 Lc 的实验。从表 3 中可以看出,即使没有多视图语义一致性损失 Lc,我们的方法仍然优于带有经过训练的 delta 模块的 Instruct-NeRF2NeRF 。然而,如果没有这种损失,我们的方法仍然缺乏 3D 一致性,并且仅实现了轻微的性能提升。相比之下,合并这种损失会显着改善结果。

表 3:消融研究结果

5.结论和未来的工作

在本文中,我们概述了使用预训练的 2D 扩散模型实现精确 NeRF 场景修改的潜在挑战。为了解决这个限制,我们引入了 Edit-DiffNeRF 框架,该框架专门针对编辑预训练扩散模型中的语义潜在空间。具体来说,Edit-DiffNeRF 框架旨在使用 delta 模块学习潜在语义方向,在提供的文本指令的指导下,允许通过 NeRF 训练在 3D 场景中有效整合这些指令。此外,我们引入了多视图语义一致性损失,以确保不同视图之间的语义一致性。大量的实验表明,我们的方法能够一致且有效地实现对各种真实捕捉场景的编辑。此外,它还显着提高了编辑结果的文本图像一致性。

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

回复“NeRF”获取全部118篇论文资料合集

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

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

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

相关文章

“不得了·放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开

“不得了放飞杯” 2023年四川省健身健美锦标赛启动在成都隆重召开 为了更好地推动四川省健身健美运动的普及和发展,结合《四川全民健身实施计划》的现状,适应新时代健身私教服务产业的发展需求,由中国健美协会指导,四川省健美健美…

使用SpringBoot集成FastDFS

使用SpringBoot集成FastDFS 这篇文章我们介绍如何使用 Spring Boot 将文件上传到分布式文件系统 FastDFS 中。 1、FastDFS FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问 &#xff0…

[修订版][工控]SIEMENS S7-200 控制交通红绿灯程序编写与分析

下载地址>https://github.com/MartinxMax/Siemens_S7-200_Traffic_Light 特别鸣谢接线过程实验目的题目要求I/O分配公式公式套用示例 程序分析分割块[不是必要的,自己分析用]左侧梯形图 [B1-B5]B1 [东西绿灯亮25s]B2 B3 B23 [东西绿灯闪烁3s]B4 [东西黄灯亮2s]B5 [东西红灯…

Labelme加载AI(Segment-Anything)模型进行图像标注

labelme是使用python写的基于QT的跨平台图像标注工具,可用来标注分类、检测、分割、关键点等常见的视觉任务,支持VOC格式和COCO等的导出,代码简单易读,是非常利用上手的良心工具。 第一步:   下载源码进行安装。 g…

float和double(浮点型数据)在内存中的储存方法

作者:元清加油 主页:主页 编译环境:visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位,后面便是数值位 那么浮点数在内存中是怎么储存的呢?我们先来看一个例子&am…

Python----函数的不定长参数--包裹位置参数*args、包裹关键字参数**kwargs

不定长参数 也叫 可变参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便。 相关链接:Python---函数的参数类型--…

带你用uniapp从零开发一个仿小米商场_1.环境搭建

uniapp 介绍 uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个…

【Python篇】详细讲解正则表达式

文章目录 🌹什么是正则表达式🍔语法字符类别重复次数组合模式 ✨例子 🌹什么是正则表达式 正则表达式(Regular Expression),简称为正则或正则表达式,是一种用于匹配、查找和操作文本字符串的工…

还在犹豫Harmony要不要学?已有170万人参加官方培训

鸿蒙这么火,要不要学? 两百强的 App厂商,大部分接受了与鸿蒙的合作,硬件也有非常多与鸿蒙合作的厂商。鸿蒙的合作企业基本已经覆盖整个互联网客户的主流需求;所以鸿蒙的崛起不过是早晚的问题。随着鸿蒙4.0的升级&…

Linxu 进程替换

进程替换的背景: 进程的替换我们需要调用execl这个接口,exxecl在3号手册,属于系统接口。 调用系统命令 execl 为了方便理解execl的作用,我们写一个程序: 单进程替换 我们发现运行结果是通过c库里的exec接口把系统命令 "l…

3 Unsupervised learning recommenders reinforcement learning

文章目录 Week1Unsupervised LearningClusteringK-meansprincipleOptimization objectiveInitializing K-meanschose the number of clusters Anomaly DetectionFind unusual eventsAlgorithmchose epsilonAnomally Detection vs Supervised learningfeatures Week2Recommender…

LeetCode Hot100 114.二叉树展开为链表

题目: 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

力扣114. 二叉树展开为链表(java,用树模拟链表)

Problem: 114. 二叉树展开为链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 1.展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左…

C/C++ 通过SQLiteSDK增删改查

SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统,SQLite是一个库,直接与应用程序一同编译和链接,无需单独的数据库服务器进程,实现…

FFmpeg命令分隔视频

有一个视频如a.mp4,此视频采用帧率为30生成,共有299帧,这里通过FFmpeg命令分隔成1秒一个个的小视频,即每个小视频帧数为30帧。 用到的FFmpeg参数如下所示: (1).-i:指定输入视频文件的名称; (2).-c:指…

BUUCTF [MRCTF2020]Ez_bypass 1

题目环境:F12查看源代码 I put something in F12 for you include flag.php; $flagMRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}; if(isset($_GET[gg])&&isset($_GET[id])) { $id$_GET[id]; $gg$_GET[gg]; if (md5($id) md5($gg) && $id ! $gg) { …

Node.js下载安装及配置镜像源

一、进入官网地址下载安装包 https://nodejs.org/dist 选择对应你系统的Node.js版本 这里我选择的是Windows系统、64位 二、安装程序 (1)下载完成后,双击安装包,开始安装Node.js (2)直接点【Next】按钮,此处可根据…

终于来了,Runway gen2 制作AI视频的全功能超详细使用教程

最近有好几个学员私信我们,让我出一期Runway完整的使用教程,刚好11月Runway对外发布运动涂笔等新功能,那么今天就给大家安排一期全功能,超详细的从Gen1到Gen2的使用教程。 Runway 是国外一家在线视频剪辑制作网站,作为…

el-uploader同一文件无法上传问题

在上传成功和失败的回调方法中,吊用一下clearFiles方法。 this.$refs.upload.clearFiles();

7、独立按键控制LED状态

按键的抖动 对于机械开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个开关在闭合时不回马上稳定地接通&#xff0c;在断开时也不会一下子断开&#xff0c;所以在开关闭合及断开的瞬间会伴随一连串的抖动 #include <REGX52.H…