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,
)
| 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, |
nothing calls this directly
no test coverage detected