Buckets:
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.