Buckets:

mishig's picture
|
download
raw
139 kB

Stable Diffusion XL

Stable Diffusion XL (SDXL) был предложен в статье SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis авторами Dustin Podell, Zion English, Kyle Lacey, Andreas Blattmann, Tim Dockhorn, Jonas Müller, Joe Penna и Robin Rombach.

Аннотация из статьи:

Мы представляем SDXL — латентную диффузионную модель для синтеза изображений по текстовому описанию. По сравнению с предыдущими версиями Stable Diffusion, SDXL использует UNet-бэкбон в три раза больше: увеличение числа параметров модели обусловлено в основном наличием дополнительных блоков внимания и более крупным контекстом кросс-внимания, поскольку SDXL использует второй текстовый энкодер. Мы разработали несколько новых схем условного кодирования и обучили SDXL на изображениях с различными соотношениями сторон. Также мы внедрили модель уточнения, которая применяется для повышения визуальной точности образцов, сгенерированных SDXL, с помощью пост-обработки в формате «изображение в изображение». Мы демонстрируем, что SDXL показывает значительно лучшие результаты по сравнению с предыдущими версиями Stable Diffusion и достигает показателей, конкурентоспособных с закрытыми передовыми генераторами изображений.

Советы

  • Использование SDXL с планировщиком DPM++ менее чем за 50 шагов известно тем, что приводит к появлению визуальных артефактов, поскольку решатель становится численно нестабильным. Чтобы исправить эту проблему, ознакомьтесь с этим PR, в котором для решателей ODE/SDE рекомендуется:
    • Установите use_karras_sigmas=True или lu_lambdas=True, чтобы улучшить качество изображения
    • Установите euler_at_final=True, если вы используете солвер с равномерными шагами (DPM++2M или DPM++2M SDE)
  • Большинство контрольных точек SDXL дают наилучшие результаты при размере изображения 1024x1024. Поддерживаются также размеры 768x768 и 512x512, однако качество результата в этом случае ниже. Использование размеров меньше 512x512 не рекомендуется и, вероятно, не будет поддерживаться для контрольных точек по умолчанию, таких как stabilityai/stable-diffusion-xl-base-1.0.
  • SDXL может передавать разные промпты для каждого из текстовых энкодеров, на которых он обучался. Мы даже можем передавать разные части одного и того же промпта текстовым энкодерам.
  • Качество изображений, генерируемых SDXL, можно повысить, используя модель-рефинер в режиме image-to-image.
  • SDXL предлагает параметры negative_original_size, negative_crops_coords_top_left и negative_target_size для негативного условия модели по параметрам разрешения и обрезки изображения.

Ознакомьтесь с организацией Stability AI на Hugging Face Hub, чтобы найти официальные контрольные точки базовой и уточняющей моделей!

Убедитесь, что у вас установлены следующие библиотеки.

# uncomment to install the necessary libraries in Colab
#!pip install -q diffusers transformers accelerate invisible-watermark>=0.2.0

Мы рекомендуем установить библиотеку invisible-watermark, чтобы помогать в идентификации сгенерированных изображений. Если библиотека invisible-watermark установлена, она используется по умолчанию. Чтобы отключить водяной знак:

pipeline = StableDiffusionXLPipeline.from_pretrained(..., add_watermarker=False)

Загрузка контрольных точек модели

Веса модели могут храниться в отдельных подпапках на Hub или локально, в этом случае следует использовать метод from_pretrained():

from diffusers import StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
import torch

pipeline = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

refiner = StableDiffusionXLImg2ImgPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0", dtype=torch.float16, use_safetensors=True, variant="fp16"
).to("cuda")

Вы также можете использовать метод from_single_file() для загрузки контрольной точки модели, сохранённой в формате одного файла (.ckpt или .safetensors), из Hub или локально:

from diffusers import StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline
import torch

