[图像编辑外传01] DDIM Inversion
Table of Contents

本篇内容是对pix2pix-zero的3.1节Deterministic inversion的讲解

在DDIM的反向过程中,我们做的是:

xTDDIM采样(反向过程)x0x_T \xrightarrow{\text{DDIM采样(反向过程)}} x_0

现在inversion的意思是给定的是x0x_0,我们想找xTx_T,使得找到的xTx_T满足经过DDIM的采样过程能还原为x0x_0

xTDDIM采样x0找一个[采样前的起点]x_T \xrightarrow{\text{DDIM采样}} x_0 \quad \Rightarrow \quad \text{找一个[采样前的起点]}

于是我们从x0x_0沿着 DDIM 的采样过程“反着走”

x0反着走 DDIM 采样x1xTx_0 \xrightarrow{\text{反着走 DDIM 采样}} x_1 \rightarrow \cdots \rightarrow x_T

检索了一下关于DDIM Inversion,参考了这篇文章,得到如下2个思路

  • 思路一

    DDIM的采样公式

    xt1=αˉt1(xt1αˉtϵθ(xt,t)αˉt)+1αˉt1ϵθ(xt,t)(1)x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \left( \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \right) + \sqrt{1 - \bar{\alpha}_{t-1}} \, \epsilon_\theta(x_t, t) \tag{1}

    重写该公式,对调xt1x_{t-1}xtx_t​的位置,则:

    xt=αˉtαˉt1xt1αˉt1αˉt1αˉt1ϵθ(xt,t)+1αˉtϵθ(xt,t)(2)x_{t} = \frac{\sqrt{\bar{\alpha}_{t}}}{\sqrt{\bar{\alpha}_{t-1}}} \cdot x_{t-1} - \sqrt{\bar{\alpha}_{t}} \cdot \frac{\sqrt{1 - \bar{\alpha}_{t-1}}}{\sqrt{\bar{\alpha}_{t-1}}} \cdot \epsilon_\theta(x_{t}, t) + \sqrt{1 - \bar{\alpha}_{t}} \cdot \epsilon_\theta(x_{t}, t) \tag{2}

    由于我们事先无法知道xtx_t,所以ϵθ(xt,t)\epsilon_{\theta}(x_t,t)无法直接算出,所以只能使用ϵθ(xt1,t1)ϵθ(xt,t)\epsilon_{\theta}(x_{t-1},t-1) \approx \epsilon_{\theta}(x_{t},t)。这里用的是线性假设

    于是,式子改写为

    xt=αˉtαˉt1xt1αˉt1αˉt1αˉt1ϵθ(xt1,t1)+1αˉtϵθ(xt1,t1)(3)x_{t} = \frac{\sqrt{\bar{\alpha}_{t}}}{\sqrt{\bar{\alpha}_{t-1}}} \cdot x_{t-1} - \sqrt{\bar{\alpha}_{t}} \cdot \frac{\sqrt{1 - \bar{\alpha}_{t-1}}}{\sqrt{\bar{\alpha}_{t-1}}} \cdot \epsilon_\theta(x_{t-1}, t-1) + \sqrt{1 - \bar{\alpha}_{t}} \cdot \epsilon_\theta(x_{t-1}, t-1) \tag{3}

    再做整理,并分别替换ttt1t-1,在ϵθ\epsilon_{\theta}加入文本条件cc即得到pix2pix-zero说到的

    xt+1=αˉt+1xt1αˉtϵθ(xt,t,c)αˉt+1αˉt+1ϵθ(xt,t,c)(4)x_{t+1} = \sqrt{\bar{\alpha}_{t+1}} \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_\theta(x_t, t, c)}{\sqrt{\bar{\alpha}_t}} + \sqrt{1 - \bar{\alpha}_{t+1}} \, \epsilon_\theta(x_t, t, c) \tag{4}
  • 思路二

    DDIM的采样公式

    xt1=αˉt1(xt1αˉtϵθ(xt,t)αˉt)+1αˉt1ϵθ(xt,t)(1)x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} \left( \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \right) + \sqrt{1 - \bar{\alpha}_{t-1}} \, \epsilon_\theta(x_t, t) \tag{1}

    可以看作是对预测的x0x_0和预测的噪声ϵθ\epsilon_{\theta}的加权,权重分别是αˉt1\sqrt{\bar{\alpha}_{t-1}}1αˉt1\sqrt{1 - \bar{\alpha}_{t-1}},即:

    x0t=xt1αˉtϵθ(xt,t)αˉt(5)x^t_{0} = \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \tag{5} xt1=αˉt1x0t+1αˉt1ϵθ(xt,t)(6)x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} x^t_0 + \sqrt{1 - \bar{\alpha}_{t-1}} \, \epsilon_\theta(x_t, t) \tag{6}

    公式(6)中直接将t1{t-1}时刻替换为t+1{t+1}时刻,同时不改变是由tt时刻预测的x0tx^t_0,即

    xt+1=αˉt+1x0t+1αˉt+1ϵθ(xt,t)(7)x_{t+1} = \sqrt{\bar{\alpha}_{t+1}} x^t_0 + \sqrt{1 - \bar{\alpha}_{t+1}} \, \epsilon_\theta(x_t, t) \tag{7}

    则可以直接得到公式(4)。

    关于这里的变化,给如下的理由:

    可以看到这里DDIM采样去噪的过程被本质化为:用xtx_t先预估初始的x0x_0​(式(5)),这里的x0x_0一般是不准确的,而且tt越大越不准确,所以我们预估之后还要加噪到t1t-1步,矫正得到xt1x_{t-1}(式(6)),去噪的过程就是这个“预估-矫正”的过程不断重复,tt越来越小,x0x_0也越来越清晰,最后一步预估得到的x0x_0即为生成的图像。

    基于以上理解,那我们其实是可以在第tt步用式(5)预估x0x_0,然后用式(7)得到xt+1x_{t+1}。那么其实此时的t1t-1换为t+1t+1也是一种线性假设。

