首页 > 其他分享 >一文详解Denoising Diffusion Implicit Models(DDIM)

一文详解Denoising Diffusion Implicit Models(DDIM)

时间:2024-07-31 20:27:53浏览次数:10  
标签:Diffusion 采样 bar Models Denoising sqrt DDPM alpha x0

目录

0 前言

  上一篇博文我们介绍了目前流行的扩散模型基石DDPM ,并且给出了代码讲解,有不了解的小伙伴可以跳转到前面先学习一下。今天我们再来介绍下DDPM的改进版本。DDPM虽然对生成任务带来了新得启发,但是他有一个致命的缺点,就是推理速度比较慢,这就导致实际工业应用中很难落地。为了解决这个问题,斯坦福大学提出了他的改进版本,实际上也不算是新的模型,只是一个新的采样方式,加快了模型的推理速度,就是我们今天要介绍的Denoising Diffusion Implicit Models(DDIM),目前流行的一些采样模型,如stable diffusionmidjourney等都是基于DDIM的采样方式。下面给出DDIM的论文和项目地址,官方版的代码是TensorFlow版本的:

  前面讲的DDPM是一个马尔科夫的过程,而DDIM是通过去马尔科夫化,但是又和DDPM有一个同样的训练目标,也就是说如果你已经有一个训练好的DDPM模型了,你就可以通过DDIM的这种采样方式来加速已经训练好的DDPM的采样,所以说DDIM更像是提出了一个新的采样方式,因为他的训练过程跟DDPM是一样的,只不过DDIM改进了采样过程。但是DDIM的这种采样方式也有一些缺点,虽然加快了模型的推理速度,但是由于DDIM的整个生成过程是确定性的(deterministic)过程,这就导致了DDIM的多样性相比于DDPM比较差(鱼和熊掌不可兼得)。

这里留两个问题,各位小伙伴们思考一下:

  • DDPM既然采样慢是因为T太大了,能不能把T调小?
  • 采样慢的第二个原因是必须逐步采样,能不能直接跳着采样?

1 DDIM

之前我们推导DDPM的时候都是基于马尔科夫的性质,即整个采样是按照下面的公式进行的:
p ( x t − 1 ∣ x t , x 0 ) ∼ M a r k o v (1) p(x_{t-1}|x_t,x_0) \sim Markov \tag{1} p(xt−1​∣xt​,x0​)∼Markov(1)
也就是说上面这个采样只能一步一步来,服从马尔科夫性质的,那么我们能不能找到一个不符合马尔科夫的采样公式,像下面这样的:
p ( x s ∣ x k , x 0 ) ∼ N o n − M a r k o v , s < k − 1 (2) p(x_{s}|x_k,x_0) \sim Non-Markov ,s<k-1 \tag{2} p(xs​∣xk​,x0​)∼Non−Markov,s<k−1(2)
根据贝叶斯公式,我们可以得出下面的公式:
p ( x s ∣ x k , x 0 ) = p ( x k ∣ x s , x 0 ) p ( x s ∣ x 0 ) p ( x k ∣ x 0 ) (3) p(x_{s}|x_k,x_0) = \frac{p(x_k|x_s,x_0)p(x_s|x_0)}{p(x_k|x_0)} \tag{3} p(xs​∣xk​,x0​)=p(xk​∣x0​)p(xk​∣xs​,x0​)p(xs​∣x0​)​(3)
  在DDPM中,根据马尔科夫性质,上面式子中的, p ( x k ∣ x s , x 0 ) , p ( x s ∣ x 0 ) , p ( x k ∣ x 0 ) p(x_k|x_s,x_0),p(x_s|x_0),p(x_k|x_0) p(xk​∣xs​,x0​),p(xs​∣x0​),p(xk​∣x0​)都是已知的。但是,如果此时采样不满足马尔科夫性质了,上面三个概率分布不就都不知道了吗,这时候该怎么办?
