Buckets:

mishig's picture
|
download
raw
22.3 kB
# Allegro
[Allegro: Открытие «чёрного ящика» коммерческой модели генерации видео](https://huggingface.co/papers/2410.15458) от RhymesAI, авторы: Yuan Zhou, Qiuyue Wang, Yuxuan Cai, Huan Yang.
Аннотация из статьи:
*В области генерации видео были достигнуты значительные успехи: сообщество с открытым исходным кодом внесло большой вклад в виде множества исследовательских статей и инструментов для обучения высококачественных моделей. Однако, несмотря на эти усилия, доступная информация и ресурсы по-прежнему недостаточны для достижения коммерческого уровня производительности. В этом отчёте мы раскрываем «чёрный ящик» и представляем Allegro — продвинутую модель генерации видео, которая выделяется как качеством, так и временной согласованностью. Мы также указываем на текущие ограничения в этой области и предлагаем комплексную методологию обучения высокопроизводительных моделей генерации видео коммерческого уровня, охватывающую ключевые аспекты: данные, архитектуру модели, конвейер обучения и оценку. Наше пользовательское исследование показывает, что Allegro превосходит существующие модели с открытым исходным кодом и большинство коммерческих моделей, уступая лишь Hailuo и Kling. Код: https://github.com/rhymes-ai/Allegro , Модель: https://huggingface.co/rhymes-ai/Allegro , Галерея: https://rhymes.ai/allegro_gallery .*
> [!TIP]
> Обязательно ознакомьтесь с [руководством по планировщикам](../../using-diffusers/schedulers), чтобы узнать, как исследовать баланс между скоростью и качеством планировщика, а также с разделом [повторное использование компонентов в разных конвейерах](../../using-diffusers/loading#reusing-models-in-multiple-pipelines), чтобы узнать, как эффективно загружать одни и те же компоненты в несколько конвейеров.
## Квантование
Квантование помогает снизить требования к памяти для очень больших моделей, храня веса модели в формате данных с меньшей точностью. Однако влияние квантования на качество видео может различаться в зависимости от используемой модели видео.
См. обзор [Quantization](../../quantization/overview), чтобы узнать больше о поддерживаемых бэкендах квантования и о том, как выбрать бэкенд, подходящий для вашей задачи. Пример ниже показывает, как загрузить квантованный [AllegroPipeline](/docs/diffusers/main/ru/api/pipelines/allegro#diffusers.AllegroPipeline) для инференса с помощью bitsandbytes.
```py
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, AllegroTransformer3DModel, AllegroPipeline
from diffusers.utils import export_to_video
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel
quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
"rhymes-ai/Allegro",
subfolder="text_encoder",
quantization_config=quant_config,
dtype=torch.float16,
)
quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = AllegroTransformer3DModel.from_pretrained(
"rhymes-ai/Allegro",
subfolder="transformer",
quantization_config=quant_config,
dtype=torch.float16,
)
pipeline = AllegroPipeline.from_pretrained(
"rhymes-ai/Allegro",
text_encoder=text_encoder_8bit,
transformer=transformer_8bit,
dtype=torch.float16,
device_map="balanced",
)
prompt = (
"A seaside harbor with bright sunlight and sparkling seawater, with many boats in the water. From an aerial view, "
"the boats vary in size and color, some moving and some stationary. Fishing boats in the water suggest that this "
"location might be a popular spot for docking fishing boats."
)
video = pipeline(prompt, guidance_scale=7.5, max_sequence_length=512).frames[0]
export_to_video(video, "harbor.mp4", fps=15)
```
## AllegroPipeline[[diffusers.AllegroPipeline]]
#### diffusers.AllegroPipeline[[diffusers.AllegroPipeline]]
```python
diffusers.AllegroPipeline(tokenizer: T5Tokenizer, text_encoder: T5EncoderModel, vae: AutoencoderKLAllegro, transformer: AllegroTransformer3DModel, scheduler: KarrasDiffusionSchedulers)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/allegro/pipeline_allegro.py#L144)
**Параметры:**
vae (`AllegroAutoEncoderKL3D`) : Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
text_encoder (`T5EncoderModel`) : Замороженный текстовый энкодер. PixArt-Alpha использует [T5](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5EncoderModel), а именно вариант [t5-v1_1-xxl](https://huggingface.co/PixArt-alpha/PixArt-alpha/tree/main/t5-v1_1-xxl).
tokenizer (`T5Tokenizer`) : Токенизатор класса [T5Tokenizer](https://huggingface.co/docs/transformers/model_doc/t5#transformers.T5Tokenizer).
transformer ([AllegroTransformer3DModel](/docs/diffusers/main/ru/api/models/allegro_transformer3d#diffusers.AllegroTransformer3DModel)) : модель `AllegroTransformer3DModel` с текстовым условием для удаления шума из закодированных латентных представлений видео.
scheduler ([SchedulerMixin](/docs/diffusers/main/ru/api/schedulers/overview#diffusers.SchedulerMixin)) : планировщик, используемый в сочетании с `transformer` для удаления шума из закодированных латентных представлений видео.
Пайплайн для генерации видео из текста с использованием Allegro.
Эта модель наследуется от [DiffusionPipeline](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline). См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
#### __call__[[diffusers.AllegroPipeline.__call__]]
```python
__call__(prompt: str | list[str] = None, negative_prompt: str = '', num_inference_steps: int = 100, timesteps: list[int] = None, guidance_scale: float = 7.5, num_frames: int | None = None, height: int | None = None, width: int | None = None, num_videos_per_prompt: int = 1, eta: float = 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, prompt_attention_mask: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: 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'], clean_caption: bool = True, max_sequence_length: int = 512)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/allegro/pipeline_allegro.py#L665)
**Параметры:**
prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты для управления генерацией видео. Если не задан, необходимо передать `prompt_embeds` вместо него.
negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию видео. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` меньше `1`).
num_inference_steps (`int`, *optional*, по умолчанию 100) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к более высокому качеству видео, но за счёт более медленного вывода.
timesteps (`list[int]`, *optional*) : Пользовательские шаги для процесса денойзинга. Если не заданы, используются равномерно распределённые шаги `num_inference_steps`. Должны быть в порядке убывания.
guidance_scale (`float`, *optional*, по умолчанию 7.5) : Масштаб руководства, как определено в [Classifier-Free Diffusion Guidance](https://huggingface.co/papers/2207.12598). `guidance_scale` определяется как `w` из уравнения 2. в [Imagen Paper](https://huggingface.co/papers/2205.11487). Масштаб руководства активируется при установке `guidance_scale > 1`. Более высокий масштаб руководства способствует генерации видео, тесно связанных с текстовым `prompt`, обычно за счёт снижения качества видео.
num_videos_per_prompt (`int`, *необязательный*, по умолчанию 1) : Количество видео, генерируемых на один промпт.
num_frames : (`int`, *optional*, по умолчанию 88): Количество управляет кадрами генерируемого видео.
height (`int`, *optional*, по умолчанию self.unet.config.sample_size) : Высота генерируемого видео в пикселях.
width (`int`, *optional*, по умолчанию self.unet.config.sample_size) : Ширина генерируемого видео в пикселях.
eta (`float`, *optional*, по умолчанию 0.0) : Соответствует параметру eta (η) в статье DDIM: https://huggingface.co/papers/2010.02502. Применяется только к [schedulers.DDIMScheduler](/docs/diffusers/main/ru/api/schedulers/ddim#diffusers.DDIMScheduler), для остальных игнорируется.
generator (`torch.Generator` или `list[torch.Generator]`, *необязательный*) : Один или список [генераторов torch](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности генерации.
latents (`torch.Tensor`, *optional*) : generation. Can be used to tweak the same generation with different prompts. If not provided, a latents Pre-generated noisy latents, sampled from a Gaussian distribution, to be used as inputs for video tensor will be generated by sampling using the supplied random `generator`.
prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`.
prompt_attention_mask (`torch.Tensor`, *необязательный*) : Предварительно сгенерированная маска внимания для текстовых эмбеддингов.
negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Для PixArt-Sigma этот отрицательный промпт должен быть "". Если не указан, negative_prompt_embeds будет сгенерирован из аргумента `negative_prompt`.
negative_prompt_attention_mask (`torch.Tensor`, *необязательный*) : Предварительно сгенерированная маска внимания для отрицательных текстовых эмбеддингов.
output_type (`str`, *необязательный*, по умолчанию `"pil"`) : Формат вывода для генерации видео. Выберите между [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` или `np.array`.
return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~pipelines.stable_diffusion.IFPipelineOutput` вместо обычного кортежа.
callback_on_step_end (`Callable`, *необязательный*) : функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs` будет содержать список всех тензоров, как указано в `callback_on_step_end_tensor_inputs`.
callback_on_step_end_tensor_inputs (`List`, *необязательный*) : Список тензорных входных данных для функции `callback_on_step_end`. Тензоры, указанные в списке, будут переданы в качестве аргумента `callback_kwargs`. Вы сможете включать только переменные, перечисленные в атрибуте `._callback_tensor_inputs` вашего класса конвейера.
clean_caption (`bool`, *необязательный*, по умолчанию `True`) : Указывает, следует ли очищать подпись перед созданием эмбеддингов. Требует установки `beautifulsoup4` и `ftfy`. Если зависимости не установлены, эмбеддинги будут созданы из исходного промпта.
max_sequence_length (`int` по умолчанию `512`) : Максимальная длина последовательности, используемая с `prompt`.
**Возвращает:** [AllegroPipelineOutput](/docs/diffusers/main/ru/api/pipelines/allegro#diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput) или `tuple`
Если `return_dict` равно `True`, возвращается [AllegroPipelineOutput](/docs/diffusers/main/ru/api/pipelines/allegro#diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput), иначе возвращается `tuple`, где первый элемент — это список с сгенерированными видео.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
```py
>>> import torch
>>> from diffusers import AutoencoderKLAllegro, AllegroPipeline
>>> from diffusers.utils import export_to_video
>>> vae = AutoencoderKLAllegro.from_pretrained("rhymes-ai/Allegro", subfolder="vae", torch_dtype=torch.float32)
>>> pipe = AllegroPipeline.from_pretrained("rhymes-ai/Allegro", vae=vae, torch_dtype=torch.bfloat16).to("cuda")
>>> pipe.vae.enable_tiling()
>>> prompt = (
... "A seaside harbor with bright sunlight and sparkling seawater, with many boats in the water. From an aerial view, "
... "the boats vary in size and color, some moving and some stationary. Fishing boats in the water suggest that this "
... "location might be a popular spot for docking fishing boats."
... )
>>> video = pipe(prompt, guidance_scale=7.5, max_sequence_length=512).frames[0]
>>> export_to_video(video, "output.mp4", fps=15)
```
#### encode_prompt[[diffusers.AllegroPipeline.encode_prompt]]
```python
encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, negative_prompt: str = '', num_videos_per_prompt: int = 1, device: typing.Optional[torch.device] = 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, clean_caption: bool = False, max_sequence_length: int = 512, **kwargs)
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/allegro/pipeline_allegro.py#L215)
**Параметры:**
prompt (`str` или `list[str]`, *необязательный*) : промпт для кодирования
negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт, который не должен направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющий сигнал (то есть игнорируется, если `guidance_scale` меньше `1`). Для PixArt-Alpha это должно быть "".
do_classifier_free_guidance (`bool`, *необязательный*, по умолчанию `True`) : использовать ли classifier free guidance
num_videos_per_prompt (`int`, *необязательный*, по умолчанию 1) : количество изображений, которые должны быть сгенерированы для каждого промпта
device : (`torch.device`, *необязательный*): устройство torch, на котором будут размещены полученные эмбеддинги
prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`.
negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные эмбеддинги отрицательного текста. Для PixArt-Alpha это должны быть эмбеддинги строки "".
clean_caption (`bool`, по умолчанию `False`) : Если `True`, функция выполнит предобработку и очистку переданной подписи перед кодированием.
max_sequence_length (`int`, по умолчанию 512) : Максимальная длина последовательности, используемая для промпта.
Кодирует промпт в скрытые состояния текстового энкодера.
## AllegroPipelineOutput[[diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput]]
#### diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput[[diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput]]
```python
diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput(frames: typing.Union[torch.Tensor, numpy.ndarray, list[list[PIL.Image.Image]]])
```
[Источник](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/allegro/pipeline_output.py#L11)
**Параметры:**
frames (`torch.Tensor`, `np.ndarray` или list[list[PIL.Image.Image]]) : список видеовыходов — может представлять собой вложенный список длины `batch_size,` где каждый подсписок содержит последовательности денойзированных изображений PIL длины `num_frames.` Также может быть массивом NumPy или тензором Torch формы `(batch_size, num_frames, channels, height, width)`.
Класс вывода для конвейеров Allegro.

Xet Storage Details

Size:
22.3 kB
·
Xet hash:
e15d7a6e097c0ef11497cf362e6dfba9286ad8b21146538782ef51b0aa998598

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