Diffusers documentation

VQDiffusionScheduler

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

VQDiffusionScheduler

VQDiffusionScheduler преобразует выход трансформерной модели в образец для изображения без шума на предыдущем шаге диффузии. Он был представлен в статье Vector Quantized Diffusion Model for Text-to-Image Synthesis Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo.

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

Мы представляем модель векторно-квантованной диффузии (VQ-Diffusion) для генерации изображений по тексту. Этот метод основан на векторно-квантованном вариационном автоэнкодере (VQ-VAE), пространство скрытых представлений которого моделируется с помощью условного варианта недавно разработанной вероятностной модели диффузии с шумоподавлением (DDPM). Мы обнаружили, что этот метод в пространстве скрытых представлений хорошо подходит для задач генерации изображений по тексту, поскольку он не только устраняет одностороннюю смещенность, характерную для существующих методов, но и позволяет использовать стратегию диффузии с маскированием и заменой, чтобы избежать накопления ошибок, что является серьезной проблемой существующих методов. Наши эксперименты показывают, что VQ-Diffusion дает значительно лучшие результаты генерации изображений по тексту по сравнению с традиционными авторегрессионными (AR) моделями с аналогичным количеством параметров. По сравнению с предыдущими методами генерации изображений по тексту на основе GAN, наша VQ-Diffusion способна обрабатывать более сложные сцены и значительно повышает качество синтезируемых изображений. Наконец, мы показываем, что вычисления генерации изображений в нашем методе можно сделать высокоэффективными с помощью репараметризации. При использовании традиционных AR-методов время генерации изображений по тексту линейно возрастает с разрешением выходного изображения и, следовательно, является довольно затратным даже для изображений обычного размера. VQ-Diffusion позволяет нам достичь лучшей компромиссной зависимости между качеством и скоростью. Наши эксперименты показывают, что модель VQ-Diffusion с репараметризацией работает в пятнадцать раз быстрее традиционных AR-методов, при этом обеспечивая лучшее качество изображений.

VQDiffusionScheduler

класс diffusers.VQDiffusionScheduler

< >

( num_vec_classes: intnum_train_timesteps: int = 100alpha_cum_start: float = 0.99999alpha_cum_end: float = 9e-06gamma_cum_start: float = 9e-06gamma_cum_end: float = 0.99999 )

Параметры

  • num_vec_classes (int) — Количество классов векторных эмбеддингов латентных пикселей. Включает класс для замаскированного латентного пикселя.
  • num_train_timesteps (int, по умолчанию 100) — Количество шагов диффузии для обучения модели.
  • alpha_cum_start (float, по умолчанию 0.99999) — Начальное накопленное значение альфа.
  • alpha_cum_end (float, по умолчанию 0.000009) — Конечное накопленное значение альфа.
  • gamma_cum_start (float, по умолчанию 0.000009) — Начальное накопленное значение гамма.
  • gamma_cum_end (float, по умолчанию 0.99999) — Конечное накопленное значение гамма.

Планировщик для векторно-квантованной диффузии.

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

apply_cumulative_transitions

< >

( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

Параметры

  • q (torch.Tensor формы (batch size, num classes - 1, num latent pixels)) — Логарифмические вероятности по классам немаскированных латентных пикселей.
  • t (int или torch.Tensor) — Шаг времени, определяющий, какая накопленная матрица переходов будет использована.

Возвращает

torch.Tensor формы (batch size, num classes, num latent pixels)

Переходные логарифмические вероятности с добавленными вероятностями классов маски.

Примените кумулятивную матрицу переходов на шаге времени к логарифмическим вероятностям по немаскированным классам.

log_Q_t_transitioning_to_known_class

< >

( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor

Параметры

  • t (int или torch.Tensor) — Шаг времени, определяющий, какая матрица переходов используется.
  • x_t (torch.LongTensor формы (batch size, num latent pixels)) — Классы каждого латентного пикселя в момент времени t.
  • log_onehot_x_t (torch.Tensor формы (batch size, num classes, num latent pixels)) — Логарифмы one-hot векторов x_t.
  • cumulative (bool) — Если cumulative равно False, используется матрица переходов за один шаг t-1->t. Если cumulative равно True, используется накопленная матрица переходов 0->t.

Возвращает

torch.Tensor

Каждый столбец возвращаемой матрицы является строкой логарифмических вероятностей полной матрицы переходов вероятностей. Тензор имеет форму (batch size, num classes - 1, num latent pixels), если cumulative равно True, и форму (batch size, num classes, num latent pixels) в противном случае.

При накопительном режиме тензор содержит на одну строку меньше, поскольку начальный латентный пиксель не может быть замаскирован.

Где:

  • q_n — это распределение вероятностей для прямого процесса n-го латентного пикселя.
  • C_0 — это класс латентного пиксельного эмбеддинга
  • C_k — это класс замаскированного латентного пикселя

результат без накопления (без логарифмов):

q_0(x_t | x_{t-1\} = C_0) ... q_n(x_t | x_{t-1\} = C_0) . . . . . . . . . q_0(x_t | x_{t-1\} = C_k) ... q_n(x_t | x_{t-1\} = C_k)`} lang="" wrap={false} />

накопленный результат (без логарифмов):

q_0_cumulative(x_t | x_0 = C_0) ... q_n_cumulative(x_t | x_0 = C_0) . . . . . . . . . q_0_cumulative(x_t | x_0 = C_{k-1\}) ... q_n_cumulative(x_t | x_0 = C_{k-1\})`} lang="" wrap={false} />

Вычисляет логарифмические вероятности строк из (кумулятивной или некумулятивной) матрицы переходов для каждого скрытого пикселя в x_t.

q_posterior

< >

( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

Параметры

  • log_p_x_0 (torch.Tensor формы (batch size, num classes - 1, num latent pixels)) — Логарифмические вероятности для предсказанных классов начальных латентных пикселей. Не включает предсказание для маскированного класса, так как начальное изображение без шума не может быть замаскировано.
  • x_t (torch.LongTensor формы (batch size, num latent pixels)) — Классы каждого латентного пикселя в момент времени t.
  • t (int или torch.Tensor) — Шаг времени, определяющий, какая матрица переходов используется.

Возвращает

torch.Tensor формы (batch size, num classes, num latent pixels)

Логарифмические вероятности предсказанных классов изображения на шаге t-1.

Вычисляет логарифмические вероятности для предсказанных классов изображения на шаге t-1:

p(x_{t-1} | x_t) = sum( q(x_t | x_{t-1}) * q(x_{t-1} | x_0) * p(x_0) / q(x_t | x_0) )

set_timesteps

< >

( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )

Параметры

  • num_inference_steps (int) — Количество шагов диффузии, используемых при генерации образцов с помощью предобученной модели.
  • device (str или torch.device, необязательный) — Устройство, на которое следует переместить шаги диффузии (timesteps) и параметры процесса диффузии (alpha, beta, gamma).

Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).

шаг

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]

Параметры

  • model_output (torch.Tensor формы (batch size, num classes - 1, num latent pixels)) — Логарифмические вероятности для предсказанных классов исходных латентных пикселей. Не включает предсказание для маскированного класса, так как исходное изображение без шума не может быть замаскировано.
  • timestep (int или torch.Tensor) — Шаг, определяющий, какие матрицы переходов используются.
  • sample (torch.LongTensor формы (batch size, num latent pixels)) — Классы каждого латентного пикселя на текущем шаге времени.
  • generator (torch.Generator, необязательный) — Генератор случайных чисел для шума, применяемого к p(x_{t-1} | x_t) перед выборкой из него.
  • return_dict (bool, по умолчанию True) — определяет, возвращать ли VQDiffusionSchedulerOutput или tuple.

Возвращает

VQDiffusionSchedulerOutput или tuple[torch.LongTensor]

If return_dict is True, VQDiffusionSchedulerOutput is returned, otherwise a tuple is returned where the first element is the sample tensor.

Предскажите образец из предыдущего шага времени с помощью распределения обратного перехода. Подробнее о том, как вычисляется распределение, см. q_posterior().

VQDiffusionSchedulerOutput

класс diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput

< >

( prev_sample: LongTensor )

Параметры

  • prev_sample (torch.LongTensor формы (batch size, num latent pixels)) — Вычисленная выборка на предыдущем шаге. prev_sample следует использовать как следующий вход модели в цикле денойзинга.

Класс для вывода функции шага планировщика.

Update on GitHub