Diffusers documentation
Stable Diffusion XL
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 включает модель-рефинер, предназначенную для удаления шума на этапе с низким уровнем шума для генерации изображений более высокого качества на основе базовой модели. Существует два способа использования рефинера:
- используйте базовую и уточняющую модели вместе для получения улучшенного изображения
- используйте базовую модель для генерации изображения, а затем модель-рефинер для добавления дополнительных деталей к изображению (именно так изначально обучался 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]
Условие по кадрированию
Изображения, сгенерированные предыдущими моделями 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 — это большая модель, и для её запуска на вашем оборудовании может потребоваться оптимизация памяти. Ниже приведены советы по экономии памяти и ускорению инференса.
- При ошибках нехватки памяти перенесите модель на 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()- Используйте
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)- Включите 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
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = Trueadd_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. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- from_single_file() для загрузки файлов
.ckpt - load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
- load_ip_adapter() для загрузки IP-адаптеров
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple[int, int] | None = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple[int, int] | None = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - prompt_2 (
strилиlist[str], необязательный) — Промпт или промпты, которые передаются вtokenizer_2иtext_encoder_2. Если не задан, в обоих text-encoders используетсяprompt - height (
int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Любое значение ниже 512 пикселей будет работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях. - width (
int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Любое значение ниже 512 пикселей будет работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские шаги для процесса удаления шума в планировщиках, поддерживающих аргументtimestepsв методеset_timesteps. Если не задан, будет использоваться поведение по умолчанию при передачеnum_inference_steps. Значения должны быть в порядке убывания. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргументsigmasв их методеset_timesteps. Если не задано, будет использоваться поведение по умолчанию при передачеnum_inference_steps. - denoising_end (
float, необязательный) — Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая должна быть завершена до его намеренного преждевременного прекращения. В результате возвращаемый образец будет по-прежнему содержать значительное количество шума, определяемое дискретными временными шагами, выбранными планировщиком. Параметр denoising_end следует использовать в тех случаях, когда данный конвейер является частью многоконвейерной конфигурации «Mixture of Denoisers», как описано в Уточнение выходного изображения - guidance_scale (
float, необязательный, по умолчанию 5.0) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счёт снижения качества изображения. - negative_prompt (
strorlist[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, необязательный, по умолчанию 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 Flawedguidance_scaleis 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], необязательный, по умолчанию (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], необязательный, по умолчанию (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], необязательный, по умолчанию (1024, 1024)) — В большинстве случаевtarget_sizeследует устанавливать в желаемую высоту и ширину генерируемого изображения. Если значение не указано, по умолчанию будет использовано(height, width). Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], необязательный, по умолчанию (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], необязательный, по умолчанию (0, 0)) — Позволяет негативно обусловить процесс генерации на основе конкретных координат кадрирования. Является частью микро-условливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], необязательный, по умолчанию (1024, 1024)) — Используется для негативного условия процесса генерации на основе целего разрешения изображения. В большинстве случаев должен совпадать сtarget_size. Является частью микроусловий SDXL, описанных в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, необязательный) — функция или подкласс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, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна.
Возвращает
~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
< source >( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - prompt_2 (
strилиlist[str], необязательный) — Промпт или промпты, которые передаются вtokenizer_2иtext_encoder_2. Если не задан, в обоих text-encoders используетсяprompt - device — (
torch.device): устройство torch - num_images_per_prompt (
int) — количество изображений, которые должны быть сгенерированы для каждого промпта - do_classifier_free_guidance (
bool) — использовать ли classifier free guidance - negative_prompt (
strorlist[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, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Параметры
- w (
torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings). - embedding_dim (
int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов. - dtype (
torch.dtype, необязательный, по умолчаниюtorch.float32) — Тип данных для генерируемых эмбеддингов.
Возвращает
torch.Tensor
Векторы встраиваний с формой (len(w), embedding_dim).
StableDiffusionXLImg2ImgPipeline
класс diffusers.StableDiffusionXLImg2ImgPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Nonerequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_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. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- from_single_file() для загрузки файлов
.ckpt - load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
- load_ip_adapter() для загрузки IP-адаптеров
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonestrength: float = 0.3num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_start: float | None = Nonedenoising_end: float | None = Noneguidance_scale: float = 5.0negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - prompt_2 (
strилиlist[str], необязательный) — Промпт или промпты, которые передаются вtokenizer_2иtext_encoder_2. Если не задан, в обоих text-encoders используетсяprompt - image (
torch.TensorилиPIL.Image.Imageилиnp.ndarrayилиlist[torch.Tensor]илиlist[PIL.Image.Image]илиlist[np.ndarray]) — Изображение(я), которое(ые) нужно изменить с помощью конвейера. - strength (
float, необязательный, по умолчанию 0.3) — Концептуально указывает, насколько сильно трансформировать исходноеimage. Значение должно находиться в диапазоне от 0 до 1.imageиспользуется как отправная точка: чем большеstrength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного на начальном этапе. Еслиstrengthравно 1, добавленный шум будет максимальным, и процесс денойзинга будет выполняться в течение полного числа итераций, указанного вnum_inference_steps. Таким образом, значение 1 фактически игнорируетimage. Обратите внимание, что еслиdenoising_startобъявлено как целое число, значениеstrengthбудет проигнорировано. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские шаги для процесса удаления шума в планировщиках, поддерживающих аргументtimestepsв методеset_timesteps. Если не задан, будет использоваться поведение по умолчанию при передачеnum_inference_steps. Значения должны быть в порядке убывания. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргументsigmasв их методеset_timesteps. Если не задано, будет использоваться поведение по умолчанию при передачеnum_inference_steps. - denoising_start (
float, необязательный) — Если указано, обозначает долю (от 0.0 до 1.0) общего процесса денойзинга, которая пропускается перед его началом. В результате начальная часть процесса денойзинга игнорируется, и предполагается, что переданноеimageявляется частично денойзным изображением. Обратите внимание, что при указании этого параметра strength игнорируется. Параметрdenoising_startособенно полезен при интеграции данного конвейера в многоконвейерную конфигурацию «Mixture of Denoisers», описанную в Refine Image Quality. - denoising_end (
float, необязательный) — Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая должна быть завершена до его намеренного преждевременного прекращения. В результате возвращаемый образец будет по-прежнему содержать значительное количество шума (примерно последние 20% шагов по-прежнему нужны) и должен быть денойзирован последующим пайплайном, у которогоdenoising_startустановлено в 0.8, чтобы он денойзировал только последние 20% планировщика. Параметр denoising_end следует использовать в идеале, когда этот пайплайн является частью многопайплайновой настройки «Mixture of Denoisers», как описано в Refine Image Quality. - guidance_scale (
float, необязательный, по умолчанию 7.5) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счёт снижения качества изображения. - negative_prompt (
strorlist[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, необязательный, по умолчанию 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 Flawedguidance_scaleis 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], необязательный, по умолчанию (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], необязательный, по умолчанию (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], необязательный, по умолчанию (1024, 1024)) — В большинстве случаевtarget_sizeследует устанавливать в желаемую высоту и ширину генерируемого изображения. Если значение не указано, по умолчанию будет использовано(height, width). Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], необязательный, по умолчанию (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], необязательный, по умолчанию (0, 0)) — Позволяет негативно обусловить процесс генерации на основе конкретных координат кадрирования. Является частью микро-условливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], необязательный, по умолчанию (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, необязательный, по умолчанию 2.5) — Часть микроусловий SDXL, описанная в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Может использоваться для симуляции эстетической оценки сгенерированного изображения за счет влияния на отрицательное текстовое условие. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, необязательный) — функция или подкласс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, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна.
Возвращает
~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
< source >( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - prompt_2 (
strилиlist[str], необязательный) — Промпт или промпты, которые передаются вtokenizer_2иtext_encoder_2. Если не задан, в обоих text-encoders используетсяprompt - device — (
torch.device): устройство torch - num_images_per_prompt (
int) — количество изображений, которые должны быть сгенерированы для каждого промпта - do_classifier_free_guidance (
bool) — использовать ли classifier free guidance - negative_prompt (
strorlist[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, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Параметры
- w (
torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings). - embedding_dim (
int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов. - dtype (
torch.dtype, необязательный, по умолчаниюtorch.float32) — Тип данных для генерируемых эмбеддингов.
Возвращает
torch.Tensor
Векторы встраиваний с формой (len(w), embedding_dim).
StableDiffusionXLInpaintPipeline
класс diffusers.StableDiffusionXLInpaintPipeline
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Nonerequires_aesthetics_score: bool = Falseforce_zeros_for_empty_prompt: bool = Trueadd_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. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- from_single_file() для загрузки файлов
.ckpt - load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
- load_ip_adapter() для загрузки IP-адаптеров
__call__
< source >( prompt: str | list[str] = Noneprompt_2: str | list[str] | None = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonemask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonemasked_image_latents: Tensor = Noneheight: int | None = Nonewidth: int | None = Nonepadding_mask_crop: int | None = Nonestrength: float = 0.9999num_inference_steps: int = 50timesteps: list = Nonesigmas: list = Nonedenoising_start: float | None = Nonedenoising_end: float | None = Noneguidance_scale: float = 7.5negative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0original_size: tuple = Nonecrops_coords_top_left: tuple = (0, 0)target_size: tuple = Nonenegative_original_size: tuple[int, int] | None = Nonenegative_crops_coords_top_left: tuple = (0, 0)negative_target_size: tuple[int, int] | None = Noneaesthetic_score: float = 6.0negative_aesthetic_score: float = 2.5clip_skip: int | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → ~pipelines.stable_diffusion.StableDiffusionXLPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embedsвместо него. - prompt_2 (
strилиlist[str], необязательный) — Промпт или промпты, которые передаются вtokenizer_2иtext_encoder_2. Если не задан, в обоих text-encoders используетсяprompt - image (
PIL.Image.Image) —Imageили тензор, представляющий пакет изображений, которые будут подвергнуты инпейнтингу, т. е. части изображения будут замаскированы с помощью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, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Любое значение ниже 512 пикселей будет работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях. - width (
int, необязательный, по умолчанию self.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях. По умолчанию установлено значение 1024 для достижения наилучших результатов. Любое значение ниже 512 пикселей будет работать некорректно для stabilityai/stable-diffusion-xl-base-1.0 и контрольных точек, которые не были специально дообучены на низких разрешениях. - padding_mask_crop (
int, необязательный, по умолчаниюNone) — Размер поля, которое добавляется при обрезке изображения и маски. ЕслиNone, обрезка не применяется к изображению и mask_image. Еслиpadding_mask_cropне равноNone, сначала находится прямоугольная область с тем же соотношением сторон, что и у изображения, содержащая всю замаскированную область, а затем эта область расширяется на величинуpadding_mask_crop. После этого изображение и mask_image обрезаются по расширенной области перед масштабированием до исходного размера изображения для inpainting. Это полезно, когда замаскированная область мала, а изображение велико и содержит информацию, не относящуюся к inpainting, например фон. - strength (
float, необязательный, по умолчанию 0.9999) — Концептуально указывает, насколько сильно трансформировать замаскированную часть исходногоimage. Значение должно находиться в диапазоне от 0 до 1.imageиспользуется как отправная точка, при этом чем большеstrength, тем больше шума добавляется к изображению. Количество шагов денойзинга зависит от количества шума, добавленного в начале. Когдаstrengthравно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного вnum_inference_steps. Таким образом, значение 1 фактически игнорирует замаскированную часть исходногоimage. Обратите внимание, что еслиdenoising_startобъявлено как целое число, значениеstrengthбудет проигнорировано. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - timesteps (
list[int], необязательный) — Пользовательские шаги для процесса удаления шума в планировщиках, поддерживающих аргументtimestepsв методеset_timesteps. Если не задан, будет использоваться поведение по умолчанию при передачеnum_inference_steps. Значения должны быть в порядке убывания. - sigmas (
list[float], необязательный) — Пользовательские сигмы для процесса удаления шума в планировщиках, поддерживающих аргументsigmasв их методеset_timesteps. Если не задано, будет использоваться поведение по умолчанию при передачеnum_inference_steps. - denoising_start (
float, необязательный) — Если указано, обозначает долю (от 0.0 до 1.0) общего процесса денойзинга, которая пропускается перед его началом. В результате начальная часть процесса денойзинга игнорируется, и предполагается, что переданноеimageявляется частично денойзным изображением. Обратите внимание, что при указании этого параметра strength игнорируется. Параметрdenoising_startособенно полезен при интеграции этого пайплайна в многопайплайновую конфигурацию «Mixture of Denoisers», описанную в Уточнение вывода изображения. - denoising_end (
float, необязательный) — Если указано, определяет долю (от 0.0 до 1.0) общего процесса денойзинга, которая должна быть завершена до его намеренного преждевременного прекращения. В результате возвращаемый образец будет по-прежнему содержать значительное количество шума (примерно последние 20% шагов по-прежнему нужны) и должен быть денойзирован последующим пайплайном, у которогоdenoising_startустановлен в 0.8, чтобы он денойзировал только последние 20% планировщика. Параметр denoising_end следует использовать в идеале, когда этот пайплайн является частью многопайплайновой конфигурации «Mixture of Denoisers», как описано в Уточнение вывода изображения. - guidance_scale (
float, необязательный, по умолчанию 7.5) — Масштаб руководства, как определено в Classifier-Free Diffusion Guidance.guidance_scaleопределяется какwиз уравнения 2 статьи Imagen Paper. Масштаб руководства включается при установкеguidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстомprompt, обычно за счёт снижения качества изображения. - negative_prompt (
strorlist[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, необязательный, по умолчанию 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], необязательный, по умолчанию (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], необязательный, по умолчанию (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], необязательный, по умолчанию (1024, 1024)) — В большинстве случаевtarget_sizeследует устанавливать в желаемую высоту и ширину генерируемого изображения. Если значение не указано, по умолчанию будет использовано(height, width). Является частью микроусловий SDXL, как описано в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. - negative_original_size (
tuple[int], необязательный, по умолчанию (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], необязательный, по умолчанию (0, 0)) — Позволяет негативно обусловить процесс генерации на основе конкретных координат кадрирования. Является частью микро-условливания SDXL, описанной в разделе 2.2 статьи https://huggingface.co/papers/2307.01952. Для получения дополнительной информации см. этот тред: https://github.com/huggingface/diffusers/issues/4208. - negative_target_size (
tuple[int], необязательный, по умолчанию (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, необязательный, по умолчанию 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, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, необязательный) — функция или подкласс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, необязательный) — Список тензорных входных данных для функцииcallback_on_step_end. Тензоры, указанные в списке, будут переданы в качестве аргументаcallback_kwargs. Вы сможете включать только переменные, перечисленные в атрибуте._callback_tensor_inputsвашего класса пайплайна.
Возвращает
~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
< source >( prompt: strprompt_2: str | None = Nonedevice: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | None = Nonenegative_prompt_2: str | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonepooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - prompt_2 (
strилиlist[str], необязательный) — Промпт или промпты, которые передаются вtokenizer_2иtext_encoder_2. Если не задан, в обоих text-encoders используетсяprompt - device — (
torch.device): устройство torch - num_images_per_prompt (
int) — количество изображений, которые должны быть сгенерированы для каждого промпта - do_classifier_free_guidance (
bool) — использовать ли classifier free guidance - negative_prompt (
strorlist[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, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
Параметры
- w (
torch.Tensor) — Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов (timestep embeddings). - embedding_dim (
int, необязательный, по умолчанию 512) — Размерность генерируемых эмбеддингов. - dtype (
torch.dtype, необязательный, по умолчаниюtorch.float32) — Тип данных для генерируемых эмбеддингов.
Возвращает
torch.Tensor
Векторы встраиваний с формой (len(w), embedding_dim).