Diffusers documentation
VQDiffusionScheduler
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
< source >( 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
< source >( 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
< source >( 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 — это класс замаскированного латентного пикселя
результат без накопления (без логарифмов):
накопленный результат (без логарифмов):
Вычисляет логарифмические вероятности строк из (кумулятивной или некумулятивной) матрицы переходов для каждого скрытого пикселя в x_t.
q_posterior
< source >( 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.
set_timesteps
< source >( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )
Параметры
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
шаг
< source >( 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
< source >( prev_sample: LongTensor )
Класс для вывода функции шага планировщика.