Diffusers documentation
Stable unCLIP
Stable unCLIP
Чекпоинты Stable unCLIP дообучены на основе чекпоинтов Stable Diffusion 2.1 для использования в качестве условия эмбеддингов изображений CLIP. Stable unCLIP по-прежнему использует в качестве условия эмбеддинги текста. Благодаря двум отдельным условиям, Stable unCLIP можно применять для вариаций изображений с текстовым управлением. В сочетании с априорным распределением unCLIP он также подходит для полной генерации изображений по тексту.
Аннотация из статьи:
Показано, что контрастивные модели, такие как CLIP, обучают робастные представления изображений, захватывающие как семантику, так и стиль. Чтобы использовать эти представления для генерации изображений, мы предлагаем двухэтапную модель: априорную модель, которая генерирует представление изображения CLIP по текстовому описанию, и декодер, который генерирует изображение с условием на это представление. Мы показываем, что явная генерация представлений изображений повышает разнообразие генерируемых изображений при минимальной потере фотореализма и сходства с описанием. Наши декодеры, работающие с условием на представления изображений, также могут создавать вариации изображения, сохраняя его семантику и стиль, но изменяя несущественные детали, отсутствующие в представлении изображения. Более того, совместное пространство представлений CLIP позволяет выполнять манипуляции с изображениями по языковому запросу в режиме zero-shot. Мы используем диффузионные модели для декодера и проводим эксперименты как с авто регрессионными, так и с диффузионными моделями для априорной модели, обнаружив, что вторые вычислительно более эффективны и дают образцы более высокого качества.
Советы
Stable unCLIP принимает noise_level на этапе вывода, что определяет, сколько шума добавляется к эмбеддингам изображений. Более высокое значение noise_level увеличивает вариативность итоговых изображений после удаления шума. По умолчанию дополнительный шум к эмбеддингам изображений не добавляется (noise_level = 0).
Генерация изображений по тексту
Stable unCLIP можно использовать для генерации изображений по тексту, объединяя его в конвейер с моделью-предшественником открытой репликации DALL-E 2 от KakaoBrain Karlo:
import torch
from diffusers import UnCLIPScheduler, DDPMScheduler, StableUnCLIPPipeline
from diffusers.models import PriorTransformer
from transformers import CLIPTokenizer, CLIPTextModelWithProjection
prior_model_id = "kakaobrain/karlo-v1-alpha"
data_type = torch.float16
prior = PriorTransformer.from_pretrained(prior_model_id, subfolder="prior", dtype=data_type)
prior_text_model_id = "openai/clip-vit-large-patch14"
prior_tokenizer = CLIPTokenizer.from_pretrained(prior_text_model_id)
prior_text_model = CLIPTextModelWithProjection.from_pretrained(prior_text_model_id, dtype=data_type)
prior_scheduler = UnCLIPScheduler.from_pretrained(prior_model_id, subfolder="prior_scheduler")
prior_scheduler = DDPMScheduler.from_config(prior_scheduler.config)
stable_unclip_model_id = "stabilityai/stable-diffusion-2-1-unclip-small"
pipe = StableUnCLIPPipeline.from_pretrained(
stable_unclip_model_id,
dtype=data_type,
variant="fp16",
prior_tokenizer=prior_tokenizer,
prior_text_encoder=prior_text_model,
prior=prior,
prior_scheduler=prior_scheduler,
)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
wave_prompt = "dramatic wave, the Oceans roar, Strong wave spiral across the oceans as the waves unfurl into roaring crests; perfect wave form; perfect wave shape; dramatic wave shape; wave shape unbelievable; wave; wave shape spectacular"
image = pipe(prompt=wave_prompt).images[0]
imageДля генерации изображений по тексту мы используем
stabilityai/stable-diffusion-2-1-unclip-small, так как он обучен на эмбеддингах CLIP ViT-L/14, аналогичных априорной модели Karlo. stabilityai/stable-diffusion-2-1-unclip обучен на OpenCLIP ViT-H, поэтому мы не рекомендуем его использовать.
Вариация изображения с помощью текстового описания
from diffusers import StableUnCLIPImg2ImgPipeline
from diffusers.utils import load_image
import torch
pipe = StableUnCLIPImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-2-1-unclip", dtype=torch.float16, variation="fp16"
)
pipe = pipe.to("cuda") # or "mps", "xpu", "cpu"
url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/stable_unclip/tarsila_do_amaral.png"
init_image = load_image(url)
images = pipe(init_image).images
images[0].save("variation_image.png")Необязательно, вы также можете передать промпт в pipe, например:
prompt = "A fantasy landscape, trending on artstation"
image = pipe(init_image, prompt=prompt).images[0]
imageОбязательно ознакомьтесь с руководством по планировщикам, чтобы узнать, как исследовать баланс между скоростью и качеством планировщика, а также с разделом повторное использование компонентов в разных конвейерах, чтобы узнать, как эффективно загружать одни и те же компоненты в несколько конвейеров.
StableUnCLIPPipeline
класс diffusers.StableUnCLIPPipeline
< source >( prior_tokenizer: CLIPTokenizerprior_text_encoder: CLIPTextModelWithProjectionprior: PriorTransformerprior_scheduler: KarrasDiffusionSchedulersimage_normalizer: StableUnCLIPImageNormalizerimage_noising_scheduler: KarrasDiffusionSchedulerstokenizer: CLIPTokenizertext_encoder: CLIPTextModelunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersvae: AutoencoderKL )
Параметры
- prior_tokenizer (
CLIPTokenizer) — ACLIPTokenizer. - prior_text_encoder (
CLIPTextModelWithProjection) — Замороженный текстовый энкодерCLIPTextModelWithProjection. - prior (PriorTransformer) — канонический prior unCLIP для приближения эмбеддинга изображения по эмбеддингу текста.
- prior_scheduler (
KarrasDiffusionSchedulers) — планировщик, используемый в процессе предварительного удаления шума. - image_normalizer (
StableUnCLIPImageNormalizer) — Используется для нормализации предсказанных эмбеддингов изображений перед добавлением шума и для обратного преобразования эмбеддингов изображений после добавления шума. - image_noising_scheduler (
KarrasDiffusionSchedulers) — Шкала шума для добавления шума к предсказанным эмбеддингам изображения. Количество добавляемого шума определяется параметромnoise_level. - tokenizer (
CLIPTokenizer) — ACLIPTokenizer. - text_encoder (
CLIPTextModel) — Замороженный текстовый энкодерCLIPTextModel. - unet (UNet2DConditionModel) — Модель UNet2DConditionModel для удаления шума из закодированных латентов изображения.
- scheduler (
KarrasDiffusionSchedulers) — планировщик, используемый в связке сunetдля удаления шума из закодированных латентов изображения. - vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
Pipeline для генерации изображений по тексту с использованием stable unCLIP.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
__call__
< source >( prompt: str | list[str] | None = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 20guidance_scale: float = 10.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Optional[torch.Generator] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 0prior_num_inference_steps: int = 25prior_guidance_scale: float = 4.0prior_latents: typing.Optional[torch.Tensor] = Noneclip_skip: int | None = None ) → ImagePipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передатьprompt_embeds. - height (
int, необязательный, по умолчаниюself.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях. - width (
int, необязательный, по умолчаниюself.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях. - num_inference_steps (
int, необязательный, по умолчанию 20) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - guidance_scale (
float, необязательный, по умолчанию 10.0) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовымprompt, в ущерб качеству изображения. Guidance scale включается, когдаguidance_scale > 1. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, определяющие, что не должно присутствовать в генерируемом изображении. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющий сигнал (guidance_scale < 1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к DDIMScheduler и игнорируется другими планировщиками. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано,negative_prompt_embedsгенерируются из входного аргументаnegative_prompt. - output_type (
str, необязательный, по умолчанию"pil") — Формат вывода сгенерированного изображения. Выберите междуPIL.Imageиnp.array. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать ImagePipelineOutput вместо обычного кортежа. - callback (
Callable, необязательный) — Функция, вызываемая каждыеcallback_stepsшагов во время инференса. Функция вызывается со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback вызывается на каждом шаге. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processor. - noise_level (
int, необязательный, по умолчанию0) — Количество шума, добавляемого к эмбеддингам изображения. Более высокое значениеnoise_levelувеличивает дисперсию в итоговых изображениях после удаления шума. Подробности см. в StableUnCLIPPipeline.noise_image_embeddings(). - prior_num_inference_steps (
int, необязательный, по умолчанию 25) — Количество шагов денойзинга в процессе денойзинга prior. Как правило, большее количество шагов денойзинга приводит к изображению более высокого качества, но за счет более медленного вывода. - prior_guidance_scale (
float, необязательный, по умолчанию 4.0) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовымprompt, ценой снижения качества изображения. Guidance scale включается, когдаguidance_scale > 1. - prior_latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумлённые латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации эмбеддингов изображений в процессе денойзинга prior. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Возвращает
ImagePipelineOutput или tuple
~ pipeline_utils.ImagePipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.
Функция вызова конвейера для генерации.
Примеры:
>>> import torch
>>> from diffusers import StableUnCLIPPipeline
>>> pipe = StableUnCLIPPipeline.from_pretrained(
... "fusing/stable-unclip-2-1-l", torch_dtype=torch.float16
... ) # TODO update model path
>>> pipe = pipe.to("cuda")
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> images = pipe(prompt).images
>>> images[0].save("astronaut_horse.png")enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Параметры
- slice_size (
strилиint, необязательный, по умолчанию"auto") — Если указано"auto", вход для головок внимания делится пополам, и внимание вычисляется в два этапа. Если указано"max", экономия памяти будет максимальной, так как за раз выполняется только один срез. Если предоставлено число, используется столько срезов, сколько получается изattention_head_dim // slice_size. В этом случаеattention_head_dimдолжно быть кратноslice_size.
Включает послойный (сliced) вычисление внимания. При включении этого параметра модуль внимания разбивает входной тензор на части (слайсы) для вычисления внимания в несколько шагов. Если используется более одной головы внимания, вычисления выполняются последовательно для каждой головы. Это полезно для экономии памяти ценой небольшого снижения скорости.
> ⚠️ Не включайте нарезку внимания, если вы уже используете
scaled_dot_product_attention(SDPA) из PyTorch > 2.0 или xFormers. Эти вычисления внимания уже очень эффективны по памяти, поэтому вам не нужно включать > эту функцию. Если вы включите нарезку внимания вместе с SDPA или xFormers, это может привести к серьезному замедлению!
Примеры:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Отключает вычисление внимания с нарезкой. Если enable_attention_slicing был вызван ранее, внимание вычисляется за один шаг.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Параметры
- attention_op (
Callable, необязательный) — Заменяет оператор по умолчаниюNoneдля использования в качестве аргументаopфункцииmemory_efficient_attention()библиотеки xFormers.
Включите энергоэффективное внимание от xFormers. При включении этого параметра вы должны наблюдать снижение потребления памяти GPU и потенциальное ускорение во время инференса. Ускорение во время обучения не гарантируется.
> ⚠️ Если включены и memory efficient attention, и sliced attention, то memory efficient attention имеет > приоритет.
Примеры:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)Отключить энергоэффективное внимание из xFormers.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - 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). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - lora_scale (
float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
noise_image_embeddings
< source >( image_embeds: Tensornoise_level: intnoise: typing.Optional[torch.Tensor] = Nonegenerator: typing.Optional[torch.Generator] = None )
Добавьте шум к эмбеддингам изображения. Количество шума контролируется входным параметром noise_level. Более высокое значение noise_level увеличивает дисперсию в итоговых изображениях после удаления шума.
Шум применяется двумя способами:
- Шкала шума применяется непосредственно к эмбеддингам.
- К выходу добавляется вектор синусоидальных временных эмбеддингов.
В обоих случаях количество шума контролируется одним и тем же noise_level.
Векторы встраивания нормализуются до применения шума и денормализуются после его применения.
StableUnCLIPImg2ImgPipeline
класс diffusers.StableUnCLIPImg2ImgPipeline
< source >( feature_extractor: CLIPImageProcessorPilimage_encoder: CLIPVisionModelWithProjectionimage_normalizer: StableUnCLIPImageNormalizerimage_noising_scheduler: KarrasDiffusionSchedulerstokenizer: CLIPTokenizertext_encoder: CLIPTextModelunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulersvae: AutoencoderKL )
Параметры
- feature_extractor (
CLIPImageProcessor) — Извлекатель признаков для предобработки изображений перед кодированием. - image_encoder (
CLIPVisionModelWithProjection) — модель CLIP для кодирования изображений. - image_normalizer (
StableUnCLIPImageNormalizer) — Используется для нормализации предсказанных эмбеддингов изображений перед добавлением шума и для обратного преобразования эмбеддингов изображений после добавления шума. - image_noising_scheduler (
KarrasDiffusionSchedulers) — Шкала шума для добавления шума к предсказанным эмбеддингам изображения. Количество добавляемого шума определяется параметромnoise_level. - tokenizer (
~transformers.CLIPTokenizer) — A [~transformers.CLIPTokenizer)]. - text_encoder (CLIPTextModel) — Замороженный текстовый энкодер CLIPTextModel.
- unet (UNet2DConditionModel) — Модель UNet2DConditionModel для удаления шума из закодированных латентов изображения.
- scheduler (
KarrasDiffusionSchedulers) — планировщик, используемый в связке сunetдля удаления шума из закодированных латентов изображения. - vae (AutoencoderKL) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
Pipeline для генерации изображений по текстовому описанию с использованием stable unCLIP.
Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.
Пайплайн также наследует следующие методы загрузки:
- load_textual_inversion() для загрузки эмбеддингов текстовой инверсии
- load_lora_weights() для загрузки весов LoRA
- save_lora_weights() для сохранения весов LoRA
__call__
< source >( image: typing.Union[torch.Tensor, PIL.Image.Image] = Noneprompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 20guidance_scale: float = 10negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Optional[torch.Generator] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 0image_embeds: typing.Optional[torch.Tensor] = Noneclip_skip: int | None = None ) → ImagePipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, будет использованprompt_embedsили промпт инициализируется как"". - image (
torch.TensorилиPIL.Image.Image) —Imageили тензор, представляющий пакет изображений. Изображение кодируется в его CLIP-эмбеддинг, на которыйunetполучает условие. Изображение не кодируетсяvaeи не используется как латенты в процессе денуазинга, как это происходит в стандартном процессе вариации изображений с текстовым управлением в Stable Diffusion. - height (
int, необязательный, по умолчаниюself.unet.config.sample_size * self.vae_scale_factor) — Высота генерируемого изображения в пикселях. - width (
int, необязательный, по умолчаниюself.unet.config.sample_size * self.vae_scale_factor) — Ширина генерируемого изображения в пикселях. - num_inference_steps (
int, необязательный, по умолчанию 20) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода. - guidance_scale (
float, необязательный, по умолчанию 10.0) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовымprompt, в ущерб качеству изображения. Guidance scale включается, когдаguidance_scale > 1. - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, определяющие, что не должно присутствовать в генерируемом изображении. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющий сигнал (guidance_scale < 1). - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к DDIMScheduler и игнорируется другими планировщиками. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) —torch.Generatorдля обеспечения детерминированности генерации. - latents (
torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайногоgenerator. - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано, текстовые эмбеддинги генерируются из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные эмбеддинги отрицательного текста. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не задано,negative_prompt_embedsгенерируются из входного аргументаnegative_prompt. - output_type (
str, необязательный, по умолчанию"pil") — Формат вывода сгенерированного изображения. Выберите междуPIL.Imageиnp.array. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать ImagePipelineOutput вместо обычного кортежа. - callback (
Callable, необязательный) — Функция, вызываемая каждыеcallback_stepsшагов во время инференса. Функция вызывается со следующими аргументами:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int, необязательный, по умолчанию 1) — Частота вызова функцииcallback. Если не указано, callback вызывается на каждом шаге. - cross_attention_kwargs (
dict, необязательный) — Словарь kwargs, который при указании передается вAttentionProcessor, определенный вself.processor. - noise_level (
int, необязательный, по умолчанию0) — Количество шума, добавляемого к эмбеддингам изображения. Более высокое значениеnoise_levelувеличивает дисперсию в итоговых изображениях после удаления шума. Подробности см. в StableUnCLIPPipeline.noise_image_embeddings(). - image_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные CLIP-эмбеддинги для условного настраиванияunet. Эти латенты не используются в процессе денойзинга. Если вы хотите передать предварительно сгенерированные латенты, передайте их в__call__какlatents. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Возвращает
ImagePipelineOutput или tuple
~ pipeline_utils.ImagePipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.
Функция вызова конвейера для генерации.
Примеры:
>>> import requests
>>> import torch
>>> from PIL import Image
>>> from io import BytesIO
>>> from diffusers import StableUnCLIPImg2ImgPipeline
>>> pipe = StableUnCLIPImg2ImgPipeline.from_pretrained(
... "stabilityai/stable-diffusion-2-1-unclip-small", torch_dtype=torch.float16
... )
>>> pipe = pipe.to("cuda")
>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> response = requests.get(url)
>>> init_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> init_image = init_image.resize((768, 512))
>>> prompt = "A fantasy landscape, trending on artstation"
>>> images = pipe(init_image, prompt).images
>>> images[0].save("fantasy_landscape.png")enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
Параметры
- slice_size (
strилиint, необязательный, по умолчанию"auto") — Если указано"auto", вход для головок внимания делится пополам, и внимание вычисляется в два этапа. Если указано"max", экономия памяти будет максимальной, так как за раз выполняется только один срез. Если предоставлено число, используется столько срезов, сколько получается изattention_head_dim // slice_size. В этом случаеattention_head_dimдолжно быть кратноslice_size.
Включает послойный (сliced) вычисление внимания. При включении этого параметра модуль внимания разбивает входной тензор на части (слайсы) для вычисления внимания в несколько шагов. Если используется более одной головы внимания, вычисления выполняются последовательно для каждой головы. Это полезно для экономии памяти ценой небольшого снижения скорости.
> ⚠️ Не включайте нарезку внимания, если вы уже используете
scaled_dot_product_attention(SDPA) из PyTorch > 2.0 или xFormers. Эти вычисления внимания уже очень эффективны по памяти, поэтому вам не нужно включать > эту функцию. Если вы включите нарезку внимания вместе с SDPA или xFormers, это может привести к серьезному замедлению!
Примеры:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]Отключает вычисление внимания с нарезкой. Если enable_attention_slicing был вызван ранее, внимание вычисляется за один шаг.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
Параметры
- attention_op (
Callable, необязательный) — Заменяет оператор по умолчаниюNoneдля использования в качестве аргументаopфункцииmemory_efficient_attention()библиотеки xFormers.
Включите энергоэффективное внимание от xFormers. При включении этого параметра вы должны наблюдать снижение потребления памяти GPU и потенциальное ускорение во время инференса. Ускорение во время обучения не гарантируется.
> ⚠️ Если включены и memory efficient attention, и sliced attention, то memory efficient attention имеет > приоритет.
Примеры:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)Отключить энергоэффективное внимание из xFormers.
encode_prompt
< source >( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - 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). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - lora_scale (
float, необязательный) — Масштаб LoRA, который будет применён ко всем слоям LoRA текстового кодировщика, если слои LoRA загружены. - clip_skip (
int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.
Кодирует промпт в скрытые состояния текстового энкодера.
noise_image_embeddings
< source >( image_embeds: Tensornoise_level: intnoise: typing.Optional[torch.Tensor] = Nonegenerator: typing.Optional[torch.Generator] = None )
Добавьте шум к эмбеддингам изображения. Количество шума контролируется входным параметром noise_level. Более высокое значение noise_level увеличивает дисперсию в итоговых изображениях после удаления шума.
Шум применяется двумя способами:
- Шкала шума применяется непосредственно к эмбеддингам.
- К выходу добавляется вектор синусоидальных временных эмбеддингов.
В обоих случаях количество шума контролируется одним и тем же noise_level.
Векторы встраивания нормализуются до применения шума и денормализуются после его применения.
ImagePipelineOutput
класс diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Класс вывода для пайплайнов обработки изображений.