From 6d7279adad7cfcd21cd1dfe37cb13843b2992188 Mon Sep 17 00:00:00 2001 From: Will Berman Date: Mon, 18 Sep 2023 13:35:49 -0700 Subject: [PATCH] t2i Adapter community member fix (#5090) * convert tensorrt controlnet * Fix code quality * Fix code quality * Fix code quality * Fix code quality * Fix code quality * Fix code quality * Fix number controlnet condition * Add convert SD XL to onnx * Add convert SD XL to tensorrt * Add convert SD XL to tensorrt * Add examples in comments * Add examples in comments * Add test onnx controlnet * Add tensorrt test * Remove copied * Move file test to examples/community * Remove script * Remove script * Remove text * Fix import * Fix T2I MultiAdapter * fix tests --------- Co-authored-by: dotieuthien Co-authored-by: dotieuthien Co-authored-by: Patrick von Platen Co-authored-by: dotieuthien --- src/diffusers/models/adapter.py | 2 ++ .../t2i_adapter/pipeline_stable_diffusion_adapter.py | 11 ++++++++--- .../stable_diffusion/test_stable_diffusion_adapter.py | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/diffusers/models/adapter.py b/src/diffusers/models/adapter.py index d77c734f00..876ce1374d 100644 --- a/src/diffusers/models/adapter.py +++ b/src/diffusers/models/adapter.py @@ -90,6 +90,8 @@ class MultiAdapter(ModelMixin): features = adapter(x) if accume_state is None: accume_state = features + for i in range(len(accume_state)): + accume_state[i] = w * accume_state[i] else: for i in range(len(features)): accume_state[i] += w * features[i] diff --git a/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py b/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py index 4120d5f9df..a76ae4ecbe 100644 --- a/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py +++ b/src/diffusers/pipelines/t2i_adapter/pipeline_stable_diffusion_adapter.py @@ -727,9 +727,14 @@ class StableDiffusionAdapterPipeline(DiffusionPipeline): extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta) # 7. Denoising loop - adapter_state = self.adapter(adapter_input) - for k, v in enumerate(adapter_state): - adapter_state[k] = v * adapter_conditioning_scale + if isinstance(self.adapter, MultiAdapter): + adapter_state = self.adapter(adapter_input, adapter_conditioning_scale) + for k, v in enumerate(adapter_state): + adapter_state[k] = v + else: + adapter_state = self.adapter(adapter_input) + for k, v in enumerate(adapter_state): + adapter_state[k] = v * adapter_conditioning_scale if num_images_per_prompt > 1: for k, v in enumerate(adapter_state): adapter_state[k] = v.repeat(num_images_per_prompt, 1, 1, 1) diff --git a/tests/pipelines/stable_diffusion/test_stable_diffusion_adapter.py b/tests/pipelines/stable_diffusion/test_stable_diffusion_adapter.py index c0ef4ceae9..d48175a778 100644 --- a/tests/pipelines/stable_diffusion/test_stable_diffusion_adapter.py +++ b/tests/pipelines/stable_diffusion/test_stable_diffusion_adapter.py @@ -216,7 +216,9 @@ class StableDiffusionMultiAdapterPipelineFastTests(AdapterTests, PipelineTesterM return super().get_dummy_components("multi_adapter") def get_dummy_inputs(self, device, seed=0): - return super().get_dummy_inputs(device, seed, num_images=2) + inputs = super().get_dummy_inputs(device, seed, num_images=2) + inputs["adapter_conditioning_scale"] = [0.5, 0.5] + return inputs def test_stable_diffusion_adapter_default_case(self): device = "cpu" # ensure determinism for the device-dependent torch.Generator