Diffusers 文件
I2VGen-XL
並獲得增強的文件體驗
開始使用
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 示例輸出
![]() |
注意事項
- 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.I2VGenXLPipelineOutput 或 tuple
引數
- prompt (
str
或List[str]
, 可選) — 用於引導影像生成的提示詞。如果未定義,您需要傳遞prompt_embeds
。 - image (
PIL.Image.Image
或List[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 (
str
或List[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.Generator
或List[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.Image
或np.array
之間選擇。 - return_dict (
bool
, 可選, 預設為True
) — 是否返回 StableDiffusionPipelineOutput 而不是普通元組。 - cross_attention_kwargs (
dict
, 可選) — 一個 kwargs 字典,如果指定,將傳遞給self.processor
中定義的AttentionProcessor
。 - clip_skip (
int
, 可選) — 計算提示詞嵌入時要從 CLIP 跳過的層數。值為 1 表示將使用倒數第二層的輸出計算提示詞嵌入。
如果 return_dict
為 True
,則返回 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 (
str
或List[str]
, 可選) — 要編碼的提示詞 - device — (
torch.device
): torch 裝置 - num_videos_per_prompt (
int
) — 每個提示詞應生成的影像數量。 - do_classifier_free_guidance (
bool
) — 是否使用分類器無關引導。 - negative_prompt (
str
或List[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
< source >( frames: typing.Union[torch.Tensor, numpy.ndarray, typing.List[typing.List[PIL.Image.Image]]] )
影像到影片管線的輸出類。
PIL 影像序列,長度為 num_frames
。也可以是形狀為 (batch_size, num_frames, channels, height, width)
的 NumPy 陣列或 Torch 張量