pipeline = StableDiffusionXLPipeline.from_single_file(
    "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/blob/main/sd_xl_base_1.0.safetensors",
    dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

refiner = StableDiffusionXLImg2ImgPipeline.from_single_file(
    "https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/blob/main/sd_xl_refiner_1.0.safetensors", dtype=torch.float16
).to("cuda")

Текст в изображение

Для генерации изображений по тексту передайте текстовый промпт. По умолчанию SDXL генерирует изображение размером 1024x1024 для достижения наилучших результатов. Вы можете попробовать установить параметры height и width в 768x768 или 512x512, но значения ниже 512x512, скорее всего, не будут работать.

from diffusers import AutoPipelineForText2Image
import torch

pipeline_text2image = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipeline_text2image(prompt=prompt).images[0]
image

Изображение в изображение

Для преобразования изображения в изображение SDXL особенно хорошо работает с размерами изображений от 768x768 до 1024x1024. Передайте исходное изображение и текстовый промпт для условного формирования изображения:

from diffusers import AutoPipelineForImage2Image
from diffusers.utils import load_image, make_image_grid

# use from_pipe to avoid consuming additional memory when loading a checkpoint
pipeline = AutoPipelineForImage2Image.from_pipe(pipeline_text2image).to("cuda")  # or "mps", "xpu", "cpu"

url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png"
init_image = load_image(url)
prompt = "a dog catching a frisbee in the jungle"
image = pipeline(prompt, image=init_image, strength=0.8, guidance_scale=10.5).images[0]
make_image_grid([init_image, image], rows=1, cols=2)

Инпейнтинг

Для инпейнтинга вам понадобится исходное изображение и маска области, которую вы хотите заменить в исходном изображении. Создайте промпт, описывающий, чем вы хотите заменить замаскированную область.

from diffusers import AutoPipelineForInpainting
from diffusers.utils import load_image, make_image_grid

# use from_pipe to avoid consuming additional memory when loading a checkpoint
pipeline = AutoPipelineForInpainting.from_pipe(pipeline_text2image).to("cuda")  # or "mps", "xpu", "cpu"

img_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-text2img.png"
mask_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/sdxl-inpaint-mask.png"

init_image = load_image(img_url)
mask_image = load_image(mask_url)

prompt = "A deep sea diver floating"
image = pipeline(prompt=prompt, image=init_image, mask_image=mask_image, strength=0.85, guidance_scale=12.5).images[0]
make_image_grid([init_image, mask_image, image], rows=1, cols=3)

Улучшение качества изображения

SDXL включает модель-рефинер, предназначенную для удаления шума на этапе с низким уровнем шума для генерации изображений более высокого качества на основе базовой модели. Существует два способа использования рефинера:

  1. используйте базовую и уточняющую модели вместе для получения улучшенного изображения
  2. используйте базовую модель для генерации изображения, а затем модель-рефинер для добавления дополнительных деталей к изображению (именно так изначально обучался SDXL)

Базовая модель + модель-рефинер

При использовании базовой модели и модели-уточнителя совместно для генерации изображения этот подход называется ансамблем экспертных денойзеров. Подход с ансамблем экспертных денойзеров требует меньшего общего числа шагов денойзинга по сравнению с передачей вывода базовой модели в модель-уточнитель, поэтому его выполнение должно быть значительно быстрее. Однако вы не сможете проверить вывод базовой модели, так как он всё ещё содержит большое количество шума.

В качестве ансамбля экспертных шумоподавителей базовая модель выступает в роли эксперта на этапе диффузии с высоким уровнем шума, а модель-рефинер — на этапе диффузии с низким уровнем шума. Загрузите базовую и рефинерную модели:

from diffusers import DiffusionPipeline
import torch

base = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

refiner = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base.text_encoder_2,
    vae=base.vae,
    dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
).to("cuda")

Чтобы использовать этот подход, необходимо определить количество шагов для каждой модели, чтобы они прошли свои соответствующие этапы. Для базовой модели это контролируется параметром denoising_end, а для модели-рефинера — параметром denoising_start.

Параметры denoising_end и denoising_start должны быть числами с плавающей точкой в диапазоне от 0 до 1. Эти параметры задаются как доля дискретных шагов времени, определенных планировщиком. Если вы также используете параметр strength, он будет проигнорирован, поскольку количество шагов денойзинга определяется дискретными шагами времени, на которых обучалась модель, и объявленным дробным порогом.

Установим denoising_end=0.8, чтобы базовая модель выполняла первые 80% денойзинга на шагах с высоким уровнем шума, и установим denoising_start=0.8, чтобы модель-рефинер выполняла последние 20% денойзинга на шагах с низким уровнем шума. Выход базовой модели должен быть в латентном пространстве, а не в виде изображения PIL.

prompt = "A majestic lion jumping from a big stone at night"

image = base(
    prompt=prompt,
    num_inference_steps=40,
    denoising_end=0.8,
    output_type="latent",
).images
image = refiner(
    prompt=prompt,
    num_inference_steps=40,
    denoising_start=0.8,
    image=image,
).images[0]
image
базовая модель по умолчанию



ансамбль экспертных шумоподавителей

Модель-рефинер также можно использовать для инпейнтинга в StableDiffusionXLInpaintPipeline:

from diffusers import StableDiffusionXLInpaintPipeline
from diffusers.utils import load_image, make_image_grid
import torch

base = StableDiffusionXLInpaintPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

refiner = StableDiffusionXLInpaintPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base.text_encoder_2,
    vae=base.vae,
    dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
).to("cuda")

img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"

init_image = load_image(img_url)
mask_image = load_image(mask_url)

prompt = "A majestic tiger sitting on a bench"
num_inference_steps = 75
high_noise_frac = 0.7

image = base(
    prompt=prompt,
    image=init_image,
    mask_image=mask_image,
    num_inference_steps=num_inference_steps,
    denoising_end=high_noise_frac,
    output_type="latent",
).images
image = refiner(
    prompt=prompt,
    image=image,
    mask_image=mask_image,
    num_inference_steps=num_inference_steps,
    denoising_start=high_noise_frac,
).images[0]
make_image_grid([init_image, mask_image, image.resize((512, 512))], rows=1, cols=3)

Этот метод ансамбля экспертных денойзеров хорошо работает со всеми доступными планировщиками!

Базовая модель для модели-уточнителя

SDXL повышает качество изображений, используя модель-рефинер для добавления дополнительных деталей высокого качества к полностью денойзному изображению от базовой модели в режиме image-to-image.

Загрузите базовую модель и модель уточнения:

from diffusers import DiffusionPipeline
import torch

base = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

refiner = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base.text_encoder_2,
    vae=base.vae,
    dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
).to("cuda")

Вы можете использовать SDXL refiner с другой базовой моделью. Например, вы можете использовать конвейеры Hunyuan-DiT или PixArt-Sigma для генерации изображений с лучшим следованием промпту. После генерации изображения вы можете передать его в модель SDXL refiner для улучшения качества финальной генерации.

