Buckets:

mishig's picture
|
download
raw
16.4 kB

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]]

diffusers.VQDiffusionScheduler[[diffusers.VQDiffusionScheduler]]

diffusers.VQDiffusionScheduler(num_vec_classes: int, num_train_timesteps: int = 100, alpha_cum_start: float = 0.99999, alpha_cum_end: float = 9e-06, gamma_cum_start: float = 9e-06, gamma_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[[diffusers.VQDiffusionScheduler.apply_cumulative_transitions]]

apply_cumulative_transitions(q: Tensor, t: typing.Union[int, torch.Tensor])

Источник

Параметры:

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[[diffusers.VQDiffusionScheduler.log_Q_t_transitioning_to_known_class]]

log_Q_t_transitioning_to_known_class(t: typing.Union[int, torch.Tensor], x_t: LongTensor, log_onehot_x_t: Tensor, cumulative: bool)

Источник

Параметры:

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[[diffusers.VQDiffusionScheduler.q_posterior]]

q_posterior(log_p_x_0: Tensor, x_t: LongTensor, t: typing.Union[int, torch.Tensor])

Источник

Параметры:

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[[diffusers.VQDiffusionScheduler.set_timesteps]]

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

Источник

Параметры:

num_inference_steps (int) : Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели.

device (str или torch.device, необязательный) : Устройство, на которое следует переместить временные шаги и параметры процесса диффузии (alpha, beta, gamma).

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

шаг[[diffusers.VQDiffusionScheduler.step]]

step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: LongTensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)

Источник

Параметры:

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]]

diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput[[diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput]]

diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput(prev_sample: LongTensor)

Источник

Параметры:

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

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

Xet Storage Details

Size:
16.4 kB
·
Xet hash:
f2d09b25a5ea3fcbcd1815a25cf31ed307b410da329ece6c8ade982b0365615d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.