Diffusers documentation
Декодер согласованности
Декодер согласованности
Consistency decoder можно использовать для декодирования латентов из денезинг-UNet в StableDiffusionPipeline. Этот декодер был представлен в техническом отчёте DALL-E 3.
Исходный код можно найти в openai/consistencydecoder.
В настоящее время инференс поддерживается только для 2 итераций.
Пайплайн не мог бы быть добавлен без помощи madebyollin и mrsteyk из этого вопроса.
ConsistencyDecoderVAE
класс diffusers.ConsistencyDecoderVAE
< source >( scaling_factor: float = 0.18215latent_channels: int = 4sample_size: int = 32encoder_act_fn: str = 'silu'encoder_block_out_channels: tuple = (128, 256, 512, 512)encoder_double_z: bool = Trueencoder_down_block_types: tuple = ('DownEncoderBlock2D', 'DownEncoderBlock2D', 'DownEncoderBlock2D', 'DownEncoderBlock2D')encoder_in_channels: int = 3encoder_layers_per_block: int = 2encoder_norm_num_groups: int = 32encoder_out_channels: int = 4decoder_add_attention: bool = Falsedecoder_block_out_channels: tuple = (320, 640, 1024, 1024)decoder_down_block_types: tuple = ('ResnetDownsampleBlock2D', 'ResnetDownsampleBlock2D', 'ResnetDownsampleBlock2D', 'ResnetDownsampleBlock2D')decoder_downsample_padding: int = 1decoder_in_channels: int = 7decoder_layers_per_block: int = 3decoder_norm_eps: float = 1e-05decoder_norm_num_groups: int = 32decoder_num_train_timesteps: int = 1024decoder_out_channels: int = 6decoder_resnet_time_scale_shift: str = 'scale_shift'decoder_time_embedding_type: str = 'learned'decoder_up_block_types: tuple = ('ResnetUpsampleBlock2D', 'ResnetUpsampleBlock2D', 'ResnetUpsampleBlock2D', 'ResnetUpsampleBlock2D') )
Декодер согласованности, используемый с DALL-E 3.
Примеры:
>>> import torch
>>> from diffusers import StableDiffusionPipeline, ConsistencyDecoderVAE
>>> vae = ConsistencyDecoderVAE.from_pretrained("openai/consistency-decoder", torch_dtype=torch.float16)
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5", vae=vae, torch_dtype=torch.float16
... ).to("cuda")
>>> image = pipe("horse", generator=torch.manual_seed(0)).images[0]
>>> imagedecode
< source >( z: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = Truenum_inference_steps: int = 2 ) → DecoderOutput | tuple[torch.Tensor]
Параметры
- z (torch.Tensor) — Входной латентный вектор.
- generator (torch.Generator | None) — Генератор случайных чисел. По умолчанию None.
- return_dict (bool) — Возвращать ли результат в виде словаря. По умолчанию True.
- num_inference_steps (int) — Количество шагов инференса. По умолчанию 2.
Возвращает
DecoderOutput | tuple[torch.Tensor]
Раскодированный вывод.
Декодирует входной латентный вектор z с помощью модели VAE consistency decoder.
encode
< source >( x: Tensorreturn_dict: bool = True )
Кодирует пакет изображений в латенты.
forward
< source >( sample: Tensorsample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple
Параметры
- sample (
torch.Tensor) — Входной образец. - sample_posterior (
bool, необязательный, по умолчаниюFalse) — Следует ли извлекать выборку из апостериорного распределения. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращатьDecoderOutputвместо обычного кортежа. - generator (
torch.Generator, необязательный, по умолчаниюNone) — Генератор, используемый для выборки.
Возвращает
DecoderOutput или tuple
If return_dict is True, a DecoderOutput is returned, otherwise a plain tuple is returned.
Отключает пользовательские обработчики внимания и устанавливает реализацию внимания по умолчанию.
tiled_encode
< source >( x: Tensorreturn_dict: bool = True ) → ConsistencyDecoderVAEOutput or tuple
Параметры
- x (
torch.Tensor) — Входная партия изображений. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращатьConsistencyDecoderVAEOutputвместо обычного кортежа.
Возвращает
ConsistencyDecoderVAEOutput или tuple
If return_dict is True, a ConsistencyDecoderVAEOutput
is returned, otherwise a plain tuple is returned.
Кодирует пакет изображений с использованием тайлованного энкодера.
Когда эта опция включена, VAE разбивает входной тензор на плитки, чтобы вычислить кодирование за несколько шагов. Это полезно для поддержания постоянного использования памяти независимо от размера изображения. Итоговый результат плиточного кодирования отличается от неплиточного, поскольку каждая плитка использует свой собственный энкодер. Чтобы избежать артефактов на стыках плиток, они перекрываются и смешиваются для формирования плавного вывода. Вы всё ещё можете заметить изменения в выводе размером с плитку, но они должны быть значительно менее заметными.