Diffusers documentation

AsymmetricAutoencoderKL

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

AsymmetricAutoencoderKL

Улучшенная большая модель вариационного автоэнкодера (VAE) с потерей KL для задачи инпейнтинга: Designing a Better Asymmetric VQGAN for StableDiffusion от Zixin Zhu, Xuelu Feng, Dongdong Chen, Jianmin Bao, Le Wang, Yinpeng Chen, Lu Yuan, Gang Hua.

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

StableDiffusion — это революционный генератор изображений по текстовому описанию, который произвёл фурор в мире генерации и редактирования изображений. В отличие от традиционных методов, которые обучают диффузионную модель в пиксельном пространстве, StableDiffusion обучает диффузионную модель в латентном пространстве с помощью VQGAN, обеспечивая как эффективность, так и качество. Он поддерживает не только задачи генерации изображений, но и позволяет редактировать реальные изображения, например, выполнять inpainting и локальное редактирование. Однако мы наблюдали, что стандартный VQGAN, используемый в StableDiffusion, приводит к значительной потере информации, вызывая артефакты искажений даже в неизменённых областях изображения. В связи с этим мы предлагаем новый асимметричный VQGAN с двумя простыми решениями. Во-первых, помимо входа из энкодера, декодер содержит условную ветвь, которая включает информацию из априорных данных, специфичных для задачи, например, из немаскированной области изображения при inpainting. Во-вторых, декодер значительно тяжелее энкодера, что позволяет более детально восстанавливать изображение, лишь незначительно увеличивая общие затраты на инференс. Стоимость обучения нашего асимметричного VQGAN невелика: нам нужно переобучить только новый асимметричный декодер, сохранив стандартный энкодер VQGAN и StableDiffusion без изменений. Наш асимметричный VQGAN может широко использоваться в методах inpainting и локального редактирования на базе StableDiffusion. Многочисленные эксперименты показывают, что он значительно улучшает качество inpainting и редактирования, сохраняя при этом исходную способность генерировать изображения по тексту. Код доступен по адресу https://github.com/buxiangzhiren/Asymmetric_VQGAN

Результаты оценки можно найти в разделе 4.1 оригинальной статьи.

Доступные контрольные точки

Пример использования

from diffusers import AsymmetricAutoencoderKL, StableDiffusionInpaintPipeline
from diffusers.utils import load_image, make_image_grid


prompt = "a photo of a person with beard"
img_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/celeba_hq_256.png"
mask_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png"

original_image = load_image(img_url).resize((512, 512))
mask_image = load_image(mask_url).resize((512, 512))

pipe = StableDiffusionInpaintPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-inpainting")
pipe.vae = AsymmetricAutoencoderKL.from_pretrained("cross-attention/asymmetric-autoencoder-kl-x-1-5")
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(prompt=prompt, image=original_image, mask_image=mask_image).images[0]
make_image_grid([original_image, mask_image, image], rows=1, cols=3)

AsymmetricAutoencoderKL

класс diffusers.AsymmetricAutoencoderKL

< >

( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)down_block_out_channels: tuple = (64,)layers_per_down_block: int = 1up_block_types: tuple = ('UpDecoderBlock2D',)up_block_out_channels: tuple = (64,)layers_per_up_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215 )

Параметры

  • in_channels (int, необязательный, по умолчанию 3) — Количество каналов во входном изображении.
  • out_channels (int, необязательный, по умолчанию 3) — Количество каналов на выходе.
  • down_block_types (tuple[str], необязательный, по умолчанию ("DownEncoderBlock2D",)) — кортеж типов блоков даунсемплинга.
  • down_block_out_channels (tuple[int], необязательный, по умолчанию (64,)) — кортеж количества выходных каналов блоков понижения разрешения.
  • layers_per_down_block (int, необязательный, по умолчанию 1) — Количество слоев в down block.
  • up_block_types (tuple[str], необязательный, по умолчанию ("UpDecoderBlock2D",)) — кортеж типов блоков апсемплинга.
  • up_block_out_channels (tuple[int], необязательный, по умолчанию (64,)) — кортеж количества выходных каналов блоков апскейлинга.
  • layers_per_up_block (int, необязательный, по умолчанию 1) — Количество слоев в блоке повышения разрешения.
  • act_fn (str, необязательный, по умолчанию "silu") — Функция активации, которую следует использовать.
  • latent_channels (int, необязательный, по умолчанию 4) — Количество каналов в латентном пространстве.
  • sample_size (int, необязательный, по умолчанию 32) — Размер выборки входных данных.
  • norm_num_groups (int, необязательный, по умолчанию 32) — Количество групп, используемых для первого слоя нормализации в блоках ResNet.
  • scaling_factor (float, необязательный, по умолчанию 0.18215) — Послекомпонентное стандартное отклонение обученного латентного пространства, вычисленное на основе первой пакетной выборки (batch) обучающей выборки. Используется для масштабирования латентного пространства до единичной дисперсии при обучении диффузионной модели. Перед передачей в диффузионную модель латенты масштабируются по формуле z = z * scaling_factor. При декодировании латенты возвращаются к исходному масштабу по формуле: z = 1 / scaling_factor * z. Дополнительные сведения см. в разделах 4.3.2 и D.1 статьи High-Resolution Image Synthesis with Latent Diffusion Models.

Проектирование улучшенной асимметричной VQGAN для StableDiffusion https://huggingface.co/papers/2306.04632 . Модель VAE с потерей KL для кодирования изображений в латенты и декодирования латентных представлений в изображения.

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

forward

< >

( sample: Tensormask: typing.Optional[torch.Tensor] = Nonesample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple

Параметры

  • sample (torch.Tensor) — Входной образец.
  • mask (torch.Tensor, необязательный, по умолчанию None) — Необязательная маска для inpainting.
  • sample_posterior (bool, необязательный, по умолчанию False) — Следует ли извлекать выборку из апостериорного распределения.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать DecoderOutput вместо обычного кортежа.
  • generator (torch.Generator, необязательный) — torch.Generator для обеспечения детерминированности выборки.

Возвращает

DecoderOutput или tuple

Если return_dict равно True, возвращается DecoderOutput, в противном случае возвращается обычный tuple.

AutoencoderKLOutput

класс diffusers.models.modeling_outputs.AutoencoderKLOutput

< >

( latent_dist: DiagonalGaussianDistribution )

Параметры

  • latent_dist (DiagonalGaussianDistribution) — Закодированные выходные данные Encoder, представленные в виде среднего и logvar распределения DiagonalGaussianDistribution. DiagonalGaussianDistribution позволяет извлекать латентные переменные из этого распределения.

Результат метода кодирования AutoencoderKL.

DecoderOutput

класс diffusers.models.autoencoders.vae.DecoderOutput

< >

( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )

Параметры

  • sample (torch.Tensor формы (batch_size, num_channels, height, width)) — Декодированный вывод из последнего слоя модели.

Результат метода декодирования.

Update on GitHub