Diffusers 文档

CogVideoX

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

CogVideoX

CogVideoX:具有专家Transformer的文本到视频扩散模型,来自清华大学和智谱AI。

论文的摘要是

我们介绍 CogVideoX,这是一个用于根据文本提示生成视频的大规模扩散Transformer模型。为了有效地对视频数据进行建模,我们提出利用3D变分自动编码器(VAE)来压缩视频的时空维度。为了提高文本-视频对齐,我们提出了一种专家Transformer,它使用专家自适应LayerNorm来促进两种模态的深度融合。通过采用渐进式训练技术,CogVideoX擅长生成具有显著运动的连贯、长时程视频。此外,我们还开发了一个有效的文本-视频数据处理管道,包括各种数据预处理策略和视频字幕方法。它显著有助于提高CogVideoX的性能,改善生成质量和语义对齐。结果表明,CogVideoX在多个机器指标和人工评估中均展现出最先进的性能。CogVideoX-2B的模型权重可在https://github.com/THUDM/CogVideo上公开获取。

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

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

推理

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

首先,加载管道

import torch
from diffusers import CogVideoXPipeline
from diffusers.utils import export_to_video

pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-2b").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."
)
video = pipe(prompt=prompt, guidance_scale=6, num_inference_steps=50).frames[0]
export_to_video(video, "output.mp4", fps=8)

然后将管道 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)

# CogVideoX works very well with long and well-described prompts
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."
video = pipeline(prompt=prompt, guidance_scale=6, num_inference_steps=50).frames[0]

在 80GB A100 机器上的 [基准测试](TODO: link) 结果为

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

CogVideoXPipeline

class diffusers.CogVideoXPipeline

< >

( tokenizer: T5Tokenizer text_encoder: T5EncoderModel vae: AutoencoderKLCogVideoX transformer: CogVideoXTransformer3DModel scheduler: Union )

参数

  • vae (AutoencoderKL) — 用于将视频编码和解码为潜在表示的变分自动编码器 (VAE) 模型。
  • text_encoder (T5EncoderModel) — 冻结的文本编码器。CogVideoX 使用 T5;具体来说是 t5-v1_1-xxl 变体。
  • tokenizer (T5Tokenizer) — 类 T5Tokenizer 的标记器。
  • transformer (CogVideoXTransformer3DModel) — 用于对编码后的视频潜在特征进行降噪的文本条件 CogVideoXTransformer3DModel
  • scheduler (SchedulerMixin) — 与 transformer 结合使用以对编码后的视频潜在特征进行降噪的调度器。

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

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

__call__

< >

( 提示: Union = None 负面提示: Union = None 高度: int = 480 宽度: int = 720 帧数: int = 48 FPS: int = 8 推理步骤数: int = 50 时间步长: Optional = None 引导尺度: float = 6 使用动态CFG: bool = False 每个提示的视频数量: int = 1 ETA: float = 0.0 生成器: Union = None 潜在变量: Optional = None 提示嵌入: Optional = None 负面提示嵌入: Optional = None 输出类型: str = 'pil' 返回字典: bool = True 步长结束回调: Union = None 步长结束张量输入: List = ['latents'] 最大序列长度: int = 226 ) CogVideoXPipelineOutputtuple

