Denoising Diffusion Probabilistic Models
参考理解DDPM
生成式扩散模型详解:从DDPM到GLIDE
关于Stable diffusion的各种模型,看这篇就可以了!
生成对抗网络(GANs)、自回归模型(AR)、流(FLows)和变分自编码器(VAEs)已经合成了引人注目的图像和音频样本,基于能量的建模和分数匹配取得了显著进展,产生了与GANs相当的图像。

扩散概率模型(为简洁起见,我们称之为“扩散模型”)是一个参数化的马尔可夫链,使用变分推理训练,在有限时间后产生与数据匹配的样本。学习该链的转换以逆转扩散过程,这是一个马尔可夫链,它在采样的相反方向上逐渐向数据中添加噪声,直到信号被破坏。



代码阅读理解
DDPM-UNet代码详解
1.选择数据
选一个数据集,本例采用sklearn自带数据集:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_s_curve
import torch
# TODO 实验数据
s_curve , _ = make_s_curve(10**4 , noise = 0.1)
s_curve = s_curve[:,[0,2] ]/10.0
print("shape of moons :",np.shape(s_curve))
plt.scatter(s_curve[:,0],s_curve[:,1], color='red',edgecolor='white')
plt.savefig('s_curve.png')

2.计算参数
计算前向过程中需要的常数:
# 准备好alpha(αt), beta(βt), αt^, 根号下αt^, 根号下(1-αt^)等值
num_steps = 100 # 设置步长
# 制定每一步的beta
betas = torch.linspace(-6, 6, num_steps) # 逐渐递增
betas = torch.sigmoid(betas)*(0.5e-2 - 1e-5)+1e-5 # β0,β1,...,βt
# 计算alpha、alpha_prod、alpha_prod_previous、alpha_bar_sqrt等变量的值
alphas = 1 - betas # αt = 1 - βt
alphas_prod = torch.cumprod(alphas,0) # αt^ = αt的累乘
# αt^往右平移一位, 原第t步的值维第t-1步的值, 第0步补1
alphas_prod_p = torch.cat([torch.tensor([1]).float(), alphas_prod[:-1]], 0) # αt-1 ^
alphas_bar_sqrt = torch.sqrt

最低0.47元/天 解锁文章
2631

被折叠的 条评论
为什么被折叠?



