Diffusers documentation
EasyAnimate
EasyAnimate
EasyAnimate d'Alibaba PAI.
La description issue de sa page GitHub : EasyAnimate est un pipeline basé sur l’architecture transformer, conçu pour générer des images et des vidéos par IA, ainsi que pour entraîner des modèles de référence et des modèles Lora pour Diffusion Transformer. Nous prenons en charge la prédiction directe à partir de modèles EasyAnimate pré-entraînés, permettant la génération de vidéos de diverses résolutions, d’une durée d’environ 6 secondes, à 8 fps (EasyAnimateV5.1, de 1 à 49 images). De plus, les utilisateurs peuvent entraîner leurs propres modèles de référence et Lora pour des transformations de style spécifiques.
Ce pipeline a été contribué par bubbliiiing. La base de code originale peut être trouvée ici. Les poids originaux sont disponibles sous hf.co/alibaba-pai.
Il existe deux points de contrôle officiels EasyAnimate pour la génération de vidéo à partir de texte et la transformation de vidéo en vidéo.
| checkpoints | dtype d'inférence recommandé |
|---|---|
alibaba-pai/EasyAnimateV5.1-12b-zh | torch.float16 |
alibaba-pai/EasyAnimateV5.1-12b-zh-InP | torch.float16 |
Un seul checkpoint officiel EasyAnimate est disponible pour l'image-vers-vidéo et la vidéo-vers-vidéo.
| checkpoints | dtype d'inférence recommandé |
|---|---|
alibaba-pai/EasyAnimateV5.1-12b-zh-InP | torch.float16 |
Deux points de contrôle officiels EasyAnimate sont disponibles pour le contrôle vers vidéo.
| checkpoints | dtype d'inférence recommandé |
|---|---|
alibaba-pai/EasyAnimateV5.1-12b-zh-Control | torch.float16 |
alibaba-pai/EasyAnimateV5.1-12b-zh-Control-Camera | torch.float16 |
Pour la série EasyAnimateV5.1 :
- Le texte-vers-vidéo (T2V) et l'image-vers-vidéo (I2V) fonctionnent à plusieurs résolutions. La largeur et la hauteur peuvent varier de 256 à 1024.
- Les modèles T2V et I2V prennent en charge la génération avec 1 à 49 images et fonctionnent de manière optimale à cette valeur. L’exportation des vidéos à 8 FPS est recommandée.
Quantification
La quantification aide à réduire les besoins en mémoire des très grands modèles en stockant les poids du modèle dans un type de données de précision inférieure. Cependant, la quantification peut avoir un impact variable sur la qualité de la vidéo selon le modèle vidéo.
Reportez-vous à l’aperçu de la Quantization pour en savoir plus sur les backends de quantification pris en charge et sur la sélection d’un backend de quantification adapté à votre cas d’usage. L’exemple ci-dessous montre comment charger un EasyAnimatePipeline quantifié pour l’inférence avec bitsandbytes.
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
classe diffusers.EasyAnimatePipeline
< source >( vae: AutoencoderKLMagvittext_encoder: transformers.models.qwen2_vl.modeling_qwen2_vl.Qwen2VLForConditionalGeneration | transformers.models.bert.modeling_bert.BertModeltokenizer: transformers.models.qwen2.tokenization_qwen2.Qwen2Tokenizer | transformers.models.bert.tokenization_bert.BertTokenizertransformer: EasyAnimateTransformer3DModelscheduler: FlowMatchEulerDiscreteScheduler )
Paramètres
- vae (AutoencoderKLMagvit) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
- text_encoder (
~transformers.Qwen2VLForConditionalGeneration,~transformers.BertModel| None) — EasyAnimate utilise qwen2 vl dans la V5.1. - tokenizer (
~transformers.Qwen2Tokenizer,~transformers.BertTokenizer| None) — UnQwen2TokenizerouBertTokenizerpour tokeniser le texte. - transformer (EasyAnimateTransformer3DModel) — Le modèle EasyAnimate conçu par l'équipe EasyAnimate.
- scheduler (FlowMatchEulerDiscreteScheduler) — Un planificateur à utiliser en combinaison avec EasyAnimate pour débruyer les latents d'image encodés.
Pipeline pour la génération de texte vers vidéo utilisant EasyAnimate.
Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les pipelines (tels que le téléchargement ou l'enregistrement, l'exécution sur un appareil particulier, etc.)
EasyAnimate utilise un seul encodeur de texte qwen2 vl dans la V5.1.
__call__
< source >( prompt: str | list[str] = Nonenum_frames: int | None = 49height: int | None = 512width: int | None = 512num_inference_steps: int | None = 50guidance_scale: float | None = 5.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonetimesteps: list[int] | None = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']guidance_rescale: float = 0.0 ) → StableDiffusionPipelineOutput or tuple
Paramètres
- prompt (
stroulist[str], facultatif) — Prompts textuels pour guider la génération d’image ou de vidéo. S’il n’est pas fourni, utilisezprompt_embedsà la place. - num_frames (
int, facultatif) — Longueur de la vidéo générée (en images). - height (
int, facultatif) — Hauteur de l'image générée en pixels. - width (
int, facultatif) — Largeur de l'image générée en pixels. - num_inference_steps (
int, facultatif, valeur par défaut 50) — Nombre d'étapes de débruitage lors de la génération. Un nombre plus élevé d'étapes produit généralement des images de meilleure qualité, mais ralentit l'inférence. - guidance_scale (
float, facultatif, valeur par défaut 5.0) — Encourage le modèle à aligner les sorties sur les prompts. Une valeur plus élevée peut diminuer la qualité de l'image. - negative_prompt (
stroulist[str], facultatif) — Prompts indiquant ce qu'il faut exclure de la génération. Si non spécifié, utiliseznegative_prompt_embeds. - num_images_per_prompt (
int, facultatif, valeur par défaut 1) — Nombre d'images à générer pour chaque invite. - eta (
float, facultatif, valeur par défaut 0.0) — S'applique à la planification DDIM. Contrôlé par le paramètre eta de la littérature associée. - generator (
torch.Generatoroulist[torch.Generator], facultatif) — Un générateur pour garantir la reproductibilité dans la génération d'images. - latents (
torch.Tensor, optional) — Predefined latent tensors to condition generation. - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pour les prompts. Remplace les entrées de chaînes de caractères des prompts pour plus de flexibilité. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings pour les prompts négatifs. Remplace les entrées de type chaîne si défini. - prompt_attention_mask (
torch.Tensor, facultatif) — Masque d'attention pour les embeddings du prompt principal. - negative_prompt_attention_mask (
torch.Tensor, facultatif) — Masque d'attention pour les embeddings du prompt négatif. - output_type (
str, facultatif, par défaut “latent”) — Format de la sortie générée, soit sous forme d’image PIL, soit sous forme de tableau NumPy. - return_dict (
bool, facultatif, par défautTrue) — SiTrue, renvoie une sortie structurée. Sinon, renvoie un simple tuple. - callback_on_step_end (
Callable, facultatif) — Fonctions appelées à la fin de chaque étape de débruitage. - callback_on_step_end_tensor_inputs (
list[str], facultatif) — Noms des tenseurs à inclure dans les appels de la fonction de rappel. - guidance_rescale (
float, facultatif, valeur par défaut 0.0) — Ajuste les niveaux de bruit en fonction de l'échelle de guidage. - timesteps (
list[int], facultatif) — Timesteps personnalisés à utiliser pour le processus de débruitage. S'ils ne sont pas définis, l'agenda par défaut du planificateur pournum_inference_stepsest utilisé.
Retourne
StableDiffusionPipelineOutput ou tuple
Si return_dict est True, StableDiffusionPipelineOutput est renvoyé,
sinon un tuple est renvoyé dont le premier élément est une liste des images générées et le
deuxième élément est une liste de bool indiquant si l’image générée correspondante contient
du contenu « not-safe-for-work » (nsfw).
Génère des images ou des vidéos à l'aide du pipeline EasyAnimate sur la base des prompts fournis.
Exemples :
>>> 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
< source >( prompt: str | list[str]num_images_per_prompt: int = 1do_classifier_free_guidance: bool = Truenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonedevice: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = Nonemax_sequence_length: int = 256 )
Paramètres
- prompt (
stroulist[str], facultatif) — prompt à encoder - device — (
torch.device) : torch device - dtype (
torch.dtype) — dtype torch - num_images_per_prompt (
int) — nombre d'images à générer par invite - do_classifier_free_guidance (
bool) — indique s'il faut utiliser le classifier free guidance ou non - negative_prompt (
stroulist[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest inférieur à1). - prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entréeprompt. - negative_prompt_embeds (
torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entréenegative_prompt. - prompt_attention_mask (
torch.Tensor, facultatif) — Masque d'attention pour le prompt. Requis lorsqueprompt_embedsest passé directement. - negative_prompt_attention_mask (
torch.Tensor, facultatif) — Masque d'attention pour le prompt négatif. Requis lorsquenegative_prompt_embedsest passé directement. - max_sequence_length (
int, facultatif) — longueur maximale de séquence à utiliser pour le prompt.
Encode le prompt dans les états cachés de l'encodeur de texte.
EasyAnimatePipelineOutput
classe diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput
< source >( frames: Tensor )
Paramètres
- frames (
torch.Tensor,np.ndarrayou list[list[PIL.Image.Image]]) — liste des sorties vidéo - Il peut s'agir d'une liste imbriquée de longueurbatch_size,où chaque sous-liste contient des séquences d'images PIL débruitées de longueurnum_frames.Il peut également s'agir d'un tableau NumPy ou d'un tenseur Torch de forme(batch_size, num_frames, channels, height, width).
Classe de sortie pour les pipelines EasyAnimate.