【AIGC】4、DDPM 简介 | 使用随机噪声来生成图像

在这里插入图片描述

论文:Denoising Diffusion Probabilistic Models

代码:https://github.com/hojonathanho/diffusion

出处:伯克利

时间:2020.06

一、背景

DDPM 是很多扩散模型的基础,其通过前向扩散和逆向去噪来实现对噪声的估计,从而将受噪声污染的图像复原。

二、DDPM 主要过程

在这里插入图片描述

2.1 前向扩散过程

前向扩散,由 t − 1 t-1 t1 时刻计算 t t t 时刻值:
x t = α t   x t − 1 + 1 − α t   ϵ t − 1 x_t=\sqrt{\alpha_t}\ x_{t-1} + \sqrt{1-\alpha_t} \ \epsilon_{t-1} xt=αt  xt1+1αt  ϵt1

  • x t − 1 x_{t-1} xt1 t − 1 t-1 t1 时刻的值
  • ϵ t − 1 \epsilon_{t-1} ϵt1 是添加的噪声, ϵ t − 1 ∼ N ( 0 , 1 ) \epsilon_{t-1} \sim N(0, 1) ϵt1N(0,1) 是高斯噪声
  • 前向扩散阶段是不需要学习的,每步添加的噪声的超参数都是提前设定好的

根据上面的公式可以得到下面的公式:

x t = α ‾ t   x 0 + 1 − α ‾ t   ϵ x_t=\sqrt{\overline{\alpha}_t}\ x_0 + \sqrt{1-\overline{\alpha}_t} \ \epsilon xt=αt  x0+1αt  ϵ

  • α ‾ t = Π i = 1 t   α i \overline{\alpha}_t=\Pi_{i=1}^t\ \alpha_i αt=Πi=1t αi
  • ϵ ∼ N ( 0 , 1 ) \epsilon \sim N(0, 1) ϵN(0,1)
  • 上面的公式可以直接由输入图像 x 0 x_0 x0 来生成最终的加噪结果

2.2 逆向去噪过程

逆向计算,由 t t t 时刻计算 t − 1 t-1 t1 时刻值:

x t − 1 = 1 α t ( x t − 1 − α t 1 − α ‾ t   ϵ θ ( x t , t ) ) + σ t z x_{t-1} = \frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha}}_t}\ \epsilon_{\theta}(x_t, t)) + \sigma_tz xt1=αt 1(xt1α t1αt ϵθ(xt,t))+σtz

  • ϵ θ \epsilon_{\theta} ϵθ 是噪声估计函数,用于估计真实噪声,就是使用 U-Net 网络,将 x t x_t xt t t t 作为输入,来预测 t t t 时刻的噪声 ϵ θ \epsilon_{\theta} ϵθ,预测的 t t t 时刻的噪声要和前向过程的 t t t 时刻的噪声 ϵ \epsilon ϵ 做 loss
  • θ \theta θ 是模型训练的参数
  • ϵ θ ( x t , t ) \epsilon_{\theta}(x_t, t) ϵθ(xt,t) 是估计的 t t t 时刻估计的噪声,也是模型要学习的
  • DDPM 模型的关键就是训练噪声估计函数 ϵ θ \epsilon_{\theta} ϵθ

2.3 训练和推理

模型学习的目标:

不断的逆向去掉噪声,学习的目标就是让每步逆向预测的噪声 ϵ θ ( x t , t ) \epsilon_{\theta}(x_t, t) ϵθ(xt,t) 和每步前向添加的噪声 ϵ \epsilon ϵ 尽可能的相近

损失函数:

在这里插入图片描述

训练的过程:最小化预测的噪声和添加的噪声的差距

  • 第一步:输入原图 x 0 x_0 x0
  • 第二步:生成随机噪声 ϵ \epsilon ϵ 和时间 t t t
  • 第三步:对原图加噪, x t = α ‾ t   x 0 + 1 − α ‾ t   ϵ x_t=\sqrt{\overline{\alpha}_t}\ x_0 + \sqrt{1-\overline{\alpha}_t} \ \epsilon xt=αt  x0+1αt  ϵ
  • 第四步:将加噪的图像和时间向量 t 输入神经网络模型,预测噪声 ϵ θ \epsilon_{\theta} ϵθ
  • 第五步:计算 loss 并更新模型

在这里插入图片描述

推理的过程:

  • N ( 0 , 1 ) N(0,1) N(0,1) 中随机生成一个噪声
  • 循环 T 步逐步去噪,就从噪声恢复得到了原图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jiaoyangwm/article/details/129664698