AnimateDiff Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning 机器翻译

摘要

随着文本到图像模型(如稳定扩散[22])以及相应的个性化技术(如 DreamBooth [24] 和 LoRA [13])的发展,每个人都能以低廉的成本将自己的想象力转化为高质量的图像。因此,人们对图像动画技术提出了更高的要求,以进一步将生成的静态图像与动态图像相结合。在本报告中,我们提出了一个实用的框架,可将大多数现有的个性化文本到图像模型一劳永逸地制作成动画,从而节省了对模型进行特定调整的工作量。建议框架的核心是在冻结的文本到图像模型中插入一个新的初始化运动建模模块,并在视频剪辑中对其进行训练,以提炼出合理的运动先验。训练完成后,只需注入该运动建模模块,所有从相同基础 T2I 衍生出的个性化版本就能轻松成为文本驱动模型,生成多样化和个性化的动画图像。我们对动漫图片和现实照片中几个具有公共代表性的个性化文本到图像模型进行了评估,结果表明,我们提出的框架有助于这些模型生成时间上流畅的动画短片,同时保留其输出的领域和多样性。

1.介绍

近年来,文本到图像(T2I)生成模型[17, 21, 22, 25]在研究界内外受到了前所未有的关注,因为它们提供了高视觉质量和文本驱动的可控性,即为艺术家和业余爱好者等非研究人员用户提供了一个低门槛的切入点来进行人工智能辅助内容创作。为了进一步激发现有 T2I 生成模型的创造力,我们提出了几种轻量级个性化方法,如 DreamBooth [24] 和 LoRA [13],以便通过消费级设备(如配备 RTX3080 的笔记本电脑)在小型数据集上对这些模型进行定制化微调,之后这些模型就能生成质量显著提升的定制内容。这样,用户就能以极低的成本为预先训练好的 T2I 模型引入新的概念或风格,因此在 CivitAI [4] 和 Huggingface [8] 等模型共享平台上出现了大量由艺术家和业余爱好者提供的个性化模型。
虽然使用 DreamBooth 或 LoRA 训练的个性化文本到图像模型以其非凡的视觉质量成功吸引了人们的注意,但它们的输出结果都是静态图像。也就是说,它们缺乏时间自由度。考虑到动画的广泛应用,我们想知道能否将现有的大多数个性化 T2I 模型转化为既能生成动画图像又能保持原有视觉质量的模型。最近的一般文本到视频生成方法[7, 12, 33]建议在原始 T2I 模型中加入时间建模,并在视频数据集上对模型进行调整。然而,这对个性化 T2I 模型来说具有挑战性,因为用户通常无法负担敏感的超参数调整、个性化视频收集和密集的计算资源。
在这项工作中,我们提出了一种名为 AnimateDiff 的通用方法,它能够为任何个性化 T2I 模型生成动画图像,无需针对特定模型进行调整,并能随着时间的推移实现具有吸引力的内容一致性。鉴于大多数个性化 T2I 模型都源自相同的基础模型(如稳定扩散模型 [22]),而为每个个性化领域收集相应的视频是完全不可行的,因此我们转而设计一种运动建模模块,可以一次性为大多数个性化 T2I 模型制作动画。具体来说,在基础 T2I 模型中引入运动建模模块,然后在大规模视频片段[1]中进行微调,学习合理的运动先验。值得注意的是,基础模型的参数保持不变。经过微调后,我们证明衍生出的个性化 T2I 也能受益于学习到的运动先验,制作出流畅动人的动画。也就是说,运动建模模块能够将所有相应的个性化 T2I 模型制作成动画,而无需进一步收集数据或进行定制训练。
我们在几个具有代表性的 DreamBooth [24] 和 LoRA [13] 模型上对 AnimateDiff 进行了评估,这些模型涵盖了动漫图片和现实照片。无需特别调整,大多数个性化 T2I 模型都可以通过插入训练有素的运动建模模块直接制作成动画。在实践中,我们还发现虚无注意力在时间维度上足以让运动建模模块学习到适当的运动先验。我们还证明,运动先验可以推广到 3D 动画片和 2D 动漫等领域。为此,我们的 AnimateDiff 可以为个性化动画提供一个简单而有效的基线,用户只需承担个性化图像模型的成本,就能快速获得个性化动画。

