图像生成论文阅读:GLIDE算法笔记

标题:GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
会议:ICML2022
论文地址:https://proceedings.mlr.press/v162/nichol22a.html
官方代码:https://github.com/openai/glide-text2im
作者单位:OpenAI

Abstract

扩散模型最近已被证明可以生成高质量的合成图像,特别是在与引导技术结合起来时,可以实现多样性和保真度的折衷。我们探索了文本条件的图像合成问题的扩散模型,并比较了两种不同的引导策略:CLIP引导和无分类器(classifier-free)引导。我们发现,人类评估者更喜欢后者,因为后者更逼真(photorealism)和符合描述(caption similarity),并且经常产生具有照片真实感(photorealistic)的样本。与DALL-E相比,使用无分类器引导的具有35亿参数的文本条件扩散模型的样本更受人类评估者的青睐,即使后者使用了昂贵的CLIP重排序。此外,我们发现我们的模型可以微调以执行图像修补,从而实现强大的文本驱动的图像编辑。

1. Introduction

图像,如插图、绘画和照片,往往可以很容易地用文本描述,但需要专门的技能和劳动时间来创造。因此,一个能够从自然语言生成逼真图像的工具,可以使人类以前所未有的轻松创造丰富多样的视觉内容。使用自然语言编辑图像的能力进一步允许了迭代地细化和细粒度控制,这两者对于现实世界的应用都是至关重要的。最近的文本条件图像模型能够从自由形式的文本提示合成图像,并且可以以语义合理的方式构图不相关的物体。然而,他们还不能够生成体现了其对应文本提示各个方面的真实感图像。
另一方面,无条件图像模型可以合成真实感图像,有时具有足够的保真度,以至于人类都无法将其与真实图像区分开来。在这一研究路线中,扩散模型已经成为一个有前途的生成模型家族,在许多图像生成基准上达到了SOTA的样本质量。
为了实现类别条件场景下的照相写实主义(photorealism),Dhariwal和Nichol使用分类器引导(classifier guidance)来增强扩散模型,这是一种允许扩散模型以分类器的标签为条件的技术。分类器先在噪声图像上进行训练,在扩散采样过程中,来自分类器的梯度被用来引导样本趋向标签。Ho和Salimans通过使用classifier-free引导,在没有单独训练的分类器的情况下获得了类似的结果,这种引导形式在有标签和无标签的扩散模型的预测之间进行了插值。
受引导扩散模型生成真实感样本的能力和文本到图像(text-to-image)模型处理自由形式提示的能力的启发,我们将引导扩散应用到文本条件图像合成问题。首先,我们训练了一个35亿参数的扩散模型,其使用文本编码器来以自然语言描述为条件。接下来,我们比较了两种面向文本提示的引导扩散模型技术:CLIP引导和classifier-free引导。通过人工和自动化评估,我们发现classifier-free引导会生成更高质量的图像。我们发现,在classifier-free引导下模型生成的样本既具有真实感,又反映了广泛的世界知识。当由人类评委进行评估时,我们的样本在87%的时间(当评估照片逼真度时)和69%的时间(当评估符合描述时)优于来自DALL-E的样本。
虽然我们的模型可以零样本(zero-shot)绘制各种各样的文本提示,但是对于复杂的提示很难生成逼真的图像。因此,我们为我们的模型提供了除零样本生成之外的编辑功能,这使得人们可以迭代地改进模型样本,直到它们匹配了更复杂的提示。具体来说,我们微调我们的模型来进行图像修补,发现它能够使用自然语言提示对现有图像进行逼真的编辑。模型产生的编辑与周围上下文的风格和灯光相匹配,包括有说服力的阴影和反射。这些模型的未来应用可能会帮助人类以前所未有的速度和容易创造出引人注目的自定义图像。
我们观察到,我们得到的模型可以显著减少产生有说服力的虚假信息或Deepfakes所需的工作量。为了在帮助未来研究的同时防范这些情况,我们发布了一组在过滤后的数据集上训练的较小模型。
我们称我们的系统为GLIDE,它代表着Guided Language to Image Diffusion for Generation and Editing。我们将我们小的过滤后的模型称为GLIDE(filtered)。

