【Diffusion Models】扩散模型中的Noise Scheduler

扩散模型中的Noise Scheduler

Diffusers 中的模块 Schedulers

diffusers的核心是models和schedulers,我们首先简要介绍一下Diffusion的通用pipeline:

在扩散模型的训练过程中,pipeline首先产生一个与输入图片同尺寸的噪声图,在每个时间步(timestep),将噪声图传给model来预测噪声残差(noise residual),然后scheduler根据预测出的噪声残差来得到一张噪声较少的图像,如此反复,直到达到预设的最大时间步,就得到了一张高质量的生成图像。

在了解schedulers之前,首先,我们要区分Diffusion里的scheduler和pytorch里的scheduler,前者是一个采样器(samplers),用于把噪声图像还原为原始图像;后者是一个学习率策略(例如余弦退火策略,指数衰减策略等)

针对Diffusion的scheduler,它的功能是实现逆向扩散,直观上理解的话它就是一个采样器,循环多个step把噪声图像逐渐还原为原始图像。根据采样方式不同,scheduler也有许多版本,包括DDPM,DDIM,DPM++ 2M Karras等。

注意:我们把去噪的过程定义为采样。使用采样的方法,称之为采样器。

各种有关schedulers的代码在diffusers库 diffusers/src/diffusers/schedulers/中可以找到。

以下我们主要介绍一些核心的schedulers的原理

1. DDPM (Denoising Diffusion Probabilistic Models)

DDPM中的model和scheduler对应其文章中的两个algorithm。

  1. model的学习对应于Algorithm1



加噪过程:在重参数的表达下,第t个时刻的输入噪声图片可以表示为, xt=α¯tx0+1−α¯tϵ \bar\alpha_t\。则如文章的示例,可以表示为下图所示:


则去噪(采样)过程,可以由该子序列的反向Markov链替代,由于S长度小于L的长度,可以实现采样加速。

其它Schedulers(Samplers)

本小节主要翻译自引用6。

然而,截止现在,DDPM和DDIM已经被认为是过时的schedulers。

截至目前还有很多其它的Schedulers,能实现更好的性能以及更快速的采样。我们简短介绍一些目前经常用到的schedulers,不再展开它们的技术细节。

  1. PLMS (Pseudo Linear Multi-Step method),DDIM的更快的改进版本。但目前也被认为过时了,很少用到。
  2. DPM (Diffusion probabilistic model solver) 和 DPM++。2022年提出的schedulers。它们有相似的架构。DPM++是DPM的改进版本。
  3. DPM2 和 DPM adaptive。 DPM2和DPM一样有相似的架构,DPM2是二阶求导,更加精准但是更慢。 DPM adaptive可以自适应的调节步长,可能更慢也可能更快(步长调节不确定)。
  4. UniPC(UniPC (ivg-research.xyz))。2023年2月提出,能在5-10步内生成更高质量的图像。

此外,还有一些非常古老的Schedulers,它们是通过常微分方程解得的,如下所示,它们可能已经不再被使用了:

  1. Euler,一个最简单的scheduler。
  2. Heun,比Euler更慢但是更精确。
  3. LMS(Linear multi-step method),速度和Euler一样,但是更加精确。

一些别的注意事项,Ancestral samplers。

你可能会注意到,有一些samplers带有字母“a"。例如 Eular a,DPM a,DPM++ 2S a等等。它们是ancestral samplers,表示在每个采样过程中,加入了随机的噪声。当然,有一些不带字母a的采样器也有随机噪声,例如上文提到的DDPM。以下是带有随机噪声和不带有随机噪声的可视图对比:

带有随机噪声的生成steps中间结果,Euler a,可以看到,图像的采样过程并没有收敛,如下图所示。


没有随机噪声的生成steps中间结果,Euler,可以看到,图像的采样过程收敛,如下图所示。


为了可复现性,且希望图像收敛。如果你想产生轻微的变化,你应该使用不同的seed,而不是添加随机噪声。

除此之外,借鉴引用6,我们也展示了它们的不同的schedulers/samplers的生成图像。



可以看到,带a的往往没有收敛,而DPM++ fast的生成结果完全崩了。

哪个Schedulers最好?

目前还没有公认的最好的schedulers,我们也参考了引用6,借鉴了他人的意见:

  1. 如果想生成的更快,图像收敛(即种子一样,每次生成的固定),质量相对还可以的话,推荐:
  • DPM ++ 2M Karras with 20-30 steps
  • UniPC with 20-30 steps

2. 如果想要更好的图片质量,不考虑是否收敛,推荐:

    • DPM++ SDE Karras with 10-15 steps。(更慢,但是质量更好)
    • DDIM with 10-15 steps。

3. 如果想要生成图像可复现,避免所有的ancestral samples。 如果想要生成图像有轻微的变化,使用不同的seed,而不是添加随机噪声。

更多的schedulers讲解,可以参考引用6。

参考

1.【diffusers】(二) scheduler介绍 & 代码解析

2.深入浅出扩散模型(Diffusion Model)系列:基石DDPM(模型架构篇),最详细的DDPM架构图解 - 知乎 (zhihu.com)

3.【Diffusion模型系列1】DDPM: Denoising Diffusion Probabilistic Models - 知乎 (zhihu.com)

4.扩散模型之DDIM - 知乎 (zhihu.com)

5.diffusion model(二)—— DDIM(将diffusion model 提速50倍!) - 知乎 (zhihu.com)

6.Stable Diffusion Samplers: A Comprehensive Guide - Stable Diffusion Art (stable-diffusion-art.com)

该Blog持续更新中。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值