2.相关工作

基于文本的图像生成

近年来,得益于大规模文本-图像配对数据[26]和扩散模型的强大功能[5, 11],文本-图像(T2I)扩散模型在研究界内外大受欢迎。其中,GLIDE [17] 在扩散模型中引入了文本条件,并证明分类器引导能产生视觉上更愉悦的结果。DALLE-2 [21] 通过 CLIP [19] 联合特征空间改进了文本图像对齐。Imagen [25] 结合了基于文本语料库预训练的大型语言模型 [20] 和级联扩散模型,实现了逼真的图像生成。潜在扩散模型[22],即稳定扩散模型(Stable Diffusion),提出在自动编码器的潜在空间中执行去噪过程,在保留生成图像的质量和灵活性的同时,有效减少了所需的计算资源。与上述在生成过程中共享参数的研究不同,eDiff-I [2] 针对不同的合成阶段训练了一组专门的扩散模型。我们的方法建立在预先训练好的文本到图像模型的基础上,可以适应任何基于调整的个性化版本。

个性化基于文本的图像生成

虽然已经有了许多强大的 T2I 生成算法,但由于需要大规模的数据和计算资源,个人用户仍然无法训练自己的模型,而这些资源只有大公司和研究机构才能获得。因此,人们提出了几种方法,使用户能够将新领域(主要由用户收集的少量图像代表的新概念或风格)引入预训练的 T2I 模型[6, 9, 10, 14, 16, 24, 27]。Textual Inversion [9] 建议为每个概念优化词嵌入,并在训练过程中冻结原始网络。DreamBooth [24] 是另一种对整个网络进行微调的方法,它以保留损失作为调节。Custom Diffusion [16] 只更新一小部分参数,并允许通过闭式优化进行概念合并,从而提高了微调效率。同时,DreamArtist[6] 将输入减少到单幅图像。最近,LoRA[13](一种为语言模型适配而设计的技术)被用于文本到图像模型的微调,并获得了良好的视觉质量。虽然这些方法主要基于参数调整,但也有一些作品尝试学习更通用的编码器来实现概念个性化[10, 14, 27]。
面对研究界的所有这些个性化方法,我们的工作只侧重于基于调整的方法,即 DreamBooth [24] 和 LoRA [13],因为它们保持了基础模型的特征空间不变。

个性化基于文本的动画生成

由于本报告中的设置是新提出的,目前针对它的工作很少。虽然利用时序结构扩展现有 T2I 模型以生成视频是一种常见的做法,但现有作品 [7, 12, 15, 28, 31, 33] 更新了网络中的全部参数,伤害了原始 T2I 模型的领域知识。最近,有几项研究报告了其在个性化 T2I 模型动画制作中的应用。例如,Tune-a-Video[31]通过轻微的架构修改和子网络调整解决了单次视频生成任务。Text2Video-Zero[15]引入了一种无需训练的方法,通过给定预定义仿射矩阵的潜在包装,将预先训练好的 T2I 模型动画化。Align-Your-Latents [3]是与我们的方法相近的一项最新研究成果,它是一种文本到视频(T2V)模型,在 T2I 模型中训练独立的时间层。我们的方法采用了简化的网络设计,并通过对许多个性化模型的广泛评估,验证了这种方法在动画个性化 T2I 模型中的有效性。

3.方法

在本节中,第 3.1 节首先介绍了一般文本到图像模型及其个性化变体的初步知识。接着,第 3.2 节介绍了个性化动画的表述和我们的方法的动机。最后,第 3.3 节介绍了 AnimateDiff 中运动建模模块的实际实现,该模块可对各种个性化模型进行动画制作,从而产生吸引人的合成效果。

3.1.预备

