首页IT科技扩散模型求解复杂反应的例子(Diffusion扩散模型学习1——Pytorch搭建DDPM实现图片生成)

扩散模型求解复杂反应的例子(Diffusion扩散模型学习1——Pytorch搭建DDPM实现图片生成)

时间2025-07-30 21:21:06分类IT科技浏览5739
导读:学习前言 我又死了我又死了我又死了!...

学习前言

我又死了我又死了我又死了!

源码下载地址

https://github.com/bubbliiiing/ddpm-pytorch

喜欢的可以点个star噢                。

网络构建

一                、什么是Diffusion

如上图所示                        。DDPM模型主要分为两个过程:

1                        、Forward加噪过程(从右往左)                ,数据集的真实图片中逐步加入高斯噪声                        ,最终变成一个杂乱无章的高斯噪声        ,这个过程一般发生在训练的时候        。加噪过程满足一定的数学规律                。

2        、Reverse去噪过程(从左往右)                ,指对加了噪声的图片逐步去噪                        ,从而还原出真实图片        ,这个过程一般发生在预测生成的时候                        。尽管在这里说的是加了噪声的图片        ,但实际去预测生成的时候                        ,是随机生成一个高斯噪声来去噪        。去噪的时候不断根据

X

t

X_t

Xt
的图片生成

X

t

1

X_{t-1}

Xt1
的噪声                ,从而实现图片的还原        。

1        、加噪过程

Forward加噪过程主要符合如下的公式:

x

t

=

α

t

x

t

1

+

1

α

t

z

1

x_t=\sqrt{\alpha_t} x_{t-1}+\sqrt{1-\alpha_t} z_{1}

xt=αtxt1+1αtz1
其中

α

t

\sqrt{\alpha_t}

αt
是预先设定好的超参数        ,被称为Noise schedule                        ,通常是小于1的值                ,在论文中

α

t

\alpha_t

αt
的值从0.9999到0.998                        。

ϵ

t

1

N

(

,

1

)

\epsilon_{t-1} \sim N(0, 1)

ϵt1N(0,1)
是高斯噪声                。由公式(1)迭代推导        。

x

t

=

a

t

(

a

t

1

x

t

2

+

1

α

t

1

z

2

)

+

1

α

t

z

1

=

a

t

a

t

1

x

t

2

+

(

a

t

(

1

α

t

1

)

z

2

+

1

α

t

z

1

)

x_t=\sqrt{a_t}\left(\sqrt{a_{t-1}} x_{t-2}+\sqrt{1-\alpha_{t-1}} z_2\right)+\sqrt{1-\alpha_t} z_1=\sqrt{a_t a_{t-1}} x_{t-2}+\left(\sqrt{a_t\left(1-\alpha_{t-1}\right)} z_2+\sqrt{1-\alpha_t} z_1\right)

xt=at(at1xt2+1αt1z2)+1αtz1=atat1xt2+(at(1αt1)z2+1αtz1)

其中每次加入的噪声都服从高斯分布

z

1

,

z

2

,

N

(

,

1

)

z_1, z_2, \ldots \sim \mathcal{N}(0, 1)

z1,z2,N(0,1),两个高斯分布的相加高斯分布满足公式:

N

(

,

σ

1

2

)

+

N

(

,

σ

2

2

)

N

(

,

(

σ

1

2

+

σ

2

2

)

)

\mathcal{N}\left(0, \sigma_1^2 \right)+\mathcal{N}\left(0, \sigma_2^2 \right) \sim \mathcal{N}\left(0,\left(\sigma_1^2+\sigma_2^2\right) \right)

N(0,σ12)+N(0,σ22)N(0,(σ12+σ22))
                        ,因此                        ,得到

x

t

x_t

xt

的公式为:

x

t

=

a

t

a

t

1

x

t

2

+

1

α

t

α

t

1

z

2

x_t = \sqrt{a_t a_{t-1}} x_{t-2}+\sqrt{1-\alpha_t \alpha_{t-1}} z_2

xt=atat1xt2+1αtαt1z2

因此不断往里面套,就能发现规律了                ,其实就是累乘

可以直接得出

x

x_0

x0

x

t

x_t

xt

的公式:

x

t

=

α

t

x

+

1

α

t

z

t

x_t=\sqrt{\overline{\alpha_t}} x_0+\sqrt{1-\overline{\alpha_t}} z_t

xt=αtx0+1αtzt

其中

α

t

=

i

t

α

i

\overline{\alpha_t}=\prod_i^t \alpha_i

αt=itαi                        ,这是随Noise schedule设定好的超参数        ,

z

t

1

N

(

,

1

)

z_{t-1} \sim N(0, 1)

zt1N(0,1)
也是一个高斯噪声                        。通过上述两个公式                ,我们可以不断的将图片进行破坏加噪                。

2                        、去噪过程

反向过程就是通过估测噪声                        ,多次迭代逐渐将被破坏的

x

t

x_t

xt恢复成

x

x_0

x0
        ,在恢复时刻        ,我们已经知道的是

x

t

x_t

xt
                       ,这是图片在

t

t

t
时刻的噪声图。一下子从

x

t

x_t

xt
恢复成

x

x_0

x0
是不可能的                ,我们只能一步一步的往前推        ,首先从

x

t

x_t

xt
恢复成

x

t

1

x_{t-1}

xt1
                        。根据贝叶斯公式                        ,已知

x

t

x_t

xt
反推

x

t

1

x_{t-1}

xt1

q

(

x

t

1

x

t

,

x

)

=

q

(

x

t

x

t

1

,

x

)

q

(

x

t

1

x

)

q

(

x

t

x

)

q\left(x_{t-1} \mid x_t, x_0\right)=q\left(x_t \mid x_{t-1}, x_0\right) \frac{q\left(x_{t-1} \mid x_0\right)}{q\left(x_t \mid x_0\right)}

q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0)

右边的三个东西都可以从x_0开始推得到:

q

(

x

t

1

x

)

=

a

ˉ

t

1

x

+

1

a

ˉ

t

1

z

N

(

a

ˉ

t

1

x

,

1

a

ˉ

t

1

)

q\left(x_{t-1} \mid x_0\right)=\sqrt{\bar{a}_{t-1}} x_0+\sqrt{1-\bar{a}_{t-1}} z \sim \mathcal{N}\left(\sqrt{\bar{a}_{t-1}} x_0, 1-\bar{a}_{t-1}\right)

q(xt1x0)=aˉt1x0+1aˉt1zN(aˉt1x0,1aˉt1)

q

(

x

t

x

)

=

a

ˉ

t

x

+

1

α

ˉ

t

z

N

(

a

ˉ

t

x

,

1

α

ˉ

t

)

q\left(x_t \mid x_0\right) = \sqrt{\bar{a}_t} x_0+\sqrt{1-\bar{\alpha}_t} z \sim \mathcal{N}\left(\sqrt{\bar{a}_t} x_0 , 1-\bar{\alpha}_t\right)

q(xtx0)=aˉtx0+1αˉtzN(aˉtx0,1αˉt)

q

(

%

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
linux自动登陆root(Linux 上让一段时间不活动的用户自动登出方法介绍) 如何让百度快速抓取网站图片?(提高网站图片抓取率,让百度更快地收录你的图片!)