回想一下DDPM的训练过程,我们通过 x 0 x_0 x0​可以一步生成 x t x_t xt​,即满足 p ( x t ∣ x 0 ) p(x_t|x_0) p(xt​∣x0​),也就是说上面两个式子只有一个是未知的,即 p ( x k ∣ x s , x 0 ) p(x_k|x_s,x_0) p(xk​∣xs​,x0​),这也就回答了我们为什么在前言里面说DDIM实际上是一个采样方法,他的训练也是DDPM。那么还剩下的一项怎么解决?这一项在DDPM 中对应的是 p ( x t ∣ x t − 1 ) p(x_t|x_{t-1}) p(xt​∣xt−1​),这一项在训练中根本没用到,训练的时候直接根据 p ( x t ∣ x 0 ) p(x_t|x_0) p(xt​∣x0​)来加噪,既然这一项没用到,说明他不重要,我们就先不管,那接下来应该怎么办?于是大牛们就开始想办法了,想着如果不知道 p ( x k ∣ x s , x 0 ) p(x_k|x_s,x_0) p(xk​∣xs​,x0​),就没办法计算 p ( x s ∣ x k , x 0 ) p(x_{s}|x_k,x_0) p(xs​∣xk​,x0​),那如果自己假设一个 p ( x s ∣ x k , x 0 ) p(x_{s}|x_k,x_0) p(xs​∣xk​,x0​)分布,这个假设的分布需要满足一定的条件,即 x T = α T ˉ x 0 + 1 − α T ˉ ε x_T=\sqrt{\bar{\alpha_T}}x_0+\sqrt{1-\bar{\alpha_T}}\varepsilon xT​=αT​ˉ​ ​x0​+1−αT​ˉ​ ​ε这个条件仍然是成立的,因为在前向训练的时候用的就是这个公式,你假设一个概率分布总不能违反之前的训练约束对吧。这样的话,问题就变得简单多了。 假设 p ( x s ∣ x k , x 0 ) p(x_{s}|x_k,x_0) p(xs​∣xk​,x0​)的分布如下,直接假设为正态分布:
p ( x s ∣ x k , x 0 ) ∼ N ( k x 0 + m x k , σ 2 I ) (4) p(x_{s}|x_k,x_0) \sim N(kx_0+mx_k,\sigma^2I) \tag{4} p(xs​∣xk​,x0​)∼N(kx0​+mxk​,σ2I)(4)
上面的分布有三个未知数,我们现在要做的就是求出他们,根据参数化技术,采样一个 x t − 1 x_{t-1} xt−1​:
x s = k x 0 + m x k + σ ε (5) x_{s}=kx_0+mx_k+\sigma\varepsilon \tag{5} xs​=kx0​+mxk​+σε(5)
我们刚才说了,该式子是满足 x t = α t ˉ x 0 + 1 − α t ˉ ε ′ x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha_t}}\varepsilon^{\prime} xt​=αt​ˉ​ ​x0​+1−αt​ˉ​ ​ε′的,带入求解,可以得出:
x s = k x 0 + m ( α k ˉ x 0 + 1 − α k ˉ ε ′ ) + σ ε (6) x_s=kx_0+m(\sqrt{\bar{\alpha_k}}x_0+\sqrt{1-\bar{\alpha_k}}\varepsilon^{\prime})+\sigma\varepsilon \tag{6} xs​=kx0​+m(αk​ˉ​ ​x0​+1−αk​ˉ​ ​ε′)+σε(6)
合并同类项,有
x s = ( k + m α ˉ k ) x 0 + ( m 1 − α ˉ k ) ϵ ′ + σ ϵ (7) x_s=\left(k+m \sqrt{\bar{\alpha}_k}\right) x_0+\left(m \sqrt{1-\bar{\alpha}_k}\right) \epsilon^{\prime}+\sigma \epsilon \tag{7} xs​=(k+mαˉk​ ​)x0​+(m1−αˉk​ ​)ϵ′+σϵ(7)

由于 ϵ , ϵ ′ \epsilon, \epsilon^{\prime} ϵ,ϵ′ 都服从标准正态分布,因此两者可合并为同一个正态分布且服从 N ( 0 , m 2 ( 1 − α ˉ k ) + σ 2 ) N\left(0, m^2\left(1-\bar{\alpha}_k\right)+\sigma^2\right) N(0,m2(1−αˉk​)+σ2) 。于是上面的式可改写成
x s = ( k + m α ˉ k ) x 0 + m 2 ( 1 − α ˉ k ) + σ 2 ϵ (8) x_s=\left(k+m \sqrt{\bar{\alpha}_k}\right) x_0+\sqrt{m^2\left(1-\bar{\alpha}_k\right)+\sigma^2} \epsilon \tag{8} xs​=(k+mαˉk​ ​)x0​+m2(1−αˉk​)+σ2 ​ϵ(8)