2. Background

在接下来的几个小节,我们概述了我们将要评估的最终模型的组成部分:扩散、classifier-free引导和CLIP引导。

2.1. Diffusion Models

我们考虑由Sohl-Dickstein等人引入并由Song和Ermon、Ho等人改进的高斯扩散模型。给定一个来自数据分布的样本 x 0 ∼ q ( x 0 ) x_0\sim q(x_0) x0q(x0),我们通过逐步向样本中添加高斯噪声来产生一个由潜变量 x 1 , . . . , x T x_1,...,x_T x1,...,xT组成的马尔科夫链:
q ( x t ∣ x t − 1 ) : = N ( x t ; α t x t − 1 , ( 1 − α t ) I ) q(x_t|x_{t-1}):=\mathcal{N}(x_t;\sqrt{\alpha_t}x_{t-1},(1-\alpha_t)\mathcal{I}) q(xtxt1):=N(xt;αt xt1,(1αt)I)如果每一步加入的噪声幅度 1 − α t 1-\alpha_t 1αt足够小,那么后验 q ( x t − 1 ∣ x t ) q(x_{t-1}|x_t) q(xt1xt)可以被对角高斯(diagonal Gaussian)很好地近似。进一步地,如果在整个链中添加的全部的噪声幅度 1 − α 1 . . . α T 1-\alpha_1...\alpha_T 1α1...αT足够大,那么 x T x_T xT可以被 N ( 0 , I ) \mathcal{N}(0,\mathcal{I}) N(0,I)很好地近似。这些性质表明可以学习一个模型 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt)来逼近真实后验:
p θ ( x t − 1 ∣ x t ) : = N ( μ θ ( x t ) , ∑ θ ( x t ) ) p_\theta(x_{t-1}|x_t):=\mathcal{N}(\mu_\theta(x_t),\sum_\theta(x_t)) pθ(xt1xt):=N(μθ(xt),θ(xt))其可以被用来产生样本 x 0 ∼ p θ ( x 0 ) x_0\sim p_\theta(x_0) x0pθ(x0),通过从高斯噪声 x T ∼ N ( 0 , I ) x_T\sim\mathcal{N}(0,\mathcal{I}) xTN(0,I)开始并以一系列步骤 x T − 1 , x T − 2 , . . , x 0 x_{T-1},x_{T-2},..,x_0 xT1,xT2,..,x0逐渐减少噪声。
虽然 l o g p θ ( x 0 ) \mathrm{log}p_\theta(x_0) logpθ(x0)存在一个易处理的变分下界(variational lower-bound,VLB),但通过优化一个重新加权VLB项的代理目标可以得到更好的结果。为了计算这个代理目标,我们通过对 x 0 x_0 x0施加高斯噪声 ϵ \epsilon ϵ来生成样本 x t ∼ q ( x t ∣ x 0 ) x_t\sim q(x_t|x_0) xtq(xtx0),然后使用标准均方误差损失训练一个模型 ϵ θ \epsilon_\theta ϵθ来预测添加的噪声:
L s i m p l e : = E t ∼ [ 1 , T ] , x 0 ∼ q ( x 0 ) , ϵ ∼ N ( 0 , I ) [ ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 ] L_{\mathrm{simple}}:=E_{t\sim[1,T],x_0\sim q(x_0),\epsilon\sim\mathcal{N}(0,\bold{I})}[||\epsilon-\epsilon_\theta(x_t,t)||^2] Lsimple:=Et[1,T],x0q(x0),ϵN(0,I)[∣∣ϵϵθ(xt,t)2]Ho等人展示了如何从 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)推导出 μ θ ( x t ) \mu_\theta(x_t) μθ(xt),并将 ∑ θ \sum_\theta θ固定为常数。他们还证明了其与之前基于分数匹配的去噪(denoising score-matching based)模型的等价性,其中分数函数为 ∇ x t l o g p ( x t ) ∝ ϵ θ ( x t , t ) \nabla_{x_t}\mathrm{log}p(x_t)\propto\epsilon_\theta(x_t,t) xtlogp(xt)ϵθ(xt,t)。在后续工作中,Nichol和Dhariwal提出了一种学习 ∑ θ \sum_\theta θ的策略,使得模型能够以更少的扩散步骤产生高质量的样本。我们在训练本文的模型时采用了这种技术。
扩散模型还成功应用到了图像超分辨率。根据扩散的标准公式,高分辨率图像 y 0 y_0 y0在一系列步骤中被逐步地施加噪声。然而, p θ ( y t − 1 ∣ y t , x ) p_\theta(y_{t-1}|y_t,x) pθ(yt1yt,x)额外地以下采样输入 x x x为条件,通过沿通道维度拼接 x x x(双三次上采样后)提供给模型。这些模型的结果在FID、IS和人工比较的分数上都优于以前的方法。

