MCPcopy Create free account
hub / github.com/Sin3DM/Sin3DM / ddim_reverse_sample

Method ddim_reverse_sample

src/diffusion/gaussian_diffusion.py:602–638  ·  view source on GitHub ↗

Sample x_{t+1} from the model using DDIM reverse ODE.

(
        self,
        model,
        x,
        t,
        clip_denoised=True,
        denoised_fn=None,
        model_kwargs=None,
        eta=0.0,
    )

Source from the content-addressed store, hash-verified

600 return {"sample": sample, "pred_xstart": out["pred_xstart"]}
601
602 def ddim_reverse_sample(
603 self,
604 model,
605 x,
606 t,
607 clip_denoised=True,
608 denoised_fn=None,
609 model_kwargs=None,
610 eta=0.0,
611 ):
612 """
613 Sample x_{t+1} from the model using DDIM reverse ODE.
614 """
615 assert eta == 0.0, "Reverse ODE only for deterministic path"
616 out = self.p_mean_variance(
617 model,
618 x,
619 t,
620 clip_denoised=clip_denoised,
621 denoised_fn=denoised_fn,
622 model_kwargs=model_kwargs,
623 )
624 # Usually our model outputs epsilon, but we re-derive it
625 # in case we used x_start or x_prev prediction.
626 eps = (
627 _extract_into_tensor(self.sqrt_recip_alphas_cumprod, t, x.shape) * x
628 - out["pred_xstart"]
629 ) / _extract_into_tensor(self.sqrt_recipm1_alphas_cumprod, t, x.shape)
630 alpha_bar_next = _extract_into_tensor(self.alphas_cumprod_next, t, x.shape)
631
632 # Equation 12. reversed
633 mean_pred = (
634 out["pred_xstart"] * th.sqrt(alpha_bar_next)
635 + th.sqrt(1 - alpha_bar_next) * eps
636 )
637
638 return {"sample": mean_pred, "pred_xstart": out["pred_xstart"]}
639
640 def ddim_sample_loop(
641 self,

Callers

nothing calls this directly

Calls 2

p_mean_varianceMethod · 0.95
_extract_into_tensorFunction · 0.85

Tested by

no test coverage detected