本篇内容是对pix2pix-zero的3.1节Deterministic inversion的讲解
在DDIM的反向过程中,我们做的是:
xTDDIM采样(反向过程)x0现在inversion的意思是给定的是x0,我们想找xT,使得找到的xT满足经过DDIM的采样过程能还原为x0:
xTDDIM采样x0⇒找一个[采样前的起点]于是我们从x0,沿着 DDIM 的采样过程“反着走”:
x0反着走 DDIM 采样x1→⋯→xT检索了一下关于DDIM Inversion,参考了这篇文章,得到如下2个思路
思路一
DDIM的采样公式
xt−1=αˉt−1(αˉtxt−1−αˉtϵθ(xt,t))+1−αˉt−1ϵθ(xt,t)(1)重写该公式,对调xt−1和xt的位置,则:
xt=αˉt−1αˉt⋅xt−1−αˉt⋅αˉt−11−αˉt−1⋅ϵθ(xt,t)+1−αˉt⋅ϵθ(xt,t)(2)由于我们事先无法知道xt,所以ϵθ(xt,t)无法直接算出,所以只能使用ϵθ(xt−1,t−1)≈ϵθ(xt,t)。这里用的是线性假设
于是,式子改写为
xt=αˉt−1αˉt⋅xt−1−αˉt⋅αˉt−11−αˉt−1⋅ϵθ(xt−1,t−1)+1−αˉt⋅ϵθ(xt−1,t−1)(3)再做整理,并分别替换t和t−1,在ϵθ加入文本条件c即得到pix2pix-zero说到的
xt+1=αˉt+1αˉtxt−1−αˉtϵθ(xt,t,c)+1−αˉt+1ϵθ(xt,t,c)(4)思路二
DDIM的采样公式
xt−1=αˉt−1(αˉtxt−1−αˉtϵθ(xt,t))+1−αˉt−1ϵθ(xt,t)(1)可以看作是对预测的x0和预测的噪声ϵθ的加权,权重分别是αˉt−1和1−αˉt−1,即:
x0t=αˉtxt−1−αˉtϵθ(xt,t)(5) xt−1=αˉt−1x0t+1−αˉt−1ϵθ(xt,t)(6)公式(6)中直接将t−1时刻替换为t+1时刻,同时不改变是由t时刻预测的x0t,即
xt+1=αˉt+1x0t+1−αˉt+1ϵθ(xt,t)(7)则可以直接得到公式(4)。
关于这里的变化,给如下的理由:
可以看到这里DDIM采样去噪的过程被本质化为:用xt先预估初始的x0(式(5)),这里的x0一般是不准确的,而且t越大越不准确,所以我们预估之后还要加噪到t−1步,矫正得到xt−1(式(6)),去噪的过程就是这个“预估-矫正”的过程不断重复,t越来越小,x0也越来越清晰,最后一步预估得到的x0即为生成的图像。
基于以上理解,那我们其实是可以在第t步用式(5)预估x0,然后用式(7)得到xt+1。那么其实此时的t−1换为t+1也是一种线性假设。
而pix2pix-zero的3.1的写法,太过直接,没有推导,所以之前一直困惑我,作此讲解
另外附上一位大佬的写法
ddim 的 sampling 公式
xt−1=αˉt−1预测的 x0αˉtxt−1−αˉtϵθ(xt,t,c)+x0 的方向1−αˉt−1ϵθ(xt,t,c)从 ODE 的视角来看,先写成差分形式
xt−Δt= αˉt−Δt预测的 x0αˉtxt−1−αˉtϵθ(xt,t,c)+ x0 的方向1−αˉt−Δtϵθ(xt,t,c) αt−Δtxt−Δt=αtxt−αt1−αˉt⋅ϵθ(xt,t)+αt−Δt1−αˉt−Δt⋅ϵθ(xt,t) =αtxt+(αt−Δt1−1−αt1−1)⋅ϵθ(xt,t,c)将 αt−Δtxt−Δt 视作新的随机变量,上式可以写成 ODE 形式。
假设上述 ODE 在 Δt→0 时可逆,那么:
αt+Δtxt+Δt=αtxt+(αt+Δt1−1−αt1−1)⋅ϵθ(xt,t,c)将上述式子写成离散时间步的形式就是论文中的公式。
此外,关于attention可视化,他告诉我在这里。
[图像编辑外传01] DDIM Inversion