Diffusers documentation

VQDiffusionScheduler

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)

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

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})

Вычисляет логарифмические вероятности строк из (кумулятивной или некумулятивной) матрицы переходов для каждого скрытого пикселя в 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