Diffusers documentation

Stable Video Diffusion

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Stable Video Diffusion

Stable Video Diffusion được đề xuất trong Stable Video Diffusion: Scaling Latent Video Diffusion Models to Large Datasets bởi Andreas Blattmann, Tim Dockhorn, Sumith Kulal, Daniel Mendelevitch, Maciej Kilian, Dominik Lorenz, Yam Levi, Zion English, Vikram Voleti, Adam Letts, Varun Jampani, Robin Rombach.

Tóm tắt từ bài báo là:

Chúng tôi giới thiệu Stable Video Diffusion - một mô hình khuếch tán video tiềm ẩn (latent video diffusion model) cho việc tạo video từ văn bản và từ ảnh với độ phân giải cao, đạt hiệu suất tiên tiến. Gần đây, các mô hình khuếch tán tiềm ẩn được huấn luyện cho tổng hợp ảnh 2D đã được chuyển đổi thành các mô hình video sinh bằng cách chèn các lớp thời gian và tinh chỉnh chúng trên các bộ dữ liệu video nhỏ, chất lượng cao. Tuy nhiên, các phương pháp huấn luyện trong tài liệu tham khảo rất đa dạng và lĩnh vực này vẫn chưa đạt được sự đồng thuận về một chiến lược thống nhất để tuyển chọn dữ liệu video. Trong bài báo này, chúng tôi xác định và đánh giá ba giai đoạn khác nhau để huấn luyện thành công các LDM video: tiền huấn luyện từ văn bản sang ảnh, tiền huấn luyện video và tinh chỉnh video chất lượng cao. Hơn nữa, chúng tôi chứng minh sự cần thiết của một bộ dữ liệu tiền huấn luyện được tuyển chọn kỹ lưỡng để tạo ra các video chất lượng cao và trình bày một quy trình tuyển chọn có hệ thống để huấn luyện một mô hình cơ sở mạnh mẽ, bao gồm các chiến lược chú thích và lọc. Sau đó, chúng tôi khám phá tác động của việc tinh chỉnh mô hình cơ sở của chúng tôi trên dữ liệu chất lượng cao và huấn luyện một mô hình từ văn bản sang video có khả năng cạnh tranh với các hệ thống tạo video mã nguồn đóng. Chúng tôi cũng cho thấy rằng mô hình cơ sở của chúng tôi cung cấp một biểu diễn chuyển động mạnh mẽ cho các tác vụ hạ nguồn như tạo video từ ảnh và khả năng thích ứng với các module LoRA cụ thể cho chuyển động máy quay. Cuối cùng, chúng tôi chứng minh rằng mô hình của chúng tôi cung cấp một tiên nghiệm 3D đa góc nhìn mạnh mẽ và có thể đóng vai trò là nền tảng để tinh chỉnh một mô hình khuếch tán đa góc nhìn, đồng thời tạo ra nhiều góc nhìn của các đối tượng theo kiểu tiền truyền (feedforward), vượt trội hơn các phương pháp dựa trên ảnh với một phần nhỏ ngân sách tính toán của chúng. Chúng tôi phát hành mã nguồn và trọng số mô hình tại https URL này.

Hãy xem tổ chức Stability AI trên Hub để tìm các checkpoint base và extended frame!

Hãy đảm bảo bạn đã cài đặt các thư viện sau.

# Uncomment to install the necessary libraries in Colab
!pip install -q -U diffusers transformers accelerate

Có hai biến thể của mô hình này, SVD và SVD-XT. Checkpoint SVD được huấn luyện để tạo ra 14 khung hình và checkpoint SVD-XT được tinh chỉnh thêm để tạo ra 25 khung hình.

Bạn sẽ sử dụng checkpoint SVD-XT cho hướng dẫn này.

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", 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)
"ảnh nguồn của một tên lửa"
"video được tạo từ ảnh nguồn"

torch.compile

Bạn có thể đạt được tốc độ nhanh hơn 20-25% với chi phí là bộ nhớ tăng lên một chút bằng cách biên dịch UNet.

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

Giảm mức sử dụng bộ nhớ

