-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ddpm推理的尝试 #1
Comments
然而,我在看到ddpm论文里面的Algorithm 2 后,尝试去把p_sample()中获得sample方法替换为符合Algorithm 2 的样子。 为此,我做了以下三处修改: 在Repaint的gaussion_diffusion.py的这里添加了
在这里,把
替换为了:
在p_sample()的这一行新添加了一个if-else分支,将原来的获得sample的式子写在else里(如下所示),
可以看到,需要在.yml文件里面新增一行配置,像是下面这样: 以上的三处修改,分别可以在我的代码中看到 |
《Tutorial on Diffusion Models for Imaging and Vision》 的公式(56),和p_sample()中原本的 而我添加的 这样的话,想要使用
而如果使用我添加的 猜想:.yml配置里的参数应该是这样的两个组合: 认为model_output是 预测的噪声 时:
认为model_output是 预测的x0 时:
|
我注意到在Repaint仓库的confs/里的那些.yml,
当使用celeba256_250000.pt和places256_300000.pt作为model_path时,都没有键为classifier_path的键值对。
所以我优先去关注了一下没有涉及classifier的推理(无条件引导推理?),在 commit 1 可以看到我注释掉了很多涉及classifier_path的部分。
关于函数p_sample()中的ddpm采样
.yml文件里 predict_xstart: false 会导致 model_mean_type 是 ModelMeanType.EPSILON,
此时,会把每次的model_output看作是预测的噪声eps,
eps通过函数_predict_xstart_from_eps() 得到预测的原始图像 x_0,
进而再使用q_posterior_mean_variance()得到posterior_mean ,
posterior_mean 返回到p_sample()中,即是out["mean"]。
则ddpm的采样通过
sample = out["mean"] + nonzero_mask * th.exp(0.5 * out["log_variance"]) * noise
得到。The text was updated successfully, but these errors were encountered: