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 则提出在每一步中独立采样噪声,提高编辑性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/626008.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四川汇聚荣:拼多多开店流程分享

随着电商行业的蓬勃发展,越来趀多的创业者选择在线上平台开设店铺。其中,拼多多以其独特的团购模式和巨大的用户基数成为众多商家的新宠。但对于初次涉足的商家而言,如何正确高效地开设一家拼多多店铺,无疑是他们迫切需要解决的难…

Windows安装Linux子系统

WSL 是 Windows Subsystem for Linux 的简称,意思是 linux 版的 window 子系统。适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。 Linux 分发版可以在…

下单制造fpc的工艺参数

FPC工艺简介 - 百度文库 (baidu.com) FPC工艺参数 - 豆丁网 (docin.com) FPC柔性线路板的主要参数.ppt (book118.com) 捷多邦: 华秋: 背胶: FPC板背胶是可以粘接在光滑表面的一种薄型胶带,可以在狭小以及光滑的表面上用来提供高…

[MRCTF2020]PixelShooter

是个安卓游戏题 re手肯定不会去玩游戏,先jadx分析一波 没有什么关键信息,但找到了一个unity类,想到apk也可以解压缩得到 .so 或者 Assembly-CSharp.dll 故又在dnspy分析一下 看了半天没有和flag有关信息,看wp: Asse…

深入理解K8S【安全认证机制kubectlconfig】

深入理解K8S【安全认证机制】 1 核心概念 1.1 安全体系 对于大型系统来说,对业务的权限、网络的安全认证是必不可少的。 对于linux系统来说,用户和组、文件权限、SELinux、防火墙、pam、sudo等,究其核心的目的都是为了保证系统是安全的。 …

Charger之三动态电源路径管理(DPPM)

-----本文简介----- 主要内容包括: 领资料:点下方↓名片关注回复:粉丝群 硬件之路学习笔记公众号 Charger的动态电源路径管理(DPPM) 前篇内容:①电池管理IC(Charger)了解一下&…

过滤器Filter和拦截器Interceptor实现登录校验

一.过滤器 Filter过滤器可以把对资源的请求拦截下来,从而实现一些登录验证的功能 1.Filter的快速入门 1.定义Filter:定义一个类,实现Filter接口,并重写其所有方法。2.配置 public class dofilter implements Filter {Override //初始化只…

汇聚荣电商:拼多多开店需要多少费用?

想要在拼多多这个巨大的电商平台上开一家属于自己的店铺,很多创业者都会关心一个问题:开店需要多少费用?答案并不复杂,但背后的经营哲学和策略却值得深究。接下来,让我们从四个不同的方面来详细探讨这个问题。 一、开店成本分析 …

【教程】Linux/Jetson 安装X11VNC同步屏幕内容

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 目录 背景说明 实际效果 安装步骤 安装 x11vnc 配置 x11vnc 配置 x11vnc 作为系统服务 使用 VNC 客户端连接 背景说明 通常vnc-server是单…

汇昌联信电商:拼多多网店好做吗?

在电子商务的海洋中,拼多多以其独特的团购模式和亲民策略迅速崛起,吸引了大批消费者和商家的目光。对于“拼多多网店好做吗?”这个问题,答案并非简单的是与否,而是需要从多个维度进行深入分析。 一、市场定位与竞争环境 拼多多定…

基于STM32F401RET6智能锁项目(BS82166A_3触摸按键)

一、BS81x 特征 • 工作电压:2.2V~5.5V • 低待机电流 • 自动校准功能 • 可靠的触摸按键检测 • 自动切换待机 / 工作模式 • 最长按键输出时间检测 • 具备抗电压波动功能 • Level Hold,可选高有效或低有效 • NMOS 输出内建上拉电阻 /CMOS 直接 输出…

PDF文件恢复:四种实用方法全解析

如何恢复已删除的PDF文件? PDF是Portable Document Format(便携式文档格式)的缩写,是一种由Adobe Systems开发的文件格式。PDF文件可以包含文本、图形、链接、多媒体以及其他各种元素,并且能够在各种操作系统和设备上…

[uniapp] 配置ts类型声明

我想引进图片,但是报错 声明一下就行 TypeScript 支持 | uni-app官网 创建tsconfig.json文件,复制官网的配置 然后在随便一个目录下写一个随便名字的.d.ts文件 例如这样 保存就行 因为ts是默认扫描全部的,所以要按照官网的写法 把不必要的排除掉就行,免得浪费性能

力扣HOT100 - 279. 完全平方数

解题思路&#xff1a; 动态规划 class Solution {public int numSquares(int n) {int[] dp new int[n 1];// 初始化dp数组&#xff0c;默认最坏情况是每个数都是由1相加得到的for (int i 1; i < n; i) {dp[i] i;}for (int i 1; i < n; i) {for (int j 1; j * j &…

H5嵌入原生----兼容安卓与ios

主要分UI展示&#xff0c;键盘&#xff0c;输入框等等。解决bug最苦恼的问题不是没有解决方案&#xff0c;而是你没有找到真正的原因。再就是现象难以重现&#xff0c;每次都要发布代码&#xff0c;然后到手机app中去测试&#xff0c;模拟。这些地方会耗费大量的精力。 一、UI…

C++ C# 贝塞尔曲线

二阶贝塞尔曲线公式 三阶贝塞尔曲线公式 C 三维坐标点 二阶到N阶源码 //二阶公式&#xff1a; FVector BezierUtils::CalculateBezierPoint(float t, FVector startPoint, FVector controlPoint, FVector endPoint) {float t1 (1 - t) * (1 - t);float t2 2 * t * (1 - t);…

MQ消息积压,把我整吐血了

我之前在一家餐饮公司待过两年&#xff0c;每天中午和晚上用餐高峰期&#xff0c;系统的并发量不容小觑。为了保险起见&#xff0c;公司规定各部门都要在吃饭的时间轮流值班&#xff0c;防止出现线上问题时能够及时处理。 我当时在后厨显示系统团队&#xff0c;该系统属于订单…

图像归一化处理

归一化 归一化是一种简化计算的方式&#xff0c;即将有量纲的表达式&#xff0c;经过变换&#xff0c;化为无量纲的表达式&#xff0c;成为标量。 在多种计算中都经常用到这种方法。 简单介绍 归一化是一种无量纲处理手段&#xff0c;使物理系统数值的绝对值变成某种相对值关…

一台linux通过另一台linux访问互联网-TinyProxy

参考&#xff1a; https://blog.csdn.net/weixin_41831919/article/details/113061317https://www.yuncongz.com/archives/1.htmlhttps://blog.csdn.net/aoc68397/article/details/101893369 环境&#xff1a;ubuntu 18.04 机器1: IP 219.216.65.252 (可以访问外网) 机器2: IP…

文本换列新手教程:一键两列对换操作,提升文本编辑效率的实用技巧

在文本编辑过程中&#xff0c;有时我们需要对文本进行列与列之间的对换操作&#xff0c;以满足特定的排版需求或信息呈现方式。这种操作虽然看似简单&#xff0c;但对于新手来说&#xff0c;可能会因为不熟悉相关技巧而感到困惑。今天&#xff0c;我们将为大家介绍一种简单而高…