Diffusion Model——扩散模型

文章详细介绍了DiffusionModel,特别是DenoisingDiffProbabilisticModel(DDPM)和StableDiffusion的原理,包括去噪和加噪过程,以及如何通过Text-to-imageGenerator生成图像。讨论了TextEncoder、Decoder和GenerationModel的结构及其在训练过程中的作用,以及评估指标如FID和CLIPScore的应用。
摘要由CSDN通过智能技术生成

Diffusion Model

所学内容来源于李宏毅2023扩散模型,DDPM链接:【生成式AI】Diffusion Model 概念讲解 (1/2)_哔哩哔哩_bilibili

Stable Diffusion链接:https://www.bilibili.com/video/BV14c411J7f2?p=2

Denoising Diffusion Probabilistic Model(DDPM)

去噪过程:

在这里插入图片描述

​ 去噪过程又称为推理过程测试过程后向扩散过程。一个训练好的Denoise模型,它的去噪过程,是一张正态分布噪声图逐渐经过去噪还原为清晰图片的过程。在最初,输入一张从正态分布中simple出来的噪声图,以及该图片对应的时间步time embedding,经过去噪,会得到一张较为清晰的图。然后以此类推,将较为清晰的图输入到同一个Denoise Model中,继续输入一个新的time embedding,就可以得到更加清晰的图……最后就可以生成出所需要的图片。

在这里插入图片描述

​ 很显然,Denoise模型在这里需要两个输入,一个是需要去噪的图片,一个是时间步time embedding或者称为time step。时间步的作用,无疑是说明当前去噪的力度,也说明当前噪声的强度。在最初的时间步,Denoise进行较大的去噪,逐步地,后面的时间步使得Denoise进行较小的去噪。

Denoise结构

在这里插入图片描述

DDPM的里面是一个噪声预测器(noise predictor)。Noise Predictor接收一个图片和时间步作为输入,然后生成一张noise,然后Denoise利用这张noise进行去噪。具体而言,是将输入图片减去这个预测出来的noise以达到去噪效果。

训练过程

​ 从Denoise结构可以很明显地看出,noise predictor预测出来的噪声应该需要一个ground-truth作为监督。这个ground-truth是去噪效果最好的一个噪声,对应的,预测出来用于去噪的噪声并不一定使得去噪效果最好,这时候就需要这个ground-truth监督。

noise predictor能否预测出一个好的noise,体现出noise predictor的优劣,具体在于其内部的参数 θ \theta θ是否达到了最优。所以我们需要训练noise predictor

​ 训练过程有一个重要的过程,称为加噪过程,又称为前向扩散过程。如下图,具体而言,在正态高斯分布中simple出一张随机噪声,然后将这个随机噪声加到清晰图片上,得到较为模糊的图片,同时记录此时的时间步time step

在这里插入图片描述

​ 很明显,加噪后的图片和此时的时间步time step就是Denoisenoise predictor的输入input,而所加的噪声就是ground-truth。将这三个数据交给Denoise去噪,noise predictor会输出一个噪声,然后与ground-truth计算损失即可。

在这里插入图片描述

​ 所以,训练过程离不开去噪过程加噪过程。显然,去噪过程和加噪过程操作是相反的。

Text-to-image Generation Model

在这里插入图片描述

​ 如果我们想要通过文字引导生成我们想要的图片呢?Text-to-image Generation Model包含Text-to-image Generator,通过给其输入cat,chicken,rabit等文字,使得其生成特定的图片。

​ 实际上,这个Text-to-image GeneratorNoise Predictor相差不大,只是Text-to-image Generator需要额外一个输入,即文本作为第三个输入,以引导其生成过程。

在这里插入图片描述

​ 使用Text-to-image Generator进行去噪,去噪过程每一步还需要额外给Denoise添加文本作为引导。

在这里插入图片描述

​ 加噪过程也如此,每一步都将文本作为输入。

在这里插入图片描述

High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)

基本结构与推理过程

在这里插入图片描述

​ 基本结构包含三个组件,Text EncoderGeneration ModelDecoderstable diffusion的生成图片的大致流程是:首先输入一段文本,经过Text Encoder处理为一个词向量,然后交给Generation Model,同时输入一个从正态高斯分布simple出来的随机噪声,生成一个latent representation,就是所谓的“中间产物”。然后这个latent representation交给Decoder,生成图片。

​ 这个生成图片的流程,又称为推理过程测试过程

​ 论文中的stable diffusion结构与上面提到的基本结构大差不差:

在这里插入图片描述

​ 训练stable diffusion时,三个组件是分别训练的。

Text Encoder

text encoder的作用是接收一段文本,然后将其转换为一组词向量text encoder通常是一个预训练encoder。有实验证明显示,text encoderstable diffusion中的作用相当大,如下图,随着更大的text encoder,其曲线更加趋向右下方。愈趋向右下方,Diffusion Model性能越好。

在这里插入图片描述

​ 首先解释一下FIDFID描述了两张图特征的接近程度。将两张图片分别送入CNN进行降维,得到两个表征向量。这两个表征描述了两张图片的分布。一般认为是两个不同的高斯分布。FID就是两个高斯分布的距离,距离越小,FID越小,则两个分布越接近;两个向量越接近,则两张图片特征越接近。

在这里插入图片描述

​ 由此看来,FID越小,生成图片与原始图片越相似。也就是说,FID越小越好

