AIGC: SDEdit (Stochastic Differential Editing) 笔记
上一个文章介绍了扩散模型的图像修复,这次顺势介绍一下扩散模型的 img2img. 论文(2108.01073)里面的一些符号喜欢用函数表示,这里全部改成通用的下标形式了。

从回顾SGM开始
这里,先回顾一下 Score-based Generative Models (2011.13456). 对于扩散的正向加噪过程,我们可以有以下的通用形式(假设扩散项只与时间有关):
对于 VP-SDE (Variance Preserving SDE), 我们有 和
. 对于 VE-SDE (Variance Exploding SDE), 我们有
和
.
而对于每一个正向加噪过程,我们都有一个对应的逆向去噪过程:
其中, 被称作分数函数 (score function), 我们使用一个模型
去"学习"这个分数函数。通常我们没法求上述 SDE 的解析解,所以我们将连续时间
做一个离散化,然后利用一些数值解法来求解。
所以,论文中(对于 VE-SDE)采用了 Euler-Maruyama 的数值解法:
其中,
Img2Img
接下来是 SDEdit 的初始设定,我们的任务是一个 img2img ——将一个图片转换为另外一个图片。原图我们称作引导图像(guide),用 来表示,转换后的图像我们用
表示。
我们发现,解 SDE 其实未必要从 出发,而是可以从中途的任一时间点开始。所以,我们选取一个时间点
, 对
加噪声:
.
然后,我们利用上述的数值解法,从 进行逆向去噪过程,然后获得图像
.
这一整个过程,我们把它称作 .
我们把接近原图像的程度称作是 faithful, 把生成图片的质量称作是 realistic. 那么我们可以得到如下的一个图像:

很显然,如果我们把 设置为 0, 意味着我们没有加入任何的噪声,那么我们最终生成的图像就是我们的引导图像(意味着 L2 距离为 0);如果我们把
设置为 1,那么就相当于纯高斯噪声开始去噪,所以最终生成的图像将和引导图像毫无关联。
遮罩编辑
我们在上面的基础上再进一步,希望只"编辑"源图像的一小部分,那么我们就需要有一个遮罩,我们把它称作 .
首先我们还是选择一个时间点 对原图像
进行加噪,得到
.
然后我们针对遮罩的部分,和被遮罩的部分,这两个部分进行分别处理。对于遮罩的部分,我们利用上述的 进行去噪,然后将每一步去噪的结果和遮罩
进行元素间相乘。用公式表达,即
.
而对于未遮罩的部分,我们则直接进行一个加噪,即 .
然后我们把上面两部分相加,就得到了每个时间点 t 时对应的图像。

完。
B站公式编辑器经常崩溃,所以如果看到 tex parse error 之类的错误信息时,刷新一下页面一般能解决。