[CVPR 2024] GaussianEditor :第一个基于Gasussian Splatting的3D编辑

前言

研究牲刚开学被老师分到自己一个人做3DGS + diffusion了,开始看论文。
相同专业的可以一起交流啊

https://arxiv.org/pdf/2311.14521.pdf

1 Introduction

鉴于这些挑战,我们的研究重点是开发一种先进的三维编辑算法。该算法旨在灵活、快速地编辑三维场景,同时整合隐式编辑(如基于文本的编辑)和显式控制(如使用边界框对特定区域进行修改)。为了实现这些目标,我们选择了高斯拼接(GS)[14],因为它具有实时渲染和类似点云的显式表示法
然而,编辑高斯拼接(GS)[14] 面临着独特的挑战。一个主要问题是缺乏准确识别目标高斯的有效方法,而这对精确可控的编辑至关重要。此外,文献[7, 43, 50]还指出,使用高度随机的生成指导(如分数蒸馏采样[35])来优化高斯拼接(GS)会带来巨大的挑战一种可能的解释是,与神经网络缓冲的隐式表征不同,GS 直接受到损失随机性的影响。这种直接暴露会导致不稳定的更新,因为高斯的属性在训练过程中会直接改变。此外,GS 的每个训练步骤都可能涉及到大量高斯点的更新这一过程没有神经网络式缓冲机制的调节作用。因此,三维高斯场景的过度流动性阻碍了它在使用生成指导训练时收敛到像隐式表征那样精细结果的能力。
为了解决这些问题,我们在本作品中提出了高斯编辑器(GaussianEditor),一种新颖、快速、高度可控的高斯拼接三维编辑算法。GaussianEditor 可以在几分钟内满足各种高质量的编辑需求。我们方法的一个主要特点是引入了高斯语义跟踪,从而实现了对高斯拼接(GS)的精确控制。高斯语义跟踪能在训练过程中的每个时刻持续识别出需要编辑的高斯。这与传统的三维编辑方法形成鲜明对比,后者往往依赖于静态的二维或三维掩码。随着三维模型的几何形状和外观在训练过程中不断变化,这些遮罩的有效性也会降低高斯语义追踪是通过将
二维分割掩模解投影为三维高斯并为每个高斯分配一个语义标签来实现的
随着高斯在训练过程中的演变,这些语义标签可以跟踪需要编辑的特定高斯。我们的高斯追踪算法可确保只修改目标区域,从而实现精确可控的编辑
此外,为了解决高斯拼接法(GS)在高度随机生成指导下难以拟合精细结果这一重大挑战,我们提出了一种新颖的高斯表示法:分层高斯拼接法(HGS)。在 HGS 中,高斯是根据它们在训练过程中的多个致密化过程中的序列组织起来的。在较早的密集化阶段形成的高斯被视为较早的一代,并受到更严格的限制,目的是保持其原始状态,从而减少其流动性。相反,在较晚阶段形成的高斯则被视为年轻一代,受到的约束较少或没有约束,因而具有更强的适应性。HGS 的设计有效地调节了 GS 的流动性,既对老一代施加了限制,又保留了新一代的灵活性。这种方法可以不断优化,以获得更好的结果,从而模拟通过神经网络在隐式表征中实现的缓冲功能。我们的实验还证明,HGS 更善于适应高度随机的生成指导
最后,我们专门设计了一个用于高斯飞溅(GS)的3D修复算法。如图1所示,我们成功地从场景中移除了特定对象,并将新对象无缝地集成到指定区域。对于对象移除,我们开发了一个专门的局部修复算法,可以有效地消除对象和场景相交处的伪影。(PS:之前感觉GS不好编辑就是因为,去掉一个Gaussian,会影响很多地方。可能会导致伪影。)对于添加对象,我们首先请求用户提供提示和用于GS的特定视图的2D修补掩模。随后,我们使用2D修复方法来生成要添加的对象的单视图图像。然后使用图像到3D转换技术。3D网格随后被转换为HGS表示并进行细化。最后,将此细化表示连接到原始GS中。上述整个修复过程在5分钟内完成。(PS:斯,不能直接生成GS。曲线救国)