参数

  • 提示 (strList[str], 可选) — 用于引导图像生成的提示或提示列表。如果没有定义,则必须传递 prompt_embeds。 代替。
  • 负面提示 (strList[str], 可选) — 用于引导图像生成的负面提示或提示列表。如果没有定义,则必须传递 negative_prompt_embeds 代替。 当不使用引导时忽略(即,如果 guidance_scale 小于 1)。
  • 高度 (int, 可选, 默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的高度(以像素为单位)。默认情况下设置为 1024,以获得最佳效果。
  • 宽度 (int, 可选, 默认值为 self.unet.config.sample_size * self.vae_scale_factor) — 生成的图像的宽度(以像素为单位)。默认情况下设置为 1024,以获得最佳效果。
  • 帧数 (int, 默认值为 48) — 要生成的帧数。必须能被 self.vae_scale_factor_temporal 整除。生成的视频将包含 1 个额外的帧,因为 CogVideoX 受 (num_seconds * fps + 1) 帧的条件约束,其中 num_seconds 为 6,fps 为 4。但是,由于视频可以以任何 fps 保存,因此需要满足的唯一条件是上面提到的可除性。
  • 推理步骤数 (int, 可选, 默认值为 50) — 降噪步骤数。更多的降噪步骤通常会导致更高的图像质量,但代价是推理速度更慢。
  • 时间步长 (List[int], 可选) — 用于降噪过程的自定义时间步长,适用于在 set_timesteps 方法中支持 timesteps 参数的调度器。如果没有定义,将使用传递 num_inference_steps 时的默认行为。必须按降序排列。
  • guidance_scale (float, 可选, 默认为 7.0) — 如 Classifier-Free Diffusion Guidance 中定义的指导尺度。guidance_scale 定义为 Imagen 论文 中方程 2 的 w。通过将 guidance_scale > 1 来启用指导尺度。更高的指导尺度鼓励生成与文本 prompt 密切相关的图像,通常以降低图像质量为代价。
  • num_videos_per_prompt (int, 可选, 默认为 1) — 每个提示要生成的视频数量。
  • generator (torch.GeneratorList[torch.Generator], 可选) — 一个或多个 torch 生成器,用于使生成确定性。
  • latents (torch.FloatTensor, 可选) — 预生成的噪声潜变量,从高斯分布中采样,用作图像生成的输入。可用于调整相同生成的图像,但使用不同的提示。如果未提供,则将通过使用提供的随机 generator 采样来生成潜变量张量。
  • prompt_embeds (torch.FloatTensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,则将从 prompt 输入参数生成文本嵌入。
  • negative_prompt_embeds (torch.FloatTensor, 可选) — 预生成的负文本嵌入。可用于轻松调整文本输入,例如提示权重。如果未提供,则将从 negative_prompt 输入参数生成 negative_prompt_embeds。
  • output_type (str, 可选, 默认为 "pil") — 生成的图像的输出格式。在 PIL 之间选择:PIL.Image.Imagenp.array
  • return_dict (bool, 可选, 默认为 True) — 是否返回 ~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput 而不是简单的元组。
  • 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 属性中列出的变量。
  • max_sequence_length (int, 默认为 226) — 编码提示中的最大序列长度。必须与 self.transformer.config.max_text_seq_length 一致,否则可能会导致结果不佳。

返回值

CogVideoXPipelineOutputtuple

如果 return_dict 为 True,则返回 CogVideoXPipelineOutput,否则返回 tuple。返回元组时,第一个元素是包含生成的图像的列表。

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

示例

>>> import torch
>>> from diffusers import CogVideoXPipeline
>>> from diffusers.utils import export_to_video

>>> pipe = CogVideoXPipeline.from_pretrained("THUDM/CogVideoX-2b", 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."
... )
>>> video = pipe(prompt=prompt, guidance_scale=6, num_inference_steps=50).frames[0]
>>> export_to_video(video, "output.mp4", fps=8)

encode_prompt

< >

( prompt: Union negative_prompt: Union = None do_classifier_free_guidance: bool = True num_videos_per_prompt: int = 1 prompt_embeds: Optional = None negative_prompt_embeds: Optional = None max_sequence_length: int = 226 device: Optional = None dtype: Optional = None )

参数

  • prompt (strList[str], 可选) — 要编码的提示
  • negative_prompt (strList[str], 可选) — 不用于引导图像生成的提示。如果未定义,则必须传递 negative_prompt_embeds。当不使用引导时被忽略(即,如果 guidance_scale 小于 1,则被忽略)。
  • do_classifier_free_guidance (bool, 可选, 默认为 True) — 是否使用分类器自由引导。
  • num_videos_per_prompt (int, 可选, 默认为 1) — 每个提示应该生成的视频数量。 将生成的嵌入放置到的 torch 设备
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如 提示权重。如果未提供,将根据 prompt 输入参数生成文本嵌入。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负文本嵌入。可用于轻松调整文本输入,例如 提示权重。如果未提供,将根据 negative_prompt 输入参数生成 negative_prompt_embeds。 device — (torch.device, 可选): torch 设备 dtype — (torch.dtype, 可选): torch 数据类型

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

CogVideoXPipelineOutput

diffusers.pipelines.cogvideo.pipeline_cogvideox.CogVideoXPipelineOutput

< >

( : 张量 )

参数

  • (torch.Tensor, np.ndarray, 或 List[List[PIL.Image.Image]]) — 视频输出列表 - 可以是一个嵌套列表,长度为 batch_size,每个子列表包含长度为 num_frames 的去噪 PIL 图像序列。 也可以是一个形状为 (batch_size, num_frames, channels, height, width) 的 NumPy 数组或 Torch 张量。

CogVideo 管道的输出类。

< > 在 GitHub 上更新