而pix2pix-zero的3.1的写法,太过直接,没有推导,所以之前一直困惑我,作此讲解

  • 另外附上一位大佬的写法

    ddim 的 sampling 公式

    xt1=αˉt1xt1αˉtϵθ(xt,t,c)αˉt预测的 x0+1αˉt1ϵθ(xt,t,c)x0 的方向\begin{aligned} x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} &\underbrace{ \frac{x_t -\sqrt{1 - \bar{\alpha}_t} \, \epsilon_\theta(x_t, t, c)}{\sqrt{\bar{\alpha}_t}} }_{\text{预测的 } x_0} + \underbrace{ \sqrt{1 - \bar{\alpha}_{t-1}} \, \epsilon_\theta(x_t, t, c) }_{x_0 \text{ 的方向}} \end{aligned}

    从 ODE 的视角来看,先写成差分形式

    xtΔt= αˉtΔtxt1αˉtϵθ(xt,t,c)αˉt预测的 x0+ 1αˉtΔtϵθ(xt,t,c)x0 的方向\begin{aligned} x_{t - \Delta t} =\ \sqrt{\bar{\alpha}_{t - \Delta t}} &\underbrace{ \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_\theta(x_t, t, c)}{\sqrt{\bar{\alpha}_t}} }_{\text{预测的 } x_0} +\ \underbrace{ \sqrt{1 - \bar{\alpha}_{t - \Delta t}} \, \epsilon_\theta(x_t, t, c) }_{x_0 \text{ 的方向}} \end{aligned} xtΔtαtΔt=xtαt1αˉtαtϵθ(xt,t)+1αˉtΔtαtΔtϵθ(xt,t)\frac{x_{t - \Delta t}}{\sqrt{\alpha_{t - \Delta t}}} = \frac{x_t}{\sqrt{\alpha_t}} - \frac{\sqrt{1 - \bar{\alpha}_t}}{\sqrt{\alpha_t}} \cdot \epsilon_\theta(x_t, t) + \frac{\sqrt{1 - \bar{\alpha}_{t - \Delta t}}}{\sqrt{\alpha_{t - \Delta t}}} \cdot \epsilon_\theta(x_t, t) =xtαt+(1αtΔt11αt1)ϵθ(xt,t,c)= \frac{x_t}{\sqrt{\alpha_t}} + \left( \sqrt{ \frac{1}{\alpha_{t - \Delta t}} - 1 } - \sqrt{ \frac{1}{\alpha_t} - 1 } \right) \cdot \epsilon_\theta(x_t, t, c)

    xtΔtαtΔt\frac{x_{t - \Delta t}}{\sqrt{\alpha_{t - \Delta t}}} 视作新的随机变量,上式可以写成 ODE 形式。

    假设上述 ODE 在 Δt0\Delta t \to 0 时可逆,那么:

    xt+Δtαt+Δt=xtαt+(1αt+Δt11αt1)ϵθ(xt,t,c)\frac{x_{t + \Delta t}}{\sqrt{\alpha_{t + \Delta t}}} = \frac{x_t}{\sqrt{\alpha_t}} + \left( \sqrt{ \frac{1}{\alpha_{t + \Delta t}} - 1 } - \sqrt{ \frac{1}{\alpha_t} - 1 } \right) \cdot \epsilon_\theta(x_t, t, c)

    将上述式子写成离散时间步的形式就是论文中的公式。

    此外,关于attention可视化,他告诉我在这里

Thanks for reading!

[图像编辑外传01] DDIM Inversion

Tue Mar 18 2025
886 words · 8 minutes