Diffusion Model
文章目录
- `Diffusion Model`
- `Denoising Diffusion Probabilistic Model(DDPM)`
- 去噪过程:
- `Denoise`结构
- 训练过程
- `Text-to-image Generation Model`
- `High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)`
- 基本结构与推理过程
- `Text Encoder`
- `Decoder`
- `Generation Model`
- `DDPM`算法简析
所学内容来源于李宏毅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就是Denoise和noise 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 Generator和Noise Predictor相差不大,只是Text-to-image Generator需要额外一个输入,即文本作为第三个输入,以引导其生成过程。

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

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

High Resolution Image Synthesis With_Latent Diffusion Models (Stable Diffusion)
基本结构与推理过程

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

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

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

由此看来,FID越小,生成图片与原始图片越相似。也就是说,FID越小越好。
然后来解释一下CLIP Score。CLIP 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-Encoder和Decoder而无必要从Diffusion Model训练时所用的数据中找图片,这样做可以最大化Decoder的还原能力。
Generation Model
Generation Model从Text Encoder接收文本词向量,然后将上一个时间步的latent representation去噪处理为当前时间步的latent representation,交给Decoder作最后的处理。
训练Generation Model本质上与训练DDPM没有太大区别。训练是一个加噪的过程。首先将清晰图片经过一个训练好的Auto-Encoder转换为latent representation,然后加入从正态高斯分布simple的noise,得到当前时间步Step 1的latent representation。以此类推,不断加噪至指定步数1000。

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


Noise Predictor在训练的过程中,接收latent representation,Text embedding和Time step作为输入,预测出噪声,与当前时间步所加噪声ground-truth对比,计算损失,梯度下降。
我们训练好了Generation Model后,就可以用它来进行去噪(推理过程):给定一个为pure noise的latent representation以及文本,依次迭代去噪,每次计算去噪完的latent representation的CLIP 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}
xt−1是去噪后的图片,
α
\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)}
xt−1−α1−αϵθ(xt,t)则代表去噪。最末尾加上一个
σ
t
z
\sigma_tz
σtz是为了提高扩散的泛化能力。
本文毕。




![[计算机网络]---Http协议](https://img-blog.csdnimg.cn/direct/85666f3e835e446e924fb9ce42ad64ed.png)