2.2. Guided Diffusion

Dhariwal和Nicho发现类别条件扩散模型的样本往往可以使用分类器引导来改善,其中,均值为 μ θ ( x t ∣ y ) \mu_\theta(x_t|y) μθ(xty),方差为 ∑ θ ( x t ∣ y ) \sum_\theta(x_t|y) θ(xty)的类别条件扩散模型由分类器预测的目标类别 y y y的对数概率 l o g p ϕ ( y ∣ x t ) \mathrm{log}p_\phi(y|x_t) logpϕ(yxt)附加地扰动。得到的新的扰动后的均值 μ ^ θ ( x t ∣ y ) \hat{\mu}_\theta(x_t|y) μ^θ(xty)为:
μ ^ θ ( x t ∣ y ) = μ θ ( x t ∣ y ) + s ⋅ ∑ θ ( x t ∣ y ) ∇ x t l o g p ϕ ( y ∣ x t ) \hat{\mu}_\theta(x_t|y)=\mu_\theta(x_t|y)+s·\sum_\theta(x_t|y)\nabla_{x_t}\mathrm{log}p_\phi(y|x_t) μ^θ(xty)=μθ(xty)+sθ(xty)xtlogpϕ(yxt)系数 s s s称为引导尺度,Dhariwal和Nichol发现增加 s s s会以牺牲多样性为代价提高样本质量。

2.3. Classifier-free guidance

Ho和Salimans最近提出了classifier-free引导,一种用于引导扩散模型且不需要训练一个单独的分类器模型的技术。对于classifier-free引导,在训练过程中以固定概率将类别条件扩散模型 ϵ θ ( x t ∣ y ) \epsilon_\theta(x_t|y) ϵθ(xty)中的标签 y y y替换为空标签 ∅ \emptyset 。在采样过程中,模型的输出沿 ϵ θ ( x t ∣ y ) \epsilon_\theta(x_t|y) ϵθ(xty)方向进一步推理,并远离 ϵ θ ( x t ∣ ∅ ) \epsilon_\theta(x_t|\emptyset) ϵθ(xt∣∅),如下所示:
ϵ ^ θ ( x t ∣ y ) = ϵ θ ( x t ∣ ∅ ) + s ⋅ ( ϵ θ ( x t ∣ y ) − ϵ θ ( x t ∣ ∅ ) ) \hat{\epsilon}_\theta(x_t|y)=\epsilon_\theta(x_t|\emptyset)+s·(\epsilon_\theta(x_t|y)-\epsilon_\theta(x_t|\emptyset)) ϵ^θ(xty)=ϵθ(xt∣∅)+s(ϵθ(xty)ϵθ(xt∣∅))其中, s ≥ 1 s≥1 s1为引导尺度。这种函数形式是受隐式分类器的启发:
p i ( y ∣ x t ) ∝ p ( x t ∣ y ) p ( x t ) p^i(y|x_t)\propto\frac{p(x_t|y)}{p(x_t)} pi(yxt)p(xt)p(xty)其梯度可以用真实分数 ϵ ∗ \epsilon^* ϵ来表示:
∇ x t l o g p i ( y ∣ x t ) ∝ ∇ x t l o g p ( x t ∣ y ) − ∇ x t l o g p ( x t ) ∝ ϵ ∗ ( x t ∣ y ) − ϵ ∗ ( x t ) \begin{align} \nabla_{x_t}\mathrm{log}p^i(y|x_t)&\propto\nabla_{x_t}\mathrm{log}p(x_t|y)-\nabla_{x_t}\mathrm{log}p(x_t)\notag\\ &\propto\epsilon^*(x_t|y)-\epsilon^*(x_t)\notag \end{align} xtlogpi(yxt)xtlogp(xty)xtlogp(xt)ϵ(xty)ϵ(xt)为了使用通用文本提示实现classifier-free引导,我们有时在训练过程中用空序列(我们也称其为 ∅ \emptyset )替换文本描述。然后我们使用修正的预测 ϵ ^ \hat{\epsilon} ϵ^向描述 c c c引导:
ϵ ^ θ ( x t ∣ c ) = ϵ θ ( x t ∣ ∅ ) + s ⋅ ( ϵ θ ( x t ∣ c ) − ϵ θ ( x t ∣ ∅ ) ) \hat{\epsilon}_\theta(x_t|c)=\epsilon_\theta(x_t|\emptyset)+s·(\epsilon_\theta(x_t|c)-\epsilon_\theta(x_t|\emptyset)) ϵ^θ(xtc)=ϵθ(xt∣∅)+s(ϵθ(xtc)ϵθ(xt∣∅))classifier-free引导具有两个吸引人的性质。首先,它允许单个模型在引导过程中利用自己的知识,而不是依靠单独的(有时更小的)分类模型的知识。其次,当以那些难以用分类器预测的信息为条件时,它简化了引导(例如文本)。

