扩散模型的源码学习diffusion_model

 1.diffusion_model有几个主要的部分,

(1)Unet,主干网络。

(2)GaussianDiffusion,也就是主要的训练策略。

扩散模型的源码学习diffusion_model_第1张图片

 2.

生成一个测试用的tensor来进行实验。 

扩散模型的源码学习diffusion_model_第2张图片3.进入到高斯模型的内部,发现他的forward并不是特别复杂,

他会先生成一个随机数t,然后再对img做一定的处理,然后再利用p_loss做一个loss。

可以看到,难点应该就是p_loss和对图片的这个处理上。

扩散模型的源码学习diffusion_model_第3张图片

4.可以看到,生成了一个t,是随机的0,1不知道在干啥。扩散模型的源码学习diffusion_model_第4张图片 扩散模型的源码学习diffusion_model_第5张图片

5.然后把img输入到了这个normalize这里面,注意这个img是(8,3,128,128)的尺寸的。 

扩散模型的源码学习diffusion_model_第6张图片 他这个normalize_neg_one_to_one,只有一行,就返回了img,我们接下来试一下,这个操作会产生什么样的变化,因为他变化一下就输入到了p_losses里面,可以看到在p_losses之前的操作都是特别简单的,这说明整个需要操作的大部分应该都在p_losses里面。扩散模型的源码学习diffusion_model_第7张图片

 乘2,减1,就是做了简单的变化。扩散模型的源码学习diffusion_model_第8张图片

 6.然后就开始输入进p_losses了,这个输入的img是(8,3,128,128)维度的。

然后t是一个8的tensor,有8个随机的0,1数。

扩散模型的源码学习diffusion_model_第9张图片

7.进入到p_losses里面,

发现,这个loss所需要的东西,一个是x_start,一个是t,也就是随机生成的一个tensor,和一个随机数的列表。

注意这个x_start是(8,3,128,128)这个维度的。

t是8个随机数tensor。

 8.然后会利用default这个生成噪声。

扩散模型的源码学习diffusion_model_第10张图片

 也就是说这个default所使用的是提供的这个rand。扩散模型的源码学习diffusion_model_第11张图片

 9.利用这个生成噪声noise,这个维度是(8,3,128,128)的。

扩散模型的源码学习diffusion_model_第12张图片

 10.x_start也是(8,3,128,128)维度的。

扩散模型的源码学习diffusion_model_第13张图片

 11.然后到了q_sample这里,

扩散模型的源码学习diffusion_model_第14张图片

 12.看一下这个extract 是干什么的,他需要传入三个值,这些都是一些基本的属性,并没有传入x_start本身,所以,他们是和x本身的值无关的,而是一个随着时间变化的东西。

扩散模型的源码学习diffusion_model_第15张图片

扩散模型的源码学习diffusion_model_第16张图片 

 它里面的tensor是这样的。扩散模型的源码学习diffusion_model_第17张图片

 扩散模型的源码学习diffusion_model_第18张图片

 扩散模型的源码学习diffusion_model_第19张图片

 13.

 14.

进行两个extract后就到了Unet里面。 

扩散模型的源码学习diffusion_model_第20张图片

15.正常的做loss,然后到了下面这个reduce这里,看看这个reduce是干啥的。

扩散模型的源码学习diffusion_model_第21张图片 

 

你可能感兴趣的:(学习)