Buckets:

hf-doc-build/doc / diffusers /main /es /api /pipelines /consistency_models.md
mishig's picture
|
download
raw
9.04 kB
# Modelos de consistencia
Los Consistency Models fueron propuestos en [Consistency Models](https://huggingface.co/papers/2303.01469) por Yang Song, Prafulla Dhariwal, Mark Chen e Ilya Sutskever.
El resumen del artículo es:
*Los modelos de difusión han avanzado significativamente en los campos de generación de imágenes, audio y vídeo, pero dependen de un proceso de muestreo iterativo que provoca una generación lenta. Para superar esta limitación, proponemos los modelos de consistencia, una nueva familia de modelos que generan muestras de alta calidad mapeando directamente el ruido a los datos. Por diseño, admiten una generación rápida en un solo paso, al tiempo que permiten el muestreo multipaso para intercambiar cómputo por calidad de muestra. También admiten la edición de datos sin ejemplos (zero-shot), como el relleno de imágenes (inpainting), la colorización y la superresolución, sin necesidad de entrenamiento explícito en estas tareas. Los modelos de consistencia se pueden entrenar ya sea destilando modelos de difusión preentrenados, o como modelos generativos independientes. A través de experimentos extensos, demostramos que superan a las técnicas de destilación existentes para modelos de difusión en el muestreo de uno y pocos pasos, logrando el nuevo estado del arte en FID de 3.55 en CIFAR-10 y 6.20 en ImageNet 64x64 para la generación en un solo paso. Cuando se entrenan de forma aislada, los modelos de consistencia se convierten en una nueva familia de modelos generativos que pueden superar a los modelos generativos existentes de un solo paso y no adversariales en benchmarks estándar como CIFAR-10, ImageNet 64x64 y LSUN 256x256.*
El código original se puede encontrar en [openai/consistency_models](https://github.com/openai/consistency_models), y hay puntos de control adicionales disponibles en [openai](https://huggingface.co/openai).
El pipeline fue aportado por [dg845](https://github.com/dg845) y [ayushtues](https://huggingface.co/ayushtues). ❤️
## Consejos
Para una aceleración adicional, use `torch.compile` para generar varias imágenes en <1 segundo:
```diff
import torch
from diffusers import ConsistencyModelPipeline
device = "cuda" # or "mps", "xpu", "cpu"
# Load the cd_bedroom256_lpips checkpoint.
model_id_or_path = "openai/diffusers-cd_bedroom256_lpips"
pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, dtype=torch.float16)
pipe.to(device)
+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
# Multistep sampling
# Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
# https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L83
for _ in range(10):
image = pipe(timesteps=[17, 0]).images[0]
image.show()
```
## ConsistencyModelPipeline[[diffusers.ConsistencyModelPipeline]]
#### diffusers.ConsistencyModelPipeline[[diffusers.ConsistencyModelPipeline]]
```python
diffusers.ConsistencyModelPipeline(unet: UNet2DModel, scheduler: CMStochasticIterativeScheduler)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/consistency_models/pipeline_consistency_models.py#L67)
**Parámetros:**
unet ([UNet2DModel](/docs/diffusers/main/es/api/models/unet2d#diffusers.UNet2DModel)) : Un `UNet2DModel` para desruidar los latentes de imagen codificados.
scheduler ([SchedulerMixin](/docs/diffusers/main/es/api/schedulers/overview#diffusers.SchedulerMixin)) : Un programador para usar en combinación con `unet` para desruidar los latentes de la imagen codificada. Actualmente solo es compatible con [CMStochasticIterativeScheduler](/docs/diffusers/main/es/api/schedulers/cm_stochastic_iterative#diffusers.CMStochasticIterativeScheduler).
Pipeline para la generación de imágenes incondicional o condicional por clase.
Este modelo hereda de [DiffusionPipeline](/docs/diffusers/main/es/api/pipelines/overview#diffusers.DiffusionPipeline). Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, etc.).
#### __call__[[diffusers.ConsistencyModelPipeline.__call__]]
```python
__call__(batch_size: int = 1, class_labels: typing.Union[torch.Tensor, list[int], int, NoneType] = None, num_inference_steps: int = 1, timesteps: list[int] = None, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = None, callback_steps: int = 1)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/consistency_models/pipeline_consistency_models.py#L171)
**Parámetros:**
batch_size (`int`, *opcional*, valor predeterminado 1) : El número de imágenes a generar.
class_labels (`torch.Tensor` o `list[int]` o `int`, *opcional*) : Etiquetas de clase opcionales para condicionar modelos de consistencia condicional por clase. No se utilizan si el modelo no es condicional por clase.
num_inference_steps (`int`, *opcional*, valor predeterminado 1) : El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
timesteps (`list[int]`, *opcional*) : Pasos de tiempo personalizados para usar en el proceso de desruido. Si no se definen, se utilizan pasos de tiempo `num_inference_steps` equiespaciados. Deben estar en orden descendente.
generator (`torch.Generator`, *opcional*) : Un [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) para hacer que la generación sea determinista.
latents (`torch.Tensor`, *opcional*) : Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el `generator` aleatorio suministrado.
output_type (`str`, *opcional*, por defecto `"pil"`) : El formato de salida de la imagen generada. Elija entre `PIL.Image` o `np.array`.
return_dict (`bool`, *opcional*, por defecto `True`) : Si se debe devolver un [ImagePipelineOutput](/docs/diffusers/main/es/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) en lugar de una tupla simple.
callback (`Callable`, *opcional*) : Una función que se llama cada `callback_steps` pasos durante la inferencia. La función se llama con los siguientes argumentos: `callback(step: int, timestep: int, latents: torch.Tensor)`.
callback_steps (`int`, *opcional*, valor predeterminado 1) : La frecuencia con la que se llama a la función `callback`. Si no se especifica, la callback se llama en cada paso.
**Devuelve:** [ImagePipelineOutput](/docs/diffusers/main/es/api/pipelines/consistency_models#diffusers.ImagePipelineOutput) o `tuple`
Si `return_dict` es `True`, se devuelve [ImagePipelineOutput](/docs/diffusers/main/es/api/pipelines/consistency_models#diffusers.ImagePipelineOutput); en caso contrario, se devuelve una `tuple` cuyo primer elemento es una lista con las imágenes generadas.
Ejemplos:
```py
>>> import torch
>>> from diffusers import ConsistencyModelPipeline
>>> device = "cuda"
>>> # Load the cd_imagenet64_l2 checkpoint.
>>> model_id_or_path = "openai/diffusers-cd_imagenet64_l2"
>>> pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
>>> pipe.to(device)
>>> # Onestep Sampling
>>> image = pipe(num_inference_steps=1).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample.png")
>>> # Onestep sampling, class-conditional image generation
>>> # ImageNet-64 class label 145 corresponds to king penguins
>>> image = pipe(num_inference_steps=1, class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample_penguin.png")
>>> # Multistep sampling, class-conditional image generation
>>> # Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
>>> # https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L77
>>> image = pipe(num_inference_steps=None, timesteps=[22, 0], class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_multistep_sample_penguin.png")
```
## ImagePipelineOutput[[diffusers.ImagePipelineOutput]]
#### diffusers.ImagePipelineOutput[[diffusers.ImagePipelineOutput]]
```python
diffusers.ImagePipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/pipeline_utils.py#L135)
**Parámetros:**
images (`List[PIL.Image.Image]` o `np.ndarray`) : Lista de imágenes PIL desruidas de longitud `batch_size` o matriz NumPy de forma `(batch_size, height, width, num_channels)`.
Clase de salida para pipelines de imágenes.

Xet Storage Details

Size:
9.04 kB
·
Xet hash:
5ba0ed3043241255d2472dec5ec9637209c35b7e0bba6119d723831bbb689e95

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