Diffusers documentation
AutoencoderKL
AutoencoderKL
Модель вариационного автоэнкодера (VAE) с потерей KL была представлена в статье Auto-Encoding Variational Bayes Дидериком П. Кингмой и Максом Веллингом. В 🤗 Diffusers эта модель используется для кодирования изображений в латентные представления и декодирования латентных представлений в изображения.
Аннотация из статьи:
Как выполнить эффективный вывод и обучение в направленных вероятностных моделях при наличии непрерывных латентных переменных с неразрешимыми апостериорными распределениями и большими наборами данных? Мы предлагаем стохастический алгоритм вариационного вывода и обучения, масштабируемый на большие наборы данных и, при некоторых мягких условиях дифференцируемости, работающий даже в неразрешимом случае. Наши вклады двояки. Во-первых, мы показываем, что репараметризация вариационной нижней границы даёт оценщик нижней границы, который можно напрямую оптимизировать с помощью стандартных стохастических градиентных методов. Во-вторых, мы показываем, что для независимых одинаково распределённых наборов данных с непрерывными латентными переменными на каждую точку данных вывод апостериорного распределения может быть сделан особенно эффективным путём подгонки модели приблизительного вывода (также называемой моделью распознавания) к неразрешимому апостериорному распределению с использованием предложенного оценщика нижней границы. Теоретические преимущества подтверждаются экспериментальными результатами.
Загрузка из исходного формата
По умолчанию AutoencoderKL следует загружать с помощью from_pretrained(), но его также можно загрузить из исходного формата, используя FromOriginalModelMixin.from_single_file, следующим образом:
from diffusers import AutoencoderKL
url = "https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.safetensors" # can also be a local file
model = AutoencoderKL.from_single_file(url)AutoencoderKL
класс diffusers.AutoencoderKL
< source >( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)up_block_types: tuple = ('UpDecoderBlock2D',)block_out_channels: tuple = (64,)layers_per_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215shift_factor: float | None = Nonelatents_mean: tuple[float] | None = Nonelatents_std: tuple[float] | None = Noneforce_upcast: bool = Trueuse_quant_conv: bool = Trueuse_post_quant_conv: bool = Truemid_block_add_attention: bool = True )
Параметры
- in_channels (int, необязательный, по умолчанию 3) — Количество каналов во входном изображении.
- out_channels (int, необязательный, по умолчанию 3) — Количество каналов на выходе.
- down_block_types (
tuple[str], необязательный, по умолчанию("DownEncoderBlock2D",)) — кортеж типов блоков даунсемплинга. - up_block_types (
tuple[str], необязательный, по умолчанию("UpDecoderBlock2D",)) — кортеж типов блоков апсемплинга. - block_out_channels (
tuple[int], необязательный, по умолчанию(64,)) — кортеж количества выходных каналов блоков. - act_fn (
str, необязательный, по умолчанию"silu") — Функция активации, которую следует использовать. - latent_channels (
int, необязательный, по умолчанию 4) — Количество каналов в латентном пространстве. - sample_size (
int, необязательный, по умолчанию32) — Размер выборки входных данных. - 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. - force_upcast (
bool, необязательный, по умолчаниюTrue) — Если включено, принудительно заставляет VAE работать в float32 для пайплайнов с высоким разрешением изображений, таких как SD-XL. VAE можно дообучить / обучить для более низкого диапазона без значительной потери точности, в этом случаеforce_upcastможно установить вFalse— см.: https://huggingface.co/madebyollin/sdxl-vae-fp16-fix - mid_block_add_attention (
bool, необязательный, по умолчаниюTrue) — Если включено, mid_block в Encoder и Decoder будет содержать блоки внимания. Если установлено в false, mid_block будет содержать только блоки resnet
Модель VAE с потерей KL для кодирования изображений в латенты и декодирования латентных представлений в изображения.
Эта модель наследуется от ModelMixin. См. документацию суперкласса для его универсальных методов, реализованных для всех моделей (например, загрузка или сохранение).
decode
< source >( z: FloatTensorreturn_dict: bool = Truegenerator = None ) → ~models.vae.DecoderOutput or tuple
Параметры
- z (
torch.Tensor) — Входная партия латентных векторов. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать~models.vae.DecoderOutputвместо обычного кортежа.
Возвращает
~models.vae.DecoderOutput или tuple
If return_dict is True, a ~models.vae.DecoderOutput is returned, otherwise a plain tuple is
returned.
Декодировать пакет изображений.
encode
< source >( x: Tensorreturn_dict: bool = True )
Кодирует пакет изображений в латенты.
forward
< source >( sample: Tensorsample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → ~models.vae.DecoderOutput or tuple
Параметры
- sample (
torch.Tensor) — Входной образец. - sample_posterior (
bool, необязательный, по умолчаниюFalse) — Следует ли извлекать выборку из апостериорного распределения. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращатьDecoderOutputвместо обычного кортежа. - generator (
torch.Generator, необязательный) —torch.Generatorдля обеспечения детерминированности выборки.
Возвращает
~models.vae.DecoderOutput или tuple
Если return_dict равно True, возвращается ~models.vae.DecoderOutput, в противном случае возвращается обычный tuple.
Включает объединённые проекции QKV. Для модулей само-внимания все матрицы проекций (т. е. запрос, ключ, значение) объединяются. Для модулей кросс-внимания объединяются матрицы проекций ключа и значения.
> Этот API 🧪 экспериментальный.
Отключает пользовательские обработчики внимания и устанавливает реализацию внимания по умолчанию.
tiled_decode
< source >( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple
Параметры
- z (
torch.Tensor) — Входная партия латентных векторов. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать~models.vae.DecoderOutputвместо обычного кортежа.
Возвращает
~models.vae.DecoderOutput или tuple
If return_dict is True, a ~models.vae.DecoderOutput is returned, otherwise a plain tuple is
returned.
Декодирование пакета изображений с использованием тайлованного декодера.
tiled_encode
< source >( x: Tensorreturn_dict: bool = True ) → ~models.autoencoder_kl.AutoencoderKLOutput or tuple
Параметры
- x (
torch.Tensor) — Входная партия изображений. - return_dict (
bool, необязательный, по умолчаниюTrue) — Определяет, следует ли возвращать~models.autoencoder_kl.AutoencoderKLOutputвместо обычного кортежа.
Возвращает
~models.autoencoder_kl.AutoencoderKLOutput или tuple
If return_dict is True, a ~models.autoencoder_kl.AutoencoderKLOutput is returned, otherwise a plain
tuple is returned.
Кодирует пакет изображений с использованием тайлованного энкодера.
Когда эта опция включена, VAE разбивает входной тензор на плитки, чтобы вычислить кодирование за несколько шагов. Это полезно для поддержания постоянного использования памяти независимо от размера изображения. Итоговый результат плиточного кодирования отличается от неплиточного, поскольку каждая плитка использует свой собственный энкодер. Чтобы избежать артефактов на стыках плиток, они перекрываются и смешиваются для формирования плавного вывода. Вы всё ещё можете заметить изменения в выводе размером с плитку, но они должны быть значительно менее заметными.
Отключает объединенную проекцию QKV, если она включена.
> Этот API 🧪 экспериментальный.
AutoencoderKLOutput
класс diffusers.models.modeling_outputs.AutoencoderKLOutput
< source >( latent_dist: DiagonalGaussianDistribution )
Результат метода кодирования AutoencoderKL.
DecoderOutput
класс diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Результат метода декодирования.