当前位置:网站首页 > 技术博客 > 正文

ddm 公式



论文:DENOISING DIFFUSION IMPLICIT MODELS

参考 博客; 参考 aistudio notebook 链接,其中包含详细的公式与代码探索: link

该文章主要对 DDIM 论文中的公式进行小白推导,同时笔者将使用 ppdiffuser 中的 DDIM 与 DDPM 探索两者之间的联系。读者能够对论文中的大部分公式如何得来,用在了什么地方有初步的了解。

本文将包括以下部分:

  1. 总结 DDIM。
  2. Non-Markovian Forward Processes: 从 DDPM 出发,记录论文中公式推导
  3. 探索与思考:
    • 验证当 DDIMScheduler 的结果与 DDPMScheduler 基本相同。
    • DDIM 的加速采样过程
    • DDIM 采样的确定性
    • INTERPOLATION IN DETERMINISTIC GENERATIVE PROCESSES

DDIM 总览

  • 不同于 DDPM 基于马尔可夫的 Forward Process,DDIM 提出了 NON-MARKOVIAN FForward Processes。(见 Forward Process)
  • 基于这一假设,DDIM 推导出了相比于 DDPM 更快的采样过程。(见探索与思考)
  • 相比于 DDPM,DDIM 的采样是确定的,即给定了同样的初始噪声 ,DDIM 能够生成相同的结果 。(见探索与思考)
  • DDIM 和 DDPM 的训练方法相同 ,因此在 DDPM 基础上加上 DDIM 采样方案即可。(见探索与思考)

Forward process

DDIM 论文中公式的符号与 DDPM 不相同,如 DDIM 论文中的 相当于 DDPM 中的 ,而 DDPM 中的 则在 DDIM 中记成 ,但是运算思路一致,如 DDIM 论文中的公式 都在 DDPM 中能找到对应公式。

以下我们统一采用 DDPM 中的符号进行标记。即

在 DDPM 笔记 扩散模型探索:DDPM 笔记与思考 中,我们总结了 DDPM 的采样公式推导过程为:

而后我们用 来近似 ,从而一步步实现采样的过程。不难发现 DDPM 采样和优化损失函数过程中,并没有使用到 的信息。因此 DDIM 从一个更大的角度,大胆地将 Forward Process 方式更换了以下式子(对应 DDIM 论文公式 ):

论文作者提到了 式这样的 non-Markovian Forward Process 满足 :

公式 能够通过贝叶斯公式:

推导得来。至于如何推导,生成扩散模型漫谈(四):DDIM = 高观点 DDPM 中通过待定系数法给出了详细的解释,由于解释计算过程较长,此处就不展开介绍了。

根据 ,将 DDPM 中得到的公式(同 DDIM 论文中的公式 ):

带入,我们能写出采样公式(即论文中的核心公式 ):

其中, 可以参考 DDIM 论文的公式 :

如果 ,那么生成过程就是确定的,这种情况下为 DDIM。

论文中指出, 当 ,该 forward process 变成了马尔科夫链,该生成过程等价于 DDPM 的生成过程 。也就是说当 时,公式 等于 DDPM 的采样公式,即公式 :

将 式带入到 式中得到 DDPM 分布公式(本文章标记依照 DDPM 论文,因此有 ):

因此

因此,根据推导, 时候的 Forward Processes 等价于 DDPM,我们将在 notebook 后半部分,通过代码的方式验证当 DDIM 的结果与 DDPM 基本相同。

接下来将根据飞桨开源的 ,探索以下四个内容:

  1. 验证当 DDIM 的结果与 DDPM 基本相同。
  2. DDIM 的加速采样过程
  3. DDIM 采样的确定性
  4. INTERPOLATION IN DETERMINISTIC GENERATIVE PROCESSES

读者可以在 Aistudio 上使用免费 GPU 体验以下的代码内容。链接:扩散模型探索:DDIM 笔记与思考

验证当 DDIM 的结果与 DDPM 基本相同。

我们使用 DDPM 模型训练出来的 人像模型权重进行测试,根据上文的推导,当 时,我们期望 DDIM 论文中的 Forward Process 能够得出与 DDPM 相同的采样结果。由于 DDIM 与 DDPM 训练过程相同,因此我们将使用 加载模型权重 ,而后采用 进行图片采样,并将采样结果与 原始输出对比。如下:

输出结果:

代码输出结果: DDPM 与 DDIM 采样下的图片对比
代码输出结果: DDPM 与 DDIM 采样下的图片对比

通过运行以上代码,我们可以看出 时, 默认配置下 DDPM 与 DDIM 采样结果有着明显的区别。但这并不意味着论文中的推导结论是错误的,差异可能源于以下两点:

  1. 计算机浮点数精度问题
  2. Scheduler 采样过程中存在的 clip 操作导致偏差。

尝试去除 Clip 操作

