Diffusers documentation

Сверхразрешение

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Сверхразрешение

LoRA

Диффузионная модель Stable Diffusion upscaler была создана исследователями и инженерами из CompVis, Stability AI и LAION. Она используется для повышения разрешения входных изображений в 4 раза.

Обязательно ознакомьтесь с разделом Советы по Stable Diffusion, чтобы узнать, как исследовать баланс между скоростью и качеством планировщика, а также как эффективно переиспользовать компоненты конвейера!

Если вы хотите использовать одну из официальных контрольных точек для задачи, изучите организации CompVis и Stability AI на Hub!

StableDiffusionUpscalePipeline

класс diffusers.StableDiffusionUpscalePipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModellow_res_scheduler: DDPMSchedulerscheduler: KarrasDiffusionSchedulerssafety_checker: typing.Any | None = Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | None = Nonewatermarker: typing.Any | None = Nonemax_noise_level: int = 350 )

Параметры

  • vae (AutoencoderKL) — модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (CLIPTextModel) — Замороженный текстовый энкодер (clip-vit-large-patch14).
  • tokenizer (CLIPTokenizer) — CLIPTokenizer для токенизации текста.
  • unet (UNet2DConditionModel) — UNet2DConditionModel для удаления шума из закодированных латентов изображения.
  • low_res_scheduler (SchedulerMixin) — планировщик, используемый для добавления начального шума к изображению низкого разрешения. Он должен быть экземпляром DDPMScheduler.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.

Пайплайн для супер-разрешения изображений с текстовым управлением на базе Stable Diffusion 2.

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

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

__call__

< >

( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonenum_inference_steps: int = 75guidance_scale: float = 9.0noise_level: int = 20negative_prompt: 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] = 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 = Noneclip_skip: int = None ) → StableDiffusionPipelineOutput or tuple

Параметры

  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds.
  • image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) — Image или тензор, представляющий пакет изображений для увеличения.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
  • guidance_scale (float, необязательный, по умолчанию 7.5) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовым prompt, ценой снижения качества изображения. Guidance scale включается, когда guidance_scale > 1.
  • noise_level (int, необязательный, по умолчанию 20) — Количество шума, добавляемого к входному изображению после увеличения. Должно находиться в диапазоне [0, max_noise_level], где max_noise_level определяется планировщиком. Более высокое значение noise_level добавляет больше шума во входные данные, что увеличивает вариативность, но снижает точность воспроизведения исходного изображения.
  • negative_prompt (str or list[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) — Определяет, следует ли возвращать StableDiffusionPipelineOutput вместо обычного кортежа.
  • 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.
  • clip_skip (int, необязательный) — Количество слоев CLIP, которые пропускаются при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Возвращает

StableDiffusionPipelineOutput или tuple

Если return_dict равно True, возвращается StableDiffusionPipelineOutput, в противном случае возвращается tuple, где первый элемент — это список с сгенерированными изображениями, а второй элемент — это список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для работы (nsfw).

Функция вызова конвейера для генерации.

Примеры:

>>> import requests
>>> from PIL import Image
>>> from io import BytesIO
>>> from diffusers import StableDiffusionUpscalePipeline
>>> import torch

>>> # load model and scheduler
>>> model_id = "stabilityai/stable-diffusion-x4-upscaler"
>>> pipeline = StableDiffusionUpscalePipeline.from_pretrained(
...     model_id, variant="fp16", torch_dtype=torch.float16
... )
>>> pipeline = pipeline.to("cuda")

>>> # let's download an  image
>>> url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/sd2-upscale/low_res_cat.png"
>>> response = requests.get(url)
>>> low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
>>> low_res_img = low_res_img.resize((128, 128))
>>> prompt = "a white cat"

>>> upscaled_image = pipeline(prompt=prompt, image=low_res_img).images[0]
>>> upscaled_image.save("upsampled_cat.png")

enable_attention_slicing

< >

( 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]

disable_attention_slicing

< >

( )

Отключает вычисление внимания с нарезкой. Если enable_attention_slicing был вызван ранее, внимание вычисляется за один шаг.

enable_xformers_memory_efficient_attention

< >

( 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)

disable_xformers_memory_efficient_attention

< >

( )

Отключить энергоэффективное внимание из xFormers.

encode_prompt

< >

( 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 (str or list[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 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

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

StableDiffusionPipelineOutput

класс diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )

Параметры

  • images (list[PIL.Image.Image] или np.ndarray) — список денойзированных изображений PIL длиной batch_size или массив NumPy формы (batch_size, height, width, num_channels).
  • nsfw_content_detected (list[bool]) — список, указывающий, содержит ли соответствующее сгенерированное изображение контент, непригодный для рабочего места (nsfw), или None, если проверка безопасности не могла быть выполнена.

Класс вывода для пайплайнов Stable Diffusion.

Update on GitHub