From 9ae7f50053ab6aba577e536fa196a46134e213a0 Mon Sep 17 00:00:00 2001 From: a-r-r-o-w Date: Thu, 8 Feb 2024 23:48:42 +0530 Subject: [PATCH 1/3] fix denoising start --- examples/community/lpw_stable_diffusion_xl.py | 2 +- examples/community/pipeline_sdxl_style_aligned.py | 2 +- ...ipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py | 2 +- .../controlnet/pipeline_controlnet_inpaint_sd_xl.py | 5 ++++- .../pipeline_stable_diffusion_xl_img2img.py | 2 +- .../pipeline_stable_diffusion_xl_inpaint.py | 2 +- 6 files changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/community/lpw_stable_diffusion_xl.py b/examples/community/lpw_stable_diffusion_xl.py index 282512b08280..826dbe7228c2 100644 --- a/examples/community/lpw_stable_diffusion_xl.py +++ b/examples/community/lpw_stable_diffusion_xl.py @@ -1774,7 +1774,7 @@ def denoising_value_valid(dnv): num_inference_steps, strength, device, - denoising_start=self.denoising_start if denoising_value_valid else None, + denoising_start=self.denoising_start if denoising_value_valid(self.denoising_start) else None, ) # check that number of inference steps is not < 1 - as this doesn't make sense diff --git a/examples/community/pipeline_sdxl_style_aligned.py b/examples/community/pipeline_sdxl_style_aligned.py index 0296487a4466..f7aa49f959f4 100644 --- a/examples/community/pipeline_sdxl_style_aligned.py +++ b/examples/community/pipeline_sdxl_style_aligned.py @@ -1778,7 +1778,7 @@ def denoising_value_valid(dnv): num_inference_steps, strength, device, - denoising_start=self.denoising_start if denoising_value_valid else None, + denoising_start=self.denoising_start if denoising_value_valid(self.denoising_start) else None, ) # check that number of inference steps is not < 1 - as this doesn't make sense diff --git a/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py b/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py index ca2a1521d3d5..06d5d1e0a8b5 100644 --- a/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py +++ b/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py @@ -1570,7 +1570,7 @@ def denoising_value_valid(dnv): num_inference_steps, strength, device, - denoising_start=denoising_start if denoising_value_valid else None, + denoising_start=denoising_start if denoising_value_valid(denoising_start) else None, ) # check that number of inference steps is not < 1 - as this doesn't make sense if num_inference_steps < 1: diff --git a/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py b/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py index ceda744f4ef8..68fa88888ad2 100644 --- a/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py +++ b/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py @@ -1384,7 +1384,10 @@ def denoising_value_valid(dnv): self.scheduler.set_timesteps(num_inference_steps, device=device) timesteps, num_inference_steps = self.get_timesteps( - num_inference_steps, strength, device, denoising_start=denoising_start if denoising_value_valid else None + num_inference_steps, + strength, + device, + denoising_start=denoising_start if denoising_value_valid(denoising_start) else None, ) # check that number of inference steps is not < 1 - as this doesn't make sense if num_inference_steps < 1: diff --git a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py index c00d79a3a54a..2bcaefab5eac 100644 --- a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +++ b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py @@ -1322,7 +1322,7 @@ def denoising_value_valid(dnv): num_inference_steps, strength, device, - denoising_start=self.denoising_start if denoising_value_valid else None, + denoising_start=self.denoising_start if denoising_value_valid(self.denoising_start) else None, ) latent_timestep = timesteps[:1].repeat(batch_size * num_images_per_prompt) diff --git a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py index e8d728e3973f..9ea0895a3e75 100644 --- a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +++ b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py @@ -1588,7 +1588,7 @@ def denoising_value_valid(dnv): num_inference_steps, strength, device, - denoising_start=self.denoising_start if denoising_value_valid else None, + denoising_start=self.denoising_start if denoising_value_valid(self.denoising_start) else None, ) # check that number of inference steps is not < 1 - as this doesn't make sense if num_inference_steps < 1: From 16ac346ac2f9f891326dc87b503093b57dc78540 Mon Sep 17 00:00:00 2001 From: a-r-r-o-w Date: Sun, 18 Feb 2024 16:57:56 +0530 Subject: [PATCH 2/3] fix tests --- examples/community/lpw_stable_diffusion_xl.py | 2 +- examples/community/pipeline_sdxl_style_aligned.py | 2 +- ...pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py | 2 +- .../pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py | 2 +- .../pipeline_stable_diffusion_xl_img2img.py | 4 +++- .../pipeline_stable_diffusion_xl_inpaint.py | 2 +- 6 files changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/community/lpw_stable_diffusion_xl.py b/examples/community/lpw_stable_diffusion_xl.py index 29c5b165706f..4b63fa7019a7 100644 --- a/examples/community/lpw_stable_diffusion_xl.py +++ b/examples/community/lpw_stable_diffusion_xl.py @@ -1766,7 +1766,7 @@ def __call__( # 4. Prepare timesteps def denoising_value_valid(dnv): - return isinstance(self.denoising_end, float) and 0 < dnv < 1 + return isinstance(dnv, float) and 0 < dnv < 1 timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps) if image is not None: diff --git a/examples/community/pipeline_sdxl_style_aligned.py b/examples/community/pipeline_sdxl_style_aligned.py index c67759c5e4b8..a9509346dae6 100644 --- a/examples/community/pipeline_sdxl_style_aligned.py +++ b/examples/community/pipeline_sdxl_style_aligned.py @@ -1769,7 +1769,7 @@ def __call__( # 4. Prepare timesteps def denoising_value_valid(dnv): - return isinstance(self.denoising_end, float) and 0 < dnv < 1 + return isinstance(dnv, float) and 0 < dnv < 1 timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps) diff --git a/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py b/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py index b485847f5ab4..c7967bbc12a2 100644 --- a/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py +++ b/examples/community/pipeline_stable_diffusion_xl_controlnet_adapter_inpaint.py @@ -1563,7 +1563,7 @@ def __call__( # 4. set timesteps def denoising_value_valid(dnv): - return isinstance(denoising_end, float) and 0 < dnv < 1 + return isinstance(dnv, float) and 0 < dnv < 1 self.scheduler.set_timesteps(num_inference_steps, device=device) timesteps, num_inference_steps = self.get_timesteps( diff --git a/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py b/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py index f3c24ea38bf2..8ada362cd858 100644 --- a/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py +++ b/src/diffusers/pipelines/controlnet/pipeline_controlnet_inpaint_sd_xl.py @@ -1380,7 +1380,7 @@ def __call__( # 4. set timesteps def denoising_value_valid(dnv): - return isinstance(denoising_end, float) and 0 < dnv < 1 + return isinstance(dnv, float) and 0 < dnv < 1 self.scheduler.set_timesteps(num_inference_steps, device=device) timesteps, num_inference_steps = self.get_timesteps( diff --git a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py index df3592889e9e..c6a17a29eb1e 100644 --- a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +++ b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py @@ -645,6 +645,7 @@ def check_inputs( ) def get_timesteps(self, num_inference_steps, strength, device, denoising_start=None): + print("out here", denoising_start) # get the original timestep using init_timestep if denoising_start is None: init_timestep = min(int(num_inference_steps * strength), num_inference_steps) @@ -676,6 +677,7 @@ def get_timesteps(self, num_inference_steps, strength, device, denoising_start=N # because t_n+1 >= t_n, we slice the timesteps starting from the end timesteps = timesteps[-num_inference_steps:] + print("cutoff", discrete_timestep_cutoff, num_inference_steps, timesteps) return timesteps, num_inference_steps return timesteps, num_inference_steps - t_start @@ -1315,7 +1317,7 @@ def __call__( # 5. Prepare timesteps def denoising_value_valid(dnv): - return isinstance(self.denoising_end, float) and 0 < dnv < 1 + return isinstance(dnv, float) and 0 < dnv < 1 timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps) timesteps, num_inference_steps = self.get_timesteps( diff --git a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py index 00719430ce6c..3a0c494accd7 100644 --- a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py +++ b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_inpaint.py @@ -1581,7 +1581,7 @@ def __call__( # 4. set timesteps def denoising_value_valid(dnv): - return isinstance(self.denoising_end, float) and 0 < dnv < 1 + return isinstance(dnv, float) and 0 < dnv < 1 timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps) timesteps, num_inference_steps = self.get_timesteps( From bf9cbb1a4d517df31935252b957a0537babbbb49 Mon Sep 17 00:00:00 2001 From: a-r-r-o-w Date: Sun, 18 Feb 2024 16:59:49 +0530 Subject: [PATCH 3/3] remove debug --- .../stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py index c6a17a29eb1e..2f9e6eb28f21 100644 --- a/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py +++ b/src/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl_img2img.py @@ -645,7 +645,6 @@ def check_inputs( ) def get_timesteps(self, num_inference_steps, strength, device, denoising_start=None): - print("out here", denoising_start) # get the original timestep using init_timestep if denoising_start is None: init_timestep = min(int(num_inference_steps * strength), num_inference_steps) @@ -677,7 +676,6 @@ def get_timesteps(self, num_inference_steps, strength, device, denoising_start=N # because t_n+1 >= t_n, we slice the timesteps starting from the end timesteps = timesteps[-num_inference_steps:] - print("cutoff", discrete_timestep_cutoff, num_inference_steps, timesteps) return timesteps, num_inference_steps return timesteps, num_inference_steps - t_start