接下来,我们来求解 k , m k, m k,m ,因为我们必须要满足式 x t = α t ˉ x 0 + 1 − α t ˉ ε ′ x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha_t}}\varepsilon^{\prime} xt​=αt​ˉ​ ​x0​+1−αt​ˉ​ ​ε′,因此我们要满足
k + m α ˉ k = α ˉ s  和  m 2 ( 1 − α ˉ k ) + σ 2 = 1 − α ˉ s (9) k+m \sqrt{\bar{\alpha}_k}=\sqrt{\bar{\alpha}_{s}} \text { 和 } m^2\left(1-\bar{\alpha}_k\right)+\sigma^2=1-\bar{\alpha}_{s} \tag{9} k+mαˉk​ ​=αˉs​ ​ 和 m2(1−αˉk​)+σ2=1−αˉs​(9)

通过初等运算,我们可以轻松得出
m = 1 − α ˉ s − σ 2 1 − α ˉ k  和  k = α ˉ s − 1 − α ˉ s − σ 2 α ˉ k 1 − α ˉ k (10) m=\frac{\sqrt{1-\bar{\alpha}_{s}-\sigma^2}}{\sqrt{1-\bar{\alpha}_k}} \text { 和 } k=\sqrt{\bar{\alpha}_{s}}-\sqrt{1-\bar{\alpha}_{s}-\sigma^2} \frac{\sqrt{\bar{\alpha}_k}}{\sqrt{1-\bar{\alpha}_k}} \tag{10} m=1−αˉk​ ​1−αˉs​−σ2 ​​ 和 k=αˉs​ ​−1−αˉs​−σ2 ​1−αˉk​ ​αˉk​ ​​(10)

最终,我们可以得到我们新的 p ( x s ∣ x k , x 0 ) p(x_{s}|x_k,x_0) p(xs​∣xk​,x0​)分布,即
p ( x s ∣ x k , x 0 ) = N ( α ˉ s x 0 + 1 − α ˉ s − σ 2 x k − α ˉ k x 0 1 − α ˉ k , σ 2 I ) (11) p(x_{s}|x_k,x_0)=N\left(\sqrt{\bar{\alpha}_{s}} x_0+\sqrt{1-\bar{\alpha}_{s}-\sigma^2} \frac{x_k-\sqrt{\bar{\alpha}_k} x_0}{\sqrt{1-\bar{\alpha}_k}}, \sigma^2 I\right) \tag{11} p(xs​∣xk​,x0​)=N(αˉs​ ​x0​+1−αˉs​−σ2 ​1−αˉk​ ​xk​−αˉk​ ​x0​​,σ2I)(11)

这就是得到的新的反向生成分布,也就是要去拟合的 “终极目标”。
  到这里,不知道给位小伙伴们有没有什么疑问,我们假设的DDIM方法,实际上对应的前向加噪过程已经变了,为什么还能用呢?核心就是因为模型在训练的时候没有用到每一步的训练方式,直接一步到位,也就是说即使之前跟的等式 p ( x k ∣ x s , x 0 ) p(x_k|x_s,x_0) p(xk​∣xs​,x0​)已经发生了变化,但是 p ( x t ∣ x 0 ) p(x_t|x_0) p(xt​∣x0​)没有变化,模型仍然是能用的,即可以使用DDIM这种方式加速。不得不佩服大牛们是真的厉害。

有了上面的概率分布,我们就可以采样了:
x s = α ˉ s x 0 + 1 − α ˉ s − σ 2 x k − α ˉ k x 0 1 − α ˉ k + σ 2 ε (12) x_s=\sqrt{\bar{\alpha}_{s}} x_0+\sqrt{1-\bar{\alpha}_{s}-\sigma^2} \frac{x_k-\sqrt{\bar{\alpha}_k} x_0}{\sqrt{1-\bar{\alpha}_k}}+ \sigma^2\varepsilon \tag{12} xs​=αˉs​ ​x0​+1−αˉs​−σ2 ​1−αˉk​ ​xk​−αˉk​ ​x0​​+σ2ε(12)

