Diffusion Inversion技术

news2024/11/28 8:50:30

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【触想智能】无风扇工控一体机的优点与定制要求分析

随着工业自动化的不断推进,工控一体机作为自动化生产的核心设备,在工业生产中发挥着越来越重要的作用。 在工控一体机的设计中,散热是一个非常关键的问题,而无风扇工控一体机的出现为解决这个问题提供了新方法。 无风扇工控一体机…

栈结构(详解)

1.栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&am…

【SAP ABAP学习资料】通过RFC接口上传图片至SAP 图片格式转换 图片大小调整

SAP图片相关: 链接: 【SAP ABAP学习资料】图片上传SAP 链接: 【SAP ABAP学习资料】屏幕图片预览 链接: 【SAP ABAP学习资料】smartforms打印图片,动态打印图片 需求: SAP上传图片只能本地电脑选择图片通过SE78或PERFORM IMPORT_BITMAP_BDS上…

免费的集成组件有哪些?

集成组件是指将多个软件或系统进行整合,以实现更高效、更可靠的数据处理和管理。在数据管理和分析领域,集成组件是不可或缺的工具之一。 在当今高度信息化的时代,集成组件在各行各业的应用中扮演着举足轻重的角色。集成组件能够将不同来源的…

品牌舆情都包含什么内容?建议收藏

一个品牌的声誉、形象、产品质量、服务质量等,无时无刻不在接受着大众的检验。互联网传播迅速,一个不好的舆论直接导致整个品牌的声誉受到严重影响。品牌舆情都包含什么内容?接下来伯乐网络传媒就来给大家讲一讲。 一、品牌舆情的基本构成 1…

局域网语音对讲系统_IP广播对讲系统停车场解决方案

局域网语音对讲系统_IP广播对讲系统停车场解决方案 需求分析: 随着国民经济和社会的发展, 选择坐车出行的民众越来越多。在保护交通安全的同时,也给停车场服务部门提出了更高的要求。人们对停车场系统提出了更高的要求与挑战, 需要…

从XML配置角度理解Spring AOP

1. Spring AOP与动态代理 1.1 Spring AOP和动态代理的关系 Spring AOP使用动态代理作为其主要机制来实现面向切面的编程。这种机制允许Spring在运行时动态地创建代理对象,这些代理对象包装了目标对象(即业务组件),以便在调用目标对…

C++11智能指针之一(简介)

1 概述 从C11开始C语言越来向现代化语言转变。尤其是智能指针的引入,代码中不会直接使用new/delete了。C11智能指针有三种分别是:shared_ptr,weak_ptr 和unique_ptr 。 2 类图 3 共享指针(shared_ptr) 接口函数: shared_ptr 构…

华企盾DSC数据防泄密软件有哪些水印功能?

在企业数据安全领域,水印技术是一种重要的信息保护策略,用于防止数据泄露和确保信息的原始性和完整性。根据回顾的资料,以下是企业中常用的几种水印技术: 屏幕浮水印:这种水印能够在用户的屏幕上显示公司的标志或者其他…

【回溯 栈 代数系统 动态规划】282. 给表达式添加运算符

本文涉及知识点 回溯 栈 代数系统 动态规划 LeetCode 282. 给表达式添加运算符 给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)、- 或 * ,返回 所有 能够得到 ta…

【小笔记】neo4j用load csv指令导入数据

【小笔记】neo4j用load csv指令导入数据 背景 很久没有用load CSV的方式导入过数据了因为它每次导入有数量限制(印象中是1K还是1W),在企业中构建的图谱往往都是大规模的,此时通常采用的是Neo4j-admin import方式。最近遇到了一些…

HarmonyOS开发案例:【Stage模型下Ability的创建和使用】

介绍 基于Stage模型,对Ability的创建和使用进行讲解。首先在课程中我们将带领大家使用DevEco Studio创建一个Stage模型Ability,并使用UIAbilityContext启动另一个Ability,然后借助Want,在Ability之间传递参数,最后我们…

Redis实战笔记

黑马点评项目笔记 一:数据交互: 1.把String解析成Java对象集合并且存入Redis及Java对象集合转换成JSON。 Overridepublic Result queryTypeList() {String s stringRedisTemplate.opsForValue().get("cache:list:");System.out.println(&qu…

Gitee添加仓库成员

1.进入你的项目 2.点击管理 3.左侧有个仓库管理 4.要加哪个加哪个,有三个方式~ 可以直接添加之前仓库合作过的开发者

【SpringBoot记录】从基本使用案例入手了解SpringBoot-数据访问-更改DataSource(2)

前言 通过上一个数据访问基本案例成功可以发现,SpringBoot在数据访问案例中也做了许多自动配置,上节只分析了其中的Properties。 而在自动配置包的jdbc下 还有其他配置文件。 根据名称可以大致了解他们的作用: DataSourceAutoConfiguration…

前端报错 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse

问题描述​ 控制台提示 SyntaxError: Unexpected number in JSON at position xxxx at JSON.parse 问题原因​ 原因:JSON 数据格式错误,是否符合 JSON 格式。 解决方法​ 应为json格式数据 什么是json格式数据 JSON(JavaScript Object …

前端XHR请求数据

axios封装了XHR(XMLHttpRequest) 效果 项目结构 Jakarta EE9&#xff0c;Web项目。 无额外的maven依赖 1、Web页面 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title&…

MySQL基础入门【mysql初识 | 数据库操作 | 表操作 | sql数据类型】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;为什么会有…

Vue3 动态引入图片: require is not defined报错

问题&#xff1a;在 Vue3 项目中&#xff0c;使用 require 引入图片&#xff0c;报错 require is not defined 原因&#xff1a; Vue3 使用的是 vite&#xff0c;而 require 是 Webpack 的方法。 官网说明&#xff1a; 解决代码&#xff1a; <template><div v-fo…

k8s coredns配置

1.coredns可根据集群具体数量修改pod数&#xff0c;官方推荐比例为5/1&#xff0c;即有15台服务器最好是3个pod。 2.coredns会继承pod所在主机的dns解析,修改了主机的dns解析之后&#xff0c;coredns有一段时间的缓存&#xff0c;重启coredns才会在集群内部立刻生效该解析。 …