From 1c2bd275fe5c1021feaf1cbe52f471f7d712cfc3 Mon Sep 17 00:00:00 2001 From: wfng92 <43742196+wfng92@users.noreply.github.com> Date: Mon, 17 Oct 2022 17:02:25 +0800 Subject: [PATCH] Fix img2img DDIM index out of bound Added a [community solution](https://github.com/CompVis/stable-diffusion/issues/111#issuecomment-1229483511) to fix index out of bound when doing img2img generation with `ddim` sampler. Also, restored `steps_out` to be `ddim_timesteps + 1` since the removal was meant to fix the [1000 steps issue](https://github.com/CompVis/stable-diffusion/issues/111) --- ldm/modules/diffusionmodules/util.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ldm/modules/diffusionmodules/util.py b/ldm/modules/diffusionmodules/util.py index 60b4d8a028..3d08fb89fd 100644 --- a/ldm/modules/diffusionmodules/util.py +++ b/ldm/modules/diffusionmodules/util.py @@ -64,7 +64,8 @@ def make_ddim_timesteps( ): if ddim_discr_method == 'uniform': c = num_ddpm_timesteps // num_ddim_timesteps - ddim_timesteps = np.asarray(list(range(0, num_ddpm_timesteps, c))) + # ddim_timesteps = np.asarray(list(range(0, num_ddpm_timesteps, c))) + ddim_timesteps = (np.arange(0, num_ddim_timesteps) * c).astype(int) elif ddim_discr_method == 'quad': ddim_timesteps = ( ( @@ -81,8 +82,8 @@ def make_ddim_timesteps( # assert ddim_timesteps.shape[0] == num_ddim_timesteps # add one to get the final alpha values right (the ones from first scale to data during sampling) -# steps_out = ddim_timesteps + 1 - steps_out = ddim_timesteps + steps_out = ddim_timesteps + 1 + # steps_out = ddim_timesteps if verbose: print(f'Selected timesteps for ddim sampler: {steps_out}')