Buckets:
Allegro
Allegro: Открытие «чёрного ящика» коммерческой модели генерации видео от 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 .
Обязательно ознакомьтесь с руководством по планировщикам, чтобы узнать, как исследовать баланс между скоростью и качеством планировщика, а также с разделом повторное использование компонентов в разных конвейерах, чтобы узнать, как эффективно загружать одни и те же компоненты в несколько конвейеров.
Квантование
Квантование помогает снизить требования к памяти для очень больших моделей, храня веса модели в формате данных с меньшей точностью. Однако влияние квантования на качество видео может различаться в зависимости от используемой модели видео.
См. обзор Quantization, чтобы узнать больше о поддерживаемых бэкендах квантования и о том, как выбрать бэкенд, подходящий для вашей задачи. Пример ниже показывает, как загрузить квантованный AllegroPipeline для инференса с помощью bitsandbytes.
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]]
diffusers.AllegroPipeline(tokenizer: T5Tokenizer, text_encoder: T5EncoderModel, vae: AutoencoderKLAllegro, transformer: AllegroTransformer3DModel, scheduler: KarrasDiffusionSchedulers)
Параметры:
vae (AllegroAutoEncoderKL3D) : Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
text_encoder (T5EncoderModel) : Замороженный текстовый энкодер. PixArt-Alpha использует T5, а именно вариант t5-v1_1-xxl.
tokenizer (T5Tokenizer) : Токенизатор класса T5Tokenizer.
transformer (AllegroTransformer3DModel) : модель AllegroTransformer3DModel с текстовым условием для удаления шума из закодированных латентных представлений видео.
scheduler (SchedulerMixin) : планировщик, используемый в сочетании с transformer для удаления шума из закодированных латентных представлений видео.
Пайплайн для генерации видео из текста с использованием Allegro.
Эта модель наследуется от DiffusionPipeline. См. документацию родительского класса для общих методов, которые библиотека реализует для всех пайплайнов (например, загрузка или сохранение, запуск на конкретном устройстве и т. д.)
call[[diffusers.AllegroPipeline.call]]
__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)
Параметры:
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. guidance_scale определяется как w из уравнения 2. в Imagen Paper. Масштаб руководства активируется при установке 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, для остальных игнорируется.
generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.
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: 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 или tuple
Если return_dict равно True, возвращается AllegroPipelineOutput, иначе возвращается tuple, где первый элемент — это список с сгенерированными видео.
Функция, вызываемая при обращении к конвейеру для генерации.
Примеры:
>>> 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]]
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)
Параметры:
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]]
diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput(frames: typing.Union[torch.Tensor, numpy.ndarray, list[list[PIL.Image.Image]]])
Параметры:
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.