Buckets:
| # Изображение в изображение | |
| Image-to-image is similar to [text-to-image](conditional_image_generation), but in addition to a prompt, you can also pass an initial image as a starting point for the diffusion process. The initial image is encoded to latent space and noise is added to it. Then the latent diffusion model takes a prompt and the noisy latent image, predicts the added noise, and removes the predicted noise from the initial latent image to get the new latent image. Lastly, a decoder decodes the new latent image back into an image. | |
| С 🤗 Diffusers это так же просто, как 1-2-3: | |
| 1. Загрузите контрольную точку в класс [AutoPipelineForImage2Image](/docs/diffusers/main/ru/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image); этот конвейер автоматически загружает правильный класс конвейера на основе контрольной точки: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import load_image, make_image_grid | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| ``` | |
| > [!TIP] | |
| > В ходе выполнения руководства вы заметите, что мы используем [enable_model_cpu_offload()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_model_cpu_offload) и [enable_xformers_memory_efficient_attention()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_xformers_memory_efficient_attention), чтобы экономить память и увеличивать скорость инференса. Если вы используете PyTorch 2.0, то вам не нужно вызывать [enable_xformers_memory_efficient_attention()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.enable_xformers_memory_efficient_attention) для вашего пайплайна, так как он уже использует нативное [scaled-dot product attention](../optimization/fp16#scaled-dot-product-attention) из PyTorch 2.0. | |
| 2. Загрузите изображение для передачи в конвейер: | |
| ```py | |
| init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png") | |
| ``` | |
| 3. Передайте промпт и изображение в пайплайн, чтобы сгенерировать изображение: | |
| ```py | |
| prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k" | |
| image = pipeline(prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| изображение по умолчанию | |
| сгенерированное изображение | |
| ## Популярные модели | |
| Самыми популярными моделями для генерации изображений по изображению являются [Stable Diffusion v1.5](https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5), [Stable Diffusion XL (SDXL)](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0) и [Kandinsky 2.2](https://huggingface.co/kandinsky-community/kandinsky-2-2-decoder). Результаты, получаемые моделями Stable Diffusion и Kandinsky, различаются из-за особенностей их архитектуры и процесса обучения; как правило, можно ожидать, что SDXL будет создавать изображения более высокого качества, чем Stable Diffusion v1.5. Давайте кратко рассмотрим, как использовать каждую из этих моделей, и сравним их результаты. | |
| ### Stable Diffusion v1.5 | |
| Stable Diffusion v1.5 — это модель латентной диффузии, инициализированная из более раннего контрольного файла и дополнительно дообученная в течение 595K шагов на изображениях 512x512. Чтобы использовать этот конвейер для задачи image-to-image, вам необходимо подготовить исходное изображение для передачи в конвейер. Затем вы можете передать в конвейер промпт и изображение, чтобы сгенерировать новое изображение: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| изображение по умолчанию | |
| сгенерированное изображение | |
| ### Stable Diffusion XL (SDXL) | |
| SDXL — это более мощная версия модели Stable Diffusion. Она использует более крупную базовую модель и дополнительную модель-рефинер для повышения качества вывода базовой модели. Ознакомьтесь с руководством [SDXL](../api/pipelines/stable_diffusion/stable_diffusion_xl), чтобы получить более подробное описание того, как использовать эту модель, а также другие методы, которые она применяет для создания изображений высокого качества. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-sdxl-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, strength=0.5).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| изображение по умолчанию | |
| сгенерированное изображение | |
| ### Kandinsky 2.2 | |
| Модель Kandinsky отличается от моделей Stable Diffusion тем, что использует модель-приор изображения для создания эмбеддингов изображений. Эмбеддинги помогают обеспечить более точное согласование текста и изображений, что позволяет латентной диффузионной модели генерировать изображения более высокого качества. | |
| Самый простой способ использования Kandinsky 2.2: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| изображение по умолчанию | |
| сгенерированное изображение | |
| ## Настройка параметров конвейера | |
| В пайплайне есть несколько важных параметров, которые можно настроить и которые влияют на процесс генерации изображений и их качество. Давайте подробнее рассмотрим, что делают эти параметры и как их изменение влияет на результат. | |
| ### Сила | |
| `strength` — один из важнейших параметров, который оказывает огромное влияние на сгенерированное изображение. Он определяет, насколько сгенерированное изображение похоже на исходное. Иными словами: | |
| - 📈 более высокое значение `strength` даёт модели больше «свободы» для генерации изображения, отличающегося от исходного; значение `strength` 1.0 означает, что исходное изображение в значительной степени игнорируется | |
| - 📉 чем ниже значение `strength`, тем больше сгенерированное изображение похоже на исходное | |
| Параметры `strength` и `num_inference_steps` связаны, поскольку `strength` определяет количество шагов добавления шума. Например, если `num_inference_steps` равно 50, а `strength` — 0.8, это означает, что к исходному изображению добавляется 40 (50 * 0.8) шагов шума, после чего выполняется 40 шагов шумоподавления для получения нового изображения. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, strength=0.8).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| strength = 0.4 | |
| strength = 0.6 | |
| strength = 1.0 | |
| ### Масштаб направляющего сигнала | |
| Параметр `guidance_scale` используется для управления степенью соответствия сгенерированного изображения текстовому промпту. Чем выше значение `guidance_scale`, тем точнее изображение соответствует промпту, а чем ниже значение `guidance_scale`, тем больше у изображения свободы отклоняться от промпта. | |
| Вы можете сочетать `guidance_scale` с `strength` для ещё более точного контроля над выразительностью модели. Например, используйте высокое значение `strength + guidance_scale` для максимальной креативности или комбинацию низких значений `strength` и `guidance_scale`, чтобы сгенерировать изображение, похожее на исходное, но не столь строго привязанное к промпту. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, guidance_scale=8.0).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| guidance_scale = 0.1 | |
| guidance_scale = 5.0 | |
| guidance_scale = 10.0 | |
| ### Негативный промпт | |
| Отрицательный промпт указывает модели *не* включать в изображение определённые элементы и может использоваться для улучшения качества изображения или его модификации. Например, вы можете повысить качество изображения, добавив в отрицательный промпт такие фразы, как «poor details» или «blurry», чтобы побудить модель сгенерировать изображение более высокого качества. Либо вы можете модифицировать изображение, указав элементы, которые следует исключить из него. | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, negative_prompt=negative_prompt, image=init_image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy" | |
| negative_prompt = "jungle" | |
| ## Цепочки пайплайнов «изображение в изображение» | |
| Существуют и другие интересные способы использования конвейера image-to-image, помимо простой генерации изображения (хотя и это довольно круто). Вы можете пойти дальше и объединить его с другими конвейерами. | |
| ### Текст-в-изображение-в-изображение | |
| Chaining a text-to-image and image-to-image pipeline allows you to generate an image from text and use the generated image as the initial image for the image-to-image pipeline. This is useful if you want to generate an image entirely from scratch. For example, let's chain a Stable Diffusion and a Kandinsky model. | |
| Начните с генерации изображения с помощью конвейера text-to-image: | |
| ```py | |
| from diffusers import AutoPipelineForText2Image, AutoPipelineForImage2Image | |
| import torch | |
| from diffusers.utils import make_image_grid | |
| pipeline = AutoPipelineForText2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| text2image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k").images[0] | |
| text2image | |
| ``` | |
| Теперь вы можете передать это сгенерированное изображение в пайплайн image-to-image: | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kandinsky-community/kandinsky-2-2-decoder", dtype=torch.float16, use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| image2image = pipeline("Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", image=text2image).images[0] | |
| make_image_grid([text2image, image2image], rows=1, cols=2) | |
| ``` | |
| ### Изображение-в-изображение-в-изображение | |
| Вы также можете объединять несколько image-to-image конвейеров в цепочку, чтобы создавать более интересные изображения. Это полезно для итеративного применения стилевой трансформации к изображению, генерации коротких GIF-анимаций, восстановления цвета на изображении или восстановления отсутствующих областей изображения. | |
| Начните с генерации изображения: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image = pipeline(prompt, image=init_image, output_type="latent").images[0] | |
| ``` | |
| > [!TIP] | |
| > Важно указать `output_type="latent"` в конвейере, чтобы все выходные данные оставались в латентном пространстве и избежать ненужного шага декодирования-кодирования. Это работает только в том случае, если связанные конвейеры используют одну и ту же VAE. | |
| Передайте латентный вывод из этого конвейера в следующий конвейер, чтобы сгенерировать изображение в [стиле комиксов](https://huggingface.co/ogkalu/Comic-Diffusion): | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "ogkalu/Comic-Diffusion", dtype=torch.float16 | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # need to include the token "charliebo artstyle" in the prompt to use this checkpoint | |
| image = pipeline("Astronaut in a jungle, charliebo artstyle", image=image, output_type="latent").images[0] | |
| ``` | |
| Повторите ещё раз, чтобы сгенерировать финальное изображение в [стиле пиксель-арт](https://huggingface.co/kohbanye/pixel-art-style): | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "kohbanye/pixel-art-style", dtype=torch.float16 | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # need to include the token "pixelartstyle" in the prompt to use this checkpoint | |
| image = pipeline("Astronaut in a jungle, pixelartstyle", image=image).images[0] | |
| make_image_grid([init_image, image], rows=1, cols=2) | |
| ``` | |
| ### Изображение в апскейлер в супер-разрешение | |
| Ещё один способ связать ваш image-to-image pipeline — использовать upscaler и super-resolution pipeline, чтобы значительно повысить уровень детализации изображения. | |
| Начните с пайплайна image-to-image: | |
| ```py | |
| import torch | |
| from diffusers import AutoPipelineForImage2Image | |
| from diffusers.utils import make_image_grid, load_image | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| # pass prompt and image to pipeline | |
| image_1 = pipeline(prompt, image=init_image, output_type="latent").images[0] | |
| ``` | |
| > [!TIP] | |
| > Важно указать `output_type="latent"` в конвейере, чтобы все выходные данные оставались в *латентном* пространстве и избежать лишнего шага декодирования-кодирования. Это работает только в том случае, если связанные конвейеры используют одну и ту же VAE. | |
| Подключите его к конвейеру апскейлера, чтобы повысить разрешение изображения: | |
| ```py | |
| from diffusers import StableDiffusionLatentUpscalePipeline | |
| upscaler = StableDiffusionLatentUpscalePipeline.from_pretrained( | |
| "stabilityai/sd-x2-latent-upscaler", dtype=torch.float16, use_safetensors=True | |
| ) | |
| upscaler.enable_model_cpu_offload() | |
| upscaler.enable_xformers_memory_efficient_attention() | |
| image_2 = upscaler(prompt, image=image_1).images[0] | |
| ``` | |
| Наконец, объедините его с конвейером супер-разрешения, чтобы дополнительно повысить разрешение: | |
| ```py | |
| from diffusers import StableDiffusionUpscalePipeline | |
| super_res = StableDiffusionUpscalePipeline.from_pretrained( | |
| "stabilityai/stable-diffusion-x4-upscaler", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| super_res.enable_model_cpu_offload() | |
| super_res.enable_xformers_memory_efficient_attention() | |
| image_3 = super_res(prompt, image=image_2).images[0] | |
| make_image_grid([init_image, image_3.resize((512, 512))], rows=1, cols=2) | |
| ``` | |
| ## Управление генерацией изображений | |
| Попытка сгенерировать изображение, которое выглядит именно так, как вы хотите, может оказаться сложной задачей, поэтому методы и модели контролируемой генерации так полезны. Хотя с помощью `negative_prompt` можно частично управлять генерацией изображений, существуют более надёжные методы, такие как взвешивание промптов и ControlNets. | |
| ### Взвешивание промптов | |
| Взвешивание промпта позволяет масштабировать представление каждого концепта в промпте. Например, в промпте вида "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" вы можете увеличить или уменьшить эмбеддинги слов "astronaut" и "jungle". Библиотека [Compel](https://github.com/damian0815/compel) предоставляет простой синтаксис для настройки весов промпта и генерации эмбеддингов. О том, как создать эмбеддинги, вы можете узнать в руководстве [Взвешивание промпта](weighted_prompts). | |
| [AutoPipelineForImage2Image](/docs/diffusers/main/ru/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image) имеет параметр `prompt_embeds` (а также `negative_prompt_embeds`, если вы используете негативный промпт), в который можно передать эмбеддинги, заменяющие параметр `prompt`. | |
| ```py | |
| from diffusers import AutoPipelineForImage2Image | |
| import torch | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| image = pipeline(prompt_embeds=prompt_embeds, # generated from Compel | |
| negative_prompt_embeds=negative_prompt_embeds, # generated from Compel | |
| image=init_image, | |
| ).images[0] | |
| ``` | |
| ### ControlNet | |
| ControlNets обеспечивают более гибкий и точный способ управления генерацией изображений, поскольку для этого можно использовать дополнительное изображение-условие. В качестве изображения-условия может выступать canny-изображение, карта глубины, результат сегментации изображения и даже наброски! Какой бы тип изображения-условия вы ни выбрали, ControlNet сгенерирует изображение, сохраняющее содержащуюся в нём информацию. | |
| Например, давайте зададим условие для изображения с помощью карты глубины, чтобы сохранить пространственную информацию в изображении. | |
| ```py | |
| from diffusers.utils import load_image, make_image_grid | |
| # prepare image | |
| url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png" | |
| init_image = load_image(url) | |
| init_image = init_image.resize((958, 960)) # resize to depth image dimensions | |
| depth_image = load_image("https://huggingface.co/lllyasviel/control_v11f1p_sd15_depth/resolve/main/images/control.png") | |
| make_image_grid([init_image, depth_image], rows=1, cols=2) | |
| ``` | |
| Загрузите модель ControlNet, использующую карты глубины в качестве условия, и [AutoPipelineForImage2Image](/docs/diffusers/main/ru/api/pipelines/auto_pipeline#diffusers.AutoPipelineForImage2Image): | |
| ```py | |
| from diffusers import ControlNetModel, AutoPipelineForImage2Image | |
| import torch | |
| controlnet = ControlNetModel.from_pretrained("lllyasviel/control_v11f1p_sd15_depth", dtype=torch.float16, variant="fp16", use_safetensors=True) | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "stable-diffusion-v1-5/stable-diffusion-v1-5", controlnet=controlnet, dtype=torch.float16, variant="fp16", use_safetensors=True | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| ``` | |
| Теперь сгенерируйте новое изображение, используя в качестве условий карту глубины, исходное изображение и промпт: | |
| ```py | |
| prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k" | |
| image_control_net = pipeline(prompt, image=init_image, control_image=depth_image).images[0] | |
| make_image_grid([init_image, depth_image, image_control_net], rows=1, cols=3) | |
| ``` | |
| изображение по умолчанию | |
| изображение глубины | |
| Изображение ControlNet | |
| Применим новый [стиль](https://huggingface.co/nitrosocke/elden-ring-diffusion) к изображению, сгенерированному с помощью ControlNet, объединив его с пайплайном image-to-image: | |
| ```py | |
| pipeline = AutoPipelineForImage2Image.from_pretrained( | |
| "nitrosocke/elden-ring-diffusion", dtype=torch.float16, | |
| ) | |
| pipeline.enable_model_cpu_offload() | |
| # remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed | |
| pipeline.enable_xformers_memory_efficient_attention() | |
| prompt = "elden ring style astronaut in a jungle" # include the token "elden ring style" in the prompt | |
| negative_prompt = "ugly, deformed, disfigured, poor details, bad anatomy" | |
| image_elden_ring = pipeline(prompt, negative_prompt=negative_prompt, image=image_control_net, strength=0.45, guidance_scale=10.5).images[0] | |
| make_image_grid([init_image, depth_image, image_control_net, image_elden_ring], rows=2, cols=2) | |
| ``` | |
| ## Оптимизация | |
| Запуск диффузионных моделей требует значительных вычислительных ресурсов, но с помощью нескольких оптимизационных приёмов их вполне можно запускать на потребительских и бесплатных GPU. Например, вы можете использовать более эффективную по памяти форму внимания, такую как [scaled-dot product attention](../optimization/fp16#scaled-dot-product-attention) из PyTorch 2.0 или [xFormers](../optimization/attention_backends) (можно использовать один из них, но нет необходимости применять оба). Также можно выгружать модель на GPU, пока остальные компоненты пайплайна ожидают на CPU. | |
| ```diff | |
| + pipeline.enable_model_cpu_offload() | |
| + pipeline.enable_xformers_memory_efficient_attention() | |
| ``` | |
| С помощью [`torch.compile`](../optimization/fp16#torchcompile) вы можете ещё больше ускорить инференс, обернув ваш UNet этим инструментом: | |
| ```py | |
| pipeline.unet = torch.compile(pipeline.unet, mode="reduce-overhead", fullgraph=True) | |
| ``` | |
| Чтобы узнать больше, ознакомьтесь с разделом [Оптимизация и масштабирование](../optimization/overview#optimization-techniques). | |
Xet Storage Details
- Size:
- 33.2 kB
- Xet hash:
- 2e0c40fe880ac00d3bb323857e9af7be8bf7b21ab2697f00403b91cc821b646d
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.