Diffusers 文档

I2VGen-XL

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

I2VGen-XL

I2VGen-XL: 基于级联扩散模型的高质量图像到视频合成 作者:Shiwei Zhang, Jiayu Wang, Yingya Zhang, Kang Zhao, Hangjie Yuan, Zhiwu Qin, Xiang Wang, Deli Zhao, and Jingren Zhou。

论文摘要如下:

受益于扩散模型的快速发展,视频合成最近取得了显著进展。然而,它在语义准确性、清晰度和时空连续性方面仍然面临挑战。这些挑战主要源于对齐良好的文本-视频数据稀缺以及视频固有的复杂结构,这使得模型难以同时确保语义和质量上的卓越。在本报告中,我们提出了一种级联的 I2VGen-XL 方法,该方法通过解耦这两个因素来增强模型性能,并通过利用静态图像作为关键指导来确保输入数据的对齐。I2VGen-XL 包含两个阶段:i) 基础阶段通过使用两个分层编码器来保证语义连贯性并保留输入图像中的内容;ii) 细化阶段通过引入额外的简短文本来增强视频细节,并将分辨率提高到 1280×720。为了提高多样性,我们收集了约 3500 万对单次文本-视频对和 60 亿对文本-图像对来优化模型。通过这种方式,I2VGen-XL 可以同时提高生成视频的语义准确性、细节连续性和清晰度。通过广泛的实验,我们研究了 I2VGen-XL 的基本原理,并将其与当前顶级方法进行比较,这证明了其在不同数据上的有效性。源代码和模型将在 此 https URL 公开可用。

原始代码库可在 此处 找到。模型检查点可在 此处 找到。

请务必查看调度器指南,了解如何探索调度器速度和质量之间的权衡,并参阅跨流水线重用组件部分,了解如何有效地将相同组件加载到多个流水线中。此外,要了解更多关于降低此流水线内存使用量的信息,请参阅[“减少内存使用量”]部分此处

I2VGenXL 示例输出

库。
library

注意事项

  • I2VGenXL 总是使用 clip_skip 值为 1。这意味着它利用 CLIP 文本编码器的倒数第二层表示。
  • 它生成的视频质量通常与 Stable Video Diffusion (SVD) 相当。
  • 与 SVD 不同,它还接受文本提示作为输入。
  • 它可以生成更高分辨率的视频。
  • 当使用 DDIMScheduler(此流水线的默认设置)时,少于 50 步的推理会导致不良结果。
  • 此实现是 I2VGenXL 的 1 阶段变体。I2VGen-XL 论文中的主图显示了 2 阶段变体,然而,1 阶段变体也能很好地工作。有关更多详细信息,请参阅此讨论

< >

diffusers.I2VGenXLPipeline

< >

( vae: AutoencoderKL text_encoder: CLIPTextModel tokenizer: CLIPTokenizer image_encoder: CLIPVisionModelWithProjection feature_extractor: CLIPImageProcessor unet: I2VGenXLUNet scheduler: DDIMScheduler )

__call__

< >

( prompt: typing.Union[str, typing.List[str]] = None image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, typing.List[PIL.Image.Image], typing.List[numpy.ndarray], typing.List[torch.Tensor]] = None height: typing.Optional[int] = 704 width: typing.Optional[int] = 1280 target_fps: typing.Optional[int] = 16 num_frames: int = 16 num_inference_steps: int = 50 guidance_scale: float = 9.0 negative_prompt: typing.Union[str, typing.List[str], NoneType] = None eta: float = 0.0 num_videos_per_prompt: typing.Optional[int] = 1 decode_chunk_size: typing.Optional[int] = 1 generator: typing.Union[torch._C.Generator, typing.List[torch._C.Generator], NoneType] = None latents: typing.Optional[torch.Tensor] = None prompt_embeds: typing.Optional[torch.Tensor] = None negative_prompt_embeds: typing.Optional[torch.Tensor] = None output_type: typing.Optional[str] = 'pil' return_dict: bool = True cross_attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None clip_skip: typing.Optional[int] = 1 ) pipelines.i2vgen_xl.pipeline_i2vgen_xl.I2VGenXLPipelineOutputtuple

