Diffusers 文档

Latte

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始使用

Latte

latte text-to-video

Latte: 用于视频生成的潜在扩散变换器 来自莫纳什大学、上海人工智能实验室、南京大学和南洋理工大学。

论文摘要为

我们提出了一种名为 Latte 的新颖的潜在扩散 Transformer,用于视频生成。Latte 首先从输入视频中提取时空 token,然后采用一系列 Transformer 块来对潜在空间中的视频分布进行建模。为了对从视频中提取的大量 token 进行建模,从输入视频的空间和时间维度的分解角度引入了四种高效变体。为了提高生成视频的质量,我们通过严格的实验分析确定了 Latte 的最佳实践,包括视频剪辑块嵌入、模型变体、时间步长类信息注入、时间位置嵌入和学习策略。我们全面的评估表明,Latte 在四个标准视频生成数据集(即 FaceForensics、SkyTimelapse、UCF101 和 Taichi-HD)上实现了最先进的性能。此外,我们将 Latte 扩展到文本到视频生成 (T2V) 任务,其中 Latte 与最新的 T2V 模型相比取得了相当的结果。我们坚信 Latte 为未来研究将 Transformer 整合到扩散模型以进行视频生成提供了宝贵的见解。

亮点:Latte 是一种潜在扩散 Transformer,被提议作为建模不同模态(此处针对文本到视频生成进行训练)的骨干。它在四个标准视频基准测试中取得了最先进的性能 - FaceForensicsSkyTimelapseUCF101Taichi-HD。要准备和下载用于评估的数据集,请参阅 此 https URL

此管道由 maxin-cn 贡献。原始代码库可以在 此处 找到。原始权重可以在 hf.co/maxin-cn 下找到。

一定要查看调度器 指南,了解如何探索调度器速度和质量之间的权衡,并查看 跨管道重用组件 部分,了解如何有效地将相同组件加载到多个管道中。

推理

使用 torch.compile 来减少推理延迟。

首先,加载管道

import torch
from diffusers import LattePipeline

pipeline = LattePipeline.from_pretrained(
	"maxin-cn/Latte-1", torch_dtype=torch.float16
).to("cuda")

然后将管道transformervae 组件的内存布局更改为 torch.channels-last

pipeline.transformer.to(memory_format=torch.channels_last)
pipeline.vae.to(memory_format=torch.channels_last)

最后,编译组件并运行推理

pipeline.transformer = torch.compile(pipeline.transformer)
pipeline.vae.decode = torch.compile(pipeline.vae.decode)

video = pipeline(prompt="A dog wearing sunglasses floating in space, surreal, nebulae in background").frames[0]

在 80GB A100 机器上的 基准测试 结果为

Without torch.compile(): Average inference time: 16.246 seconds.
With torch.compile(): Average inference time: 14.573 seconds.

LattePipeline

class diffusers.LattePipeline

< >

( tokenizer: T5Tokenizer text_encoder: T5EncoderModel vae: AutoencoderKL transformer: LatteTransformer3DModel scheduler: KarrasDiffusionSchedulers )

参数

  • vae (AutoencoderKL) — 变分自动编码器 (VAE) 模型,用于将视频编码和解码到潜在表示中,以及从潜在表示中解码到视频。
  • text_encoder (T5EncoderModel) — 冻结的文本编码器。Latte 使用 T5,特别是 t5-v1_1-xxl 变体。
  • tokenizer (T5Tokenizer) — 类 T5Tokenizer 的分词器。
  • transformer (LatteTransformer3DModel) — 用于对编码的视频潜在表示进行降噪的文本条件的 LatteTransformer3DModel
  • scheduler (SchedulerMixin) — 用于与 transformer 结合对编码的视频潜在表示进行降噪的调度器。

使用 Latte 进行文本到视频生成的管道。

此模型继承自 DiffusionPipeline。查看超类文档以了解库为所有管道实现的通用方法(例如下载或保存、在特定设备上运行等)。

__call__

< >

( prompt: Union = None negative_prompt: str = '' num_inference_steps: int = 50 timesteps: Optional = None guidance_scale: float = 7.5 num_images_per_prompt: int = 1 video_length: int = 16 height: int = 512 width: int = 512 eta: float = 0.0 generator: Union = None latents: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None output_type: str = 'pil' return_dict: bool = True callback_on_step_end: Union = None callback_on_step_end_tensor_inputs: List = ['latents'] clean_caption: bool = True mask_feature: bool = True enable_temporal_attentions: bool = True decode_chunk_size: Optional = None ) LattePipelineOutputtuple

