Buckets:

mishig's picture
|
download
raw
16.4 kB
# VQDiffusionScheduler
`VQDiffusionScheduler` преобразует выход трансформерной модели в образец для изображения без шума на предыдущем шаге диффузии. Он был представлен в статье [Vector Quantized Diffusion Model for Text-to-Image Synthesis](https://huggingface.co/papers/2111.14822) 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]]
```python
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)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L142)
**Параметры:**
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](/docs/diffusers/main/ru/api/schedulers/overview#diffusers.SchedulerMixin) и [ConfigMixin](/docs/diffusers/main/ru/api/configuration#diffusers.ConfigMixin). Общие методы, которые библиотека реализует для всех планировщиков, такие как загрузка и сохранение, описаны в документации суперкласса.
#### apply_cumulative_transitions[[diffusers.VQDiffusionScheduler.apply_cumulative_transitions]]
```python
apply_cumulative_transitions(q: Tensor, t: typing.Union[int, torch.Tensor])
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L491)
**Параметры:**
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]]
```python
log_Q_t_transitioning_to_known_class(t: typing.Union[int, torch.Tensor], x_t: LongTensor, log_onehot_x_t: Tensor, cumulative: bool)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L392)
**Параметры:**
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]]
```python
q_posterior(log_p_x_0: Tensor, x_t: LongTensor, t: typing.Union[int, torch.Tensor])
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L281)
**Параметры:**
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]]
```python
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device, NoneType] = None)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L214)
**Параметры:**
num_inference_steps (`int`) : Количество шагов диффузии, используемое при генерации образцов с помощью предобученной модели.
device (`str` или `torch.device`, *необязательный*) : Устройство, на которое следует переместить временные шаги и параметры процесса диффузии (alpha, beta, gamma).
Устанавливает дискретные временные шаги, используемые для цепочки диффузии (выполняется перед инференсом).
#### шаг[[diffusers.VQDiffusionScheduler.step]]
```python
step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: LongTensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L236)
**Параметры:**
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](/docs/diffusers/main/ru/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) или `tuple`.
**Возвращает:** [VQDiffusionSchedulerOutput](/docs/diffusers/main/ru/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) или `tuple[torch.LongTensor]`
If return_dict is `True`, [VQDiffusionSchedulerOutput](/docs/diffusers/main/ru/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) is returned, otherwise a tuple is returned where the first element is the sample tensor.
Предскажите образец из предыдущего шага времени с помощью распределения обратного перехода. Подробнее о том, как вычисляется распределение, см. [q_posterior()](/docs/diffusers/main/ru/api/schedulers/vq_diffusion#diffusers.VQDiffusionScheduler.q_posterior).
## VQDiffusionSchedulerOutput[[diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput]]
#### diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput[[diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput]]
```python
diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput(prev_sample: LongTensor)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L27)
**Параметры:**
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.