GaussianEditor提供快速、可控和多功能的3D编辑。单个编辑会话通常只需5-10分钟,比以前的编辑过程快得多。 我们的贡献可以概括为四个方面:
1。我们引入了高斯语义跟踪,使更详细和有效的编辑控制。
2.我们提出了分层高斯溅射(HGS),一种新的GS表示能够更稳定地收敛到精细的结果下,高度(highly)随机生成的指导。
3.我们专门设计了一个用于高斯飞溅的3D修复算法,它允许快速删除和添加对象。
4.大量的实验表明,我们的方法优于以前的3D编辑方法的有效性,速度和可控性。

2 Related Works

2.1 3D Representations

已经提出了各种3D表示来解决不同的3D任务。开创性的工作,神经辐射场(NeRF)[27],采用体积渲染,并且由于仅使用2D监督来实现3D优化而受到欢迎。然而,优化NeRF可能是耗时的,尽管它广泛用于3D重建[3,6,12,20]和生成[21,34]任务。 虽然已经努力加速NeRF训练[28,39],但这些方法主要集中在重建设置上,使生成设置不太优化。常见的空间修剪技术不能有效地加速生成设置。
最近,3D高斯溅射[14]已经成为NeRF的替代3D表示,在3D和4D重建任务中展示了令人印象深刻的质量和速度[14,25,46,49]。它也吸引了相当大的研究兴趣,在生成领域[7,43],其高效的可微分渲染实现和模型设计有助于快速训练,而无需空间修剪。 在这项工作中,我们率先将3D高斯溅射适应于3D编辑任务,旨在实现快速可控的3D编辑,在这种背景下首次利用这种表示的优势。

2.2 3D Editing

由于神经场的形状和外观之间错综复杂的相互作用,编辑神经场本身就具有挑战性。EditNeRF [23]是这一领域的开创性工作,因为他们通过调节潜在代码来编辑神经场的形状和颜色。此外,一些作品[1,10,44,45]利用CLIP模型通过使用文本提示或参考图像来促进编辑。 另一条研究路线集中在预定义的模板模型或骨架,以支持特定类别中的重新摆姿势或重新渲染等操作[29,32]。基于几何的方法[19,47,48,52]将神经场转换为网格,并将网格变形与隐式场同步。此外,3D编辑技术涉及将2D图像操作,如修复,神经领域的训练[18,22]。 Concurrent works [30,55]利用静态2D和3D掩码来约束NeRF的编辑区域。然而,这些方法有其局限性,因为3D模型的训练是一个动态过程,静态掩码无法有效地约束它。相比之下,我们的研究采用高斯语义跟踪来跟踪整个训练过程中的目标高斯。

3 Preliminary

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

3.1 3D Gaussian Splatting

GS(Gaussian Splatting)[14]使用点云来表示显式的3D场景,其中高斯用于描述场景的结构。在这种表示中,每个高斯由一个中心点(表示为x)和协方差矩阵定义。中心点x通常称为高斯均值:
在这里插入图片描述
协方差矩阵R可以分解为旋转矩阵R和缩放矩阵S,用于可微优化:
为了渲染新的视点,如[51]中所述的溅射方法用于在相机平面上定位高斯。该技术最初在[56]中提出,涉及由W表示的观察变换投影变换的仿射近似的雅可比矩阵J。使用这些,相机坐标中的协方差矩阵λ ′确定如下:
在这里插入图片描述
总而言之,模型中的每个高斯点都由一组属性表征:它的位置记为x ∈ R3,它的颜色用球谐系数c ∈ Rk表示(其中k表示自由度)、其不透明度α ∈ R、旋转四元数q ∈ R4和缩放因子s ∈ R3。特别地,对于每个像素,所有高斯的颜色和不透明度基于如等式1所述的高斯表示来计算。
重叠像素的N个有序点的混合过程遵循特定的公式
图2.高斯语义跟踪的图示。右图中的红色蒙版表示目标高斯的投影。值得注意的是,该投影在整个训练过程中动态变化,确保其在整个训练期间的有效性。
在这里插入图片描述
其中ci和αi分别表示给定点的颜色和密度。这些值由具有协方差矩阵的高斯确定,然后由可优化的逐点不透明度和球谐(SH)颜色系数缩放。

3.2 基于扩散的编辑指导

