我们很高兴地宣布 Allegro 的开源发布,这是 Rhymes AI 先进的文本到视频模型。Allegro 是一款功能强大的人工智能工具,能将简单的文字提示转化为高质量的视频短片,为人工智能生成视频领域的创作者、开发者和研究人员开辟了新的可能性。我们希望 Allegro 能够激发社区的视觉创造力、想象力和协作能力。
Allegro 一览
Allegro 使用户能够根据简单的文字提示,以每秒 15 帧和 720p 分辨率生成高质量的 6 秒视频。这种质量水平可以高效地创建各种电影主题,从人物的细节特写、动物在各种环境中的动作,到您根据文字描述所能想象的几乎任何场景。该型号的多功能性为用户在 6 秒格式的限制下探索各种创意提供了灵活性。
主要功能:
- 开放源代码:向社区提供完整的模型权重和代码,Apache 2.0!
- 多功能内容创建:能够生成从人类和动物特写到各种动态场景的各种内容。
- 高质量输出:以 15 FPS(720x1280 分辨率)的速度生成 6 秒钟的详细视频,可通过 EMA-VFI 插值到 30 FPS。
- 小巧高效:具有 1.75 亿参数的 VideoVAE 和 2.8B 参数的 VideoDiT 模型。支持多种精度(FP32、BF16、FP16),在 BF16 模式下使用 9.3 GB GPU 内存,CPU 卸载。上下文长度为 79.2k,相当于 88 个帧。
Allegro 背后的技术
该模型的功能建立在处理视频数据、压缩原始视频和生成视频帧的核心技术基础上,可将文本提示转换为视频短片。
大规模视频数据处理
为了创建一个能够生成多样化和逼真视频的模型,需要一个能够处理海量视频数据的系统。 有鉴于此,我们设计了系统化的数据处理和过滤管道,以便从原始数据中提取训练视频。 这一过程是按顺序进行的,包括以下几个阶段:
接下来,根据处理过程中获得的指标,我们开发了一个结构化数据系统,可以对数据进行多维度分类和聚类,便于针对不同阶段和目的进行模型训练和微调。 我们在技术报告中分享了我们的详细配方。
将视频压缩为可视标记
视频生成的主要挑战之一是管理所涉及的大量数据。 为了解决这个问题,我们将原始视频压缩成更小的可视标记,同时保留基本细节,从而实现更流畅、更高效的视频生成。 具体来说,我们设计了一种视频变异自动编码器(VideoVAE),可将原始视频编码到时空潜空间中。 视频变异自动编码器建立在预先训练好的图像变异自动编码器的基础上,并扩展了时空建模层,以有效利用空间压缩能力。
提议的 VideoVAE 压缩视频的时间、高度和宽度比例分别为(4、8、8)。 这种方法减少了视频生成主干网的输入序列长度,从而能以原始帧速率生成长的高分辨率视频。
扩展视频扩散变换器
Allegro 视频生成功能的核心在于其扩展扩散变换器架构,该架构应用扩散模型生成高分辨率视频帧,确保视频运动的质量和流畅性。 Allegro 的骨干网络建立在 DiT(扩散变换器)架构的基础上,具有三维 RoPE 位置嵌入和三维全神贯注功能。 该架构可有效捕捉视频数据中的空间和时间关系。
与使用 UNet 架构的传统扩散模型相比,Transformer 结构更有利于模型扩展。 通过利用三维注意力,DiT 可以处理视频帧的空间维度及其时间演变,从而对运动和上下文有更细致的理解。 三维注意力机制与 DiT 模型的扩展能力相结合,大大提高了性能,从而可以生成具有丰富细节和流畅运动的高质量视频。
环境
pip install git+https://github.com/huggingface/diffusers.git torch==2.4.1 transformers==4.40.1 accelerate sentencepiece imageio imageio-ffmpeg beautifulsoup
推理
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
)
pipe.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."
positive_prompt = """
(masterpiece), (best quality), (ultra-detailed), (unwatermarked),
{}
emotional, harmonious, vignette, 4k epic detailed, shot on kodak, 35mm photo,
sharp focus, high budget, cinemascope, moody, epic, gorgeous
"""
negative_prompt = """
nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality,
low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry.
"""
prompt = prompt.format(prompt.lower().strip())
video = pipe(prompt, negative_prompt=negative_prompt, guidance_scale=7.5, max_sequence_length=512, num_inference_steps=100, generator = torch.Generator(device="cuda:0").manual_seed(42)).frames[0]
export_to_video(video, "output.mp4", fps=15)
使用 pipe.enable_sequential_cpu_offload(),将模型卸载到 CPU,可减少 GPU 内存成本(约 9.3G,而不启用 CPU 卸载时为 27.5G),但推理时间将大幅增加。
模型
https://huggingface.co/rhymes-ai/Allegro
Github
https://github.com/rhymes-ai/Allegro