参数

  • prompt (strList[str], 可选) — 指导视频生成的提示或提示。 如果未定义,则必须传递 prompt_embeds。 代替。
  • negative_prompt (strList[str], 可选) — 不指导视频生成的提示或提示。 如果未定义,则必须传递 negative_prompt_embeds 代替。 当不使用指导时被忽略(即,如果 guidance_scale 小于 1 时被忽略)。
  • num_inference_steps (int, 可选, 默认值为 100) — 降噪步骤的数量。 更多的降噪步骤通常会导致更高的视频质量,但推理速度会变慢。
  • timesteps (List[int], 可选) — 用于降噪过程的自定义时间步长。 如果未定义,则使用等间距的 num_inference_steps 时间步长。 必须按降序排列。
  • guidance_scale (float, 可选, 默认值为 7.0) — 在 Classifier-Free Diffusion Guidance 中定义的指导尺度。 guidance_scale 定义为 Imagen 论文 中公式 2 的 w。 通过设置 guidance_scale > 1 来启用指导尺度。 更高的指导尺度鼓励生成与文本 prompt 密切相关的视频,通常以牺牲视频质量为代价。
  • video_length (int, 可选, 默认值为 16) — 生成的视频帧数。 默认值为 16 帧,以 8 帧每秒的速度
  • num_images_per_prompt (int, 可选, 默认值为 1) — 每个提示生成的视频数量。
  • height (int, 可选, 默认为 self.unet.config.sample_size) — 生成的视频以像素为单位的高度。
  • width (int, 可选, 默认为 self.unet.config.sample_size) — 生成的视频以像素为单位的宽度。
  • eta (float, 可选, 默认为 0.0) — 对应于 DDIM 论文中的参数 eta (η):https://arxiv.org/abs/2010.02502。仅适用于 schedulers.DDIMScheduler,其他情况下将被忽略。
  • generator (torch.GeneratorList[torch.Generator], 可选) — 一个或多个 torch 生成器,用于使生成确定性。
  • latents (torch.FloatTensor, 可选) — 预生成的噪声潜在变量,从高斯分布采样,用作视频生成的输入。可用于使用不同的提示调整相同的生成。如果不提供,将使用提供的随机 generator 采样生成一个潜在变量张量。
  • prompt_embeds (torch.FloatTensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如 提示权重。如果不提供,将从 prompt 输入参数生成文本嵌入。
  • negative_prompt_embeds (torch.FloatTensor, 可选) — 预生成的负文本嵌入。对于 Latte,此负面提示应为空字符串 ""。如果不提供,将从 negative_prompt 输入参数生成 negative_prompt_embeds。
  • output_type (str, 可选, 默认为 "pil") — 生成的视频的输出格式。选择 PILPIL.Image.Imagenp.array
  • return_dict (bool, 可选, 默认为 True) — 是否返回 ~pipelines.stable_diffusion.IFPipelineOutput 而不是普通元组。
  • callback_on_step_end (Callable[[int, int, Dict], None], PipelineCallback, MultiPipelineCallbacks, 可选) — 在每个去噪步骤结束时调用的回调函数或回调函数列表。
  • clean_caption (bool, 可选, 默认值为 True) — 是否在创建嵌入之前清理标题。 需要安装 beautifulsoup4ftfy。 如果未安装依赖项,则将从原始提示创建嵌入。
  • mask_feature (bool, 默认值为 True) — 如果设置为 True,文本嵌入将被屏蔽。
  • enable_temporal_attentions (bool, 可选, 默认值为 True) — 是否启用时间注意力
  • decode_chunk_size (int, 可选) — 每次解码的帧数。 较高的块大小会导致更好的时间一致性,但会消耗更多内存。 默认情况下,解码器一次解码所有帧,以获得最大的质量。 为了降低内存使用量,请减少 decode_chunk_size

返回

LattePipelineOutputtuple

如果 return_dictTrue,则返回 LattePipelineOutput,否则返回 tuple,其中第一个元素是包含生成图像的列表

调用生成管道时调用的函数。

示例

>>> import torch
>>> from diffusers import LattePipeline
>>> from diffusers.utils import export_to_gif

>>> # You can replace the checkpoint id with "maxin-cn/Latte-1" too.
>>> pipe = LattePipeline.from_pretrained("maxin-cn/Latte-1", torch_dtype=torch.float16).to("cuda")
>>> # Enable memory optimizations.
>>> pipe.enable_model_cpu_offload()

>>> prompt = "A small cactus with a happy face in the Sahara desert."
>>> videos = pipe(prompt).frames[0]
>>> export_to_gif(videos, "latte.gif")

encode_prompt

< >

( prompt: Union do_classifier_free_guidance: bool = True negative_prompt: str = '' num_images_per_prompt: int = 1 device: Optional = None prompt_embeds: Optional = None negative_prompt_embeds: Optional = None clean_caption: bool = False mask_feature: bool = True dtype = None )

参数

  • prompt (strList[str], 可选) — 要编码的提示
  • negative_prompt (strList[str], 可选) — 不引导视频生成的提示。 如果未定义,则必须传递 negative_prompt_embeds。 不使用引导时忽略(即,如果 guidance_scale 小于 1 则忽略)。 对于 Latte,这应该是 ""。
  • do_classifier_free_guidance (bool, 可选, 默认值为 True) — 是否使用分类器免费引导
  • num_images_per_prompt (int, 可选, 默认值为 1) — 每个提示应生成的视频数量 device — (torch.device, 可选): 将生成的嵌入放置到的火炬设备
  • prompt_embeds (torch.FloatTensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如 提示权重。如果未提供,文本嵌入将从 prompt 输入参数生成。
  • negative_prompt_embeds (torch.FloatTensor, 可选) — 预生成的负文本嵌入。对于 Latte,它应该是 "" 字符串的嵌入。
  • clean_caption (bool, 默认为 False) — 如果 True,则该函数将在编码之前预处理和清理提供的标题。 mask_feature — (bool, 默认为 True): 如果 True,则该函数将屏蔽文本嵌入。

将提示编码为文本编码器隐藏状态。

< > GitHub 上更新