通**用文本到图像生成器。**我们选择稳定扩散(SD)这一广泛使用的文本到图像模型作为本研究中的通用 T2I 生成器。SD 基于潜在扩散模型(LDM)[22],在自动编码器(即 E(-) 和 D(-))的潜在空间中执行去噪过程,自动编码器以 VQ-GAN [14] 或 VQ-VAE [29] 的形式在大型图像数据集上进行预训练。这种设计在降低计算成本的同时,还能保持较高的视觉质量。在潜在扩散网络的训练过程中,输入图像 x0 最初由冻结编码器映射到潜在空间,得到 z 0    =    E ( x 0 ) z_{0}{\;=\;\mathcal{E}(x_{0})} z0=E(x0),然后由预定义的马尔可夫过程进行扰动:
q ( z t ∣ z t − 1 ) = N ( z t ; 1 − β t z t − 1 , β t I ) q(z_{t}\vert z_{t-1})=N(z_{t};\sqrt{1-\beta_{t}}z_{t-1},\beta_{t}I) q(ztzt1)=N(zt;1βt zt1,βtI)
for t = 1, . , T,T 为前向扩散过程的步数。超参数序列 βt 决定了每一步的噪声强度。上述迭代过程可以用封闭形式重新表述如下:
z t = α ˉ t z 0 + 1 − α ˉ t ϵ ,    ϵ ∼ N ( 0 , I ) z_{t}=\sqrt{\bar{\alpha}_{t}}z_{0}+\sqrt{1-\bar{\alpha}_{t}}\epsilon,\;\epsilon\sim\mathcal{N}(0,I) zt=αˉt z0+1αˉt ϵ,ϵN(0,I)
其中 α t ˉ = ∏ i = 1 t α t , α t = 1 − β t \bar{\alpha_{t}}=\prod_{i=1}^{t}\alpha_{t},\alpha_{t}=1-\beta_{t} αtˉ=i=1tαt,αt=1βt。稳定扩散采用 DDPM [5] 中提出的训练目标,可表示为
L = R E ( x 0 ) , y , ϵ D ( 0 , I ) , t [ ∣ ∣ ∣ ϵ − ϵ θ ( z t , t , τ θ ( y ) ) ∣ ∣ 2 ] \mathcal{L}=\mathbb{R}_{\mathcal{E}}(x_{0}),y,\epsilon\mathcal{D}(0,I),t\left[\left|\right|\left|\epsilon-\epsilon_{\theta}(z_{t}, t,\tau_{\theta}(y))\right|\right|^{2} ] L=RE(x0),y,ϵD(0,I),t[ϵϵθ(zt,t,τθ(y))2]
其中 y 是相应的文本描述,τθ(-) 是将字符串映射到向量序列的文本编码器。
在 SD 中,εθ(-) 采用改进的 UNet [23],包含四个下采样/上采样块和一个中间块,从而在网络的潜在空间中形成四个分辨率级别。每个分辨率层都集成了二维卷积层以及自关注和交叉关注机制。文本模型 τθ(-) 使用 CLIP [19] ViT-L/14 文本编码器实现。
image.png
个性化图像生成。随着普通图像生成技术的不断进步,个性化图像生成技术受到越来越多的关注。DreamBooth [24] 和 LoRA [13] 是两种具有代表性并被广泛使用的个性化方法。要在预先训练好的 T2I 模型中引入一个新领域(新概念、新风格等),一种直接的方法是在该特定领域的图像上对其进行微调。然而,直接调整模型而不进行正则化往往会导致过拟合或灾难性遗忘,尤其是在数据集较小的情况下。为了克服这一问题,DreamBooth [24] 使用稀有字符串作为指标来表示目标领域,并通过添加由原始 T2I 模型生成的图像来增强数据集。这些正则化图像是在没有指示符的情况下生成的,因此允许模型在微调过程中学会将罕见字符串与预期域联系起来。
另一方面,LoRA [13] 采用了不同的方法,试图对模型权重的残差进行微调,即训练 ∆W 而不是 W。微调后的权重计算公式为 W ′ = W + α∆W ,其中 α 是一个超参数,用于调整微调过程的影响,从而为用户控制生成结果提供了更大的自由度。为进一步避免过度拟合并降低计算成本, Δ W   ∈   R m × n \Delta W\ \in\ \mathbb{R}^{m\times n} ΔW  Rm×n被分解为两个低秩矩阵,即 Δ W   =   A B T \Delta W\,=\,A B^{T} ΔW=ABT,其中 A   ∈   R m × r A\ \in\ \mathbb{R}^{m\times r} A  Rm×r B ∈ R n × r ,   r ≪ m , n B\in\mathbb{R}^{n\times r},\,r\ll m,n BRn×r,rm,n。在实际应用中,只有变换块中的投影矩阵需要调整,这进一步降低了 LoRA 模型的训练和存储成本。
DreamBooth 会在训练完成后存储整个模型参数,相比之下,LoRA 模型的训练和用户间共享效率要高得多。