2.4. CLIP Guidance

Radford等人引入CLIP作为一种可扩展的方法来学习文本和图像之间的联合表征。CLIP模型由两个模型组成:一个图像编码器 f ( x ) f(x) f(x)和一个描述编码器 g ( c ) g(c) g(c)。在训练过程中,从一个大数据集中采样 ( x , c ) (x,c) (x,c)对batches,模型优化对比交叉熵损失,如果图像 x x x与给定的描述 c c c配对,则激励高点积 f ( x ) ⋅ g ( c ) f(x)·g(c) f(x)g(c),如果图像和描述对应训练数据中的不同对,则激励低点积。
由于CLIP提供了图像与描述接近程度的分数,因此有一些工作使用它来引导生成模型(如GANs)趋向用户定义的文本描述。为了将同样的思想应用到扩散模型中,我们可以在分类器引导中用CLIP模型代替分类器。具体来说,我们用图像编码和描述编码的点积相对于图像的梯度来扰动逆向过程的均值:
μ ^ θ ( x t ∣ c ) = μ θ ( x t ∣ c ) + s ⋅ ∑ θ ( x t ∣ c ) ∇ x t ( f ( x t ) ⋅ g ( c ) ) \hat{\mu}_\theta(x_t|c)=\mu_\theta(x_t|c)+s·\sum_\theta(x_t|c)\nabla_{x_t}(f(x_t)·g(c)) μ^θ(xtc)=μθ(xtc)+sθ(xtc)xt(f(xt)g(c))与分类器引导类似,在逆向过程中,我们必须在噪声图像 x t x_t xt上训练CLIP以获得正确的梯度。在我们整个实验过程中,我们使用被显式训练变得噪声感知(noise-aware)的CLIP模型,我们称之为噪声CLIP模型(noised CLIP models)。
之前的工作Crowson已经表明,未在噪声图像上训练的公开CLIP模型仍然可以用来引导扩散模型。在附录C中,我们证明了我们的噪声CLIP引导在不需要额外的技巧如数据增强或感知损失的情况下就可以对这种方法表现良好。我们猜想,使用公开CLIP模型的引导会给采样质量带来不利影响,因为在采样过程中遇到的带噪声的中间图像对模型来说是分布外的(out-of-distribution)。

3. Related Work

具体的相关工作讨论可以参照原文。

4. Training

对于我们的主要实验,我们在64×64分辨率下训练了一个35亿参数的文本条件扩散模型,另外一个15亿参数的文本条件上采样扩散模型则将分辨率提高到256×256。对于CLIP引导,我们也训练了一个64×64的ViT-L CLIP模型。

4.1. Text-Conditional Diffusion Models

