Diffusion Inversion技术

2024-05-14 16:12
文章标签 技术 diffusion inversion

本文主要是介绍Diffusion Inversion技术,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 t1 步到第 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=αt xt1+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=αˉt x0+1αˉt ϵ

去噪

去噪过程,是指对一个随机采样的高斯噪声,使用参数化网络 ϵ θ \epsilon_\theta ϵθ,不断地预测出当前步加的噪声 ϵ ( x t , t ) \epsilon(x_t,t) ϵ(xt,t) 并减去改噪声,从而一步步地生成新图片。从第 t t t 步到第 t − 1 t-1 t1 步的去噪过程表示为:
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 xt1=αt 1(xt1αˉ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}_{每步加的随机噪声} xt1=αˉt1 当前步预测的x0 (αˉt xt1αˉt ϵθ(xt,t))+指向xt的方向 1αˉt1α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} xt1 的关系,我们对其进行变换,推出由 x t − 1 x_{t-1} xt1 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=αˉt1αˉt xt1+αˉt (αˉt11 αˉt111 )ϵθ(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) ϵθ(xt1,t1) 或者 ϵ θ ( x t − 1 , t ) \epsilon_\theta(x_{t-1},t) ϵθ(xt1,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)+(1w)ϵθ(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∣∣zt1zt1(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}) zt1(ztˉ,t,C) 是使用 z ˉ t − 1 \bar{z}_{t-1} zˉt1 进行 DDIM 采样生图的简写记号。每个时间步的 ∅ t \empty_t t 都要训练,每个时间步训练 N N N 次迭代,第 t t t 步训练结束后,根据训练好的 ∅ t \empty_t t 初始化第 t − 1 t-1 t1 步的 z ˉ t − 1 \bar{z}_{t-1} zˉt1 ∅ t − 1 \empty_{t-1} t1 分别为:
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ˉt1=zt1(zˉt,t,C)t1=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) zt1(zˉt,t,C,t)=αˉtαˉt1zˉt +αˉt1 (αˉt111 αˉt11 )ϵ~θ(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=αˉt1αˉt zt1+αˉt (αˉt11 αˉt111 )ϵθ(zt1,t1,C)
注意这里用了 t − 1 t-1 t1 时刻的 ϵ θ ( z t − 1 ∗ , t − 1 , C ) \epsilon_\theta(z^*_{t-1},t-1,\mathcal{C}) ϵθ(zt1,t1,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ˉt1zt1=αˉt1 (αˉt111 αˉt11 )(ϵ~θ(zˉt,t,C,t)ϵθ(zt1,t1,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} ϵθ(zt1,t1,C)=ϵ~θ(zˉt,t,C,t)=wϵθ(zˉt,t,C)+(1w)ϵθ(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}) ϵθ(zt1,t1,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 采样本身的分布。具体来说:

  1. 首先随机采样 x T ∼ N ( 0 , I ) x_T\sim\mathcal{N}(0,\mathbf{I}) xTN(0,I)

  2. 对于每个 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αˉt xtαˉt

  3. 记公式 (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} xt1=αˉt1 (αˉt xt1αˉt ϵθ(xt,t))+1αˉt1α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^t1

  4. 再根据求得的 x ^ t − 1 \hat{x}_{t-1} x^t1 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t) ,求出 z t z_t zt

  5. 最终就求得了真实 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=αˉt x0+1αˉt ϵ~t
其中 ϵ ~ t ∼ N ( 0 , I ) \tilde\epsilon_t\sim\mathcal{N}(0,\mathbf{I}) ϵ~tN(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 则提出在每一步中独立采样噪声,提高编辑性。

这篇关于Diffusion Inversion技术的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989222

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出

AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出 在数字化时代,文本到语音(Text-to-Speech, TTS)技术已成为人机交互的关键桥梁,无论是为视障人士提供辅助阅读,还是为智能助手注入声音的灵魂,TTS 技术都扮演着至关重要的角色。从最初的拼接式方法到参数化技术,再到现今的深度学习解决方案,TTS 技术经历了一段长足的进步。这篇文章将带您穿越时

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。 less的中文官网:https://lesscss.cn/ 2. less编译工具 koala 官网 http://koala-app.

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

java线程深度解析(六)——线程池技术

http://blog.csdn.net/Daybreak1209/article/details/51382604 一种最为简单的线程创建和回收的方法: [html]  view plain copy new Thread(new Runnable(){                @Override               public voi

java线程深度解析(二)——线程互斥技术与线程间通信

http://blog.csdn.net/daybreak1209/article/details/51307679      在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制和多线程间通信的实例。 一、再现多线程下安全问题 先看开启两条线程,分别按序打印字符串的

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

嵌入式技术的核心技术有哪些?请详细列举并解释每项技术的主要功能和应用场景。

嵌入式技术的核心技术包括处理器技术、IC技术和设计/验证技术。 1. 处理器技术    通用处理器:这类处理器适用于不同类型的应用,其主要特征是存储程序和通用的数据路径,使其能够处理各种计算任务。例如,在智能家居中,通用处理器可以用于控制和管理家庭设备,如灯光、空调和安全系统。    单用途处理器:这些处理器执行特定程序,如JPEG编解码器,专门用于视频信息的压缩或解压。在数字相机中,单用途