Сгенерируйте изображение с помощью базовой модели и установите выход модели в пространство latent:

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"

image = base(prompt=prompt, output_type="latent").images[0]

Передайте сгенерированное изображение в модель-рефинер:

image = refiner(prompt=prompt, image=image[None, :]).images[0]
базовая модель



базовая модель + модель-рефинер

Для инпейнтинга загрузите базовую модель и модель-рефинер в StableDiffusionXLInpaintPipeline, удалите параметры denoising_end и denoising_start и выберите меньшее количество шагов инференса для рефинера.

Микроусловие

Обучение SDXL включает несколько дополнительных техник условного кодирования, которые называются микроусловиями. К ним относятся исходный размер изображения, целевой размер изображения и параметры обрезки. Микроусловия можно использовать на этапе инференса для создания изображений высокого качества, выровненных по центру.

Благодаря classifier-free guidance вы можете использовать как параметры микро-условия, так и параметры отрицательного микро-условия. Они доступны в StableDiffusionXLPipeline, StableDiffusionXLImg2ImgPipeline, StableDiffusionXLInpaintPipeline и StableDiffusionXLControlNetPipeline.

Условие по размеру

Существует два типа размерного обусловливания:

  • Кондиционирование по original_size берётся из увеличенных изображений в обучающей выборке (поскольку было бы расточительно отбрасывать более мелкие изображения, которые составляют почти 40% от общего объёма обучающих данных). Таким образом, SDXL учится тому, что артефакты увеличения не должны присутствовать в изображениях высокого разрешения. Во время инференса вы можете использовать original_size, чтобы указать исходное разрешение изображения. Использование значения по умолчанию (1024, 1024) приводит к получению изображений более высокого качества, похожих на изображения 1024x1024 в наборе данных. Если вы решите использовать более низкое разрешение, например (256, 256), модель по-прежнему будет генерировать изображения 1024x1024, но они будут выглядеть как изображения низкого разрешения (более простые паттерны, размытие) в наборе данных.

  • Кондиционирование по target_size появилось благодаря дообучению SDXL для поддержки различных соотношений сторон изображений. Во время инференса, если вы используете значение по умолчанию (1024, 1024), вы получите изображение, композиция которого напоминает квадратные изображения из набора данных. Мы рекомендуем использовать одно и то же значение для target_size и original_size, но вы можете экспериментировать с другими вариантами!

🤗 Diffusers также позволяет задавать отрицательные условия относительно размера изображения, чтобы направить генерацию в сторону от определённых разрешений:

from diffusers import StableDiffusionXLPipeline
import torch

pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(
    prompt=prompt,
    negative_original_size=(512, 512),
    negative_target_size=(1024, 1024),
).images[0]

Изображения, отрицательно обусловленные разрешениями (128, 128), (256, 256) и (512, 512).

Условие по кадрированию

Изображения, сгенерированные предыдущими моделями Stable Diffusion, иногда могут выглядеть обрезанными. Это происходит потому, что во время обучения изображения действительно обрезаются, чтобы все изображения в батче имели одинаковый размер. Условливаясь на координаты обрезки, SDXL учится тому, что отсутствие обрезки — координаты (0, 0) — обычно коррелирует с центрированными объектами и полными лицами (это значение по умолчанию в 🤗 Diffusers). Вы можете экспериментировать с различными координатами, если хотите генерировать композиции, смещённые от центра!

from diffusers import StableDiffusionXLPipeline
import torch

pipeline = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipeline(prompt=prompt, crops_coords_top_left=(256, 0)).images[0]
image

Вы также можете указать отрицательные координаты обрезки, чтобы направить генерацию в сторону от определённых параметров обрезки:

from diffusers import StableDiffusionXLPipeline
import torch

pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
image = pipe(
    prompt=prompt,
    negative_original_size=(512, 512),
    negative_crops_coords_top_left=(0, 0),
    negative_target_size=(1024, 1024),
).images[0]
image

Используйте разные промпты для каждого текстового кодировщика

SDXL использует два текстовых кодировщика, поэтому можно передать разные промпты каждому из них, что может улучшить качество. Передайте исходный промпт в prompt, а второй промпт — в prompt_2 (используйте negative_prompt и negative_prompt_2, если вы применяете негативные промпты):

from diffusers import StableDiffusionXLPipeline
import torch

pipeline = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", dtype=torch.float16, variant="fp16", use_safetensors=True
).to("cuda")  # or "mps", "xpu", "cpu"

# prompt is passed to OAI CLIP-ViT/L-14
prompt = "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k"
# prompt_2 is passed to OpenCLIP-ViT/bigG-14
prompt_2 = "Van Gogh painting"
image = pipeline(prompt=prompt, prompt_2=prompt_2).images[0]
image

Двойные текстовые энкодеры также поддерживают эмбеддинги текстовой инверсии, которые необходимо загружать отдельно, как описано в руководстве по текстовой инверсии.

Оптимизации

SDXL — это большая модель, и для её запуска на вашем оборудовании может потребоваться оптимизация памяти. Ниже приведены советы по экономии памяти и ускорению инференса.

  1. При ошибках нехватки памяти перенесите модель на CPU с помощью enable_model_cpu_offload():