我们采用Dhariwal和Nichol提出的ADM模型结构,但增加了文本条件信息。对于每个噪声图像 x t x_t xt和对应的文本描述 c c c,我们的模型预测 p ( x t − 1 ∣ x t , c ) p(x_{t-1}|x_t,c) p(xt1xt,c)。为了以文本为条件,我们首先将其编码为 K K K个token序列,并将这些token输入到一个Transformer模型中。该transformer的输出通过两种方式使用:首先,使用最终的token嵌入代替ADM模型中的类别嵌入;其次,最后一层token嵌入( K K K个特征向量的序列)在整个ADM模型中分别投射到每个注意力层的维度,然后在每一层拼接到注意力上下文。我们在与DALL-E相同的数据集上训练模型,训练计算量与DALL-E大致相同。训练和超参数详细信息见附录B.1。

4.2. Fine-tuning for classifier-free guidance

在初始训练运行后,我们对base模型进行微调,以支持无条件图像生成。这个训练过程与预训练完全相同,除了20%的文本token序列被替换为空序列。这样,模型既保留了其生成文本条件输出的能力,也可以无条件生成图像。

4.3. Image Inpainting

大多数以往使用扩散模型进行修补的工作并没有为该任务显式地训练扩散模型。具体来说,扩散模型修补可以像往常一样从扩散模型中采样,但在每个采样步骤后用来自 q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)的样本替换图像的已知区域。这样做的缺点是,在采样过程中,模型无法看到整个上下文(只有它的一个噪声版本),偶尔会在我们的早期实验中产生不希望有的边缘伪影。
为了达到更好的效果,我们显式地微调我们的模型来执行修补,类似于Saharia等人。在微调过程中,我们随机掩码输入图像的区域,在相同的目标上训练模型,同时在干净的真实图像和掩码的掩码版本上以它为条件(train the model on the same objective while conditioning it on the masked versions of the clean groundtruth images and the mask)。为此,我们修改模型结构,增加了4个新的输入通道:另一组RGB通道用于提供掩码后的真值图像,一个掩码通道用于提供修补的掩膜。在微调之前,我们将这些新通道对应的输入权重初始化为零。对于上采样模型,我们总是提供完整的低分辨率图像,但只提供高分辨率图像的非掩码区域。

4.4. Noised CLIP models

为了更好地比得上Dhariwal和Nichol的分类器引导技术,我们使用一个图像编码器 f ( x t , t ) f(x_t,t) f(xt,t)来训练噪声CLIP模型,该编码器接收噪声图像 x t x_t xt,并以与原始CLIP模型相同的目标用其它方式进行训练。我们在64×64分辨率下训练这些模型,噪声安排(schedule)与我们的base模型相同。

5. Results

5.1. Qualitative Results

在图1中,我们观察到使用classifier-free引导的GLIDE能够泛化到各种各样的提示。模型往往能生成逼真的阴影和反射,以及高质量的纹理。它还能够创作各种风格的插图,比如特定艺术家或绘画的风格,或是像像素艺术一样的总体风格。最后,该模型能够组合多个概念(例如柯基、蝴蝶结、生日帽等),同时将属性(如颜色)绑定到这些目标。
在这里插入图片描述
在图5中,我们将我们的模型与之前在MS-COCO描述上SOTA的文本条件图像生成模型进行了比较,发现我们的模型在没有CLIP重排序和精心筛选(cherry-picking)的情况下生成了更逼真的图像。我们也看到,classifier-free引导比CLIP引导产生了更真实的图像。我们进一步在附录C中展示了我们模型与未加噪的CLIP引导的对比,并在附录G中评估了模型大小的影响。
在这里插入图片描述
在修补任务上,我们发现GLIDE可以真实地使用文本提示修改现有图像,必要时会插入新的物体、阴影和反射(图2)。
在这里插入图片描述
该模型甚至可以编辑物体到绘画作品时匹配风格。在图3中,我们展示了如何使用GLIDE通过零样本生成和一系列修补编辑迭代地生成一个复杂的场景。在图4中,我们还使用SDEdit进行了实验,发现我们的模型能够将草图转化为逼真的图像编辑。在附录D中,我们将我们的模型与之前的修补模型进行了比较,显示我们的模型产生了更真实的修补结果。
在这里插入图片描述
在这里插入图片描述