3.2. 个性化动画制作

个性化图像模型的动画制作通常需要使用相应的视频集进行额外的调整,因此更具挑战性。在本节中,我们的目标是个性化动画,其形式表述为:给定一个个性化的 T2I 模型(例如,由用户训练或从 CivitAI [4] 或 Huggingface [8] 下载的 DreamBooth [24] 或 LoRA [13] 检查点),目标是在保留其原始领域知识和质量的前提下,将其转化为动画生成器,且只需很少或无需训练成本。例如,假设一个 T2I 模型是为特定的二维动画风格而个性化设计的。在这种情况下,相应的动画生成器应能生成具有适当动作(如前景/背景分割、角色肢体动作等)的该风格的动画片段。为实现这一目标,一种简单的方法是通过添加时间感知结构和从大规模视频数据集中学习合理的运动先验来充实 T2I 模型 [7, 12, 33]。然而,对于个性化领域来说,收集足够多的个性化视频成本很高。同时,有限的数据会导致源域知识的丢失。因此,我们选择单独训练一个可通用的运动建模模块,并在推理时将其插入个性化 T2I。通过这种方法,我们避免了对每个个性化模型进行特定调整,并通过保持预先训练的权重不变来保留其知识。这种方法的另一个重要优势是,一旦模块训练完成,它就可以插入到基于相同基础模型的任何个性化 T2I 中,而无需进行特定调整,这一点在下面的实验中得到了验证。这是因为个性化过程几乎不会修改基础 T2I 模型的特征空间,这一点在 ControlNet 中也得到了验证。
image.png

3.3. 运动建模模块

**网络膨胀。**由于原始 SD 只能处理成批的图像数据,因此有必要对模型进行膨胀,使其与我们的运动建模模块相兼容,因为我们的运动建模模块以 "批×通道×帧×高×宽 "形状的 5D 视频张量作为输入。为此,我们采用了与视频扩散模型 [12] 相似的解决方案。具体来说,我们将原始图像模型中的每个二维卷积层和注意力层转化为仅有空间的伪三维层,方法是将帧轴重塑为批次轴,并允许网络独立处理每一帧。与上述方法不同的是,我们新插入的运动模块在每个批次中跨帧运行,以实现动画短片的运动平滑性和内容一致性。详情见图 3。
**模块设计。**在运动建模模块的网络设计方面,我们的目标是实现高效的跨帧信息交换。为此,我们选择香草时空变换器作为运动模块的设计。值得注意的是,我们还尝试了其他运动模块的网络设计,结果发现 vanilla 时空变换器足以对运动先验进行建模。我们将寻找更好的运动模块的工作留给了未来的工作。普通时空变换器由多个沿时空轴运行的自注意模块组成(图 3)。当通过我们的运动模块时,特征图的空间维度高度和宽度 z 将首先被重塑为批次维度,从而产生 f 帧长度的批次 × 高度 × 宽度序列。然后,重塑后的特征图将被投射并经过多个自我注意区块,即
z = A t e n t i o n ( Q , K , V ) = S o f t m a x ( Q K T d ) ⋅ V z=\mathrm{Atention}(Q,K,V)=\mathrm{Softmax}(\frac{Q K^{T}}{\sqrt{d}})\cdot V z=Atention(Q,K,V)=Softmax(d QKT)V
其中 Q = W Qz、K = W K z 和 V = W V z 是重塑特征图的三个投影。这一操作使模块能够捕捉到同一位置的特征在时间轴上的时间依赖性。为了扩大运动模块的感受野,我们在 U 型扩散网络的每个分辨率级别都插入了运动模块。此外,我们还在自我注意模块中添加了正弦位置编码[30],让网络能够感知当前帧在动画短片中的时间位置。为了在训练过程中无有害影响地插入模块,我们将时空变换器的输出投影层初始化为零,这是 ControlNet [32] 验证过的有效做法。
训练目标
我们的运动建模模块的训练过程类似于潜在扩散模型(Latent Diffusion Model)[22]。首先通过预先训练好的自动编码器将采样视频数据 x1:N 0 逐帧编码为潜码 z1:N0。然后,使用定义的前向扩散时间表对潜码进行噪声处理: z t 1 ; N = α t ˉ z 0 1 ; N + 1 − α t ˉ ϵ . z_{t}^{1;N}=\sqrt{\bar{\alpha_{t}}}z_{0}^{1;N}+\sqrt{1-\bar{\alpha_{t}}}\epsilon. zt1;N=αtˉ z01;N+1αtˉ ϵ.。用我们的运动模块充气的扩散网络将噪声潜码和相应的文本提示作为输入,并在 L2 损失项的鼓励下预测添加到潜码中的噪声强度。运动建模模块的最终训练目标是
KaTeX parse error: Got group of unknown type: 'internal'
请注意,在优化过程中,基础 T2I 模型的预训练权重将被冻结,以保持其特征空间不变。