- base.to("cuda")  # or "mps", "xpu", "cpu"
- refiner.to("cuda")
+ base.enable_model_cpu_offload()
+ refiner.enable_model_cpu_offload()
  1. Используйте torch.compile для ускорения примерно на 20% (требуется torch>=2.0):
+ base.unet = torch.compile(base.unet, mode="reduce-overhead", fullgraph=True)
+ refiner.unet = torch.compile(refiner.unet, mode="reduce-overhead", fullgraph=True)
  1. Включите xFormers для запуска SDXL, если torch<2.0:
+ base.enable_xformers_memory_efficient_attention()
+ refiner.enable_xformers_memory_efficient_attention()

Ресурсы

Если вы хотите поэкспериментировать с минимальной версией UNet2DConditionModel, используемой в SDXL, обратите внимание на реализацию minSDXL, написанную на PyTorch и напрямую совместимую с 🤗 Diffusers.

StableDiffusionXLPipeline[[diffusers.StableDiffusionXLPipeline]]

diffusers.StableDiffusionXLPipeline[[diffusers.StableDiffusionXLPipeline]]

diffusers.StableDiffusionXLPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None)

Источник

Параметры:

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : Замороженный текстовый энкодер. Stable Diffusion XL использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 ( CLIPTextModelWithProjection) : Второй замороженный текстовый энкодер. Stable Diffusion XL использует текстовую и пул-части CLIP, а именно вариант laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (CLIPTokenizer) : Второй токенизатор класса CLIPTokenizer.

unet (UNet2DConditionModel) : Условная архитектура U-Net для удаления шума из закодированных латентов изображения.

scheduler (SchedulerMixin) : планировщик, используемый в сочетании с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.

force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "True") : Указывает, следует ли принудительно устанавливать эмбеддинги отрицательного промпта в 0. См. также конфигурацию stabilityai/stable-diffusion-xl-base-1-0.

add_watermarker (bool, необязательный) : Использовать ли библиотеку invisible_watermark для добавления водяных знаков на выходные изображения. Если значение не задано, по умолчанию используется True, если пакет установлен, в противном случае водяной знак не добавляется.

Пайплайн для генерации изображений по тексту с использованием Stable Diffusion XL.

Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)

Пайплайн также наследует следующие методы загрузки:

call[[diffusers.StableDiffusionXLPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] | None = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] | None = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)

Источник

Параметры:

prompt (str или list[str], необязательный) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется prompt

height (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Высота генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Значения ниже 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.

width (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Значения ниже 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.

num_inference_steps (int, optional, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.

timesteps (list[int], optional) : Пользовательские шаги для процесса денойзинга с планировщиками, поддерживающими аргумент timesteps в их методе set_timesteps. Если не определено, будет использоваться поведение по умолчанию при передаче num_inference_steps. Должны быть в порядке убывания.

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

denoising_end (float, optional) : When specified, determines the fraction (between 0.0 and 1.0) of the total denoising process to be completed before it is intentionally prematurely terminated. As a result, the returned sample will still retain a substantial amount of noise as determined by the discrete timesteps selected by the scheduler. The denoising_end parameter should ideally be utilized when this pipeline forms a part of a "Mixture of Denoisers" multi-pipeline setup, as elaborated in Refining the Image Output

guidance_scale (float, optional, по умолчанию 5.0) : Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.

negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).

negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, negative_prompt используется в обоих текстовых кодировщиках

num_images_per_prompt (int, необязательный, по умолчанию 1) : Количество изображений, генерируемых на один запрос.

eta (float, optional, по умолчанию 0.0) : Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

latents (torch.Tensor, необязательный) : Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы скорректировать одну и ту же генерацию с разными промптами. Если не предоставлены, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.

prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.

negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.

negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

ip_adapter_image : (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.

ip_adapter_image_embeds (list[torch.Tensor], необязательный) : Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.

output_type (str, необязательный, по умолчанию "pil") : Формат вывода для генерируемого изображения. Выберите между PIL: PIL.Image.Image или np.array.

return_dict (bool, необязательный, по умолчанию True) : Возвращать ли ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput вместо обычного кортежа.

cross_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

guidance_rescale (float, optional, defaults to 0.0) : Guidance rescale factor proposed by Common Diffusion Noise Schedules and Sample Steps are Flawed guidance_scale is defined as φ in equation 16. of Common Diffusion Noise Schedules and Sample Steps are Flawed. Guidance rescale factor should fix overexposure when using zero terminal SNR.

original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Если original_size не совпадает с target_size, изображение будет выглядеть как уменьшенное или увеличенное. По умолчанию original_size равно (height, width), если не указано иное. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : crops_coords_top_left можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции crops_coords_top_left вниз. Как правило, хорошо центрированные изображения получаются при установке crops_coords_top_left в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

target_size (tuple[int], optional, по умолчанию (1024, 1024)) : В большинстве случаев target_size следует установить в желаемую высоту и ширину генерируемого изображения. Если не указано, по умолчанию будет (height, width). Часть микроусловий SDXL, описанная в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

negative_original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного условия процесса генерации на основе конкретного разрешения изображения. Является частью микроусловия SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

negative_crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : Используется для негативного обусловливания процесса генерации на основе конкретных координат кадрирования. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

negative_target_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного обусловливания процесса генерации на основе целего разрешения изображения. В большинстве случаев должно совпадать с target_size. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, optional) : функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса со следующими аргументами: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, как указано в callback_on_step_end_tensor_inputs.

callback_on_step_end_tensor_inputs (list, optional) : Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса pipeline.

Возвращает: ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput или tuple

~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

>>> import torch
>>> from diffusers import StableDiffusionXLPipeline

>>> pipe = StableDiffusionXLPipeline.from_pretrained(
...     "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")

>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt).images[0]

encode_prompt[[diffusers.StableDiffusionXLPipeline.encode_prompt]]

encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)