​ 然后来解释一下CLIP ScoreCLIP Score则是描述了文本与生成图片之间的符合度。首先将一段文本送入Text Encoder,输出为文本的embedding向量。然后将生成图片送入Image Encoder,输出一个图片的embedding向量。CLIP Score就是两个向量的高斯分布的距离CLIP Score足够大,则说明这段文本能够很好地描述这个图片,或者说这个生成图片符合文本需要,也说明这段文本与图片足够匹配。也就是说,CLIP Score越大越好

在这里插入图片描述

​ 所以,上面那张曲线图,曲线愈趋向右下方,则代表着更大的Text Encoder有着更小的FID,更大的CLIP Score,则对应Diffusion Model有着更好的性能。

Decoder

Decoder的作用通常是将一个laten representation还原为图片

​ 如何描述我们训练出来的Decoder的还原是好是坏?为了便于我们描述Decoder的好坏,我们需要Auto-Encoder辅助Decoder训练。训练Decoder的时候,将图片送入Auto-Encoder进行降维,生成latent representation,然后交给Decoder还原为生成图片,对两张图片的损失梯度下降,最优情况的Decoder就随着Auto-Encoder一起训练好了,就可以直接拿来使用。

在这里插入图片描述

​ 很明显,对Decoder的训练需要的图片,并不依赖于Diffusion Model训练时候的数据。也就是说,可以随便找图片数据来训练Auto-EncoderDecoder而无必要从Diffusion Model训练时所用的数据中找图片,这样做可以最大化Decoder的还原能力。

Generation Model

Generation ModelText Encoder接收文本词向量,然后将上一个时间步latent representation去噪处理为当前时间步latent representation,交给Decoder作最后的处理。

​ 训练Generation Model本质上与训练DDPM没有太大区别。训练是一个加噪的过程。首先将清晰图片经过一个训练好的Auto-Encoder转换为latent representation,然后加入从正态高斯分布simplenoise,得到当前时间步Step 1latent representation。以此类推,不断加噪至指定步数1000。

在这里插入图片描述

​ 训练的过程实际上是在训练Generation Model中的Noise Predictor,除了像“A cat in the snow”这样的文本作为Noise Predictor的输入Input之外,还有当前时间步以及加噪的结果作为输入。如下图:

在这里插入图片描述

在这里插入图片描述

Noise Predictor在训练的过程中,接收latent representationText embeddingTime step作为输入,预测出噪声,与当前时间步所加噪声ground-truth对比,计算损失,梯度下降。

​ 我们训练好了Generation Model后,就可以用它来进行去噪(推理过程):给定一个为pure noiselatent representation以及文本,依次迭代去噪,每次计算去噪完的latent representationCLIP Score,足够高了就可以将此latent representation交给Decoder生成为图片。
在这里插入图片描述

DDPM算法简析

​ 这个是DDPM的算法图,分别是训练的算法图与推理的算法图,也就是分别对应着加噪(前向扩散过程)的算法图和去噪(反向扩散过程)的算法图。该部分省略了公式推导。

在这里插入图片描述

Training部分。x0是待加噪的图片,t是当前时间步, α ‾ \overline{\alpha} α是超参数,一般设置为尽可能接近1, ϵ \large{\epsilon} ϵ是从正态高斯分布中simple出来的噪声, ϵ θ \large{\epsilon_{\theta}} ϵθ代表Noise Predictor α ‾ x 0 + 1 − α ‾ ϵ \large{\sqrt{\overline{\alpha}}x_0 + \sqrt{1 - \overline{\alpha}}\epsilon} α x0+1α ϵ部分代表加噪后的图片, ϵ θ ( α ‾ x 0 + 1 − α ‾ ϵ , t ) \large{\epsilon_{\theta}(\sqrt{\overline{\alpha}}x_0 + \sqrt{1 - \overline{\alpha}}\epsilon, t)} ϵθ(α x0+1α ϵ,t)则代表了Noise Predictor利用时间步和加噪后的图片预测出拿来去噪的Noise ϵ − ϵ θ ( α ‾ x 0 + 1 − α ‾ ϵ , t ) \large{\epsilon-\epsilon_{\theta}(\sqrt{\overline{\alpha}}x_0 + \sqrt{1 - \overline{\alpha}}\epsilon, t)} ϵϵθ(α x0+1α ϵ,t)则代表了预测的噪声和加噪所利用的噪声的差别。然后对损失梯度下降即可。

Sampling部分。 x t x_t xt是待去噪的图片,t是时间步, x t − 1 x_{t-1} xt1是去噪后的图片, α \alpha α依然是超参数,与前面一样。z是从正态高斯分布中simple出来的噪声, σ \sigma σ是超参数。 1 − α 1 − α ϵ θ ( x t , t ) \large{\frac{1 - \alpha}{\sqrt{1 - \alpha}}\epsilon_{\theta}(x_t, t)} 1α 1αϵθ(xt,t)代表Noise Predictor预测出来的噪声, x t − 1 − α 1 − α ϵ θ ( x t , t ) \large{x_t - \frac{1 - \alpha}{\sqrt{1 - \alpha}}\epsilon_{\theta}(x_t, t)} xt1α 1αϵθ(xt,t)则代表去噪。最末尾加上一个 σ t z \sigma_tz σtz是为了提高扩散的泛化能力。

本文毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值