Buckets:

mishig's picture
|
download
raw
16.4 kB
#
# Bajo licencia Apache License, versión 2.0 (la "Licencia");
# no puede usar este archivo excepto en cumplimiento de la Licencia.
# Puede obtener una copia de la Licencia en
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# A menos que la ley aplicable lo exija o se haya acordado por escrito, el software
# distribuido bajo la Licencia se distribuye en una base "TAL CUAL",
# SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita.
# Consulte la Licencia para el lenguaje específico que rige los permisos y
# limitaciones de la Licencia.
-->
# EasyAnimate
[EasyAnimate](https://github.com/aigc-apps/EasyAnimate) de Alibaba PAI.
La descripción de su página de GitHub: *EasyAnimate es un pipeline basado en la arquitectura transformer, diseñado para generar imágenes y videos con IA, y para entrenar modelos de referencia y modelos Lora para Diffusion Transformer. Admitimos la predicción directa desde modelos EasyAnimate preentrenados, lo que permite generar videos con diversas resoluciones, de aproximadamente 6 segundos de duración, a 8 fps (EasyAnimateV5.1, de 1 a 49 fotogramas). Además, los usuarios pueden entrenar sus propios modelos de referencia y Lora para transformaciones de estilo específicas.*
Este pipeline fue aportado por [bubbliiiing](https://github.com/bubbliiiing). La base de código original se puede encontrar [aquí](https://huggingface.co/alibaba-pai). Los pesos originales se pueden encontrar en [hf.co/alibaba-pai](https://huggingface.co/alibaba-pai).
Hay dos puntos de control oficiales de EasyAnimate para texto a video y video a video.
| puntos de control | dtype de inferencia recomendado |
|:---:|:---:|
| [`alibaba-pai/EasyAnimateV5.1-12b-zh`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh) | torch.float16 |
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-InP`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-InP) | torch.float16 |
Hay un checkpoint oficial de EasyAnimate disponible para image-to-video y video-to-video.
| puntos de control | dtype de inferencia recomendado |
|:---:|:---:|
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-InP`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-InP) | torch.float16 |
Hay dos puntos de control oficiales de EasyAnimate disponibles para control-to-video.
| puntos de control | dtype de inferencia recomendado |
|:---:|:---:|
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-Control`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-Control) | torch.float16 |
| [`alibaba-pai/EasyAnimateV5.1-12b-zh-Control-Camera`](https://huggingface.co/alibaba-pai/EasyAnimateV5.1-12b-zh-Control-Camera) | torch.float16 |
Para la serie EasyAnimateV5.1:
- El texto a video (T2V) y la imagen a video (I2V) funcionan con múltiples resoluciones. El ancho y la altura pueden variar de 256 a 1024.
- Los modelos T2V e I2V admiten la generación con 1~49 fotogramas y funcionan mejor con este valor. Se recomienda exportar los videos a 8 FPS.
## Cuantización
La cuantización ayuda a reducir los requisitos de memoria de los modelos muy grandes almacenando los pesos del modelo en un tipo de datos de menor precisión. Sin embargo, la cuantización puede tener un impacto variable en la calidad del vídeo dependiendo del modelo de vídeo.
Consulte el resumen de [Quantization](../../quantization/overview) para obtener más información sobre los backends de cuantización admitidos y sobre cómo seleccionar un backend de cuantización que admita su caso de uso. El siguiente ejemplo muestra cómo cargar un [EasyAnimatePipeline](/docs/diffusers/main/es/api/pipelines/easyanimate#diffusers.EasyAnimatePipeline) cuantizado para inferencia con bitsandbytes.
```py
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, EasyAnimateTransformer3DModel, EasyAnimatePipeline
from diffusers.utils import export_to_video
quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = EasyAnimateTransformer3DModel.from_pretrained(
"alibaba-pai/EasyAnimateV5.1-12b-zh",
subfolder="transformer",
quantization_config=quant_config,
dtype=torch.float16,
)
pipeline = EasyAnimatePipeline.from_pretrained(
"alibaba-pai/EasyAnimateV5.1-12b-zh",
transformer=transformer_8bit,
dtype=torch.float16,
device_map="balanced",
)
prompt = "A cat walks on the grass, realistic style."
negative_prompt = "bad detailed"
video = pipeline(prompt=prompt, negative_prompt=negative_prompt, num_frames=49, num_inference_steps=30).frames[0]
export_to_video(video, "cat.mp4", fps=8)
```
## EasyAnimatePipeline[[diffusers.EasyAnimatePipeline]]
#### diffusers.EasyAnimatePipeline[[diffusers.EasyAnimatePipeline]]
```python
diffusers.EasyAnimatePipeline(vae: AutoencoderKLMagvit, text_encoder: transformers.models.qwen2_vl.modeling_qwen2_vl.Qwen2VLForConditionalGeneration | transformers.models.bert.modeling_bert.BertModel, tokenizer: transformers.models.qwen2.tokenization_qwen2.Qwen2Tokenizer | transformers.models.bert.tokenization_bert.BertTokenizer, transformer: EasyAnimateTransformer3DModel, scheduler: FlowMatchEulerDiscreteScheduler)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/easyanimate/pipeline_easyanimate.py#L186)
**Parámetros:**
vae ([AutoencoderKLMagvit](/docs/diffusers/main/es/api/models/autoencoderkl_magvit#diffusers.AutoencoderKLMagvit)) : Modelo de Autoencoder Variacional (VAE) para codificar y decodificar video hacia y desde representaciones latentes.
text_encoder (`~transformers.Qwen2VLForConditionalGeneration`, `~transformers.BertModel` | None) : EasyAnimate usa [qwen2 vl](https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct) en V5.1.
tokenizer (`~transformers.Qwen2Tokenizer`, `~transformers.BertTokenizer` | None) : Un `Qwen2Tokenizer` o `BertTokenizer` para tokenizar el texto.
transformer ([EasyAnimateTransformer3DModel](/docs/diffusers/main/es/api/models/easyanimate_transformer3d#diffusers.EasyAnimateTransformer3DModel)) : El modelo EasyAnimate diseñado por EasyAnimate Team.
scheduler ([FlowMatchEulerDiscreteScheduler](/docs/diffusers/main/es/api/schedulers/flow_match_euler_discrete#diffusers.FlowMatchEulerDiscreteScheduler)) : Un programador para usar en combinación con EasyAnimate para desruidar los latentes de imagen codificados.
Pipeline para la generación de texto a video usando EasyAnimate.
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 que la biblioteca implementa para todos los pipelines (como la descarga o el guardado, la ejecución en un dispositivo específico, etc.)
EasyAnimate utiliza un codificador de texto [qwen2 vl](https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct) en V5.1.
#### __call__[[diffusers.EasyAnimatePipeline.__call__]]
```python
__call__(prompt: str | list[str] = None, num_frames: int | None = 49, height: int | None = 512, width: int | None = 512, num_inference_steps: int | None = 50, guidance_scale: float | None = 5.0, negative_prompt: str | list[str] | None = None, num_images_per_prompt: int | None = 1, eta: float | None = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, timesteps: list[int] | None = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, output_type: str | None = 'pil', return_dict: bool = True, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], guidance_rescale: float = 0.0)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/easyanimate/pipeline_easyanimate.py#L524)
**Parámetros:**
prompt (`str` o `list[str]`, *opcional*) : Prompts de texto para guiar la generación de la imagen o el vídeo. Si no se proporciona, use `prompt_embeds` en su lugar.
num_frames (`int`, *opcional*) : Longitud del video generado (en fotogramas).
height (`int`, *opcional*) : Altura de la imagen generada en píxeles.
width (`int`, *opcional*) : Ancho de la imagen generada en píxeles.
num_inference_steps (`int`, *opcional*, valor predeterminado 50) : Número de pasos de desruido durante la generación. Más pasos generalmente producen imágenes de mayor calidad, pero ralentizan la inferencia.
guidance_scale (`float`, *opcional*, valor predeterminado 5.0) : Anima al modelo a alinear las salidas con los prompts. Un valor más alto puede disminuir la calidad de la imagen.
negative_prompt (`str` o `list[str]`, *opcional*) : Prompts que indican qué excluir en la generación. Si no se especifica, se usa `negative_prompt_embeds`.
num_images_per_prompt (`int`, *opcional*, valor predeterminado 1) : Número de imágenes a generar para cada prompt.
eta (`float`, *opcional*, valor predeterminado 0.0) : Se aplica a la programación DDIM. Controlado por el parámetro eta de la literatura relacionada.
generator (`torch.Generator` o `list[torch.Generator]`, *opcional*) : Un generador para garantizar la reproducibilidad en la generación de imágenes.
latents (`torch.Tensor`, *opcional*) : Tensores latentes predefinidos para condicionar la generación.
prompt_embeds (`torch.Tensor`, *opcional*) : Incrustaciones de texto para los prompts. Anula las entradas de cadena de prompt para mayor flexibilidad.
negative_prompt_embeds (`torch.Tensor`, *opcional*) : Incrustaciones para los prompts negativos. Anula las entradas de cadena si está definido.
prompt_attention_mask (`torch.Tensor`, *opcional*) : Máscara de atención para las incrustaciones del prompt principal.
negative_prompt_attention_mask (`torch.Tensor`, *opcional*) : Máscara de atención para los embeddings del prompt negativo.
output_type (`str`, *opcional*, valor predeterminado "latent") : Formato de la salida generada, ya sea como una imagen PIL o como un array de NumPy.
return_dict (`bool`, *opcional*, valor predeterminado `True`) : Si es `True`, devuelve una salida estructurada. En caso contrario, devuelve una tupla simple.
callback_on_step_end (`Callable`, *opcional*) : Funciones que se llaman al final de cada paso de desruido.
callback_on_step_end_tensor_inputs (`list[str]`, *opcional*) : Nombres de tensores que se incluirán en las llamadas a la función de callback.
guidance_rescale (`float`, *opcional*, valor predeterminado 0.0) : Ajusta los niveles de ruido en función de la escala de guía.
timesteps (`list[int]`, *opcional*) : Pasos de tiempo personalizados para usar en el proceso de desruido. Si no se definen, se utiliza el plan predeterminado del programador para `num_inference_steps`.
**Devuelve:** [StableDiffusionPipelineOutput](/docs/diffusers/main/es/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput) o `tuple`
Si `return_dict` es `True`, se devuelve [StableDiffusionPipelineOutput](/docs/diffusers/main/es/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput); en caso contrario, se devuelve una `tuple` cuyo primer elemento es una lista con las imágenes generadas y cuyo segundo elemento es una lista de `bool` que indica si la imagen generada correspondiente contiene contenido "not-safe-for-work" (nsfw).
Genera imágenes o video usando el pipeline EasyAnimate en función de los prompts proporcionados.
Ejemplos:
```python
>>> import torch
>>> from diffusers import EasyAnimatePipeline
>>> from diffusers.utils import export_to_video
>>> # Models: "alibaba-pai/EasyAnimateV5.1-12b-zh"
>>> pipe = EasyAnimatePipeline.from_pretrained(
... "alibaba-pai/EasyAnimateV5.1-7b-zh-diffusers", torch_dtype=torch.float16
... ).to("cuda")
>>> prompt = (
... "A panda, dressed in a small, red jacket and a tiny hat, sits on a wooden stool in a serene bamboo forest. "
... "The panda's fluffy paws strum a miniature acoustic guitar, producing soft, melodic tunes. Nearby, a few other "
... "pandas gather, watching curiously and some clapping in rhythm. Sunlight filters through the tall bamboo, "
... "casting a gentle glow on the scene. The panda's face is expressive, showing concentration and joy as it plays. "
... "The background includes a small, flowing stream and vibrant green foliage, enhancing the peaceful and magical "
... "atmosphere of this unique musical performance."
... )
>>> sample_size = (512, 512)
>>> video = pipe(
... prompt=prompt,
... guidance_scale=6,
... negative_prompt="bad detailed",
... height=sample_size[0],
... width=sample_size[1],
... num_inference_steps=50,
... ).frames[0]
>>> export_to_video(video, "output.mp4", fps=8)
```
#### encode_prompt[[diffusers.EasyAnimatePipeline.encode_prompt]]
```python
encode_prompt(prompt: str | list[str], num_images_per_prompt: int = 1, do_classifier_free_guidance: bool = True, negative_prompt: str | list[str] | None = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_attention_mask: typing.Optional[torch.Tensor] = None, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None, max_sequence_length: int = 256)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/easyanimate/pipeline_easyanimate.py#L241)
**Parámetros:**
prompt (`str` o `list[str]`, *opcional*) : prompt a codificar
device : (`torch.device`): dispositivo de torch
dtype (`torch.dtype`) : dtype de torch
num_images_per_prompt (`int`) : número de imágenes que deben generarse por prompt
do_classifier_free_guidance (`bool`) : si se debe usar o no la guía libre de clasificador
negative_prompt (`str` o `list[str]`, *opcional*) : El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar `negative_prompt_embeds` en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si `guidance_scale` es menor que `1`).
prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto pregenerados. Se pueden usar para ajustar fácilmente las entradas de texto, *p. ej.* ponderación de prompts. Si no se proporcionan, los embeddings de texto se generarán a partir del argumento de entrada `prompt`.
negative_prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto negativos pregenerados. Se pueden utilizar para ajustar fácilmente las entradas de texto, *p. ej.* el ponderado de prompts. Si no se proporcionan, negative_prompt_embeds se generará a partir del argumento de entrada `negative_prompt`.
prompt_attention_mask (`torch.Tensor`, *opcional*) : Máscara de atención para el prompt. Obligatorio cuando se pasa `prompt_embeds` directamente.
negative_prompt_attention_mask (`torch.Tensor`, *opcional*) : Máscara de atención para el prompt negativo. Obligatorio cuando se pasa `negative_prompt_embeds` directamente.
max_sequence_length (`int`, *opcional*) : longitud máxima de la secuencia a utilizar para el prompt.
Codifica el prompt en estados ocultos del codificador de texto.
## EasyAnimatePipelineOutput[[diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput]]
#### diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput[[diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput]]
```python
diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput(frames: Tensor)
```
[Fuente](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/easyanimate/pipeline_output.py#L9)
**Parámetros:**
frames (`torch.Tensor`, `np.ndarray` o list[list[PIL.Image.Image]]) : lista de salidas de video - Puede ser una lista anidada de longitud `batch_size,` donde cada sublista contiene secuencias de imágenes PIL desruidas de longitud `num_frames.` También puede ser un array de NumPy o un tensor de Torch de forma `(batch_size, num_frames, channels, height, width)`.
Clase de salida para las pipelines de EasyAnimate.

Xet Storage Details

Size:
16.4 kB
·
Xet hash:
bf179aedaef05fa76481a4419db33a3c96b077e2f2287054fc7ea8933e2a1760

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