5.2. Quantitative Results

我们首先通过质量-保真度权衡的帕累托边界(Pareto frontier)来评估classifier-free引导和CLIP引导的差异。在图6中,我们评估了两种方法在64×64分辨率下的零样本MS-COCO生成。我们查看了Precision/Recall、FID、Inception Score和CLIP Score。我们将CLIP score定义为 E [ s ( f ( i m a g e ) ⋅ g ( c a p t i o n ) ) ] \mathbb{E}[s(f(\mathrm{image})·g(\mathrm{caption}))] E[s(f(image)g(caption))],其中的期望值取自批次中的样本, s s s为CLIP logit尺度。当我们增加二者的引导尺度时,我们观察到FID vs. IS,Precision vs. Recall、CLIP score vs. FID中规则的(clean)权衡。在前两条曲线中,我们发现classifier-free引导是(近似)帕累托最优的。我们在绘制CLIP score vs. FID时看到了完全相反的趋势;特别地,CLIP引导似乎比classifier-free引导更能提高CLIP score。
在这里插入图片描述
我们猜想CLIP引导是为评估CLIP模型寻找对抗样本,而不是在满足提示时实际地要优于classifier-free引导。为了验证这一猜想,我们使用人工评估者来评判生成图像的样本质量。在这个设置中,人工评估者被展示两幅256×256的图像,并且必须选择哪个样本①更好地匹配给定的描述,或者②看起来更逼真。人工评估者也可能表示这两幅图像都没有显著优于另一个,在这种情况下,将一半的胜利分配给两个模型。使用我们的人工评估协议,我们首先分别对两种方法的引导尺度进行了扫视(图7),然后将两种方法使用上一阶段的最佳尺度进行比较(表1)。我们发现人类与CLIP score有分歧,发现classifier-free引导能产生更符合提示的更高质量样本。
在这里插入图片描述
在这里插入图片描述
我们还将GLIDE与其它文本条件生成图像模型进行了比较。我们在表2中发现,我们的模型在MS-COCO上获得了具有竞争力的FID,而且没有在这个数据集上显式训练。我们还根据Ramesh等人,在MS-COCO验证集中的一个子集上计算FID,该子集已经删除了所有与训练集中图像相似的图像。这使得验证batch减少了21%。我们发现在这种情况下,我们的FID从12.24稍微增加到了12.89,这在很大程度上可以用在使用更小的参考batch时FID偏置的变化来解释。
在这里插入图片描述
最后,我们使用我们的人工评估协议对GLIDE和DALL-E进行了比较(表3)。值得注意的是,GLIDE的训练计算量与DALL-E大致相同,但使用了更小的模型(35亿参数vs.120亿参数)。它还只需要更少的采样延迟并且不进行CLIP重排序。我们在DALL-E和GLIDE之间进行了三组比较:首先,我们比较了没有CLIP重排序的两个模型;然后,我们只对DALL-E使用CLIP重排序;最后,我们对DALL-E使用CLIP重排序,通过DALL-E的离散VAE来运行(run)GLIDE样本。对于DALL-E模型,我们全都使用两个温度进行评估。我们的模型在所有设置中都被人工评估者所偏爱,即使在严重偏袒DALL-E的配置中,即允许它使用更多的测试时间计算(通过CLIP重排序)同时减少GLIDE样本质量(通过VAE模糊)。对于使用CLIP重排序的DALL-E和使用不同引导策略的GLIDE的样本网格,见附录H。
在这里插入图片描述

6. Conclusion and Future work

我们已经证明,文本条件扩散模型能够生成逼真的合成图像,特别是当与classifier-free引导相结合时。虽然我们的模型可以以复杂的方式组合不同的概念,但它有时无法体现某些描述高度罕见的物体或场景的提示。在图8中,我们提供了这些失败案例的一些例子。此外,我们的未优化模型在单个A100 GPU上采样一幅图像需要15秒。这比相关的GAN方法的采样速度要慢得多,因为它们在单个前向传播中生成图像,因此更有利于实时应用。捕获分布外提示和快速采样仍然是未来工作的重要方向。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Frankenstein@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值