Diffusers 文件

Stable Video Diffusion

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Stable Video Diffusion

Stable Video Diffusion (SVD) 是一個強大的影像到影片生成模型,可以根據輸入影像生成 2-4 秒的高解析度(576x1024)影片。

本指南將向您展示如何使用 SVD 從影像生成短影片。

開始之前,請確保已安裝以下庫:

# Colab에서 필요한 라이브러리를 설치하기 위해 주석을 제외하세요
!pip install -q -U diffusers transformers accelerate

此模型有兩個變體:SVDSVD-XT。SVD 檢查點用於生成 14 幀,而 SVD-XT 檢查點經過進一步微調以生成 25 幀。

本指南將使用 SVD-XT 檢查點。

import torch

from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video

pipe = StableVideoDiffusionPipeline.from_pretrained(
    "stabilityai/stable-video-diffusion-img2vid-xt", torch_dtype=torch.float16, variant="fp16"
)
pipe.enable_model_cpu_offload()

# Load the conditioning image
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png")
image = image.resize((1024, 576))

generator = torch.manual_seed(42)
frames = pipe(image, decode_chunk_size=8, generator=generator).frames[0]

export_to_video(frames, "generated.mp4", fps=7)
"火箭的源影像"
"從源影像生成的影片"

torch.compile

您可以透過編譯 UNet 來提高 20-25% 的速度,但會略微增加記憶體佔用。

- pipe.enable_model_cpu_offload()
+ pipe.to("cuda")
+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)

減少記憶體使用

影片生成是記憶體密集型任務,因為您本質上是同時生成 num_frames,類似於高批次大小的文字到影像生成。為了減少記憶體需求,有多種選項可以在推理速度和記憶體需求之間進行權衡:

  • 啟用模型解除安裝:管道的每個元件在不再需要時會解除安裝到 CPU。
  • 啟用前饋分塊:前饋層以迴圈方式執行,而不是以巨大的批次大小執行單個前饋。
  • 減少 decode_chunk_size:VAE 分塊解碼幀,而不是一次性解碼所有幀。將 decode_chunk_size=1 設定為每次解碼一幀並使用最少量的記憶體(我們建議根據您的 GPU 記憶體調整此值),但影片可能會有一些閃爍。
- pipe.enable_model_cpu_offload()
- frames = pipe(image, decode_chunk_size=8, generator=generator).frames[0]
+ pipe.enable_model_cpu_offload()
+ pipe.unet.enable_forward_chunking()
+ frames = pipe(image, decode_chunk_size=2, generator=generator, num_frames=25).frames[0]

結合使用所有這些技巧應將記憶體需求降低到少於 8GB VRAM。

微條件

Stable Diffusion Video 除了條件影像外,還支援微條件,從而可以更好地控制生成的影片

  • fps:生成影片的每秒幀數。
  • motion_bucket_id:用於生成影片的運動桶 ID。這可用於控制生成影片的運動。增加運動桶 ID 會增加生成影片的運動。
  • noise_aug_strength:新增到條件影像的噪聲量。值越高,影片與條件影像的相似度越低。增加此值還會增加生成影片的運動。

例如,要生成更多運動的影片,請使用 motion_bucket_idnoise_aug_strength 微條件引數。

import torch

from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video

pipe = StableVideoDiffusionPipeline.from_pretrained(
  "stabilityai/stable-video-diffusion-img2vid-xt", torch_dtype=torch.float16, variant="fp16"
)
pipe.enable_model_cpu_offload()

# Load the conditioning image
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png")
image = image.resize((1024, 576))

generator = torch.manual_seed(42)
frames = pipe(image, decode_chunk_size=8, generator=generator, motion_bucket_id=180, noise_aug_strength=0.1).frames[0]
export_to_video(frames, "generated.mp4", fps=7)

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.