最近的进展已经看到了许多将2D扩散过程提升到3D的作品,并将这些过程广泛应用于3D编辑领域。大体上,这些作品可以分为两种类型。
第一种类型[8,26,30,35,41,55],以Dreamfusion [35]引入SDS损失为例,涉及馈送当前3D模型的噪声渲染,沿着其他条件,转化为2D扩散模型[38]。然后由扩散模型生成的分数指导模型更新的方向
第二种类型[5,11,36,42]专注于基于给定的提示进行2D编辑,用于3D模型的多视图渲染。这种方法创建多视图2D图像数据集,然后将其用作训练目标以提供对3D模型的指导。
我们的工作集中在利用高斯飞溅的显式表示的示例性属性来增强3D编辑。因此,我们不设计特定的编辑指导机制,而是直接使用上述指导方法。这两种类型的指导都可以应用于我们的方法中。为了简单起见,我们将指导统一表示为D。给定3D模型的参数Θ,沿着渲染的相机姿态p提示e-,来自2D扩散先验的编辑损失可以用公式表示如下:
在这里插入图片描述

4 Method

我们将高斯溅射(GS)上的3D编辑任务定义如下:给定提示y和由3D高斯表示的3D场景,由Θ表示,我们将高斯溅射(GS)上的3D编辑任务定义如下:给定提示y和由3D高斯表示的3D场景,由Θ表示,其中每个其中Θi = {Xi,si,qi,αi,ci}表示第i个高斯的参数,如第3.1节所述,目标是实现编辑的3D高斯,称为Θy其与提示y的规范对齐或遵守(adheres)
然后,我们将介绍我们在GS上执行编辑任务的新框架。我们首先在第4.1节介绍高斯语义跟踪,沿着在第4.2节介绍一种新的表示方法,称为分层高斯溅射(HGS)。 GS语义跟踪支持GS的精确分割和跟踪,便于可控编辑操作。与标准GS相比,HGS表示在生成指导中表现出更强的抗随机性,更擅长适应各种编辑场景。此外,我们专门为GS设计了3D修复,包括对象移除和添加(第4.3节)。

4.1 Gaussian Semantic Tracing

在3D编辑中的先前工作[30,55]通常利用静态2D或3D掩模(masks)仅在掩模像素内应用损失,从而将编辑过程约束为仅编辑所需区域。然而,这种方法具有局限性。由于3D表示在训练期间动态变化,静态分割掩模将变得不准确甚至无效。此外,在NeRF编辑中使用静态蒙版来控制渐变会带来很大的限制,因为它将编辑严格限制在蒙版区域内。这种限制会阻止编辑的内容自然地延伸到蒙版之外,从而将内容“锁定”在指定的空间边界内
即使实现了语义NeRF [54],梯度控制仍然只在训练的最初阶段有效,因为对NeRF的持续更新导致语义场的准确性损失
图4.用于对象移除的3D修复。通常,基于高斯语义掩码移除目标对象会在目标对象和场景之间的界面处产生伪影。为了解决这个问题,我们使用2D修复方法生成修复图像,并使用均方误差(MSE)损失进行监督。整个过程仅需两分钟。
为了解决上述问题,我们选择高斯溅射(GS)作为我们的3D表示,因为它的显式性质。这允许我们直接为每个高斯点分配语义标签,从而促进3D场景中的语义跟踪
具体来说,我们通过添加一个新的属性m来增强3D Gaussians Θ,其中mij表示第i个高斯点和第j个语义标签的语义高斯掩码。通过该属性,我们可以通过选择性地只更新目标3D Gaussians来精确控制编辑过程。 在加密过程中,新加密(densified)的点继承其父点的语义标签。这确保了我们在整个训练过程中的每一刻都有一个准确的3D语义掩码。
如图2所示,高斯语义跟踪允许在训练期间连续跟踪每个高斯类别,以适应其不断变化的属性和数量。 该特性至关重要,因为它允许选择性地应用梯度,致密化和修剪与指定类别相关的高斯模型。此外,它仅通过渲染目标对象来促进训练,显著加快复杂场景中的过程语义高斯掩码m用作动态3D分割掩码,随着训练而演变,允许内容在空间中自由扩展。 这与NeRF形成对比,其中内容被限制在固定的空间区域。
接下来,我们讨论高斯溅射反投影,我们提出的方法来获得语义高斯掩码m。 对于一组3D高斯Θ,我们从多个视点渲染它们以生成一系列渲染I。然后使用2D分割技术[17]处理这些渲染以获得2D分割掩码M,每个Mj表示第j个语义标签。 为了获得每个高斯的语义标签,我们通过逆渲染将已设定的2D语义标签反投影回高斯。具体地说,我们为每个高斯保留一个权重和一个计数器。对于语义映射上的像素p,我们将语义标签反投影回高斯,通过
在这里插入图片描述
其中w j i表示第i个高斯对于第j个语义标签的权重,而oi(p)、T j i(p)和Mj(p)分别表示第i个高斯的不透明度、来自像素p的透射率和像素p的语义掩码。我们基于高斯的平均权重是否超过手动设置的阈值来确定高斯是否属于第j语义类。
整个标记过程非常快,通常不到一秒。一旦完成语义标签分配,整个高斯场景就会被我们解析,从而使各种操作成为可能。这些操作包括手动更改颜色,移动特定类别的属性以及删除某些类别。值得注意的是,2D扩散引导通常难以有效地编辑复杂场景中的小对象。由于高斯语义跟踪,我们现在可以独立渲染这些小对象并将其输入到2D扩散模型中,从而实现更精确的监管

