Diffusers documentation

Latent Diffusion

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Latent Diffusion

Latent Diffusion была предложена в статье High-Resolution Image Synthesis with Latent Diffusion Models Робина Ромбаха, Андреаса Блаттмана, Доминика Лоренца, Патрика Эссера и Бьёрна Оммера.

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

Разлагая процесс формирования изображения на последовательное применение автоэнкодеров шумоподавления, диффузионные модели (DM) достигают наилучших результатов синтеза на данных изображений и не только. Кроме того, их формулировка позволяет использовать механизм управления для контроля процесса генерации изображений без повторного обучения. Однако, поскольку эти модели обычно работают непосредственно в пиксельном пространстве, оптимизация мощных DM часто требует сотен GPU-дней, а инференс обходится дорого из-за последовательных вычислений. Чтобы обеспечить обучение DM на ограниченных вычислительных ресурсах с сохранением их качества и гибкости, мы применяем их в латентном пространстве мощных предобученных автоэнкодеров. В отличие от предыдущих работ, обучение диффузионных моделей на таком представлении впервые позволяет достичь почти оптимальной точки между снижением сложности и сохранением деталей, что значительно повышает визуальную точность. Вводя слои кросс-внимания в архитектуру модели, мы превращаем диффузионные модели в мощные и гибкие генераторы для общих условных входных данных, таких как текст или ограничивающие рамки, и становится возможным синтез высокого разрешения в свёрточном режиме. Наши латентные диффузионные модели (LDM) достигают нового состояния техники для инпейнтинга изображений и демонстрируют высокую конкурентоспособность на различных задачах, включая безусловную генерацию изображений, семантический синтез сцен и супер-разрешение, при этом значительно снижая вычислительные требования по сравнению с пиксельными DM.

Исходный код можно найти в CompVis/latent-diffusion.

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

LDMTextToImagePipeline

класс diffusers.LDMTextToImagePipeline

< >

( vqvae: diffusers.models.autoencoders.vq_model.VQModel | diffusers.models.autoencoders.autoencoder_kl.AutoencoderKLbert: PreTrainedModeltokenizer: PythonBackendunet: diffusers.models.unets.unet_2d.UNet2DModel | diffusers.models.unets.unet_2d_condition.UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler )

Параметры

  • vqvae (VQModel) — модель с векторным квантованием (VQ) для кодирования изображений в латентные представления и декодирования из них.
  • bert (LDMBertModel) — Модель текстового кодирования на основе BERT.
  • tokenizer (BertTokenizer) — BertTokenizer для токенизации текста.
  • unet (UNet2DConditionModel) — UNet2DConditionModel для удаления шума из закодированных латентов изображения.
  • scheduler (SchedulerMixin) — планировщик, используемый в связке с unet для удаления шума из закодированных латентов изображения. Может быть одним из DDIMScheduler, LMSDiscreteScheduler или PNDMScheduler.

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

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

__call__

< >

( prompt: str | list[str]height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int | None = 50guidance_scale: float | None = 1.0eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = True**kwargs ) → ImagePipelineOutput or tuple

Параметры

  • prompt (str или list[str]) — Промпт или промпты для управления генерацией изображения.
  • 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, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.
  • guidance_scale (float, необязательный, по умолчанию 1.0) — Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовым prompt, в ущерб качеству изображения. Guidance scale включается, когда guidance_scale > 1.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к DDIMScheduler и игнорируется другими планировщиками.
  • generator (torch.Generator, необязательный) — torch.Generator для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, выбранные из гауссова распределения, которые используются в качестве входных данных для генерации изображений. Можно использовать, чтобы корректировать одну и ту же генерацию с разными промптами. Если не задано, тензор латентов генерируется путём выборки с использованием переданного случайного generator.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: "pil" (PIL.Image), "np" (np.array) или "pt" (torch.Tensor).
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать ImagePipelineOutput вместо обычного кортежа.

Возвращает

ImagePipelineOutput или tuple

Если return_dict равно True, возвращается ImagePipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными изображениями.

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

Пример:

>>> from diffusers import DiffusionPipeline

>>> # load model and scheduler
>>> ldm = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")

>>> # run pipeline in inference (sample random noise and denoise)
>>> prompt = "A painting of a squirrel eating a burger"
>>> images = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6).images

>>> # save images
>>> for idx, image in enumerate(images):
...     image.save(f"squirrel-{idx}.png")

LDMSuperResolutionPipeline

класс diffusers.LDMSuperResolutionPipeline

< >

( vqvae: VQModelunet: UNet2DModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler | diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteScheduler | diffusers.schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler )

Параметры

Конвейер для супер-разрешения изображений с использованием латентного диффузионного процесса.

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

__call__

< >

( image: typing.Union[torch.Tensor, PIL.Image.Image] = Nonebatch_size: int | None = 1num_inference_steps: int | None = 100eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple

Параметры

  • image (torch.Tensor или PIL.Image.Image) — Image или тензор, представляющий пакет изображений, который будет использоваться как отправная точка для процесса.
  • batch_size (int, необязательный, по умолчанию 1) — Количество изображений для генерации.
  • num_inference_steps (int, необязательный, по умолчанию 100) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счет более медленного вывода.
  • eta (float, необязательный, по умолчанию 0.0) — Соответствует параметру eta (η) из статьи DDIM. Применяется только к DDIMScheduler и игнорируется другими планировщиками.
  • generator (torch.Generator или list[torch.Generator], необязательный) — torch.Generator для обеспечения детерминированности генерации.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: "pil" (PIL.Image), "np" (np.array) или "pt" (torch.Tensor).
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать ImagePipelineOutput вместо обычного кортежа.

Возвращает

ImagePipelineOutput или tuple

Если return_dict равно True, возвращается ImagePipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными изображениями

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

Пример:

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

>>> # load model and scheduler
>>> pipeline = LDMSuperResolutionPipeline.from_pretrained("CompVis/ldm-super-resolution-4x-openimages")
>>> pipeline = pipeline.to("cuda")

>>> # let's download an  image
>>> url = (
...     "https://user-images.githubusercontent.com/38061659/199705896-b48e17b8-b231-47cd-a270-4ffa5a93fa3e.png"
... )
>>> response = requests.get(url)
>>> low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
>>> low_res_img = low_res_img.resize((128, 128))

>>> # run pipeline in inference (sample random noise and denoise)
>>> upscaled_image = pipeline(low_res_img, num_inference_steps=100, eta=1).images[0]
>>> # save image
>>> upscaled_image.save("ldm_generated_image.png")

ImagePipelineOutput

класс diffusers.ImagePipelineOutput

< >

( images: list[PIL.Image.Image] | numpy.ndarray )

Параметры

  • images (List[PIL.Image.Image] или np.ndarray) — Список денойзированных изображений PIL длиной batch_size или массив NumPy формы (batch_size, height, width, num_channels).

Класс вывода для пайплайнов обработки изображений.

Update on GitHub