Diffusers documentation
EasyAnimate
EasyAnimate
EasyAnimate от Alibaba PAI.
Описание с его страницы на GitHub: EasyAnimate — это конвейер, основанный на архитектуре трансформера, предназначенный для генерации изображений и видео с помощью ИИ, а также для обучения базовых моделей и моделей Lora для Diffusion Transformer. Мы поддерживаем прямое предсказание с использованием предварительно обученных моделей EasyAnimate, что позволяет генерировать видео с различными разрешениями, продолжительностью около 6 секунд, при частоте 8 кадров в секунду (EasyAnimateV5.1, от 1 до 49 кадров). Кроме того, пользователи могут обучать собственные базовые и Lora-модели для конкретных стилевых трансформаций.
Этот конвейер был предложен пользователем bubbliiiing. Исходная кодовая база доступна здесь. Исходные веса можно найти по адресу hf.co/alibaba-pai.
Существуют две официальные контрольные точки EasyAnimate для генерации видео по тексту и преобразования видео в видео.
| чекпоинты | рекомендуемый тип данных для вывода |
|---|---|
alibaba-pai/EasyAnimateV5.1-12b-zh | torch.float16 |
alibaba-pai/EasyAnimateV5.1-12b-zh-InP | torch.float16 |
Доступна одна официальная контрольная точка EasyAnimate для задач изображения в видео и видео в видео.
| чекпоинты | рекомендуемый тип данных для вывода |
|---|---|
alibaba-pai/EasyAnimateV5.1-12b-zh-InP | torch.float16 |
Доступны две официальные контрольные точки EasyAnimate для управления генерацией видео.
| чекпоинты | рекомендуемый тип данных для вывода |
|---|---|
alibaba-pai/EasyAnimateV5.1-12b-zh-Control | torch.float16 |
alibaba-pai/EasyAnimateV5.1-12b-zh-Control-Camera | torch.float16 |
Для серии EasyAnimateV5.1:
- Text-to-video (T2V) and Image-to-video (I2V) works for multiple resolutions. The width and height can vary from 256 to 1024.
- Модели T2V и I2V поддерживают генерацию с 1~49 кадрами и работают лучше всего при этом значении. Рекомендуется экспортировать видео со скоростью 8 FPS.
Квантование
Квантование помогает снизить требования к памяти для очень больших моделей, храня веса модели в формате данных с меньшей точностью. Однако влияние квантования на качество видео может различаться в зависимости от используемой модели видео.
См. обзор Quantization, чтобы узнать больше о поддерживаемых бэкендах квантования и о том, как выбрать бэкенд, подходящий для вашей задачи. Пример ниже показывает, как загрузить квантованный EasyAnimatePipeline для инференса с помощью 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
класс 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 )
Параметры
- vae (AutoencoderKLMagvit) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
- text_encoder (
~transformers.Qwen2VLForConditionalGeneration,~transformers.BertModel| None) — EasyAnimate использует qwen2 vl в V5.1. - tokenizer (
~transformers.Qwen2Tokenizer,~transformers.BertTokenizer| None) —Qwen2TokenizerилиBertTokenizerдля токенизации текста. - transformer (EasyAnimateTransformer3DModel) — Модель EasyAnimate, разработанная командой EasyAnimate.
- scheduler (FlowMatchEulerDiscreteScheduler) — планировщик, используемый в связке с EasyAnimate для удаления шума из закодированных латентов изображения.
Pipeline для генерации видео из текста с использованием EasyAnimate.
Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
EasyAnimate использует один текстовый энкодер qwen2 vl в 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 = ['latents']guidance_rescale: float = 0.0 ) → StableDiffusionPipelineOutput or tuple
Параметры
- prompt (
strилиlist[str], необязательный) — Текстовые промпты для управления генерацией изображения или видео. Если не указаны, используйте вместо нихprompt_embeds. - num_frames (
int, необязательный) — Длина сгенерированного видео (в кадрах). - height (
int, необязательный) — Высота генерируемого изображения в пикселях. - width (
int, необязательный) — Ширина генерируемого изображения в пикселях. - num_inference_steps (
int, необязательный, по умолчанию 50) — Количество шагов денойзинга при генерации. Чем больше шагов, тем, как правило, выше качество изображений, но тем медленнее выполняется инференс. - guidance_scale (
float, необязательный, по умолчанию 5.0) — Побуждает модель согласовывать выходные данные с промптами. Более высокое значение может снизить качество изображения. - negative_prompt (
strилиlist[str], необязательный) — Промпты, указывающие, что следует исключить при генерации. Если не задано, используетсяnegative_prompt_embeds. - num_images_per_prompt (
int, необязательный, по умолчанию 1) — Количество изображений, генерируемых для каждого промпта. - eta (
float, необязательный, по умолчанию 0.0) — Применяется к расписанию DDIM. Управляется параметром eta из соответствующей литературы. - generator (
torch.Generatorилиlist[torch.Generator], необязательный) — Генератор для обеспечения воспроизводимости при генерации изображений. - latents (
torch.Tensor, необязательный) — Предопределённые тензоры латентного пространства для управления генерацией. - prompt_embeds (
torch.Tensor, необязательный) — Векторные представления текста для промптов. Переопределяет строковые входные данные промптов для большей гибкости. - negative_prompt_embeds (
torch.Tensor, необязательный) — Векторы вложений для отрицательных промптов. Если заданы, заменяют строковые входные данные. - prompt_attention_mask (
torch.Tensor, необязательный) — Маска внимания для основных эмбеддингов промпта. - negative_prompt_attention_mask (
torch.Tensor, необязательный) — Маска внимания для эмбеддингов отрицательного промпта. - output_type (
str, необязательный, по умолчанию “latent”) — Формат генерируемого вывода: изображение PIL или массив NumPy. - return_dict (
bool, необязательный, по умолчаниюTrue) — ЕслиTrue, возвращает структурированный вывод. В противном случае возвращает простой кортеж. - callback_on_step_end (
Callable, необязательный) — Функции, вызываемые в конце каждого шага денойзинга. - callback_on_step_end_tensor_inputs (
list[str], необязательный) — Имена тензоров, которые должны включаться в вызовы функции обратного вызова. - guidance_rescale (
float, необязательный, по умолчанию 0.0) — Корректирует уровни шума на основе масштаба руководства. - timesteps (
list[int], необязательный) — Пользовательские timesteps для процесса денойзинга. Если не заданы, используется расписание по умолчанию планировщика дляnum_inference_steps.
Возвращает
StableDiffusionPipelineOutput или tuple
Если return_dict равно True, возвращается StableDiffusionPipelineOutput,
в противном случае возвращается tuple, где первый элемент — это список с сгенерированными изображениями, а
второй элемент — это список значений bool, указывающих, содержит ли соответствующее сгенерированное изображение
контент, нежелательный для работы (nsfw).
Генерирует изображения или видео с использованием конвейера EasyAnimate на основе предоставленных промптов.
Примеры:
>>> 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 )
Параметры
- prompt (
strилиlist[str], необязательный) — промпт для кодирования - device — (
torch.device): устройство torch - dtype (
torch.dtype) — torch dtype - num_images_per_prompt (
int) — количество изображений, которые должны быть сгенерированы для каждого промпта - do_classifier_free_guidance (
bool) — использовать ли classifier free guidance - negative_prompt (
strorlist[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передатьnegative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, еслиguidance_scaleменьше1). - prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргументаprompt. - negative_prompt_embeds (
torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргументаnegative_prompt. - prompt_attention_mask (
torch.Tensor, необязательный) — Маска внимания для промпта. Обязателен, еслиprompt_embedsпередается напрямую. - negative_prompt_attention_mask (
torch.Tensor, необязательный) — Маска внимания для негативного промпта. Обязателен, еслиnegative_prompt_embedsпередается напрямую. - max_sequence_length (
int, необязательный) — максимальная длина последовательности, используемая для промпта.
Кодирует промпт в скрытые состояния текстового энкодера.
EasyAnimatePipelineOutput
класс diffusers.pipelines.easyanimate.pipeline_output.EasyAnimatePipelineOutput
< source >( frames: Tensor )
Параметры
- frames (
torch.Tensor,np.ndarrayили list[list[PIL.Image.Image]]) — список видеовыходов. Может быть вложенным списком длиныbatch_size,где каждый под-список содержит последовательности денойзированных изображений PIL длиныnum_frames.Также может быть массивом NumPy или тензором Torch с формой(batch_size, num_frames, channels, height, width).
Класс вывода для конвейеров EasyAnimate.