4.2 分层高斯溅射

vanilla GS [16] 在重建任务中的有效性在于由 SFM [40] 导出的点云提供的高质量初始化,再加上地面实况数据集的稳定监督。然而,在生成领域,情况发生了变化。在之前涉及文本到三维和图像到三维的 GS 工作中[7, 43, 50],GS 由于其类似点云表示的性质,在面对生成指导的随机性时表现出了局限性。与基于神经网络的隐式表示不同,GS 的这种不稳定性主要是由于其直接暴露于损失函数的随机性。GS 模型在每个训练步骤都会更新大量高斯点缺乏神经网络的记忆和调节能力。这导致更新不稳定,使 GS 无法实现基于神经网络的隐式表征中的详细结果,因为 GS 过度的流动性fluidity hampers阻碍了其在生成训练中的收敛性。为了应对这些挑战,我们引入了层次高斯拼接法(HGS),这是一种结构化的 GS 表示法,更适合生成和编辑场景HGS 根据产生特定高斯点的密集化轮将高斯分为不同的世代。在编辑训练过程中,第 k 轮密集化产生的点被标记为第 k 代。
图 5. 定性比较。值得注意的是,我们对编辑区域(人的整个身体)的控制程度很高。背景和其他非目标区域基本上不受影响,而 Instruct-Nerf2Nerf [11]则不同,整个场景都会发生变化。 DS 和 GaussianEditor-iN2N 分别表示我们利用 delta 去噪分数 [13] 和 Instruct-Nerf2Nerf [11] 作为编辑的指导。
随后,我们对不同世代的高斯施加不同的限制,以控制它们的灵活程度。代数越长,施加的约束就越强。**锚点损失(anchor loss)**就是用来执行这些约束的。在训练开始时,HGS 会记录所有高斯的属性作为锚点。然后更新这些锚点,以反映每次密集化过程中高斯的当前状态。在训练过程中,采用锚点状态与当前状态之间的 MSE 损失来确保高斯不会偏离各自的锚点太远
在这里插入图片描述

其中,n 表示高斯总数,P 表示当前高斯的某种属性,包括 x、s、q、α、c 集合中的元素。术语 λi 表示应用于第 i 个高斯的锚损失的强度,根据其生成情况而变化。总体训练损失定义为
在这里插入图片描述
在这个等式中,λP 表示应用于属性 P 的锚损失强度,LEdit 是第 3.2 节中定义的编辑损失。HGS 的这种分代设计避免了 GS 在面对随机损失时灵活性过大的问题。每一次增密,前几代高斯的锚损失权重 λi 都会增加。因此,前几代高斯的流动性会逐渐降低,直至接近固化。这种方法可以确保在随机损耗的情况下形成稳定的几何图形依靠来自新密集化的几乎无约束的高斯来雕刻细节。此外,这种应用锚损失的方法还能有效满足各种编辑需求。同样,如果在编辑过程中不想改变颜色或几何形状,也可以对这些特定属性应用更强的锚损失。此外,为了解决人工确定致密化阈值的难题,我们根据百分比标准来调节致密化过程。在这种方法中,在每一步致密化过程中,我们只对三维位置梯度在前 k% 范围内的高斯进行选择性致密化。事实证明,这种策略比在层次高斯拼接(HGS)框架中直接设置阈值更易于管理和直观

