扩散模型的源码学习diffusion_model

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

(1)Unet,主干网络。

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

 2.

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

3.进入到高斯模型的内部,发现他的forward并不是特别复杂,

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

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

4.可以看到,生成了一个t,是随机的0,1不知道在干啥。 

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

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

 乘2,减1,就是做了简单的变化。

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

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

7.进入到p_losses里面,

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

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

t是8个随机数tensor。

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

 也就是说这个default所使用的是提供的这个rand。

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

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

 11.然后到了q_sample这里,

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

 

 它里面的tensor是这样的。

 

 

 13.

 14.

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

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

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值