4.实验

4.1. 实施细节

训练

考虑到大多数公开的个性化模型都是基于稳定扩散模型 v1,因此我们选择稳定扩散模型 v1 作为基础模型来训练运动建模模块。我们使用 WebVid-10M [1](一个文本-视频配对数据集)来训练运动模块。该数据集中的视频片段首先以 4 的步长进行采样,然后调整大小并居中剪切至 256 × 256 的分辨率。我们的实验表明,在 256 分辨率下训练的模块可以推广到更高分辨率。因此,我们选择 256 作为训练分辨率,因为它能保持训练效率和视觉质量的平衡。用于训练的视频片段的最终长度设定为 16 帧。在实验过程中,我们发现使用与训练基础 T2I 模型的原始时间表略有不同的扩散时间表,有助于获得更好的视觉质量,并避免低饱和度和闪烁等假象。我们假设,对原始时间表稍作修改,可以帮助模型更好地适应新任务(动画)和新数据分布。因此,我们使用了线性贝塔计划,其中 βstart = 0.00085,βend = 0.012,这与用于训练原始 SD 的计划略有不同。
在这里插入图片描述

image.png
image.png

评估

为了验证我们的方法的有效性和可推广性,我们从 CivitAI [4] 收集了几个具有代表性的个性化稳定扩散模型(表 1),CivitAI 是一个允许艺术家分享其个性化模型的公共平台。所选模型的领域从动漫和 2D 卡通图像到现实照片不等,为评估我们方法的能力提供了一个全面的基准。模块训练完成后,我们将其插入目标个性化模型,并通过设计的文本提示生成动画。我们不使用普通的文本提示,因为个性化模型只生成具有特定文本分布的预期内容,这意味着提示必须具有特定格式或包含 “触发词”。因此,我们在下文中使用模型主页提供的示例提示,以获得模型的最佳性能。

4.2. 定性结果

我们在图 4 中展示了不同模型的一些定性结果。由于篇幅有限,我们只显示了每个动画片段的四帧。我们强烈建议读者参阅我们的主页,以获得更好的视觉质量。从图中可以看出,我们的方法成功地为不同领域的个性化 T2I 模型制作了动画,从高度风格化的动漫(第 1 行)到逼真的照片(第 4 行),而且不会影响其领域知识。得益于从视频数据集中学习到的运动先验,运动建模模块可以理解文字提示,并为每个像素分配适当的运动,例如海浪的运动(第 3 行)和帕拉斯猫的腿部运动(第 7 行)。我们还发现,我们的方法可以将画面中的主要主体与前景和背景区分开来,营造出生动逼真的感觉。例如,第一个动画中的人物和背景花朵分别以不同的速度和模糊强度运动。我们的定性结果表明,我们的运动模块可用于在不同领域制作个性化 T2I 模型动画。通过在个性化模型中插入我们的运动模块,AnimateDiff 可以生成忠实于个性化领域的高质量动画,同时具有多样性和视觉吸引力。

4.3. 与基准比较