4.3 3D 油画

对象移除。简单地去除由掩码识别的高斯可能会导致伪影,尤其是在物体与其他高斯相交的界面处。为了解决这个问题,我们采用了二维内绘技术,为填充这些区域提供指导。然而,有效的二维内绘需要精确的遮罩来提供更好的指导。为了生成这些掩码,在删除之后,我们使用 KNN 算法来识别与被删除的高斯最接近的高斯这些高斯可能位于界面处。然后将这些高斯投影到不同的视图上。随后,我们对掩膜进行扩张,并修复任何漏洞,以准确地表示界面区域,从而为边界区域创建一个精致的掩膜。整个物体去除过程通常只需两分钟。
图 6. 高斯编辑器的广泛成果。我们的方法能够胜任各种编辑任务,包括人脸和场景编辑。在人脸编辑中,我们使用高斯语义跟踪将编辑区域限制在人脸上,确保不需要的区域保持不变。最左边一列显示的是原始视图,右边三列显示的是编辑后的图像。
对象整合。我们将这项任务定义如下: 在三维高斯图 θ 中,给定一个相机姿态 p从该视角拍摄的相应渲染图 I,用户在 I 上提供一个二维遮罩 M,指明他们希望涂抹的区域。此外,我们还会提供一个提示 y 来指定涂色的内容。然后,我们更新 θ 以满足涂抹请求。在给定 I、M 和 y 的情况下,首先要利用二维内画扩散模型生成二维内画图像 I M y I^My IMy。随后,根据 [33] 方法生成的 I M y I^My IMy中的前景物体被分割并输入到 [24] 方法中的图像到三维方法中,以生成粗略的三维网格。然后将粗网格转换为三维高斯 θ y θ_y θy并使用第 4.2 节中详述的损耗方法进行细化。为了使 θ y θ_y θy 的坐标系与 θ 一致,首先使用 [37] 中的技术估算 I M y I^My IMy 的深度。然后使用最小二乘法将深度与θ 在摄像机姿态 p 下渲染的深度图对齐。有了这种对齐方式,我**们就能在 θ 的坐标系中准确地确定前景物体的坐标和比例。**将 θ y θ_y θy 转换到 θ 的坐标系后,我们只需将它们串联起来,就能得到最终的内绘三维高斯图。值得注意的是,由于我们采用了高效的设计,整个对象合并过程可在大约 5 分钟内完成。

5 Experiments

5.1 Implementation Details

我们利用 [15] 中高度优化的渲染器实现高斯渲染。本作品中使用的所有原始 3D 高斯均采用 [15] 中描述的方法进行训练。我们的实验是在单个我们利用 [15] 中高度优化的渲染器实现高斯渲染。本作品中使用的所有原始 3D 高斯均采用 [15] 中描述的方法进行训练。我们的实验是在单个在编辑大型场景时,编辑过程中使用的摄像机姿态是从最初用于重建的多视角图像数据集的子集中选择的。在编辑目标对象的情况下,由于 4.1 节中详细介绍的 GS 分割功能,我们会生成一组紧紧围绕分割对象的摄像机姿势。采用这种方法是为了在渲染中提高物体的分辨率,从而增强编辑过程的效果。此外,当目标对象与场景的关联度较低时,我们会选择只渲染目标对象,以减少计算负荷。根据场景的复杂程度,我们在实验中使用的摄像机姿势数量从 24 个到 96 个不等。编辑过程受指定提示和场景复杂程度的影响,通常需要优化 500-1000 个步骤,总共耗时约 5-10 分钟。关于三维绘制以纳入物体,如第 4.3 节所述,使用文献[24]中的方法生成三维网格大约需要 3 分钟,将网格转换为三维高斯细化还需要 2 分钟,而两个高斯的合成过程不到 1 秒钟。5.2. 定性比较 如图 5 所示,GaussianEditor-iN2N 在编辑质量和可控性方面都优于其他方法。Instruct-Nerf2Nerf在生成细节不够丰富的编辑内容的同时,还无法控制编辑内容
图 7. 分层高斯喷溅(HGS)消融研究。提示:让草着火。即使用提示指定了编辑区域,像 InstructPix2Pix [4] 这样的生成方法也倾向于编辑整个 2D 图像。在没有 HGS 的情况下,高斯倾向于通过在整个场景中扩散和致密化来适应这种全图像编辑,从而导致图像不可控制的致密化和模糊。然而,有了 HGS,这种扩散就会得到有效抑制。
图 7. 分层高斯喷溅(HGS)消融研究。提示:让草着火。即使用提示指定了编辑区域,像 InstructPix2Pix [4] 这样的生成方法也倾向于编辑整个 2D 图像。在没有 HGS 的情况下,高斯倾向于通过在整个场景中扩散和致密化来适应这种全图像编辑,从而导致图像不可控制的致密化和模糊。然而,有了 HGS,这种扩散就会得到有效抑制。