其中,上面的式子严格满足 s < k s<k s<k 。于是,我们就可以从时间序列 { 0 , . . . , T } \{0,...,T\} {0,...,T}中随机取一个长度为 l l l的升序子序列,通过上面的式子迭代采样 l l l次最终得到我们想要的 x 0 x_0 x0​。但是,还有一个问题,上面的式子还有一个未知量 σ 2 \sigma^2 σ2怎么办?我们可以想到两种最简单的值,一个就是直接让他等于0,这时候就变成了确定性的过程了,就变成了固定的生成过程了。第二种取值可以直接参考DDPM的取值,即 σ = η 1 − α t − 1 ˉ 1 − α t ˉ β t , η ∈ [ 0 , 1 ] \sigma=\eta\sqrt{\frac{1-\bar{\alpha_{t-1}}}{1-\bar{\alpha_t}}\beta_t},\eta \in [0,1] σ=η1−αt​ˉ​1−αt−1​ˉ​​βt​ ​,η∈[0,1],论文中提到,如果令 σ = 1 − α t − 1 ˉ 1 − α t ˉ β t \sigma=\sqrt{\frac{1-\bar{\alpha_{t-1}}}{1-\bar{\alpha_t}}\beta_t} σ=1−αt​ˉ​1−αt−1​ˉ​​βt​ ​,也就是 η = 1 \eta=1 η=1,这个过程就变成了马尔科夫的过程了,有兴趣的可以自己证明一下,即证明上面的采样公式的均值和DDPM的均值一样即可(注意脚标换一下: k , s = t , t − 1 k,s=t,t-1 k,s=t,t−1)。当 η = 0 \eta=0 η=0时,就是DDIM,所以说DDIM仅仅是一个采样方式,而当 η = 0 \eta=0 η=0 时,由于式(11)中唯一具有随机性的 σ ϵ \sigma\epsilon σϵ此时亦为0,因此采样过程不再具有随机性,每个 x T x_T xT​对应了确定的(deterministic) x 0 x_0 x0​.
  作者在文章中指出,当步数 l l l很小时, η = 0 \eta=0 η=0效果最好,并且当 η = 0 \eta=0 η=0时,20步的生成结果与100步的生成结果一致性很强,这是显然的,因为此时模型变为了确定性模型(deterministic),但是这里面值得关注的是,由于当 η = 0 \eta=0 η=0时,每个 x T x_T xT​对应唯一的KaTeX parse error: Expected group after '_' at position 3: x0_̲,这有点类似GAN和VAE,那我们可以认为此时的 x T x_T xT​就是一个high-level的图像编码向量,里面可能蕴涵了大量的信息特征,也许可以用于其他下游任务。最后,作者论述了当 η = 0 \eta=0 η=0时,式(12)可以写成常微分方程的形式,因此可以理解为模型是在用欧拉法近似从 x 0 x_0 x0​到 x T x_T xT​的编码函数。

2 总结

  我们来总结一下,顺便回答一下上面提出的两个问题。DDPM是根据马尔科夫链建立起来的前向过程-逆向过程,所以他不能通过“跳步”实现图像生成;为了满足 x T ∼ N ( 0 , 1 ) x_T \sim N(0,1) xT​∼N(0,1),所以 T T T不能太小,这就导致了采样速度比较慢。
  DDIM通过自己设计的优化了目标 p ( x t − 1 ∣ x t , x 0 ) p(x_{t-1}|x_t,x_0) p(xt−1​∣xt​,x0​),取消了马尔科夫的限制,在不影响DDPM的边界分布( x t = α t ˉ x 0 + 1 − α t ˉ ε x_t=\sqrt{\bar{\alpha_t}}x_0+\sqrt{1-\bar{\alpha_t}}\varepsilon xt​=αt​ˉ​ ​x0​+1−αt​ˉ​ ​ε)的条件下极大的缩短了采样的步数。所以,训练好的DDPM可以直接拿来通过DDIM的采样方法进行采样,不需要再去训练一次。

标签:Diffusion,采样,bar,Models,Denoising,sqrt,DDPM,alpha,x0
From: https://blog.csdn.net/qq_38683460/article/details/140790058

