[DDIM] Denoising Diffusion Implicit Models

文章探讨了DDPM生成图像的原理,提出DDIM方法通过减少推理次数,显著提高采样效率,同时保持生成质量。DDIM利用非马尔可夫过程,保持训练目标不变。实验显示DDIM在速度上比传统DDPM快10到50倍,且生成过程具备确定性,适合图像插值应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、目的

        DDPM生成图像需要模拟Markov链,因此要经过多轮推理(因为条件概率仅仅与系统的当前状态相关),且推理过程是sequentially而不是parallel的

        DDIM在不改变DDPM训练的基础上,减少了infer次数,在极大地增加了采样效率的同时,几乎不影响采样效果

2、方法

       1)DDPM的一个重要特性是

                        

                        

                因此目标函数为

                        

                该目标函数只用到q(x_{t}|x_{0}),无须q(x_{1:T}|x_{0})。因此可以选用一些non-Markovian过程,只要符合该边际分布即可。此时,训练objective不变,因此训练过程不变

                DDIM选用的non-Markovian分布下,inference过程为

                              ...... (1)

                相应的forward过程可以表示为(但其实我们不需要前传的公式了):

                                                

        2)具体应用时,给定noisy x_{t},先预测x_{0}

                                                                    ...... (2)

                然后再结合公式1和公式2求解x_{t-1}

                                  

                即

                 

               其中,

                

                当\eta = 1时,是DDPM;当\eta = 0时,是DDIM (denoising diffusion implicit model)

        3)可以假定forward过程不定义在x_{1:T}上,而是递增子集{ x_{\tau_{1}}, ..., x_{\tau_{S}}},并且符合如下边际分布

                                        

                当这个(sampling) trajectory的长度远小于T时,就可以大大提升计算效率 

3、效果

        1)10 ~ 50X faster        

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

        2)生成过程是deterministic的,一旦确定了输入,则输出也是确定的。因此可以进行图像插值

### DDIM采样方法简介 DDIM (Denoising Diffusion Implicit Models) 是一种改进型的扩散模型变体,旨在减少传统扩散模型所需的迭代次数并提高样本质量。与标准扩散模型相比,DDIM采用了一种隐式的去噪过程,在前向过程中引入更少的噪声,并允许在反向生成阶段灵活调整步数。 #### 前向过程中的噪声注入 在DDIM中,前向过程同样遵循逐步增加图像噪声的原则,但是该过程可以被参数化以控制每一步加入多少新噪声[^1]: ```python def forward_process(x_0, t, beta_t): """ 定义DDIM的前向传播函数 参数: x_0 : 初始干净图片 t : 时间步长 beta_t : 方差调度参数 返回: 加入特定量级噪音后的状态 """ noise = torch.randn_like(x_0) alpha_bar_sqrt = np.sqrt(1 - np.prod(beta_t[:t])) sqrt_one_minus_alpha_bar = np.sqrt(np.prod(beta_t[:t])) xt = alpha_bar_sqrt * x_0 + sqrt_one_minus_alpha_bar * noise return xt ``` 此代码片段展示了如何基于初始输入`x_0`以及时间索引`t`来计算带有一定比例随机扰动的结果`xt`。这里的关键在于可以通过调节`beta_t`序列来改变加权方式,从而影响最终输出的质量和多样性。 #### 反向生成流程 对于逆向生成部分,DDIM提供了一个更加简洁高效的机制。不同于传统的多步骤预测修正方案,DDIM能够在较少的时间间隔内完成高质量图像重建的任务。具体来说,就是利用预训练好的网络直接估计中间时刻的状态分布而不是每次都重新学习整个转换路径[^2]: ```python def reverse_process(model, x_T, T, eta=0., shape=(1, 3, 32, 32)): """ 实现DDIM的反向生成算法 参数: model : 已经训练完毕用于指导生成过程的神经网络模型 x_T : 经过充分打乱后的全白噪声作为起点 T : 总共使用的离散时间片数量 eta : 控制探索程度超参,默认设为零表示完全决定论模式 shape : 输出张量形状 返回: 使用给定配置下由纯噪声恢复得到的目标数据集成员之一 """ img = x_T for i in reversed(range(T)): t = torch.full((shape[0],), i, device=device, dtype=torch.long) pred_noise = model(img, t).detach() # 计算均值 mu_theta 和方差 sigma_theta mean_pred = ... std_dev_term = ... if i > 0: noise = torch.randn_like(img) img = mean_pred + eta * std_dev_term * noise else: img = mean_pred return img ``` 上述伪代码描述了从完全无序的高斯噪声出发,经过一系列精心设计的操作后逐渐逼近目标域内的真实实例的过程。值得注意的是,当设置`eta=0`时,意味着每次更新都严格按照最大似然方向前进;而适当增大这个数值则可以在一定程度上增强创造性表达力的同时保持较好的视觉效果一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值