Scheduler 采样过程中存在的 clip 操作导致偏差。Clip 操作对采样过程中生成的 预测结果进行了截断,尽管 DDPM, DDIM 均在预测完 后进行了截断,但根据上文的推导公式,两者采样过程中 权重的不同,可能导致了使用 clip 时,两者的采样结果有着明显区别。

将 clip 配置设置成 后, DDPM 与 DDIM() 的采样结果基本上相同了。如以下代码,我们尝试测试去除 clip 配置后的采样结果:

可以验证得到 DDPM 与 DDIM 论文中提出的 情况下的采样结果基本一致。

img
img

论文附录 C 有对这一部分进行详细阐述。DDIM 优化时与 DDPM 一样,对噪声进行拟合,但 DDIM 提出了通过一个更短的 Forward Processes 过程,通过减少采样的步数,来加快采样速度:

从原先的采样序列 中选择一个子序列来生成图像。如原序列为 1 到 1000,抽取子序列可以是 1, 100, 200, ... 1000 (类似 )。抽取方式不固定。在生成时同样采用公式 ,其中的 timestep ,替换为子序列中的 timestep。其中的 对应到训练时候的数值,比如采样 中的第二个样本,则使用训练时候采用的 (此处只能替换 ,不能直接替换 参数 )。

参考论文中的 Figure 3,在加速生成的情况下, 越小,生成的图片效果越好,同时 的减小能够很大程度上弥补采样步数减少带来的生成质量下降问题。

我们尝试对论文中提到的上述方法进行复现:

img
img

通过论文中的示例说明,以及上述实现结果可以发现几点:

  • 越小,采样步数产生的 图片质量和风格差异 就越小。
  • 的减小能够很大程度上弥补采样步数减少带来的生成质量下降问题。

由于 DDIM 在生成过程中 ,因此采样过程中不涉及任何随机因素,最终生成图片将由一开始输入的图片噪声 决定。我们采用不同的 random seed 进行采样:

DDIM 采样的确定性
DDIM 采样的确定性

图像重建

在 DDIM 论文中,其作者提出了可以将一张原始图片 经过足够长的步数 加噪为 ,而后通过 ODE 推导出来的采样方式,尽可能的还原原始图片。 根据公式 (即论文中的公式 12),我们能够推理得到论文中的公式 :

而后进行换元,令 ,带入得到:

于是,基于这个 ODE 结果,能通过 计算得到 与

根据 github - openai/improved-diffusion,其实现根据 ODE 反向采样的方式为:直接根据公式 进行变换,把 换成 :

而参考公式 的推导过程, 可以看成下面这种形式:

以下我们尝试对自定义的输入图片进行反向采样(reverse sampling)和原图恢复,我们导入本地图片:

img
img

根据公式 12 编写反向采样过程。ppdiffusers 中不存在 方案,因此我们根据本文中的公式 来实现一下 过程,具体为:

而后进行不断的迭代采样与图片重建(具体的方式可以查看 扩散模型探索:DDIM 笔记与思考)。以下右图为根据原图进行反向 ODE 加噪后的结果,可以看出加噪后和电视没信号画面相当。以下左图为根据噪声图片采样得来的结果,基本上采样的结果还原了 90%以上原图的细节,不过还有如右上角部分的一些颜色没有被还原。

img
img

通过两个能够生成不同图片的噪声 ,进行 spherical linear interpolation 球面线性插值。而后作为 生成具有两张画面共同特点的图片。有点类似风格融合的效果。参考 link。首先我们选取两个不同的图片进行融合:

输出结果:

img
img

以上选择 seed 为 77 和 2707 的噪声进行采样,他们的采样结果分别展示在上方。

以下参考 ermongroup/ddim/blob/main/runners/diffusion.py ,对噪声进行插值,方式大致为:

img
img

可以看出,当 为 0.2, 0.8 时,我们能够看到以下融合的效果,如头发颜色,无关特征等。但在中间部分(),采样的图片质量就没有那么高了。

那根据前两节的阐述,我们可以实现一个小的 pipeline, 具备接受使用 DDIM 接受两张图片,而后输出一张两者风格融合之后的图片。

Denoising Diffusion Implicit Models

苏建林 - 生成扩散模型漫谈 系列笔记

小小将 - 扩散模型之 DDIM

github - openai/improved-diffusion

版权声明


相关文章:

  • 笔记本电脑键盘对应快捷键2025-03-12 11:01:03
  • springboot集成sso2025-03-12 11:01:03
  • 自己的小程序appid在哪里看2025-03-12 11:01:03
  • gif录制编辑工具2025-03-12 11:01:03
  • java bitset用法2025-03-12 11:01:03
  • c++接口类型2025-03-12 11:01:03
  • 武汉网络dns地址2025-03-12 11:01:03
  • 函数已有主体是什么意思2025-03-12 11:01:03
  • 江苏工匠企业管理有限公司2025-03-12 11:01:03
  • java线程用法2025-03-12 11:01:03