5.2 定性比较

如图 5 所示,GaussianEditor-iN2N 在编辑质量和可控性方面都优于其他方法。Instruct-Nerf2Nerf在生成细节不足的编辑内容的同时,还无法控制编辑区域。与 Instruct-pix2pix [4]相比,GaussianEditorDDS 由于== DDS 损失[13]所提供的引导控制更具挑战性==,往往会导致色彩过于饱和,编辑结果不够精确。此外,我们的方法对编辑区域的控制也非常出色。这是通过高斯语义跟踪实现的,它能在每个训练步骤中识别出需要编辑的高斯,例如图 5 中的整个人体。值得注意的是,在 InstructNerf2Nerf [11]中,静态 2D 或 3D 掩码的使用限制了编辑的空间自由度,因为被编辑对象的允许区域受到这些掩码的限制。此外,随着三维模型的几何形状和外观在训练过程中不断变化,静态遮罩的有效性也会降低。在图 6 中,我们展示了高斯编辑器可以适应各种场景,例如大场景编辑和面部交换。在大型场景中,我们没有应用高斯语义跟踪。但是,在面部交换时,我们追踪了与面部区域相对应的高斯,从而实现了可控且逼真的编辑。我们将在补充材料中提供更多定性结果,以展示我们方法的优势。

5.3 定量比较

在这里插入图片描述
表 1. 定量比较。高斯编辑器-iN2N 在用户研究评估和 CLIP 方向相似性[9] 指标上都表现优异。
如表 1 所示,我们对用户研究和 CLIP 方向相似性(如 InstructPix2Pix [4] 和 StyleGAN-Nada [9] 所示)进行了定量比较。GaussianEditor-iN2N 不仅在用户研究方面取得了优异成绩,而且在 CLIP 方向相似性方面也表现出色。此外,Instruct-Nerf2Nerf [11] 通常需要 30 多分钟才能完成一个场景的编辑,而我们的方法只需要 5 到 10 分钟。

5.4 消融研究

如图 7 所示,我们进行了分层高斯拼接(HGS)消融实验。如果没有 HGS,高斯往往会在整个场景中扩散和致密化,从而导致不可控的致密化图像模糊。这通常是由于 Instruct-Pix2Pix 等方法在使用提示定义编辑区域时倾向于编辑整个 2D 图像造成的。然而,**HGS 通过限制旧一代高斯的移动性,**有效地规避了这一问题,确保整个场景不会表现出过度的移动性。

6 结论

在我们的研究中,我们介绍了基于高斯拼接技术的创新三维编辑算法 GaussianEditor,该算法旨在增强控制和提高效率。我们的方法采用高斯语义跟踪来精确识别和定位编辑区域,然后采用分层高斯拼接(HGS)来平衡流畅性和稳定性,从而在随机引导下实现精细效果。此外,我们还为高斯拼接开发了专门的三维内绘算法,简化了对象移除和整合过程,大大缩短了编辑时间
局限性。与之前基于二维扩散模型的三维编辑工作类似,GaussianEditor 依靠这些模型提供有效的监督。然而,目前的二维扩散模型难以为某些复杂的提示提供有效的指导,从而导致三维编辑的局限性

  • 23
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值