Источник

Параметры:

prompt (str или list[str], необязательный) : промпт для кодирования

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется prompt

device : (torch.device): устройство torch

num_images_per_prompt (int) : количество изображений, которые должны быть сгенерированы для каждого промпта

do_classifier_free_guidance (bool) : использовать ли классификаторное свободное наведение (classifier free guidance)

negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).

negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, negative_prompt используется в обоих текстовых кодировщиках

prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.

negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.

negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

lora_scale (float, optional) : масштаб lora, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.

clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

get_guidance_scale_embedding[[diffusers.StableDiffusionXLPipeline.get_guidance_scale_embedding]]

get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)

Источник

Параметры:

w (torch.Tensor) : Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов.

embedding_dim (int, необязательный, по умолчанию 512) : Размерность генерируемых эмбеддингов.

dtype (torch.dtype, необязательный, по умолчанию torch.float32) : Тип данных для генерируемых эмбеддингов.

Возвращает: torch.Tensor

Векторы встраиваний с формой (len(w), embedding_dim).

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

StableDiffusionXLImg2ImgPipeline[[diffusers.StableDiffusionXLImg2ImgPipeline]]

diffusers.StableDiffusionXLImg2ImgPipeline[[diffusers.StableDiffusionXLImg2ImgPipeline]]

diffusers.StableDiffusionXLImg2ImgPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None)

Источник

Параметры:

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : Замороженный текстовый энкодер. Stable Diffusion XL использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 ( CLIPTextModelWithProjection) : Второй замороженный текстовый энкодер. Stable Diffusion XL использует текстовую и пул-части CLIP, а именно вариант laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (CLIPTokenizer) : Второй токенизатор класса CLIPTokenizer.

unet (UNet2DConditionModel) : Условная архитектура U-Net для удаления шума из закодированных латентов изображения.

scheduler (SchedulerMixin) : планировщик, используемый в сочетании с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.

requires_aesthetics_score (bool, необязательный, по умолчанию "False") : Указывает, требуется ли для unet передача условия aesthetic_score во время инференса. См. также конфигурацию stabilityai/stable-diffusion-xl-refiner-1-0.

force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "True") : Указывает, следует ли принудительно устанавливать эмбеддинги отрицательного промпта в 0. См. также конфигурацию stabilityai/stable-diffusion-xl-base-1-0.

add_watermarker (bool, необязательный) : Использовать ли библиотеку invisible_watermark для добавления водяных знаков на выходные изображения. Если значение не задано, по умолчанию используется True, если пакет установлен, в противном случае водяной знак не добавляется.

Пайплайн для генерации изображений по тексту с использованием Stable Diffusion XL.

Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)

Пайплайн также наследует следующие методы загрузки:

