(pipeline, ddim_scheduler, latent, num_inv_steps, prompt)
| 65 | |
| 66 | @torch.no_grad() |
| 67 | def ddim_loop(pipeline, ddim_scheduler, latent, num_inv_steps, prompt): |
| 68 | context = init_prompt(prompt, pipeline) |
| 69 | uncond_embeddings, cond_embeddings = context.chunk(2) |
| 70 | all_latent = [latent] |
| 71 | latent = latent.clone().detach() |
| 72 | for i in tqdm(range(num_inv_steps)): |
| 73 | t = ddim_scheduler.timesteps[len(ddim_scheduler.timesteps) - i - 1] |
| 74 | noise_pred = get_noise_pred_single(latent, t, cond_embeddings, pipeline.unet) |
| 75 | latent = next_step(noise_pred, t, latent, ddim_scheduler) |
| 76 | all_latent.append(latent) |
| 77 | return all_latent |
| 78 | |
| 79 | @torch.no_grad() |
| 80 | def ddim_inversion(pipeline, ddim_scheduler, video_latent, num_inv_steps, prompt=""): |
no test coverage detected