相关文章

  • Stable Diffusion 使用详解(4)---- 制作情景文本
    目录背景制作流程绘制底图书写提示词选底模常规参数设置controlNet处理CandycontrolNet设置DepthcontrolNet设置输出效果改进适当修改提示词适当修改controlNet适当修改底模背景制作情景文本,将文本较好的融入背景图片。首先要符合设计的场景,其次要凸显......
  • 【AI绘画stable diffusion1.5 夏日黄花Lora模型】摄影级真人写真,逼真大片!唯美!看完被震
    前言今天小南带来了三款鲜花摄像SD1.5夏日黄花Lora模型,一起来看看能够产出什么样的大片感。模型推荐majicMIXrealistic麦橘写实_v7,权重0.65。DPM++2MKarras采样推荐。开高清修复,开adetailer修复脸部本文涉及模型、插件下载请扫描免费获取哦**触发词:**blurry,dept......
  • stable diffusion1.5炫彩新优设大模型V2又又又更新啦!震撼高清!细节拉满!新优设上线!
    前言虽然xl有了,有了SD3,但不论准确度,还是用法,1.5依然有着明显的优势。小南今天同样带来了一款SD1.5大模型。近期关注到马丁大佬的炫彩新优设DesignGenius【炫彩新优设】SD1.5设计大模型两周前发布了V2新版本。马丁大佬的作品总是能够给人带来意外的惊喜。优设V1版本人像......
  • 【Stable Diffusion真人大模型】再次升级!太逼真了!SD1.5模型超高真实度,细腻程度媲美XL
    前言AWPortraitWW模型再次升级,大佬**“DynamicWang”**于7月4日发布最新升级版本AWPortraitWW1.1版本。本次升级在画质表现上再一次提升。根据大佬所述该款模型的直出效果在细腻程度媲美XL和DIT架构的模型,在语义理解、人种及面部多样性上同样有了很大的提升,尤其是在棚拍及......
  • 关于Stable diffusion的各种模型,看这篇就可以了!
    大家好,这里是《Stablediffusion小白入门》系列的第3篇,主要是帮大家梳理下Stablediffusion里面的各种模型,模型在Stablediffusion中占据着至关重要的地位,不仅决定了出图的风格,也决定了出图质量的好坏。但在第一次接触SD的时候,我就被里面的模型搞到头大,不仅有多种模型后缀,......
  • Stable diffusion小白入门第2课:文生图精讲
    大家好,这里是《Stablediffusion小白入门》系列的第2篇,在上一篇——Stablediffusion小白入门第1课:软件安装及介绍,我们成功安装了Stablediffusion软件,而今天,我们将深入了解Stablediffusion的文生图功能,让你也能生成满意的图片!AI工具SD整合包、各种模型插件、提示词、AI人......
  • Stable Diffusion|用AI制作电商产品视觉
    今天分享一个用StableDiffusion制作“电商视觉海报”和“电商产品视觉”的小分享,以双十一为例,这个分享或许可以给你提供一些创作灵感,也有可能可以帮助你更高效的完成视觉海报的制作。1双十一视觉在开始之前,需要先准备一张双十一的字体图片。(图片来自网络,如有侵权,请联......
  • stable diffusion 入门教程
    sd基础工作原理&入门输入提示词后有文本编码器将提示词编译成特征向量,vae编码器将特征向量传入潜空间内,特征向量在潜空间内不断降噪,最后通过vae解码器将降噪之后的特征向量解码成一个个像素组成的图片一般选中默认vae模型解码编码的模型CLIP值越大,提前停止的越快,我们提......
  • Stable Diffusion 提示词攻略
    一、提示词作用提示词所做的工作是缩小模型出图的解空间,即缩小生成内容时在模型数据里的检索范围,而非直接指定作画结果。提示词的效果也受模型的影响,有些模型对自然语言做特化训练,有些模型对单词标签对做特化训练,那么对不同的提示词语言风格的反应就不同。二、提示词内容......
  • mitk-diffusion
    DWIDenoisingThisviewprovidesseveralmethodstodenoisediffusion-weightedimages.Simplyselecttheimagetodenoiseandpressthestartbutton.Thedefaultparametersshouldworkrelativelywell.TheNLMmethodisbyfartheslowest。该视图提供了几种对......