Diffusion Inversion技术
在图像生成/编辑领域中,Inversion 技术是指将一张(真实)图片转换为生成模型对应的 latent,要求将这个 latent 输入到生成模型中之后,能够重构出原始图片。这项技术是进行图像编辑的重要基础。本文将介绍扩散模型相关的 Inversion 技术。
背景:Diffusion加噪与去噪
首先我们简单介绍一下扩散模型的加噪与去噪,这里不会具体推导,而是直接给出采样过程的公式。本文考虑的都是 LDM,即需要用 vae 来进行真实图片空间与 latent 空间之间的相互变换,并在 latent 空间中进行加噪与去噪的过程。
加噪
加噪过程,是指给定一张真实图片的 latent
x
0
x_0
x0,不断地采样高斯噪声
ϵ
∼
N
(
0
,
I
)
\epsilon\sim\mathcal{N}(0,\mathbf{I})
ϵ∼N(0,I) ,按照预先定义的 scheduler 加到 latent 上。从第
t
−
1
t-1
t−1 步到第
t
t
t 步的加噪过程可以表示为:
x
t
=
α
t
x
t
−
1
+
1
−
α
t
ϵ
t
x_{t}=\sqrt{\alpha_t}x_{t-1}+\sqrt{1-\alpha_t}\epsilon_t
xt=αtxt−1+1−αtϵt
考虑到每一步采样的高斯噪声
z
t
z_t
zt 彼此之间是独立的,从
x
0
x_0
x0 到第
t
t
t 步的加噪过程可以通过一次采样完成:
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon
xt=αˉtx0+1−αˉtϵ
去噪
去噪过程,是指对一个随机采样的高斯噪声,使用参数化网络
ϵ
θ
\epsilon_\theta
ϵθ,不断地预测出当前步加的噪声
ϵ
(
x
t
,
t
)
\epsilon(x_t,t)
ϵ(xt,t) 并减去改噪声,从而一步步地生成新图片。从第
t
t
t 步到第
t
−
1
t-1
t−1 步的去噪过程表示为:
x
t
−
1
=
1
α
t
(
x
t
−
β
t
1
−
α
ˉ
t
ϵ
θ
(
x
t
,
t
)
)
+
σ
t
z
x_{t-1}=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t))+\sigma_tz
xt−1=αt1(xt−1−αˉtβtϵθ(xt,t))+σtz
注意到除了减去当前步预测出的噪声,还有一项
σ
t
z
\sigma_tz
σtz。这一项是在采样生成的每一步中加入的随机噪声,是为了提升生图的多样性。当然,这个随机噪声也可以没有,这样的话整个生图过程就是完全确定性的(deteministic)。加不加这个噪声取决于采样过程中的 scheduler,如 DDPM 中一般是加噪声的,而 DDIM 中一般不加。
注意式中的 β t \beta_t βt 等均为 scheduler 预先定义的超参数, α t = 1 − β t , α ˉ t = ∏ i = 1 t α i \alpha_t=1-\beta_t,\bar\alpha_t=\prod_{i=1}^t\alpha_i αt=1−βt,αˉt=∏i=1tαi。
DDIM Inversion
要反推出一张图片的 latent,需要保证采样过程是确定性的。也就是说,生图过程是一个确定性的映射,将任一个 latent,确定性地映射为一张真实图片,也能反过来将真实图片映射为一个 latent。那么,上式中的
σ
t
z
\sigma_tz
σtz 这一项随机噪声应该是不加的。DDPM 采样过程需要在每一步加入随机噪声,不满足确定性的要求。而 DDIM 的采样过程则符合这一要求。另外,DDIM 可以进行跳步采样,效率更高。因此,DDIM Inversion 是扩散模型 Inversion 技术中最常见的方法。具体来说,公式 3 可以改写为 DDIM 的采样过程:
x
t
−
1
=
α
ˉ
t
−
1
(
x
t
−
1
−
α
ˉ
t
ϵ
θ
(
x
t
,
t
)
α
ˉ
t
)
⏟
当前步预测的
x
0
+
1
−
α
ˉ
t
−
1
−
α
t
2
ϵ
θ
(
x
t
,
t
)
⏟
指向
x
t
的方向
+
σ
t
z
⏟
每步加的随机噪声
x_{t-1}=\sqrt{\bar\alpha_{t-1}}\underbrace{(\frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_\theta(x_t,t)}{\sqrt{\bar\alpha_t}})}_{当前步预测的x_0}+\underbrace{\sqrt{1-\bar\alpha_{t-1}-\alpha^2_t}\epsilon_\theta(x_t,t)}_{指向x_t的方向}+\underbrace{\sigma_tz}_{每步加的随机噪声}
xt−1=αˉt−1当前步预测的x0
(αˉtxt−1−αˉtϵθ(xt,t))+指向xt的方向
1−αˉt−1−αt2ϵθ(xt,t)+每步加的随机噪声
σtz
其中最后一项随机噪声丢掉不加。
现在我们有一张真实图片,要反推出扩散模型对应的 latent。也就是说,
z
0
,
ϵ
θ
z_0,\epsilon_\theta
z0,ϵθ 已知,求
z
T
z_T
zT ,需满足当将
z
T
z_T
zT 输入到扩散模型中时,能够采样出
z
0
z_0
z0。可以看到,上式是由
x
t
x_{t}
xt 求
x
t
−
1
x_{t-1}
xt−1 的关系,我们对其进行变换,推出由
x
t
−
1
x_{t-1}
xt−1 求
x
t
x_t
xt 的关系,有:
x
t
=
α
ˉ
t
α
ˉ
t
−
1
x
t
−
1
+
α
ˉ
t
(
1
α
ˉ
t
−
1
−
1
α
ˉ
t
−
1
−
1
)
ϵ
θ
(
x
t
,
t
)
x_t=\sqrt{\frac{\bar\alpha_t}{\bar\alpha_{t-1}}}x_{t-1}+\sqrt{\bar\alpha_t}(\sqrt{\frac{1}{\bar\alpha_t}-1}-\sqrt{\frac{1}{\bar\alpha_{t-1}}-1}{})\epsilon_\theta(x_t,t)
xt=αˉt−1αˉtxt−1+αˉt(αˉt1−1−αˉt−11−1)ϵθ(xt,t)
一开始时,我们只有
x
0
x_0
x0,在每一步求
x
t
x_t
xt 时,还需要知道
ϵ
θ
(
x
t
,
t
)
\epsilon_\theta(x_t,t)
ϵθ(xt,t) ,而这一项目前是未知的。考虑到基于ODE过程可以在小步长的限制下进行反转的假设 ,我们可以使用
ϵ
θ
(
x
t
−
1
,
t
−
1
)
\epsilon_\theta(x_{t-1},t-1)
ϵθ(xt−1,t−1) 或者
ϵ
θ
(
x
t
−
1
,
t
)
\epsilon_\theta(x_{t-1},t)
ϵθ(xt−1,t) 来对
ϵ
θ
(
x
t
,
t
)
\epsilon_\theta(x_t,t)
ϵθ(xt,t) 进行近似。由于这里假设了小步长下进行近似,因此在使用 DDIM Inversion 时,总步长越大,步长间隔越小,近似就越精准,inversion 的效果越好。这可以通过 diffusers 库中的 DDIMInverseScheduler 进行实验验证 参考代码。
背景:无分类器引导的条件生成
目前看起来,只要通过选择一个确定性的 scheduler,并使用较小的步长间隔进行采样,保证近似的准确性,无条件扩散生成模型的 inversion 问题就比较好的解决了。然而,实际应用中我们需要的是条件生成模型(如文生图模型 Stable Diffusion)。当在 UNet 中引入了额外的控制条件,问题又变得复杂了。
当引入文本条件时,每一步的噪声预测变成了:
ϵ
θ
(
x
t
,
t
,
C
)
\epsilon_\theta(x_t,t,\mathcal{C})
ϵθ(xt,t,C)
其中
C
\mathcal{C}
C 为经过编码的文本条件 embedding。
目前文生图模型一般采用的是无分类器引导(Classifier-free Guidance)方法。该方法在训练时按一定概率混合训练有条件去噪
ϵ
θ
(
x
t
,
t
,
C
)
\epsilon_\theta(x_t,t,C)
ϵθ(xt,t,C) 和无条件去噪
ϵ
θ
(
x
t
,
t
,
∅
)
\epsilon_\theta(x_t,t,\empty)
ϵθ(xt,t,∅) (其中无条件 一般指空字符串 ""
的 embedding),并在训练时同时进行有条件去噪和无条件去噪,并根据引导系数
w
w
w 来对二者进行插值,作为条件:
ϵ
~
θ
(
x
t
,
t
,
C
,
∅
)
=
w
⋅
ϵ
θ
(
x
t
,
t
,
C
)
+
(
1
−
w
)
⋅
ϵ
θ
(
x
t
,
t
,
∅
)
\tilde{\epsilon}_\theta(x_t,t,\mathcal{C},\empty)=w\cdot\epsilon_\theta(x_t,t,\mathcal{C})+(1-w)\cdot\epsilon_\theta(x_t,t,\empty)
ϵ~θ(xt,t,C,∅)=w⋅ϵθ(xt,t,C)+(1−w)⋅ϵθ(xt,t,∅)
可以看到,当
w
=
0
w=0
w=0 时即为无条件生成模型,当
w
=
1
w=1
w=1 时,为常规的条件生成模型,当
w
>
1
w>1
w>1 时,可以增强文本条件控制的强度。在 Stable Diffusion 中,一般取
w
=
7.5
w=7.5
w=7.5。
如果目标仅仅是重构原始图像,那么使用 w = 1 w=1 w=1 即可,使用近似的 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t),每一步的误差几乎可以忽略不计。然而,在文本引导的图像编辑中,我们在反推出真实图片的 latent 之后,一般会修改文本 prompt,并期望生成结果在保证原始图像整体布局的情况下,对文本 prompt 的修改部分进行编辑。这就要求在重新生图的过程中使用较高的引导系数 w > 1 w>1 w>1,此时每一步的误差就会不断累积,对整体布局的重构造成影响,最终生成的图像严重偏离原图像。
Null Text Inversion 与 Prompt Tuning Inversion
如何修补生成过程中 CFG 文本条件对每步采样造成的影响呢?Null Text Inversion 的作者观察到, w = 1 w=1 w=1 时反推出的 latent 虽然在 CFG 引导的情况下重构结果不够好,但其实也大差不差,是一个不错的起始点。基于此,作者们提出了对 Null Text Embedding 进行 Pivotal Tuning 的方法。
具体来说,先使用 w = 1 w=1 w=1 对真实图片进行 DDIM Inversion,得到每一步的噪声 z t ∗ z_t^* zt∗ (这里及后文的符号发生了变化, z t ∗ z^*_t zt∗ 相当于之前的 x t x_t xt)。将 z T ∗ z^*_T zT∗ 和新的文本 prompt 输入到模型中进行图像编辑或重构,在此过程汇总,将每一步 CFG 采样出的噪声 ϵ θ \epsilon_\theta ϵθ 计算出的 z t z_t zt 向 z t ∗ z^*_t zt∗ 靠,计算二者的 MSE 损失,用于参数更新。更新哪些参数呢?为了保证对模型其他部分不造成影响,作者提出对 null text 的 embedding ∅ t \empty_t ∅t(即 CLIP text encoder 对空字符串的编码)进行微调,而所有其他网络以及文本 prompt 的 embedding 都保持不变。
另外需要注意,本方法在每一个时间步都会单独优化出一个特定的 null text embedding ∅ t \empty_t ∅t。这样,相当于为每张真实图片都训练出一组特定 null text embedding,在该 embedding 下进行图像重构或编辑,就可以保持原始图像的布局。
Null Text Inversion 的整个算法流程如下所示。给定一张真实图片及其(用 caption 模型得到的)文本 prompt
P
\mathcal{P}
P。对文本 prompt 进行编码得到 embedding
C
\mathcal{C}
C 。首先将 CFG scale 设置为
w
=
1
w=1
w=1,相当于仅使用文本条件,使用 DDIM Inversion 计算出一系列 pivot 噪声
z
T
∗
,
…
,
z
0
∗
z^*_T,\dots,z^*_0
zT∗,…,z0∗。然后将 CFG scale 设置为
w
=
7.5
w=7.5
w=7.5 ,将
z
ˉ
T
\bar{z}_T
zˉT 初始化为
z
T
∗
z^*_T
zT∗ ,
∅
T
\empty_T
∅T 初始化为
ψ
(
""
)
\psi(\text{""})
ψ("") ,开始训练。训练过程中,计算损失:
min
∅
t
∣
∣
z
t
−
1
∗
−
z
t
−
1
(
z
ˉ
t
,
∅
t
,
C
)
∣
∣
2
2
\min_{\empty_t}||z^*_{t-1}-z_{t-1}(\bar{z}_t,\empty_t,\mathcal{C})||_2^2
∅tmin∣∣zt−1∗−zt−1(zˉt,∅t,C)∣∣22
并更新当前步的
∅
t
\empty_t
∅t。这里
z
t
−
1
(
z
t
ˉ
,
∅
t
,
C
)
z_{t-1}(\bar{z_t},\empty_t,\mathcal{C})
zt−1(ztˉ,∅t,C) 是使用
z
ˉ
t
−
1
\bar{z}_{t-1}
zˉt−1 进行 DDIM 采样生图的简写记号。每个时间步的
∅
t
\empty_t
∅t 都要训练,每个时间步训练
N
N
N 次迭代,第
t
t
t 步训练结束后,根据训练好的
∅
t
\empty_t
∅t 初始化第
t
−
1
t-1
t−1 步的
z
ˉ
t
−
1
\bar{z}_{t-1}
zˉt−1 和
∅
t
−
1
\empty_{t-1}
∅t−1 分别为:
z
ˉ
t
−
1
=
z
t
−
1
(
z
ˉ
t
,
∅
t
,
C
)
∅
t
−
1
=
∅
t
\bar{z}_{t-1}=z_{t-1}(\bar{z}_t,\empty_t,\mathcal{C})\\ \empty_{t-1}=\empty_t
zˉt−1=zt−1(zˉt,∅t,C)∅t−1=∅t
一直迭代到最后,我们得到了 inversion latent
z
ˉ
T
\bar{z}_T
zˉT 和原始图片的各个时间步的 null text embedding
{
∅
t
}
t
=
1
T
\{\empty_t\}_{t=1}^T
{∅t}t=1T 。注意这该图片对应的一组 null text embedding 可以保存下来,再对该图片进行
w
>
1
w>1
w>1 的重构或者其他编辑时,直接复用即可。具体来说,此时 DDIM 采样生图的公式为:
z
t
−
1
(
z
ˉ
t
,
t
,
C
,
∅
t
)
=
α
ˉ
t
−
1
α
ˉ
t
z
ˉ
t
+
α
ˉ
t
−
1
(
1
α
ˉ
t
−
1
−
1
−
1
α
ˉ
t
−
1
)
ϵ
~
θ
(
z
ˉ
t
,
t
,
C
,
∅
t
)
z_{t-1}(\bar{z}_t,t,\mathcal{C},\empty_t)=\sqrt{\frac{\bar\alpha_{t-1}}{\bar\alpha_t}\bar{z}_t}+\sqrt{\bar\alpha_{t-1}}(\sqrt{\frac{1}{\bar\alpha_{t-1}}-1}-\sqrt{\frac{1}{\bar\alpha_t}-1})\tilde{\epsilon}_\theta(\bar{z}_t,t,\mathcal{C},\empty_t)
zt−1(zˉt,t,C,∅t)=αˉtαˉt−1zˉt+αˉt−1(αˉt−11−1−αˉt1−1)ϵ~θ(zˉt,t,C,∅t)
Prompt Tuning Inversion,则是与 Null Text Inversion 相反(对称),使用 w = 0 w=0 w=0 时的 z t z_t zt 作为 pivot,然后在生图过程中优化文本 prompt 的 embedding。
Negative Prompt Inversion
Null Text Inversion 将 w = 1 w=1 w=1 时的 z t ∗ z^*_t zt∗ 作为 pivot,为每个时间步学习出一个特定的 null text embedding ∅ t \empty_t ∅t ,在 CFG scale w > 1 w>1 w>1 时实现了较好的重构和编辑效果。但是,Null Text Inversion 毕竟还是需要轻量的训练,编辑效率比较低。Negative Prompt Embedding 则提出了一种无需优化的 inversion 方案,在编辑效果也不输 Null Text Inversion 的条件下,效率大大提升。
其实 Negative Prompt Inversion 的做法很简单,就是在重构或编辑的生图过程中,将 Negative Prompt 从空字符串替换成原图 prompt 即可。下面我们介绍一下这个结论的推导。
回顾一下 DDIM Inversion(公式 5),可写为:
z
t
∗
=
α
ˉ
t
α
ˉ
t
−
1
z
t
−
1
∗
+
α
ˉ
t
(
1
α
ˉ
t
−
1
−
1
α
ˉ
t
−
1
−
1
)
ϵ
θ
(
z
t
−
1
∗
,
t
−
1
,
C
)
z^*_t=\sqrt{\frac{\bar\alpha_t}{\bar\alpha_{t-1}}}z^*_{t-1}+\sqrt{\bar\alpha_t}(\sqrt{\frac{1}{\bar\alpha_t}-1}-\sqrt{\frac{1}{\bar\alpha_{t-1}}-1})\epsilon_\theta(z^*_{t-1},t-1,\mathcal{C})
zt∗=αˉt−1αˉtzt−1∗+αˉt(αˉt1−1−αˉt−11−1)ϵθ(zt−1∗,t−1,C)
注意这里用了
t
−
1
t-1
t−1 时刻的
ϵ
θ
(
z
t
−
1
∗
,
t
−
1
,
C
)
\epsilon_\theta(z^*_{t-1},t-1,\mathcal{C})
ϵθ(zt−1∗,t−1,C) 来近似未知的
t
t
t 时刻的
ϵ
θ
(
z
t
∗
,
t
,
C
)
\epsilon_\theta(z^*_{t},t,\mathcal{C})
ϵθ(zt∗,t,C)。将该式代入公式 (10) 有:
z
ˉ
t
−
1
−
z
t
−
1
∗
=
α
ˉ
t
−
1
(
1
α
ˉ
t
−
1
−
1
−
1
α
ˉ
t
−
1
)
(
ϵ
~
θ
(
z
ˉ
t
,
t
,
C
,
∅
t
)
−
ϵ
θ
(
z
t
−
1
∗
,
t
−
1
,
C
)
)
\bar{z}_{t-1}-z^*_{t-1}=\sqrt{\bar\alpha_{t-1}}(\sqrt{\frac{1}{\bar\alpha_{t-1}}-1}-\sqrt{\frac{1}{\bar\alpha_t}-1})(\tilde{\epsilon}_\theta(\bar{z}_t,t,\mathcal{C},\empty_t)-\epsilon_\theta(z^*_{t-1},t-1,\mathcal{C}))
zˉt−1−zt−1∗=αˉt−1(αˉt−11−1−αˉt1−1)(ϵ~θ(zˉt,t,C,∅t)−ϵθ(zt−1∗,t−1,C))
在 null text inversion 中,
z
ˉ
t
\bar{z}_t
zˉt 的优化目标是
z
t
∗
z^*_t
zt∗ ,Negative Prompt Inversion 在这里假设优化得做够好,即有
z
ˉ
t
=
z
t
∗
\bar{z}_t=z^*_t
zˉt=zt∗。根据上式可以看到,要达到最优的条件是式中最后一项为 0,即:
ϵ
θ
(
z
t
−
1
∗
,
t
−
1
,
C
)
=
ϵ
~
θ
(
z
ˉ
t
,
t
,
C
,
∅
t
)
=
w
ϵ
θ
(
z
ˉ
t
,
t
,
C
)
+
(
1
−
w
)
ϵ
θ
(
z
ˉ
t
,
t
,
∅
t
)
\begin{align} \epsilon_\theta(z^*_{t-1},t-1,\mathcal{C})&=\tilde{\epsilon}_\theta(\bar{z}_t,t,\mathcal{C},\empty_t) \\ &=w\epsilon_\theta(\bar{z}_t,t,\mathcal{C})+(1-w)\epsilon_\theta(\bar{z}_t,t,\empty_t) \end{align}
ϵθ(zt−1∗,t−1,C)=ϵ~θ(zˉt,t,C,∅t)=wϵθ(zˉt,t,C)+(1−w)ϵθ(zˉt,t,∅t)
又假设有相邻步的模型预测可以相互近似,即有:
ϵ
θ
(
z
t
−
1
∗
,
t
−
1
,
C
)
=
ϵ
θ
(
z
t
∗
,
t
,
C
)
=
ϵ
θ
(
z
ˉ
t
,
t
,
C
)
\epsilon_\theta(z^*_{t-1},t-1,\mathcal{C})=\epsilon_\theta(z^*_t,t,\mathcal{C})=\epsilon_\theta(\bar{z}_t,t,\mathcal{C})
ϵθ(zt−1∗,t−1,C)=ϵθ(zt∗,t,C)=ϵθ(zˉt,t,C)
从而,当:
ϵ
θ
(
z
ˉ
t
,
t
,
C
)
=
ϵ
θ
(
z
ˉ
t
,
t
,
∅
t
)
\epsilon_\theta(\bar{z}_t,t,\mathcal{C})=\epsilon_\theta(\bar{z}_t,t,\empty_t)
ϵθ(zˉt,t,C)=ϵθ(zˉt,t,∅t)
时,达到最优。
也就是说,Null Text Inversion 的优化结果 ∅ t \empty_t ∅t 可以直接由原文本条件 embedding C \mathcal{C} C 来代替。这样我们就可以省略掉麻烦的优化过程,在重构或编辑的生图过程中,直接将 Negative Prompt 从空字符串替换成原图 prompt。从而,
- 在重构时,CFG 中的条件 embedding 和无条件 embedding 相等,都是 C \mathcal{C} C 。从而就相当于没有 CFG 的无条件生成模型,DDIM Inversion 自然可以成立。
- 在编辑时,直接将 C \mathcal{C} C 当做 Null Text Inversion 中优化得到的 ∅ t \empty_t ∅t ,大大提高了编辑效率。
实验显示,Negative Prompt Inversion 的效果与 Null Text Inversion 相当,但是由于无需优化过程,时间大幅减少。
DDPM Inversion
之前提到,之所以 DDIM 适合而 DDPM 不适合做 Inversion,是因为它在采样过程中的每一步都会采样随机噪声加到结果中,整个采样生图过程是随机的。但其实,也有办法用 DDPM 做 Inversion。
DDPM 之所以不能做 Inversion,是因为存在随机性,那我们将 DDPM 采样过程中所有加入的噪声也计算出来,消除随机性就行了嘛。也就是说,DDPM Inversion 对应的 latent 不止包括 Diffusion 最原始的噪声 latent x T x_T xT ,还包括每一步中加入的噪声 { ϵ t } t = 1 T \{\epsilon_t\}_{t=1}^T {ϵt}t=1T 。这里介绍 DDPM Inversion 的相关工作包括 Cycle Diffusion 和 Edit Friendly DDPM Inversion 两篇。
Cycle Diffusion 采用的 Inversion 思路是尽量逼近 DDPM 采样本身的分布。具体来说:
-
首先随机采样 x T ∼ N ( 0 , I ) x_T\sim\mathcal{N}(0,\mathbf{I}) xT∼N(0,I)
-
对于每个 t = T , … , 1 t=T,\dots,1 t=T,…,1 ,根据公式 (2) 使用 x t x_t xt 和给定的真实 x 0 x_0 x0 计算出 ϵ t \epsilon_t ϵt
ϵ t = x t − α ˉ t 1 − α ˉ t \epsilon_t=\frac{x_t-\sqrt{\bar\alpha_t}}{\sqrt{1-\bar\alpha_t}} ϵt=1−αˉtxt−αˉt -
记公式 (4) 为:
x t − 1 = α ˉ t − 1 ( x t − 1 − α ˉ t ϵ θ ( x t , t ) α ˉ t ) + 1 − α ˉ t − 1 − α t 2 ϵ θ ( x t , t ) + σ t z = μ ^ t ( x t ) + σ t z t \begin{align} x_{t-1}&=\sqrt{\bar\alpha_{t-1}}{(\frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_\theta(x_t,t)}{\sqrt{\bar\alpha_t}})}+{\sqrt{1-\bar\alpha_{t-1}-\alpha^2_t}\epsilon_\theta(x_t,t)}+{\sigma_tz} \\ &=\hat\mu_t(x_t)+\sigma_tz_t \end{align} xt−1=αˉt−1(αˉtxt−1−αˉtϵθ(xt,t))+1−αˉt−1−αt2ϵθ(xt,t)+σtz=μ^t(xt)+σtzt
使用第 2 步求得的 ϵ t \epsilon_t ϵt ,替换掉上式中的 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t) ,计算出 μ ^ t ( x t ) \hat\mu_t(x_t) μ^t(xt),从而求出 x ^ t − 1 \hat{x}_{t-1} x^t−1 。 -
再根据求得的 x ^ t − 1 \hat{x}_{t-1} x^t−1 和 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t) ,求出 z t z_t zt。
-
最终就求得了真实 x 0 x_0 x0 对应的初始噪声 x T x_T xT 及每一步的随机噪声 z t z_t zt
这是一种最自然的 DDPM Inversion 的方式。然而,由于每一步都有 “标准答案”,这种 Inversion 方式的编辑性不好。Edit Friendly DDPM Inversion 则提出在每一步进行独立采样:
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
~
t
x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\tilde\epsilon_t
xt=αˉtx0+1−αˉtϵ~t
其中
ϵ
~
t
∼
N
(
0
,
I
)
\tilde\epsilon_t\sim\mathcal{N}(0,\mathbf{I})
ϵ~t∼N(0,I) 是独立采样的。注意上式虽然看起来与式 (2) 非常相似,但其实二者采样过程的分布是完全不同的。式 (2) 中的
ϵ
t
\epsilon_t
ϵt 之间是高度相关的(每一步都是之前步的噪声的基础上再加一个噪声),而上式中的
ϵ
~
t
\tilde\epsilon_t
ϵ~t 彼此之间则是完全独立的。这样就构建了一个与原 DDPM 采样生成过程不同的分布,但是该分布每步加入的噪声的之间彼此独立,提高了多样性,从而增强了编辑性。所以称为是一种 “编辑友好” 的 DDPM Inversion 方式。
总结
Inversion 技术的两个关键目标是重构性能和编辑性能,既要与原图布局结构大致保持一致,又要能够按照新的 prompt 合理地编辑修改图中的语义内容。
DDIM 本身是一种确定性的采样过程,十分适合作 Inversion,也是扩散模型 Inversion 的常用 baseline。当引入 CFG 文本条件控制后,重构编辑过程要求有较高的条件引导系数,使得问题进一步复杂。Null Text Inversion 提出使用无 CFG 时的 DDIM Inversion 结果作为 pivot 来迭代优化 null text embedding 解决了这一问题。Negative Prompt Inversion 则通过合理假设,推导出只要将原 prompt 设置为 Negative Prompt 即可达到类似的效果。
DDPM 虽然在每步采样中加入了随机噪声,但如果我们将每一步加入的随机噪声也计算出来,那 DDPM 就也是一种确定性的采样过程了。Cycle Diffusion 中使用了最直接的 DDPM Inversion 方式,使得生成过程尽量靠近 DDPM 本身的分布。而 Edit Friendly 则提出在每一步中独立采样噪声,提高编辑性。