Buckets:

mishig's picture
|
download
raw
12 kB
# VQDiffusionScheduler
`VQDiffusionScheduler` convierte la salida del modelo transformer en una muestra de la imagen sin ruido del paso de difusión anterior. Fue introducido en [Vector Quantized Diffusion Model for Text-to-Image Synthesis](https://huggingface.co/papers/2111.14822) por Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo.
El resumen del artículo es:
*Presentamos el modelo de difusión cuantizada vectorial (VQ-Diffusion) para la generación de imágenes a partir de texto. Este método se basa en un autoencoder variacional cuantizado vectorial (VQ-VAE) cuyo espacio latente se modela mediante una variante condicional del recientemente desarrollado Modelo Probabilístico de Difusión de Desruido (DDPM). Encontramos que este método de espacio latente es adecuado para tareas de generación de imágenes a partir de texto porque no solo elimina el sesgo unidireccional de los métodos existentes, sino que también nos permite incorporar una estrategia de difusión de enmascarar y reemplazar para evitar la acumulación de errores, un problema grave en los métodos existentes. Nuestros experimentos muestran que VQ-Diffusion produce resultados significativamente mejores en la generación de imágenes a partir de texto en comparación con los modelos autoregresivos (AR) convencionales con un número similar de parámetros. En comparación con los métodos anteriores de generación de imágenes a partir de texto basados en GAN, nuestro VQ-Diffusion puede manejar escenas más complejas y mejorar la calidad de la imagen sintetizada en gran medida. Finalmente, demostramos que el cálculo de generación de imágenes en nuestro método puede hacerse altamente eficiente mediante la reparametrización. Con los métodos AR tradicionales, el tiempo de generación de imágenes a partir de texto aumenta linealmente con la resolución de la imagen de salida y, por lo tanto, es bastante costoso en tiempo incluso para imágenes de tamaño normal. VQ-Diffusion nos permite lograr un mejor equilibrio entre calidad y velocidad. Nuestros experimentos indican que el modelo VQ-Diffusion con reparametrización es quince veces más rápido que los métodos AR tradicionales, al tiempo que logra una mejor calidad de imagen.*
## 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)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L142)
**Parámetros:**
num_vec_classes (`int`) : El número de clases de las incrustaciones vectoriales de los píxeles latentes. Incluye la clase para el píxel latente enmascarado.
num_train_timesteps (`int`, por defecto `100`) : El número de pasos de difusión para entrenar el modelo.
alpha_cum_start (`float`, por defecto `0.99999`) : El valor inicial de alfa acumulado.
alpha_cum_end (`float`, por defecto `0.000009`) : El valor final de alpha acumulado.
gamma_cum_start (`float`, por defecto `0.000009`) : El valor inicial de gamma acumulativo.
gamma_cum_end (`float`, por defecto `0.99999`) : El valor final de gamma acumulativo.
Un programador para difusión cuantizada vectorial.
Este modelo hereda de [SchedulerMixin](/docs/diffusers/main/es/api/schedulers/overview#diffusers.SchedulerMixin) y [ConfigMixin](/docs/diffusers/main/es/api/configuration#diffusers.ConfigMixin). Consulta la documentación de la clase superior para los métodos genéricos que la biblioteca implementa para todos los programadores, como la carga y el guardado.
#### apply_cumulative_transitions[[diffusers.VQDiffusionScheduler.apply_cumulative_transitions]]
```python
apply_cumulative_transitions(q: Tensor, t: typing.Union[int, torch.Tensor])
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L491)
**Parámetros:**
q (`torch.Tensor` de forma `(batch size, num classes - 1, num latent pixels)`) : Las probabilidades logarítmicas sobre las clases de píxeles latentes no enmascarados.
t (`int` o `torch.Tensor`) : El paso de tiempo que determina qué matriz de transición acumulada se utiliza.
**Devuelve:** `torch.Tensor` de forma `(batch size, num classes, num latent pixels)`
Las probabilidades de registro transicionadas con las probabilidades de clase de la máscara añadidas.
Aplicar la matriz de transición acumulada en un paso de tiempo a las probabilidades logarítmicas sobre las clases no enmascaradas.
#### 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)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L392)
**Parámetros:**
t (`int` o `torch.Tensor`) : El paso de tiempo que determina qué matriz de transición se utiliza.
x_t (`torch.LongTensor` de forma `(batch size, num latent pixels)`) : Las clases de cada píxel latente en el tiempo `t`.
log_onehot_x_t (`torch.Tensor` de forma `(batch size, num classes, num latent pixels)`) : Los vectores log one-hot de `x_t`.
cumulative (`bool`) : Si cumulative es `False`, se utiliza la matriz de transición de un solo paso `t-1`->`t`. Si cumulative es `True`, se utiliza la matriz de transición acumulada `0`->`t`.
**Devuelve:** `torch.Tensor`
Cada _columna_ de la matriz devuelta es una _fila_ de probabilidades logarítmicas de la matriz completa de transición de probabilidades. El tensor tiene forma `(batch size, num classes - 1, num latent pixels)` cuando `cumulative` es `True` y forma `(batch size, num classes, num latent pixels)` en caso contrario.
Cuando es acumulativo, el tensor tiene una fila menos porque el píxel latente inicial no puede enmascararse.
Donde:
- `q_n` es la distribución de probabilidad del proceso hacia adelante del píxel latente de la `n`ª posición.
- C_0 es una clase de un incrustado latente de píxeles
- C_k es la clase del píxel latente enmascarado
resultado no acumulativo (omitiendo los logaritmos):
```
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)
```
resultado acumulado (omitiendo los logaritmos):
```
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})
```
Calcula las probabilidades logarítmicas de las filas de la matriz de transición (acumulativa o no acumulativa) para cada píxel latente en `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])
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L281)
**Parámetros:**
log_p_x_0 (`torch.Tensor` de forma `(batch size, num classes - 1, num latent pixels)`) : Las probabilidades logarítmicas para las clases predichas de los píxeles latentes iniciales. No incluye una predicción para la clase enmascarada, ya que la imagen inicial sin ruido no puede enmascararse.
x_t (`torch.LongTensor` de forma `(batch size, num latent pixels)`) : Las clases de cada píxel latente en el tiempo `t`.
t (`int` o `torch.Tensor`) : El paso de tiempo que determina qué matriz de transición se utiliza.
**Devuelve:** `torch.Tensor` de forma `(batch size, num classes, num latent pixels)`
Las probabilidades de registro para las clases predichas de la imagen en el paso de tiempo `t-1`.
Calcula las probabilidades logarítmicas para las clases predichas de la imagen en el paso de tiempo `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)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L214)
**Parámetros:**
num_inference_steps (`int`) : El número de pasos de difusión utilizados al generar muestras con un modelo preentrenado.
device (`str` o `torch.device`, *opcional*) : El dispositivo al que deben moverse los pasos de tiempo y los parámetros del proceso de difusión (alpha, beta, gamma).
Establece los pasos discretos utilizados para la cadena de difusión (para ejecutarse antes de la inferencia).
#### paso[[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)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L236)
**Parámetros:**
model_output (`torch.Tensor` de forma `(batch size, num classes - 1, num latent pixels)`) : Las probabilidades logarítmicas para las clases predichas de los píxeles latentes iniciales. No incluye una predicción para la clase enmascarada, ya que la imagen inicial sin ruido no puede enmascararse.
timestep (`int` o `torch.Tensor`) : El paso de tiempo que determina qué matrices de transición se utilizan.
sample (`torch.LongTensor` de forma `(batch size, num latent pixels)`) : Las clases de cada píxel latente en el paso de tiempo actual.
generator (`torch.Generator`, *opcional*) : Un generador de números aleatorios para el ruido aplicado a `p(x_{t-1} | x_t)` antes de que se muestree de él.
return_dict (`bool`, por defecto `True`) : Si se devuelve un [VQDiffusionSchedulerOutput](/docs/diffusers/main/es/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) o un `tuple`.
**Devuelve:** [VQDiffusionSchedulerOutput](/docs/diffusers/main/es/api/schedulers/vq_diffusion#diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput) o `tuple[torch.LongTensor]`
If return_dict is `True`, [VQDiffusionSchedulerOutput](/docs/diffusers/main/es/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.
Predice la muestra del paso de tiempo anterior mediante la distribución de transición inversa. Consulta [q_posterior()](/docs/diffusers/main/es/api/schedulers/vq_diffusion#diffusers.VQDiffusionScheduler.q_posterior) para más detalles sobre cómo se calcula la distribución.
## 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)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_vq_diffusion.py#L27)
**Parámetros:**
prev_sample (`torch.LongTensor` de forma `(batch size, num latent pixels)`) : La muestra calculada en el paso de tiempo anterior. `prev_sample` debe usarse como la siguiente entrada del modelo en el bucle de desruido.
Clase de salida para la función de paso del programador.

Xet Storage Details

Size:
12 kB
·
Xet hash:
3d80a2681be0fe5233d403db178da85ee15544acbda323c9e19aa76cfbad53df

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