我们将我们的方法与 Text2Video-Zero [15]进行了比较,后者是一个免训练框架,可通过网络膨胀和潜翘扩展 T2I 模型,用于生成视频。虽然 Tune-a-Video 也可用于个性化 T2I 动画制作,但它需要额外的输入视频,因此不在比较之列。由于 T2V-Zero 不依赖于任何参数调整,因此采用它来制作个性化 T2I 模型动画非常简单,只需将模型权重替换为个性化权重即可。我们使用作者提供的默认超参数生成分辨率为 512 × 512 的 16 帧动画短片。
我们定性比较了基线方法和我们的方法在同一个性化模型和同一提示(“高山上的禁忌城堡,像素艺术,复杂细节2,hdr,复杂细节”)下的跨帧内容一致性。为了更准确地展示和比较我们的方法和基准线的细节,我们裁剪了每个结果的相同子部分并将其放大,如图 5 中每帧左/右下方所示。
如图所示,两种方法都保留了个性化模型的领域知识,其帧级质量不相上下。然而,T2V-Zero 的结果虽然在视觉上相似,但仔细比较后会发现缺乏跨帧的细粒度一致性。例如,前景岩石(第 1 行)和桌子上的杯子(第 3 行)的形状会随着时间的推移而变化。当动画作为视频片段播放时,这种不一致性会更加明显。相比之下,我们的方法能生成时间上一致的内容,并保持出色的流畅性(第 2、4 行)。此外,我们的方法还能显示出更恰当的内容变化,与摄像机的基本运动更加吻合,进一步突出了我们方法的有效性。这一结果是合理的,因为基线没有学习运动先验,而是通过基于规则的潜翘来实现视觉一致性,而我们的方法继承了大型视频数据集的知识,并通过高效的时间注意力来保持时间上的平滑性。
image.png

4.4. 消融研究

我们进行了一项消融研究,以验证我们在训练过程中对前向扩散过程中噪声时间表的选择。在上一节中,我们提到使用稍加修改的扩散时间表有助于获得更好的视觉质量。在实验中使用的三种扩散时间表中,时间表 A 是稳定扩散的预训练时间表;时间表 B 是我们的选择,它与 SD 的时间表在计算贝塔序列的方式上有所不同;时间表 C 用于 DDPM [5] 和 DiT [18],与 SD 的预训练时间表差异较大。
如图 6 所示,当使用 SD 的原始计划表(计划表 B)来训练我们的运动建模模块时,动画结果会出现颜色暗淡的假象。这种现象很不寻常,因为从直觉上讲,使用与预训练一致的扩散时间表应该有利于模型保留已经学习到的特征空间。随着时间表与预训练时间表的偏差越来越大(从时间表 A 到时间表 C),生成动画的色彩饱和度会增加,而运动范围会减小。在这三种配置中,我们的选择实现了视觉质量和运动流畅性的平衡。
image.png
基于这些观察结果,我们假设在训练阶段对扩散时间表稍作修改,有助于预训练模型适应新的任务和领域。我们框架的新训练目标是从扩散视频序列中重建噪声序列。这可以在不考虑视频序列时间结构的情况下按帧进行,而这正是 T2I 模型预先训练的图像重建任务。使用相同的扩散时间表可能会误导模型,使其认为自己仍在为图像重建而优化,从而降低负责跨帧运动建模的运动建模模块的训练效率,导致更多的闪烁动画和色彩混叠。

5. 局限性和未来工作

在我们的实验中,我们发现当个性化 T2I 模型的领域远非现实时,例如二维迪斯尼动画片(图 7),大多数失败案例都会出现。在这种情况下,动画结果会出现明显的伪影,无法产生正确的运动。我们假设这是由于训练视频(逼真)和个性化模型之间的分布差距过大造成的。解决这一问题的可能办法是手动收集目标领域中的多个视频,并对运动建模模块进行微调,我们将这一问题留待今后的工作中解决。

6. 结论

在本报告中,我们介绍了实现个性化文本到图像模型动画的实用框架 AnimateDiff,其目的是将现有的大多数个性化 T2I 模型一劳永逸地转化为动画生成器。我们展示了我们的框架,其中包括一个设计简单、在基本 T2I 基础上经过训练的运动建模模块,可以从大型视频数据集中提炼出可通用的运动先验。训练完成后,我们的运动模块可以插入到其他个性化模型中,生成具有自然、适当运动的动画图像,同时忠实于相应的领域。在各种个性化 T2I 模型上进行的广泛评估也验证了我们方法的有效性和通用性。因此,AnimateDiff 为个性化动画提供了一个简单而有效的基线,有可能使广泛的应用受益。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值