参数

  • prompt (strList[str], 可选) — 用于引导图像生成的提示词。如果未定义,您需要传递 prompt_embeds
  • image (PIL.Image.ImageList[PIL.Image.Image]torch.Tensor) — 用于引导图像生成的图像或图像列表。如果提供张量,它需要与 CLIPImageProcessor 兼容。
  • height (int, 可选, 默认为 self.unet.config.sample_size * self.vae_scale_factor) — 生成图像的像素高度。
  • width (int, 可选, 默认为 self.unet.config.sample_size * self.vae_scale_factor) — 生成图像的像素宽度。
  • target_fps (int, 可选) — 每秒帧数。生成后将生成的图像导出为视频的速率。这也用作生成时的“微条件”。
  • num_frames (int, 可选) — 要生成的视频帧数。
  • num_inference_steps (int, 可选) — 去噪步数。
  • guidance_scale (float, 可选, 默认为 7.5) — 较高的引导比例值鼓励模型生成与文本 prompt 紧密相关的图像,但会牺牲图像质量。当 guidance_scale > 1 时,启用引导比例。
  • negative_prompt (strList[str], 可选) — 用于引导图像生成中不包含内容的提示词。如果未定义,您需要传递 negative_prompt_embeds。当不使用引导时(guidance_scale < 1),此参数将被忽略。
  • eta (float, 可选) — 对应于 DDIM 论文中的参数 eta (η)。仅适用于 DDIMScheduler,在其他调度器中将被忽略。
  • num_videos_per_prompt (int, 可选) — 每个提示词生成的图像数量。
  • decode_chunk_size (int, 可选) — 每次解码的帧数。块大小越大,帧间时间一致性越高,但内存消耗也越大。默认情况下,解码器将一次解码所有帧以获得最大质量。减少 decode_chunk_size 以降低内存使用。
  • generator (torch.GeneratorList[torch.Generator], 可选) — 一个 torch.Generator,用于使生成具有确定性。
  • latents (torch.Tensor, 可选) — 从高斯分布中采样的预生成噪声潜在变量,用作图像生成的输入。可用于使用不同提示调整相同生成。如果未提供,则使用提供的随机 generator 采样生成潜在张量。
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入(提示词权重)。如果未提供,则从 prompt 输入参数生成文本嵌入。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负面文本嵌入。可用于轻松调整文本输入(提示词权重)。如果未提供,则从 negative_prompt 输入参数生成 negative_prompt_embeds
  • output_type (str, 可选, 默认为 "pil") — 生成图像的输出格式。在 PIL.Imagenp.array 之间选择。
  • return_dict (bool, 可选, 默认为 True) — 是否返回 StableDiffusionPipelineOutput 而不是普通元组。
  • cross_attention_kwargs (dict, 可选) — 一个 kwargs 字典,如果指定,将传递给 self.processor 中定义的 AttentionProcessor
  • clip_skip (int, 可选) — 计算提示词嵌入时要从 CLIP 跳过的层数。值为 1 表示将使用倒数第二层的输出计算提示词嵌入。

返回

pipelines.i2vgen_xl.pipeline_i2vgen_xl.I2VGenXLPipelineOutputtuple

如果 return_dictTrue,则返回 pipelines.i2vgen_xl.pipeline_i2vgen_xl.I2VGenXLPipelineOutput,否则返回一个 tuple,其中第一个元素是生成的帧列表。

用于通过 I2VGenXLPipeline 进行图像到视频生成的流水线调用函数。

示例

>>> import torch
>>> from diffusers import I2VGenXLPipeline
>>> from diffusers.utils import export_to_gif, load_image

>>> pipeline = I2VGenXLPipeline.from_pretrained(
...     "ali-vilab/i2vgen-xl", torch_dtype=torch.float16, variant="fp16"
... )
>>> pipeline.enable_model_cpu_offload()

>>> image_url = (
...     "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/i2vgen_xl_images/img_0009.png"
... )
>>> image = load_image(image_url).convert("RGB")

>>> prompt = "Papers were floating in the air on a table in the library"
>>> negative_prompt = "Distorted, discontinuous, Ugly, blurry, low resolution, motionless, static, disfigured, disconnected limbs, Ugly faces, incomplete arms"
>>> generator = torch.manual_seed(8888)

>>> frames = pipeline(
...     prompt=prompt,
...     image=image,
...     num_inference_steps=50,
...     negative_prompt=negative_prompt,
...     guidance_scale=9.0,
...     generator=generator,
... ).frames[0]
>>> video_path = export_to_gif(frames, "i2v.gif")

encode_prompt

< >

( prompt device num_videos_per_prompt negative_prompt = None prompt_embeds: typing.Optional[torch.Tensor] = None negative_prompt_embeds: typing.Optional[torch.Tensor] = None clip_skip: typing.Optional[int] = None )

参数

  • prompt (strList[str], 可选) — 要编码的提示词
  • device — (torch.device): torch 设备
  • num_videos_per_prompt (int) — 每个提示词应生成的图像数量。
  • do_classifier_free_guidance (bool) — 是否使用分类器无关引导。
  • negative_prompt (strList[str], 可选) — 不用于引导图像生成的提示词或提示词列表。如果未定义,则必须传入 negative_prompt_embeds。当不使用引导时(即,如果 guidance_scale 小于 1 时),此参数将被忽略。
  • prompt_embeds (torch.Tensor, 可选) — 预生成的文本嵌入。可用于轻松调整文本输入,例如提示词加权。如果未提供,文本嵌入将从 prompt 输入参数生成。
  • negative_prompt_embeds (torch.Tensor, 可选) — 预生成的负面文本嵌入。可用于轻松调整文本输入,例如提示词加权。如果未提供,negative_prompt_embeds 将从 negative_prompt 输入参数生成。
  • clip_skip (int, 可选) — 计算提示词嵌入时跳过 CLIP 的层数。值为 1 表示将使用倒数第二层的输出计算提示词嵌入。

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

I2VGenXLPipelineOutput

class diffusers.pipelines.i2vgen_xl.pipeline_i2vgen_xl.I2VGenXLPipelineOutput

< >

( frames: typing.Union[torch.Tensor, numpy.ndarray, typing.List[typing.List[PIL.Image.Image]]] )

参数

  • frames (torch.Tensor, np.ndarray, 或 List[List[PIL.Image.Image]]) — 视频输出列表 - 可以是长度为 batch_size 的嵌套列表,每个子列表包含去噪后的帧。

图像到视频管线的输出类。

PIL 图像序列,长度为 num_frames。也可以是形状为 (batch_size, num_frames, channels, height, width) 的 NumPy 数组或 Torch 张量

< > 在 GitHub 上更新