Việc tạo video rất tốn bộ nhớ vì về cơ bản bạn đang tạo ra num_frames cùng một lúc, tương tự như tạo ảnh từ văn bản với kích thước lô (batch size) cao. Để giảm yêu cầu về bộ nhớ, có nhiều tùy chọn đánh đổi tốc độ suy luận để đổi lấy yêu cầu bộ nhớ thấp hơn:

  • bật tính năng offload mô hình: mỗi thành phần của pipeline sẽ được offload sang CPU khi không còn cần thiết nữa.
  • bật chia nhỏ khối cho lớp feed-forward: lớp feed-forward chạy trong một vòng lặp thay vì chạy một lần duy nhất với kích thước batch rất lớn.
  • Giảm decode_chunk_size: VAE sẽ giải mã các khung hình theo từng khối thay vì giải mã tất cả cùng lúc. Đặt decode_chunk_size=1 sẽ giải mã từng khung hình một và sử dụng ít bộ nhớ nhất (chúng tôi khuyến nghị điều chỉnh giá trị này dựa trên bộ nhớ GPU của bạn) nhưng video có thể bị nhấp nháy.
- 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]

Việc kết hợp tất cả các mẹo này nên giúp giảm yêu cầu bộ nhớ xuống dưới 8GB VRAM.

Điều kiện vi mô

Stable Diffusion Video cũng chấp nhận micro-conditioning, bên cạnh ảnh điều kiện, cho phép kiểm soát nhiều hơn đối với video được tạo ra:

  • fps: số khung hình mỗi giây của video được tạo ra.
  • motion_bucket_id: id của bucket chuyển động cần sử dụng cho video được tạo ra. Tham số này có thể được dùng để kiểm soát chuyển động của video được tạo ra. Tăng id của bucket chuyển động sẽ làm tăng mức độ chuyển động của video được tạo ra.
  • noise_aug_strength: lượng nhiễu được thêm vào ảnh điều kiện. Giá trị càng cao thì video càng ít giống với ảnh điều kiện. Tăng giá trị này cũng làm tăng chuyển động của video được tạo ra.

Ví dụ, để tạo video có nhiều chuyển động hơn, hãy sử dụng các tham số micro-conditioning motion_bucket_id và noise_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", 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)

StableVideoDiffusionPipeline

lớp diffusers.StableVideoDiffusionPipeline

< >

( vae: AutoencoderKLTemporalDecoderimage_encoder: CLIPVisionModelWithProjectionunet: UNetSpatioTemporalConditionModelscheduler: EulerDiscreteSchedulerfeature_extractor: CLIPImageProcessorPil )

Tham số

  • vae (AutoencoderKLTemporalDecoder) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã hình ảnh từ và sang các biểu diễn ẩn.
  • image_encoder (CLIPVisionModelWithProjection) — Bộ mã hóa ảnh CLIP được đóng băng (laion/CLIP-ViT-H-14-laion2B-s32B-b79K).
  • unet (UNetSpatioTemporalConditionModel) — Một UNetSpatioTemporalConditionModel để khử nhiễu các latents ảnh đã mã hóa.
  • scheduler (EulerDiscreteScheduler) — Một scheduler được sử dụng kết hợp với unet để khử nhiễu các latents của ảnh đã mã hóa.
  • feature_extractor (CLIPImageProcessor) — Một CLIPImageProcessor để trích xuất đặc trưng từ các hình ảnh được tạo ra.

Pipeline để tạo video từ một hình ảnh đầu vào sử dụng Stable Video Diffusion.

Mô hình này kế thừa từ DiffusionPipeline. Xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các pipeline (tải xuống, lưu, chạy trên một thiết bị cụ thể, v.v.).

StableVideoDiffusionPipelineOutput

lớp diffusers.pipelines.stable_video_diffusion.StableVideoDiffusionPipelineOutput

< >

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

Tham số

  • frames ([list[list[PIL.Image.Image]], np.ndarray, torch.Tensor) — danh sách các hình ảnh PIL đã khử nhiễu có độ dài batch_size hoặc mảng numpy hoặc tensor torch có hình dạng (batch_size, num_frames, height, width, num_channels).

Lớp đầu ra cho pipeline Stable Video Diffusion.

Update on GitHub