call[[diffusers.StableDiffusionXLImg2ImgPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, strength: float = 0.3, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_start: float | None = None, denoising_end: float | None = None, guidance_scale: float = 5.0, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)

Источник

Параметры:

prompt (str или list[str], необязательный) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется prompt

image (torch.Tensor или PIL.Image.Image или np.ndarray или list[torch.Tensor] или list[PIL.Image.Image] или list[np.ndarray]) : Изображение(я), которое(ые) нужно изменить с помощью конвейера.

strength (float, optional, по умолчанию 0.3) : Концептуально указывает, насколько сильно трансформировать исходное изображение image. Значение должно быть в диапазоне от 0 до 1. Изображение image используется как отправная точка: чем больше значение strength, тем больше шума добавляется к нему. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Если strength равно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного в num_inference_steps. Таким образом, значение 1 фактически игнорирует image. Обратите внимание, что если denoising_start объявлено как целое число, значение strength будет проигнорировано.

num_inference_steps (int, optional, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.

timesteps (list[int], optional) : Пользовательские шаги для процесса денойзинга с планировщиками, поддерживающими аргумент timesteps в их методе set_timesteps. Если не определено, будет использоваться поведение по умолчанию при передаче num_inference_steps. Должны быть в порядке убывания.

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

denoising_start (float, optional) : Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая пропускается перед его началом. В результате начальная часть процесса денойзинга пропускается, и предполагается, что переданное image является частично денойзинженным изображением. Обратите внимание, что при указании этого параметра strength игнорируется. Параметр denoising_start особенно полезен при интеграции данного конвейера в многоконвейерную конфигурацию «Mixture of Denoisers», как описано в Refine Image Quality.

denoising_end (float, optional) : Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая должна быть завершена до его намеренного преждевременного прекращения. В результате возвращенный образец будет по-прежнему содержать значительное количество шума (остается около 20% временных шагов) и должен быть денойзингован последующим пайплайном, у которого параметр denoising_start установлен в 0.8, чтобы он денойзинговал только последние 20% планировщика. Параметр denoising_end следует использовать в тех случаях, когда данный пайплайн является частью многопайплайновой конфигурации «Mixture of Denoisers», как описано в Refine Image Quality.

guidance_scale (float, optional, по умолчанию 7.5) : Масштаб руководства, как определено в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.

negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).

negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, negative_prompt используется в обоих текстовых кодировщиках

num_images_per_prompt (int, необязательный, по умолчанию 1) : Количество изображений, генерируемых на один запрос.

eta (float, optional, по умолчанию 0.0) : Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

latents (torch.Tensor, необязательный) : Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы скорректировать одну и ту же генерацию с разными промптами. Если не предоставлены, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.

prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.

negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.

negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

ip_adapter_image : (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.

ip_adapter_image_embeds (list[torch.Tensor], необязательный) : Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.

output_type (str, необязательный, по умолчанию "pil") : Формат вывода для генерируемого изображения. Выберите между PIL: PIL.Image.Image или np.array.

return_dict (bool, необязательный, по умолчанию True) : Возвращать ли ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput вместо обычного кортежа.

cross_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

guidance_rescale (float, optional, defaults to 0.0) : Guidance rescale factor proposed by Common Diffusion Noise Schedules and Sample Steps are Flawed guidance_scale is defined as φ in equation 16. of Common Diffusion Noise Schedules and Sample Steps are Flawed. Guidance rescale factor should fix overexposure when using zero terminal SNR.

original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Если original_size не совпадает с target_size, изображение будет выглядеть как уменьшенное или увеличенное. По умолчанию original_size равно (height, width), если не указано иное. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : crops_coords_top_left можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции crops_coords_top_left вниз. Как правило, хорошо центрированные изображения получаются при установке crops_coords_top_left в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

target_size (tuple[int], optional, по умолчанию (1024, 1024)) : В большинстве случаев target_size следует установить в желаемую высоту и ширину генерируемого изображения. Если не указано, по умолчанию будет (height, width). Часть микроусловий SDXL, описанная в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

negative_original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного условия процесса генерации на основе конкретного разрешения изображения. Является частью микроусловия SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

negative_crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : Используется для негативного обусловливания процесса генерации на основе конкретных координат кадрирования. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

negative_target_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного обусловливания процесса генерации на основе целего разрешения изображения. В большинстве случаев должно совпадать с target_size. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

aesthetic_score (float, необязательный, по умолчанию 6.0) : Используется для имитации эстетической оценки сгенерированного изображения путём влияния на положительное текстовое условие. Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

negative_aesthetic_score (float, optional, по умолчанию 2.5) : Часть микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Может использоваться для имитации эстетической оценки сгенерированного изображения путём влияния на отрицательное текстовое условие.

clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, optional) : функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса со следующими аргументами: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, как указано в callback_on_step_end_tensor_inputs.

callback_on_step_end_tensor_inputs (list, optional) : Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса pipeline.

Возвращает: ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput или tuple

~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput, если return_dict равно True, иначе — `tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

>>> import torch
>>> from diffusers import StableDiffusionXLImg2ImgPipeline
>>> from diffusers.utils import load_image

>>> pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
...     "stabilityai/stable-diffusion-xl-refiner-1.0", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> url = "https://huggingface.co/datasets/patrickvonplaten/images/resolve/main/aa_xl/000000009.png"

>>> init_image = load_image(url).convert("RGB")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> image = pipe(prompt, image=init_image).images[0]

encode_prompt[[diffusers.StableDiffusionXLImg2ImgPipeline.encode_prompt]]

encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)

Источник

Параметры:

prompt (str или list[str], необязательный) : промпт для кодирования

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется prompt

device : (torch.device): устройство torch

num_images_per_prompt (int) : количество изображений, которые должны быть сгенерированы для каждого промпта

do_classifier_free_guidance (bool) : использовать ли классификаторное свободное наведение (classifier free guidance)

negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).

negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, negative_prompt используется в обоих текстовых кодировщиках

prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.

negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.

negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

lora_scale (float, optional) : масштаб lora, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.

clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

get_guidance_scale_embedding[[diffusers.StableDiffusionXLImg2ImgPipeline.get_guidance_scale_embedding]]

get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)

Источник

Параметры:

w (torch.Tensor) : Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов.

embedding_dim (int, необязательный, по умолчанию 512) : Размерность генерируемых эмбеддингов.

dtype (torch.dtype, необязательный, по умолчанию torch.float32) : Тип данных для генерируемых эмбеддингов.

Возвращает: torch.Tensor

Векторы встраиваний с формой (len(w), embedding_dim).

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

StableDiffusionXLInpaintPipeline[[diffusers.StableDiffusionXLInpaintPipeline]]

diffusers.StableDiffusionXLInpaintPipeline[[diffusers.StableDiffusionXLInpaintPipeline]]

diffusers.StableDiffusionXLInpaintPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: KarrasDiffusionSchedulers, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, requires_aesthetics_score: bool = False, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None)

Источник

Параметры:

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : Замороженный текстовый энкодер. Stable Diffusion XL использует текстовую часть CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 ( CLIPTextModelWithProjection) : Второй замороженный текстовый энкодер. Stable Diffusion XL использует текстовую и пул-части CLIP, а именно вариант laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (CLIPTokenizer) : Второй токенизатор класса CLIPTokenizer.

unet (UNet2DConditionModel) : Условная архитектура U-Net для удаления шума из закодированных латентов изображения.

scheduler (SchedulerMixin) : планировщик, используемый в сочетании с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.

requires_aesthetics_score (bool, необязательный, по умолчанию "False") : Указывает, требуется ли для unet передача условия aesthetic_score во время инференса. См. также конфигурацию stabilityai/stable-diffusion-xl-refiner-1-0.

force_zeros_for_empty_prompt (bool, необязательный, по умолчанию "True") : Указывает, следует ли принудительно устанавливать эмбеддинги отрицательного промпта в 0. См. также конфигурацию stabilityai/stable-diffusion-xl-base-1-0.

add_watermarker (bool, необязательный) : Использовать ли библиотеку invisible_watermark для добавления водяных знаков на выходные изображения. Если значение не задано, по умолчанию используется True, если пакет установлен, в противном случае водяной знак не добавляется.

Пайплайн для генерации изображений по тексту с использованием Stable Diffusion XL.

Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)

Пайплайн также наследует следующие методы загрузки:

call[[diffusers.StableDiffusionXLInpaintPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, masked_image_latents: Tensor = None, height: int | None = None, width: int | None = None, padding_mask_crop: int | None = None, strength: float = 0.9999, num_inference_steps: int = 50, timesteps: list[int] = None, sigmas: list[float] = None, denoising_start: float | None = None, denoising_end: float | None = None, guidance_scale: float = 7.5, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, original_size: tuple[int, int] = None, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] = None, negative_original_size: tuple[int, int] | None = None, negative_crops_coords_top_left: tuple[int, int] = (0, 0), negative_target_size: tuple[int, int] | None = None, aesthetic_score: float = 6.0, negative_aesthetic_score: float = 2.5, clip_skip: int | None = None, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)

Источник

Параметры:

prompt (str или list[str], необязательный) : Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется prompt

image (PIL.Image.Image) : Image или тензор, представляющий пакет изображений, которые будут подвергнуты inpainting, т. е. части изображения будут замаскированы с помощью mask_image и перерисованы в соответствии с prompt.

mask_image (PIL.Image.Image) : Image или тензор, представляющий пакет изображений, для маскирования image. Белые пиксели в маске будут перерисованы, а чёрные — сохранены. Если mask_image — это изображение PIL, оно будет преобразовано в одноцветный канал (яркость) перед использованием. Если это тензор, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма — (B, H, W, 1).

masked_image_latents (torch.Tensor, необязательный) : Предварительно закодированное латентное представление замаскированного изображения (для инпейнтинга).

height (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Высота генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Значения ниже 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.

width (int, optional, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Значения ниже 512 пикселей будут работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях.

padding_mask_crop (int, optional, по умолчанию None) : Размер поля (margin) для обрезки, применяемой к изображению и маске. Если None, обрезка не применяется к image и mask_image. Если padding_mask_crop не равно None, сначала находится прямоугольная область с тем же соотношением сторон, что и у изображения, содержащая всю замаскированную область, а затем эта область расширяется на основе padding_mask_crop. После этого image и mask_image обрезаются по расширенной области перед изменением размера до исходного размера изображения для инпейнтинга. Это полезно, когда замаскированная область мала, а изображение велико и содержит информацию, не относящуюся к инпейнтингу, например фон.

strength (float, optional, по умолчанию 0.9999) : Концептуально указывает, насколько сильно трансформировать замаскированную часть исходного image. Значение должно быть в диапазоне от 0 до 1. image используется как отправная точка: чем больше strength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Если strength равно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного в num_inference_steps. Таким образом, значение 1 фактически игнорирует замаскированную часть исходного image. Обратите внимание, что если denoising_start объявлено как целое число, значение strength игнорируется.

num_inference_steps (int, optional, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.

timesteps (list[int], optional) : Пользовательские шаги для процесса денойзинга с планировщиками, поддерживающими аргумент timesteps в их методе set_timesteps. Если не определено, будет использоваться поведение по умолчанию при передаче num_inference_steps. Должны быть в порядке убывания.

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

denoising_start (float, optional) : Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая пропускается перед его началом. В результате начальная часть процесса денойзинга пропускается, и предполагается, что переданное image является частично денойзинженным изображением. Обратите внимание, что при указании этого параметра strength игнорируется. Параметр denoising_start особенно полезен при интеграции данного конвейера в многоконвейерную конфигурацию «Mixture of Denoisers», как описано в Уточнение вывода изображения.

denoising_end (float, optional) : When specified, determines the fraction (between 0.0 and 1.0) of the total denoising process to be completed before it is intentionally prematurely terminated. As a result, the returned sample will still retain a substantial amount of noise (ca. final 20% of timesteps still needed) and should be denoised by a successor pipeline that has denoising_start set to 0.8 so that it only denoises the final 20% of the scheduler. The denoising_end parameter should ideally be utilized when this pipeline forms a part of a "Mixture of Denoisers" multi-pipeline setup, as elaborated in Refining the Image Output.

guidance_scale (float, optional, по умолчанию 7.5) : Масштаб руководства, как определено в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.

negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).

negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, negative_prompt используется в обоих текстовых кодировщиках

prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.

negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.

negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

ip_adapter_image : (PipelineImageInput, необязательный): Необязательное входное изображение для работы с IP-адаптерами.

ip_adapter_image_embeds (list[torch.Tensor], необязательный) : Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы (batch_size, num_images, emb_dim). Если do_classifier_free_guidance установлен в True, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента ip_adapter_image.

num_images_per_prompt (int, необязательный, по умолчанию 1) : Количество изображений, генерируемых на один запрос.

eta (float, optional, по умолчанию 0.0) : Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к schedulers.DDIMScheduler, для остальных игнорируется.

generator (torch.Generator, необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

latents (torch.Tensor, необязательный) : Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы скорректировать одну и ту же генерацию с разными промптами. Если не предоставлены, тензор латентов будет сгенерирован путём выборки с использованием переданного случайного generator.

output_type (str, необязательный, по умолчанию "pil") : Формат вывода для генерируемого изображения. Выберите между PIL: PIL.Image.Image или np.array.

return_dict (bool, необязательный, по умолчанию True) : Возвращать ли StableDiffusionPipelineOutput вместо обычного кортежа.

cross_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Если original_size не совпадает с target_size, изображение будет выглядеть как уменьшенное или увеличенное. По умолчанию original_size равно (height, width), если не указано иное. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : crops_coords_top_left можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции crops_coords_top_left вниз. Как правило, хорошо центрированные изображения получаются при установке crops_coords_top_left в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

target_size (tuple[int], optional, по умолчанию (1024, 1024)) : В большинстве случаев target_size следует установить в желаемую высоту и ширину генерируемого изображения. Если не указано, по умолчанию будет (height, width). Часть микроусловий SDXL, описанная в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

negative_original_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного условия процесса генерации на основе конкретного разрешения изображения. Является частью микроусловия SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

negative_crops_coords_top_left (tuple[int], optional, по умолчанию (0, 0)) : Используется для негативного обусловливания процесса генерации на основе конкретных координат кадрирования. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

negative_target_size (tuple[int], optional, по умолчанию (1024, 1024)) : Используется для негативного обусловливания процесса генерации на основе целего разрешения изображения. В большинстве случаев должно совпадать с target_size. Является частью микрообусловливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208.

aesthetic_score (float, необязательный, по умолчанию 6.0) : Используется для имитации эстетической оценки сгенерированного изображения путём влияния на положительное текстовое условие. Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952.

negative_aesthetic_score (float, optional, по умолчанию 2.5) : Часть микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Может использоваться для имитации эстетической оценки сгенерированного изображения путём влияния на отрицательное текстовое условие.

guidance_rescale (float, optional, defaults to 0.0) : Guidance rescale factor from Common Diffusion Noise Schedules and Sample Steps are Flawed.

clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, optional) : функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга во время инференса со следующими аргументами: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs будет содержать список всех тензоров, как указано в callback_on_step_end_tensor_inputs.

callback_on_step_end_tensor_inputs (list, optional) : Список тензорных входных данных для функции callback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргумента callback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте ._callback_tensor_inputs вашего класса pipeline.

Возвращает: ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput или tuple

~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput, если return_dict равно True, иначе tuple. tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

>>> import torch
>>> from diffusers import StableDiffusionXLInpaintPipeline
>>> from diffusers.utils import load_image

>>> pipe = StableDiffusionXLInpaintPipeline.from_pretrained(
...     "stabilityai/stable-diffusion-xl-base-1.0",
...     torch_dtype=torch.float16,
...     variant="fp16",
...     use_safetensors=True,
... )
>>> pipe.to("cuda")

>>> img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
>>> mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"

>>> init_image = load_image(img_url).convert("RGB")
>>> mask_image = load_image(mask_url).convert("RGB")

>>> prompt = "A majestic tiger sitting on a bench"
>>> image = pipe(
...     prompt=prompt, image=init_image, mask_image=mask_image, num_inference_steps=50, strength=0.80
... ).images[0]

encode_prompt[[diffusers.StableDiffusionXLInpaintPipeline.encode_prompt]]

encode_prompt(prompt: str, prompt_2: str | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | None = None, negative_prompt_2: str | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)

Источник

Параметры:

prompt (str или list[str], необязательный) : промпт для кодирования

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, в обоих текстовых кодировщиках используется prompt

device : (torch.device): устройство torch

num_images_per_prompt (int) : количество изображений, которые должны быть сгенерированы для каждого промпта

do_classifier_free_guidance (bool) : использовать ли классификаторное свободное наведение (classifier free guidance)

negative_prompt (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если guidance_scale меньше 1).

negative_prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в tokenizer_2 и text_encoder_2. Если не задан, negative_prompt используется в обоих текстовых кодировщиках

prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.

negative_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не предоставлены, пул-эмбеддинги текста будут сгенерированы из аргумента prompt.

negative_pooled_prompt_embeds (torch.Tensor, необязательный) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента negative_prompt.

lora_scale (float, optional) : масштаб lora, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.

clip_skip (int, optional) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

get_guidance_scale_embedding[[diffusers.StableDiffusionXLInpaintPipeline.get_guidance_scale_embedding]]

get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)

Источник

Параметры:

w (torch.Tensor) : Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов.

embedding_dim (int, необязательный, по умолчанию 512) : Размерность генерируемых эмбеддингов.

dtype (torch.dtype, необязательный, по умолчанию torch.float32) : Тип данных для генерируемых эмбеддингов.

Возвращает: torch.Tensor

Векторы встраиваний с формой (len(w), embedding_dim).

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

Xet Storage Details

Size:
139 kB
·
Xet hash:
ac9504e0ebc18db2e170afe629718023ca41bead24ef8066bb952296c63c5e22

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.