Diffusers documentation
SkyReels-V2: Mô hình tạo phim có độ dài vô hạn
SkyReels-V2: Mô hình tạo phim có độ dài vô hạn
SkyReels-V2 của nhóm SkyReels từ Skywork AI.
Những tiến bộ gần đây trong tạo video được thúc đẩy bởi mô hình khuếch tán và các khung tự hồi quy, tuy nhiên vẫn tồn tại những thách thức quan trọng trong việc hài hòa giữa việc tuân thủ prompt, chất lượng hình ảnh, động lực chuyển động và thời lượng: các thỏa hiệp về động lực chuyển động để nâng cao chất lượng hình ảnh theo thời gian, thời lượng video bị hạn chế (5-10 giây) để ưu tiên độ phân giải, và việc tạo nhận thức cảnh không đầy đủ do các MLLM đa năng không có khả năng diễn giải ngữ pháp điện ảnh, chẳng hạn như bố cục cảnh, biểu cảm diễn viên và chuyển động máy quay. Những hạn chế liên kết này cản trở việc tổng hợp dài thực tế và tạo theo phong cách phim chuyên nghiệp. Để giải quyết những hạn chế này, chúng tôi đề xuất SkyReels-V2, một Mô hình Sinh tạo Phim Độ dài Vô hạn, kết hợp hài hòa Mô hình Ngôn ngữ Lớn Đa phương tiện (MLLM), Tiền huấn luyện Đa giai đoạn, Học tăng cường và Khung Khuếch tán Ép buộc. Trước tiên, chúng tôi thiết kế một biểu diễn cấu trúc toàn diện của video, kết hợp mô tả chung từ MLLM đa phương tiện và ngôn ngữ cảnh chi tiết từ các mô hình chuyên gia phụ. Với sự hỗ trợ của chú thích con người, chúng tôi sau đó huấn luyện một Video Captioner thống nhất, có tên SkyCaptioner-V1, để dán nhãn dữ liệu video một cách hiệu quả. Thứ hai, chúng tôi thiết lập tiền huấn luyện độ phân giải tiến bộ cho việc tạo video cơ bản, tiếp theo là tăng cường hậu huấn luyện bốn giai đoạn: SFT cân bằng khái niệm ban đầu cải thiện chất lượng cơ sở; Huấn luyện RL cụ thể cho chuyển động với dữ liệu méo do con người chú thích và tổng hợp giải quyết các lỗi động; Khung khuếch tán ép buộc của chúng tôi với lịch trình nhiễu không giảm cho phép tổng hợp video dài trong không gian tìm kiếm hiệu quả; SFT chất lượng cao cuối cùng tinh chỉnh độ trung thực hình ảnh. Tất cả mã và mô hình có sẵn tại this https URL.
Bạn có thể tìm thấy tất cả các checkpoint gốc của SkyReels-V2 dưới tổ chức Skywork.
Các mô hình SkyReels-V2 sau đây được hỗ trợ trong Diffusers:
- SkyReels-V2 DF 1.3B - 540P
- SkyReels-V2 DF 14B - 540P
- SkyReels-V2 DF 14B - 720P
- SkyReels-V2 T2V 14B - 540P
- SkyReels-V2 T2V 14B - 720P
- SkyReels-V2 I2V 1.3B - 540P
- SkyReels-V2 I2V 14B - 540P
- SkyReels-V2 I2V 14B - 720P
Mô hình này được đóng góp bởi M. Tolga Cangöz.
Nhấp vào các mô hình SkyReels-V2 ở thanh bên phải để xem thêm các ví dụ về tạo video.
Một minh họa trực quan
Ví dụ bên dưới có các tham số sau:
base_num_frames=97num_frames=97num_inference_steps=30ar_step=5causal_block_size=5
Với vae_scale_factor_temporal=4, hãy kỳ vọng có 5 khối, mỗi khối gồm 5 khung hình, được tính như sau:
num_latent_frames: (97-1)//vae_scale_factor_temporal+1 = 25 frames -> 5 blocks of 5 frames each
Và độ dài ngữ cảnh tối đa trong không gian tiềm ẩn được tính bằng base_num_latent_frames:
base_num_latent_frames = (97-1)//vae_scale_factor_temporal+1 = 25 -> 25//5 = 5 blocks
Dòng thời gian xử lý bất đồng bộ:
┌─────────────────────────────────────────────────────────────────┐ │ Steps: 1 6 11 16 21 26 31 36 41 46 50 │ │ Block 1: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 2: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 3: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 4: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ │ Block 5: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ └─────────────────────────────────────────────────────────────────┘
Đối với video dài (num_frames > base_num_frames): base_num_frames đóng vai trò là “kích thước cửa sổ trượt” để xử lý video dài.
Ví dụ: video 257 khung với base_num_frames=97, overlap_history=17
┌──── Iteration 1 (frames 1-97) ────┐
│ Processing window: 97 frames │ → 5 blocks,
│ Generates: frames 1-97 │ async processing
└───────────────────────────────────┘
┌────── Iteration 2 (frames 81-177) ──────┐
│ Processing window: 97 frames │
│ Overlap: 17 frames (81-97) from prev │ → 5 blocks,
│ Generates: frames 98-177 │ async processing
└─────────────────────────────────────────┘
┌────── Iteration 3 (frames 161-257) ──────┐
│ Processing window: 97 frames │
│ Overlap: 17 frames (161-177) from prev │ → 5 blocks,
│ Generates: frames 178-257 │ async processing
└──────────────────────────────────────────┘Mỗi lần lặp lại chạy xử lý bất đồng bộ độc lập với 5 khối riêng của nó. base_num_frames kiểm soát:
- Lượng bộ nhớ sử dụng (cửa sổ lớn hơn = nhiều VRAM hơn)
- Độ dài ngữ cảnh của mô hình (phải khớp với các ràng buộc huấn luyện)
- Số lượng khối mỗi lần lặp (
base_num_latent_frames // causal_block_size)
Mỗi khối mất 30 bước để hoàn tất khử nhiễu.
Khối N bắt đầu ở bước: 1 + (N-1) x ar_step Tổng số bước: 30 + (5-1) x 5 = 50 bước
Chế độ đồng bộ (ar_step=0) sẽ xử lý tất cả các khối/khung cùng lúc:
┌──────────────────────────────────────────────┐ │ Steps: 1 ... 30 │ │ All blocks: [■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■] │ └──────────────────────────────────────────────┘
Tổng số bước: 30 bước
Một ví dụ về cách ma trận bước được xây dựng cho xử lý bất đồng bộ:
Với các tham số: (num_inference_steps=30, flow_shift=8, num_frames=97, ar_step=5, causal_block_size=5)
- num_latent_frames = (97 frames - 1) // (4 temporal downsampling) + 1 = 25
- step_template = [999, 995, 991, 986, 980, 975, 969, 963, 956, 948,
941, 932, 922, 912, 901, 888, 874, 859, 841, 822,
799, 773, 743, 708, 666, 615, 551, 470, 363, 216]Thuật toán tạo ra một step_matrix 50x25 trong đó:
- Row 1: [999×5, 999×5, 999×5, 999×5, 999×5]
- Row 2: [995×5, 999×5, 999×5, 999×5, 999×5]
- Row 3: [991×5, 999×5, 999×5, 999×5, 999×5]
- ...
- Row 7: [969×5, 995×5, 999×5, 999×5, 999×5]
- ...
- Row 21: [799×5, 888×5, 941×5, 975×5, 999×5]
- ...
- Row 35: [ 0×5, 216×5, 666×5, 822×5, 901×5]
- ...
- Row 42: [ 0×5, 0×5, 0×5, 551×5, 773×5]
- ...
- Row 50: [ 0×5, 0×5, 0×5, 0×5, 216×5]Phân tích chi tiết hàng 6:
- step_matrix[5]: [ 975×5, 999×5, 999×5, 999×5, 999×5]
- step_index[5]: [ 6×5, 1×5, 0×5, 0×5, 0×5]
- step_update_mask[5]: [True×5, True×5, False×5, False×5, False×5]
- valid_interval[5]: (0, 25)Mô hình chính: Khối i trễ hơn Khối i-1 đúng ar_step=5 bước thời gian, tạo ra hiệu ứng “diffusion forcing” so le, trong đó các khối sau điều kiện hóa dựa trên các khối trước sạch hơn.
Tạo video từ văn bản
Ví dụ dưới đây minh họa cách tạo video từ văn bản.
Tham khảo hướng dẫn Giảm mức sử dụng bộ nhớ để biết thêm chi tiết về các kỹ thuật tiết kiệm bộ nhớ khác nhau.
Từ kho gốc:
Bạn có thể sử dụng —ar_step 5 để bật suy luận bất đồng bộ. Khi sử dụng suy luận bất đồng bộ, —causal_block_size 5 được khuyến nghị, trong khi tham số này không nên được đặt cho chế độ sinh đồng bộ… Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện hiệu suất tuân theo chỉ thị và tính nhất quán về mặt thị giác.
import torch
from diffusers import AutoModel, SkyReelsV2DiffusionForcingPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video
model_id = "Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers"
vae = AutoModel.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
model_id,
vae=vae,
dtype=torch.bfloat16,
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)
prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
output = pipeline(
prompt=prompt,
num_inference_steps=30,
height=544, # 720 for 720P
width=960, # 1280 for 720P
num_frames=97,
base_num_frames=97, # 121 for 720P
ar_step=5, # Controls asynchronous inference (0 for synchronous mode)
causal_block_size=5, # Number of frames in each block for asynchronous processing
overlap_history=None, # Number of frames to overlap for smooth transitions in long videos; 17 for long video generations
addnoise_condition=20, # Improves consistency in long video generation
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)Tạo video từ khung hình đầu-cuối
Ví dụ dưới đây minh họa cách sử dụng pipeline image-to-video để tạo video bằng mô tả văn bản, khung hình bắt đầu và khung hình kết thúc.
import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingImageToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_image
model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)
first_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_first_frame.png")
last_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_last_frame.png")
def aspect_ratio_resize(image, pipeline, max_area=720 * 1280):
aspect_ratio = image.height / image.width
mod_value = pipeline.vae_scale_factor_spatial * pipeline.transformer.config.patch_size[1]
height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value
width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value
image = image.resize((width, height))
return image, height, width
def center_crop_resize(image, height, width):
# Calculate resize ratio to match first frame dimensions
resize_ratio = max(width / image.width, height / image.height)
# Resize the image
width = round(image.width * resize_ratio)
height = round(image.height * resize_ratio)
size = [width, height]
image = TF.center_crop(image, size)
return image, height, width
first_frame, height, width = aspect_ratio_resize(first_frame, pipeline)
if last_frame.size != first_frame.size:
last_frame, _, _ = center_crop_resize(last_frame, height, width)
prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."
output = pipeline(
image=first_frame, last_image=last_frame, prompt=prompt, height=height, width=width, guidance_scale=5.0
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)Tạo Video từ Video
SkyReelsV2DiffusionForcingVideoToVideoPipeline mở rộng một video đã cho.
import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, SkyReelsV2DiffusionForcingVideoToVideoPipeline, UniPCMultistepScheduler
from diffusers.utils import export_to_video, load_video
model_id = "Skywork/SkyReels-V2-DF-1.3B-720P-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipeline = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
model_id, vae=vae, dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
pipeline.scheduler = UniPCMultistepScheduler.from_config(pipeline.scheduler.config, flow_shift=flow_shift)
video = load_video("input_video.mp4")
prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."
output = pipeline(
video=video, prompt=prompt, height=720, width=1280, guidance_scale=5.0, overlap_history=17,
num_inference_steps=30, num_frames=257, base_num_frames=121#, ar_step=5, causal_block_size=5,
).frames[0]
export_to_video(output, "video.mp4", fps=24, quality=8)
# Total frames will be the number of frames of the given video + 257Ghi chú
- SkyReels-V2 hỗ trợ LoRA với load_lora_weights().
SkyReelsV2Pipeline và SkyReelsV2ImageToVideoPipeline cũng có sẵn mà không áp dụng framework Diffusion Forcing.
SkyReelsV2DiffusionForcingPipeline
lớp diffusers.SkyReelsV2DiffusionForcingPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Tham số
- tokenizer (
AutoTokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl. - text_encoder (
UMT5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
- scheduler (UniPCMultistepScheduler) —
Một scheduler được sử dụng kết hợp với
transformerđể khử nhiễu các latents ảnh đã được mã hóa. - vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).
Pipeline để tạo Video từ Văn bản (t2v) sử dụng SkyReels-V2 với diffusion forcing.
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.).
__call__
< source >( prompt: str | list[str]negative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple
Tham số
- prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyềnprompt_embedsthay thế. - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - height (
int, mặc định là544) — Chiều cao của video được tạo ra. - width (
int, mặc định là960) — Chiều rộng của video được tạo. - num_frames (
int, mặc định là97) — Số lượng khung hình trong video được tạo ra. - num_inference_steps (
int, mặc định là50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn. - guidance_scale (
float, mặc định là6.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance.guidance_scaleđược định nghĩa làwcủa phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặtguidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ vớipromptvăn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. (6.0 cho T2V, 5.0 cho I2V) - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt. - generator (
torch.Generatorhoặclist[torch.Generator], tùy chọn) — Mộttorch.Generatorđể làm cho quá trình sinh ra kết quả xác định. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụnggeneratorngẫu nhiên được cung cấp. - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàonegative_prompt. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữaPIL.Imagehoặcnp.array. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtSkyReelsV2PipelineOutputthay vì một tuple thông thường hay không. - attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa dướiself.processortrong diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con củaPipelineCallbackhoặcMultiPipelineCallbacksđược gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargssẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởicallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, optional) — Danh sách các tensor đầu vào cho hàmcallback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham sốcallback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính._callback_tensor_inputscủa lớp pipeline của bạn. - max_sequence_length (
int, tùy chọn, mặc định là512) — Chiều dài tối đa của chuỗi prompt. - overlap_history (
int, tùy chọn, mặc định làNone) — Số khung hình cần chồng lên nhau để tạo chuyển tiếp mượt mà trong các video dài. NếuNone, pipeline sẽ giả định chế độ tạo video ngắn và không áp dụng chồng khung. Khuyến nghị đặt giá trị là 17 hoặc 37. - addnoise_condition (
float, tùy chọn, mặc định là0) — Tham số này được dùng để giúp làm mượt quá trình tạo video dài bằng cách thêm một lượng nhiễu vào điều kiện sạch. Nhiễu quá lớn cũng có thể gây ra sự không nhất quán. Giá trị 20 được khuyến nghị, bạn có thể thử các giá trị lớn hơn, nhưng không nên vượt quá 50. - base_num_frames (
int, tùy chọn, mặc định là97) — 97 hoặc 121 | Số khung hình cơ sở (97 cho 540P, 121 cho 720P) - ar_step (
int, tùy chọn, mặc định là0) — Kiểm soát suy luận bất đồng bộ (0 cho chế độ đồng bộ). Bạn có thể đặtar_step=5để bật suy luận bất đồng bộ. Khi suy luận bất đồng bộ, khuyến nghị đặtcausal_block_size=5, trong khi không nên đặt giá trị này cho sinh đồng bộ. Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện khả năng tuân theo chỉ thị và hiệu suất nhất quán về mặt thị giác. - causal_block_size (
int, tuỳ chọn, mặc định làNone) — Số lượng khung trong mỗi khối/mảnh. Được khuyến nghị khi sử dụng suy luận bất đồng bộ (khi ar_step > 0) - fps (
int, tùy chọn, mặc định là24) — Tốc độ khung hình của video được tạo
Trả về
~SkyReelsV2PipelineOutput hoặc tuple
Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về
trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool
cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> import torch
>>> from diffusers import (
... SkyReelsV2DiffusionForcingPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingPipeline.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> output = pipe(
... prompt=prompt,
... num_inference_steps=30,
... height=544,
... width=960,
... guidance_scale=6.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ar_step=5, # Controls asynchronous inference (0 for synchronous mode)
... causal_block_size=5, # Number of frames processed together in a causal block
... overlap_history=None, # Number of frames to overlap for smooth transitions in long videos
... addnoise_condition=20, # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Tham số
- prompt (
strhoặclist[str], tùy chọn) — prompt cần được mã hóa - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - do_classifier_free_guidance (
bool, tùy chọn, mặc định làTrue) — Có sử dụng classifier free guidance hay không. - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vàonegative_prompt. - device — (
torch.device, tùy chọn): thiết bị torch - dtype — (
torch.dtype, tùy chọn): torch dtype
Mã hóa prompt thành các trạng thái ẩn của text encoder.
generate_timestep_matrix
< source >( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing
Tham số
- num_latent_frames (int) — Tổng số khung latent cần tạo
- step_template (torch.Tensor) — Lịch trình bước thời gian cơ sở (ví dụ: [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — Số khung hình tối đa mà mô hình có thể xử lý trong một lần truyền trực tiếp
- ar_step (int, tùy chọn) — Kích thước bước tự hồi quy cho độ trễ thời gian. 0 = đồng bộ, >0 = bất đồng bộ. Mặc định là 5.
- num_pre_ready (int, optional) — Số khung hình đã được khử nhiễu (ví dụ: từ phần đầu vào trong tác vụ video2video). Mặc định là 0.
- causal_block_size (int, tùy chọn) — Số khung được xử lý như một khối nhân quả. Mặc định là 1.
- shrink_interval_with_mask (bool, tùy chọn) — Có tối ưu hóa các khoảng xử lý hay không. Mặc định là False.
Trả về
bộ tuple chứa
- step_matrix (torch.Tensor): Ma trận các bước thời gian cho mỗi khung hình ở mỗi lần lặp. Hình dạng: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): Ma trận chỉ số để tra cứu bước thời gian. Hình dạng: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): Mặt nạ boolean chỉ định các khung hình cần cập nhật. Hình dạng: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): danh sách các khoảng (start, end) cho mỗi lần lặp
Gây ra
ValueError
ValueError— Nếu ar_step quá nhỏ so với cấu hình được cung cấp
Hàm này triển khai thuật toán diffusion forcing cốt lõi, tạo ra lịch trình khử nhiễu phối hợp giữa các khung thời gian. Nó hỗ trợ cả chế độ sinh đồng bộ và bất đồng bộ:
Chế độ đồng bộ (ar_step=0, causal_block_size=1):
- Tất cả các khung hình được khử nhiễu đồng thời ở mỗi bước thời gian
- Mỗi khung hình tuân theo cùng một quỹ đạo khử nhiễu: [1000, 800, 600, …, 0]
- Đơn giản hơn nhưng có thể kém nhất quán theo thời gian hơn đối với các video dài
Chế độ bất đồng bộ (ar_step>0, causal_block_size>1):
- Các khung được nhóm thành các khối nhân quả và được xử lý theo từng khối/mảnh
- Mỗi khối được khử nhiễu theo một mẫu so le, tạo ra một “sóng khử nhiễu”
- Các khối trước được khử nhiễu nhiều hơn, các khối sau chậm hơn ar_step bước thời gian
- Tạo ra các phụ thuộc thời gian mạnh mẽ hơn và tính nhất quán tốt hơn
SkyReelsV2DiffusionForcingImageToVideoPipeline
lớp diffusers.SkyReelsV2DiffusionForcingImageToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Tham số
- tokenizer (
AutoTokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl. - text_encoder (
UMT5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
- scheduler (UniPCMultistepScheduler) —
Một scheduler được sử dụng kết hợp với
transformerđể khử nhiễu các latents ảnh đã được mã hóa. - vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).
Pipeline để tạo Video từ Ảnh (i2v) sử dụng SkyReels-V2 với diffusion forcing.
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.).
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 5.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple
Tham số
- image (
PipelineImageInput) — Hình ảnh đầu vào để điều kiện cho quá trình tạo. Phải là một hình ảnh, một danh sách các hình ảnh hoặc mộttorch.Tensor. - prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyềnprompt_embedsthay thế. - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - height (
int, mặc định là544) — Chiều cao của video được tạo ra. - width (
int, mặc định là960) — Chiều rộng của video được tạo. - num_frames (
int, mặc định là97) — Số lượng khung hình trong video được tạo ra. - num_inference_steps (
int, mặc định là50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn. - guidance_scale (
float, mặc định là5.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance.guidance_scaleđược định nghĩa làwcủa phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặtguidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ vớipromptvăn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. (6.0 cho T2V, 5.0 cho I2V) - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt. - generator (
torch.Generatorhoặclist[torch.Generator], tùy chọn) — Mộttorch.Generatorđể làm cho quá trình sinh ra kết quả xác định. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụnggeneratorngẫu nhiên được cung cấp. - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàonegative_prompt. - image_embeds (
torch.Tensor, tùy chọn) — Các embedding hình ảnh đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh đầu vào hình ảnh (trọng số). Nếu không được cung cấp, các embedding hình ảnh sẽ được tạo từ đối số đầu vàoimage. - last_image (
torch.Tensor, tùy chọn) — Các embedding ảnh đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh đầu vào ảnh (trọng số). Nếu không được cung cấp, các embedding ảnh sẽ được tạo từ đối số đầu vàoimage. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữaPIL.Imagehoặcnp.array. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtSkyReelsV2PipelineOutputthay vì một tuple thông thường hay không. - attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa dướiself.processortrong diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con củaPipelineCallbackhoặcMultiPipelineCallbacksđược gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargssẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởicallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, optional) — Danh sách các tensor đầu vào cho hàmcallback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham sốcallback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính._callback_tensor_inputscủa lớp pipeline của bạn. - max_sequence_length (
int, tùy chọn, mặc định là512) — Chiều dài tối đa của chuỗi prompt. - overlap_history (
int, tùy chọn, mặc định làNone) — Số khung hình cần chồng lên nhau để tạo chuyển tiếp mượt mà trong các video dài. NếuNone, pipeline sẽ giả định chế độ tạo video ngắn và không áp dụng chồng khung. Khuyến nghị đặt giá trị là 17 hoặc 37. - addnoise_condition (
float, tùy chọn, mặc định là0) — Tham số này được dùng để giúp làm mượt quá trình tạo video dài bằng cách thêm một lượng nhiễu vào điều kiện sạch. Nhiễu quá lớn cũng có thể gây ra sự không nhất quán. Giá trị 20 được khuyến nghị, bạn có thể thử các giá trị lớn hơn, nhưng không nên vượt quá 50. - base_num_frames (
int, tùy chọn, mặc định là97) — 97 hoặc 121 | Số khung hình cơ sở (97 cho 540P, 121 cho 720P) - ar_step (
int, tùy chọn, mặc định là0) — Kiểm soát suy luận bất đồng bộ (0 cho chế độ đồng bộ). Bạn có thể đặtar_step=5để bật suy luận bất đồng bộ. Khi suy luận bất đồng bộ, khuyến nghị đặtcausal_block_size=5, trong khi không nên đặt giá trị này cho sinh đồng bộ. Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện khả năng tuân theo chỉ thị và hiệu suất nhất quán về mặt thị giác. - causal_block_size (
int, tuỳ chọn, mặc định làNone) — Số lượng khung trong mỗi khối/mảnh. Được khuyến nghị khi sử dụng suy luận bất đồng bộ (khi ar_step > 0) - fps (
int, tùy chọn, mặc định là24) — Tốc độ khung hình của video được tạo
Trả về
~SkyReelsV2PipelineOutput hoặc tuple
Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về
trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool
cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> import torch
>>> from diffusers import (
... SkyReelsV2DiffusionForcingImageToVideoPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingImageToVideoPipeline.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> image = Image.open("path/to/image.png")
>>> output = pipe(
... image=image,
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=5.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ar_step=0, # Controls asynchronous inference (0 for synchronous mode)
... overlap_history=None, # Number of frames to overlap for smooth transitions in long videos
... addnoise_condition=20, # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Tham số
- prompt (
strhoặclist[str], tùy chọn) — prompt cần được mã hóa - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - do_classifier_free_guidance (
bool, tùy chọn, mặc định làTrue) — Có sử dụng classifier free guidance hay không. - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vàonegative_prompt. - device — (
torch.device, tùy chọn): thiết bị torch - dtype — (
torch.dtype, tùy chọn): torch dtype
Mã hóa prompt thành các trạng thái ẩn của text encoder.
generate_timestep_matrix
< source >( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing
Tham số
- num_latent_frames (int) — Tổng số khung latent cần tạo
- step_template (torch.Tensor) — Lịch trình bước thời gian cơ sở (ví dụ: [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — Số khung hình tối đa mà mô hình có thể xử lý trong một lần truyền trực tiếp
- ar_step (int, tùy chọn) — Kích thước bước tự hồi quy cho độ trễ thời gian. 0 = đồng bộ, >0 = bất đồng bộ. Mặc định là 5.
- num_pre_ready (int, optional) — Số khung hình đã được khử nhiễu (ví dụ: từ phần đầu vào trong tác vụ video2video). Mặc định là 0.
- causal_block_size (int, tùy chọn) — Số khung được xử lý như một khối nhân quả. Mặc định là 1.
- shrink_interval_with_mask (bool, tùy chọn) — Có tối ưu hóa các khoảng xử lý hay không. Mặc định là False.
Trả về
bộ tuple chứa
- step_matrix (torch.Tensor): Ma trận các bước thời gian cho mỗi khung hình ở mỗi lần lặp. Hình dạng: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): Ma trận chỉ số để tra cứu bước thời gian. Hình dạng: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): Mặt nạ boolean chỉ định các khung hình cần cập nhật. Hình dạng: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): danh sách các khoảng (start, end) cho mỗi lần lặp
Gây ra
ValueError
ValueError— Nếu ar_step quá nhỏ so với cấu hình được cung cấp
Hàm này triển khai thuật toán diffusion forcing cốt lõi, tạo ra lịch trình khử nhiễu phối hợp giữa các khung thời gian. Nó hỗ trợ cả chế độ sinh đồng bộ và bất đồng bộ:
Chế độ đồng bộ (ar_step=0, causal_block_size=1):
- Tất cả các khung hình được khử nhiễu đồng thời ở mỗi bước thời gian
- Mỗi khung hình tuân theo cùng một quỹ đạo khử nhiễu: [1000, 800, 600, …, 0]
- Đơn giản hơn nhưng có thể kém nhất quán theo thời gian hơn đối với các video dài
Chế độ bất đồng bộ (ar_step>0, causal_block_size>1):
- Các khung được nhóm thành các khối nhân quả và được xử lý theo từng khối/mảnh
- Mỗi khối được khử nhiễu theo một mẫu so le, tạo ra một “sóng khử nhiễu”
- Các khối trước được khử nhiễu nhiều hơn, các khối sau chậm hơn ar_step bước thời gian
- Tạo ra các phụ thuộc thời gian mạnh mẽ hơn và tính nhất quán tốt hơn
SkyReelsV2DiffusionForcingVideoToVideoPipeline
lớp diffusers.SkyReelsV2DiffusionForcingVideoToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Tham số
- tokenizer (
AutoTokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl. - text_encoder (
UMT5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents ảnh đã mã hóa.
- scheduler (UniPCMultistepScheduler) —
Một scheduler được sử dụng kết hợp với
transformerđể khử nhiễu các latents ảnh đã được mã hóa. - vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).
Pipeline cho tạo Video-to-Video (v2v) sử dụng SkyReels-V2 với diffusion forcing.
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.).
__call__
< source >( video: list[PIL.Image.Image]prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 120num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512overlap_history: int | None = Noneaddnoise_condition: float = 0base_num_frames: int = 97ar_step: int = 0causal_block_size: int | None = Nonefps: int = 24 ) → ~SkyReelsV2PipelineOutput or tuple
Tham số
- video (
list[Image.Image]) — Video để hướng dẫn cho việc tạo video. - prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo video. Nếu không được định nghĩa, bạn phải truyềnprompt_embedsthay thế. - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo video. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - height (
int, mặc định là544) — Chiều cao của video được tạo ra. - width (
int, mặc định là960) — Chiều rộng của video được tạo. - num_frames (
int, mặc định là120) — Số lượng khung hình trong video được tạo ra. - num_inference_steps (
int, mặc định là50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn. - guidance_scale (
float, mặc định là6.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance.guidance_scaleđược định nghĩa làwcủa phương trình 2. trong Bài báo Imagen. Thang độ dẫn hướng được kích hoạt bằng cách đặtguidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ vớipromptvăn bản, thường là với cái giá phải trả là chất lượng hình ảnh thấp hơn. (6.0 cho T2V, 5.0 cho I2V) - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt. - generator (
torch.Generatorhoặclist[torch.Generator], tùy chọn) — Mộttorch.Generatorđể làm cho quá trình sinh ra kết quả xác định. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụnggeneratorngẫu nhiên được cung cấp. - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàonegative_prompt. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữaPIL.Imagehoặcnp.array. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtSkyReelsV2PipelineOutputthay vì một tuple thông thường hay không. - attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa dướiself.processortrong diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con củaPipelineCallbackhoặcMultiPipelineCallbacksđược gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargssẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởicallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, optional) — Danh sách các tensor đầu vào cho hàmcallback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham sốcallback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính._callback_tensor_inputscủa lớp pipeline của bạn. - max_sequence_length (
int, tùy chọn, mặc định là512) — Chiều dài tối đa của chuỗi prompt. - overlap_history (
int, tùy chọn, mặc định làNone) — Số khung hình cần chồng lên nhau để tạo chuyển tiếp mượt mà trong các video dài. NếuNone, pipeline sẽ giả định chế độ tạo video ngắn và không áp dụng chồng khung. Khuyến nghị đặt giá trị là 17 hoặc 37. - addnoise_condition (
float, tùy chọn, mặc định là0) — Tham số này được dùng để giúp làm mượt quá trình tạo video dài bằng cách thêm một lượng nhiễu vào điều kiện sạch. Nhiễu quá lớn cũng có thể gây ra sự không nhất quán. Giá trị 20 được khuyến nghị, bạn có thể thử các giá trị lớn hơn, nhưng không nên vượt quá 50. - base_num_frames (
int, tùy chọn, mặc định là97) — 97 hoặc 121 | Số khung hình cơ sở (97 cho 540P, 121 cho 720P) - ar_step (
int, tùy chọn, mặc định là0) — Kiểm soát suy luận bất đồng bộ (0 cho chế độ đồng bộ). Bạn có thể đặtar_step=5để bật suy luận bất đồng bộ. Khi suy luận bất đồng bộ, khuyến nghị đặtcausal_block_size=5, trong khi không nên đặt giá trị này cho sinh đồng bộ. Suy luận bất đồng bộ sẽ cần nhiều bước hơn để khuếch tán toàn bộ chuỗi, điều này có nghĩa là nó sẽ CHẬM HƠN so với chế độ đồng bộ. Trong các thí nghiệm của chúng tôi, suy luận bất đồng bộ có thể cải thiện khả năng tuân theo chỉ thị và hiệu suất nhất quán về mặt thị giác. - causal_block_size (
int, tuỳ chọn, mặc định làNone) — Số lượng khung trong mỗi khối/mảnh. Được khuyến nghị khi sử dụng suy luận bất đồng bộ (khi ar_step > 0) - fps (
int, tùy chọn, mặc định là24) — Tốc độ khung hình của video được tạo
Trả về
~SkyReelsV2PipelineOutput hoặc tuple
Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về
trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool
cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> import torch
>>> from diffusers import (
... SkyReelsV2DiffusionForcingVideoToVideoPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-DF-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-DF-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2DiffusionForcingVideoToVideoPipeline.from_pretrained(
... "Skywork/SkyReels-V2-DF-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> output = pipe(
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=6.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ar_step=0, # Controls asynchronous inference (0 for synchronous mode)
... overlap_history=None, # Number of frames to overlap for smooth transitions in long videos
... addnoise_condition=20, # Improves consistency in long video generation
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Tham số
- prompt (
strhoặclist[str], tùy chọn) — prompt cần được mã hóa - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - do_classifier_free_guidance (
bool, tùy chọn, mặc định làTrue) — Có sử dụng classifier free guidance hay không. - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vàonegative_prompt. - device — (
torch.device, tùy chọn): thiết bị torch - dtype — (
torch.dtype, tùy chọn): torch dtype
Mã hóa prompt thành các trạng thái ẩn của text encoder.
generate_timestep_matrix
< source >( num_latent_frames: intstep_template: Tensorbase_num_latent_frames: intar_step: int = 5num_pre_ready: int = 0causal_block_size: int = 1shrink_interval_with_mask: bool = False ) → tuple containing
Tham số
- num_latent_frames (int) — Tổng số khung latent cần tạo
- step_template (torch.Tensor) — Lịch trình bước thời gian cơ sở (ví dụ: [1000, 800, 600, …, 0])
- base_num_latent_frames (int) — Số khung hình tối đa mà mô hình có thể xử lý trong một lần truyền trực tiếp
- ar_step (int, tùy chọn) — Kích thước bước tự hồi quy cho độ trễ thời gian. 0 = đồng bộ, >0 = bất đồng bộ. Mặc định là 5.
- num_pre_ready (int, optional) — Số khung hình đã được khử nhiễu (ví dụ: từ phần đầu vào trong tác vụ video2video). Mặc định là 0.
- causal_block_size (int, tùy chọn) — Số khung được xử lý như một khối nhân quả. Mặc định là 1.
- shrink_interval_with_mask (bool, tùy chọn) — Có tối ưu hóa các khoảng xử lý hay không. Mặc định là False.
Trả về
bộ tuple chứa
- step_matrix (torch.Tensor): Ma trận các bước thời gian cho mỗi khung hình ở mỗi lần lặp. Hình dạng: [num_iterations, num_latent_frames]
- step_index (torch.Tensor): Ma trận chỉ số để tra cứu bước thời gian. Hình dạng: [num_iterations, num_latent_frames]
- step_update_mask (torch.Tensor): Mặt nạ boolean chỉ định các khung hình cần cập nhật. Hình dạng: [num_iterations, num_latent_frames]
- valid_interval (list[tuple]): danh sách các khoảng (start, end) cho mỗi lần lặp
Gây ra
ValueError
ValueError— Nếu ar_step quá nhỏ so với cấu hình được cung cấp
Hàm này triển khai thuật toán diffusion forcing cốt lõi, tạo ra lịch trình khử nhiễu phối hợp giữa các khung thời gian. Nó hỗ trợ cả chế độ sinh đồng bộ và bất đồng bộ:
Chế độ đồng bộ (ar_step=0, causal_block_size=1):
- Tất cả các khung hình được khử nhiễu đồng thời ở mỗi bước thời gian
- Mỗi khung hình tuân theo cùng một quỹ đạo khử nhiễu: [1000, 800, 600, …, 0]
- Đơn giản hơn nhưng có thể kém nhất quán theo thời gian hơn đối với các video dài
Chế độ bất đồng bộ (ar_step>0, causal_block_size>1):
- Các khung được nhóm thành các khối nhân quả và được xử lý theo từng khối/mảnh
- Mỗi khối được khử nhiễu theo một mẫu so le, tạo ra một “sóng khử nhiễu”
- Các khối trước được khử nhiễu nhiều hơn, các khối sau chậm hơn ar_step bước thời gian
- Tạo ra các phụ thuộc thời gian mạnh mẽ hơn và tính nhất quán tốt hơn
SkyReelsV2Pipeline
lớp diffusers.SkyReelsV2Pipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModeltransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Tham số
- tokenizer (
T5Tokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl. - transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents đầu vào.
- scheduler (UniPCMultistepScheduler) —
Một scheduler được sử dụng kết hợp với
transformerđể khử nhiễu các latents ảnh đã được mã hóa. - vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).
Pipeline để tạo Video từ Văn bản (t2v) sử dụng SkyReels-V2.
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.).
__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 6.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple
Tham số
- prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyềnprompt_embedsthay thế. - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (guidance_scale < 1). - height (
int, mặc định là544) — Chiều cao của hình ảnh được tạo ra, tính bằng pixel. - width (
int, mặc định là960) — Chiều rộng của hình ảnh được tạo ra, tính bằng pixel. - num_frames (
int, mặc định là97) — Số lượng khung hình trong video được tạo ra. - num_inference_steps (
int, mặc định là50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn. - guidance_scale (
float, mặc định là6.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance.guidance_scaleđược định nghĩa làwcủa phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặtguidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ vớipromptvăn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt. - generator (
torch.Generatorhoặclist[torch.Generator], tùy chọn) — Mộttorch.Generatorđể làm cho quá trình sinh ra kết quả xác định. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụnggeneratorngẫu nhiên được cung cấp. - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh các đầu vào văn bản (trọng số prompt). Nếu không được cung cấp,negative_prompt_embedssẽ được tạo từ đối số đầu vàonegative_prompt. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữaPIL.Imagehoặcnp.array. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtSkyReelsV2PipelineOutputthay vì một tuple thông thường hay không. - attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa dướiself.processortrong diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con củaPipelineCallbackhoặcMultiPipelineCallbacksđược gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargssẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởicallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, optional) — Danh sách các tensor đầu vào cho hàmcallback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham sốcallback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính._callback_tensor_inputscủa lớp pipeline của bạn. - max_sequence_length (
int, tùy chọn, mặc định là512) — Chiều dài tối đa của chuỗi cho trình mã hóa văn bản.
Trả về
~SkyReelsV2PipelineOutput hoặc tuple
Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về
trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool
cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> import torch
>>> from diffusers import (
... SkyReelsV2Pipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-T2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-T2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2Pipeline.from_pretrained(
... "Skywork/SkyReels-V2-T2V-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 8.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> output = pipe(
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=6.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Tham số
- prompt (
strhoặclist[str], tùy chọn) — prompt cần được mã hóa - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - do_classifier_free_guidance (
bool, tùy chọn, mặc định làTrue) — Có sử dụng classifier free guidance hay không. - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vàonegative_prompt. - device — (
torch.device, tùy chọn): thiết bị torch - dtype — (
torch.dtype, tùy chọn): torch dtype
Mã hóa prompt thành các trạng thái ẩn của text encoder.
SkyReelsV2ImageToVideoPipeline
lớp diffusers.SkyReelsV2ImageToVideoPipeline
< source >( tokenizer: AutoTokenizertext_encoder: transformers.models.t5.modeling_t5.T5EncoderModel | transformers.models.umt5.modeling_umt5.UMT5EncoderModelimage_encoder: CLIPVisionModelWithProjectionimage_processor: CLIPProcessortransformer: SkyReelsV2Transformer3DModelvae: AutoencoderKLWanscheduler: UniPCMultistepScheduler )
Tham số
- tokenizer (
T5Tokenizer) — Tokenizer từ T5, cụ thể là biến thể google/umt5-xxl. - text_encoder (
T5EncoderModel) — T5, cụ thể là biến thể google/umt5-xxl. - image_encoder (
CLIPVisionModelWithProjection) — CLIP, cụ thể là biến thể clip-vit-huge-patch14. - transformer (SkyReelsV2Transformer3DModel) — Transformer có điều kiện để khử nhiễu các latents đầu vào.
- scheduler (UniPCMultistepScheduler) —
Một scheduler được sử dụng kết hợp với
transformerđể khử nhiễu các latents ảnh đã được mã hóa. - vae (AutoencoderKLWan) — Mô hình Variational Auto-Encoder (VAE) để mã hóa và giải mã video từ và sang các biểu diễn ẩn (latent representations).
Pipeline để tạo Video từ Ảnh (i2v) sử dụng SkyReels-V2.
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.).
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 544width: int = 960num_frames: int = 97num_inference_steps: int = 50guidance_scale: float = 5.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~SkyReelsV2PipelineOutput or tuple
Tham số
- image (
PipelineImageInput) — Hình ảnh đầu vào để điều kiện cho quá trình tạo. Phải là một hình ảnh, một danh sách các hình ảnh hoặc mộttorch.Tensor. - prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt để định hướng việc tạo ảnh. Nếu không được định nghĩa, bạn phải truyềnprompt_embedsthay thế. - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - height (
int, mặc định là544) — Chiều cao của video được tạo ra. - width (
int, mặc định là960) — Chiều rộng của video được tạo. - num_frames (
int, mặc định là97) — Số lượng khung hình trong video được tạo ra. - num_inference_steps (
int, mặc định là50) — Số bước khử nhiễu. Số bước khử nhiễu nhiều hơn thường dẫn đến hình ảnh có chất lượng cao hơn, với cái giá là suy luận chậm hơn. - guidance_scale (
float, mặc định là5.0) — Thang độ dẫn hướng như được định nghĩa trong Classifier-Free Diffusion Guidance.guidance_scaleđược định nghĩa làwcủa phương trình 2. trong Imagen Paper. Thang độ dẫn hướng được kích hoạt bằng cách đặtguidance_scale > 1. Thang độ dẫn hướng cao hơn khuyến khích tạo ra các hình ảnh gắn kết chặt chẽ vớipromptvăn bản, thường phải đánh đổi bằng chất lượng hình ảnh thấp hơn. - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng hình ảnh cần tạo cho mỗi prompt. - generator (
torch.Generatorhoặclist[torch.Generator], tùy chọn) — Mộttorch.Generatorđể làm cho quá trình sinh ra kết quả xác định. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước, lấy mẫu từ phân phối Gaussian, dùng làm đầu vào cho việc tạo ảnh. Có thể dùng để tinh chỉnh cùng một quá trình tạo với các prompt khác nhau. Nếu không được cung cấp, một tensor latents sẽ được tạo bằng cách lấy mẫu sử dụnggeneratorngẫu nhiên được cung cấp. - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản (trọng số prompt). Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàonegative_prompt. - image_embeds (
torch.Tensor, tùy chọn) — Các embedding hình ảnh đã được tạo trước. Có thể được sử dụng để dễ dàng điều chỉnh đầu vào hình ảnh (trọng số). Nếu không được cung cấp, các embedding hình ảnh sẽ được tạo từ đối số đầu vàoimage. - last_image (
torch.Tensor, tùy chọn) — Hình ảnh cuối cùng tùy chọn để điều kiện hóa từ ảnh sang video, đóng vai trò neo giữ phần kết của video được tạo ra. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra của hình ảnh được tạo. Chọn giữaPIL.Imagehoặcnp.array. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtWanPipelineOutputthay vì một tuple thông thường hay không. - attention_kwargs (
dict, tùy chọn) — Một từ điển kwargs, nếu được chỉ định, sẽ được truyền đếnAttentionProcessornhư đã định nghĩa dướiself.processortrong diffusers.models.attention_processor. - callback_on_step_end (
Callable,PipelineCallback,MultiPipelineCallbacks, tùy chọn) — Một hàm hoặc một lớp con củaPipelineCallbackhoặcMultiPipelineCallbacksđược gọi vào cuối mỗi bước khử nhiễu trong quá trình suy luận, với các đối số sau:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargssẽ bao gồm một danh sách tất cả các tensor như được chỉ định bởicallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list, optional) — Danh sách các tensor đầu vào cho hàmcallback_on_step_end. Các tensor được chỉ định trong danh sách sẽ được truyền dưới dạng tham sốcallback_kwargs. Bạn chỉ có thể bao gồm các biến được liệt kê trong thuộc tính._callback_tensor_inputscủa lớp pipeline của bạn. - max_sequence_length (
int, tùy chọn, mặc định là512) — Chiều dài tối đa của chuỗi prompt.
Trả về
~SkyReelsV2PipelineOutput hoặc tuple
Nếu return_dict là True, SkyReelsV2PipelineOutput sẽ được trả về, ngược lại một tuple sẽ được trả về
trong đó phần tử đầu tiên là một danh sách chứa các hình ảnh được tạo ra và phần tử thứ hai là một danh sách các bool
cho biết hình ảnh được tạo ra tương ứng có chứa nội dung “không an toàn” (nsfw) hay không.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> import torch
>>> from diffusers import (
... SkyReelsV2ImageToVideoPipeline,
... UniPCMultistepScheduler,
... AutoencoderKLWan,
... )
>>> from diffusers.utils import export_to_video
>>> from PIL import Image
>>> # Load the pipeline
>>> # Available models:
>>> # - Skywork/SkyReels-V2-I2V-1.3B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-540P-Diffusers
>>> # - Skywork/SkyReels-V2-I2V-14B-720P-Diffusers
>>> vae = AutoencoderKLWan.from_pretrained(
... "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
... subfolder="vae",
... torch_dtype=torch.float32,
... )
>>> pipe = SkyReelsV2ImageToVideoPipeline.from_pretrained(
... "Skywork/SkyReels-V2-I2V-14B-720P-Diffusers",
... vae=vae,
... torch_dtype=torch.bfloat16,
... )
>>> flow_shift = 5.0 # 8.0 for T2V, 5.0 for I2V
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe = pipe.to("cuda")
>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> image = Image.open("path/to/image.png")
>>> output = pipe(
... image=image,
... prompt=prompt,
... num_inference_steps=50,
... height=544,
... width=960,
... guidance_scale=5.0, # 6.0 for T2V, 5.0 for I2V
... num_frames=97,
... ).frames[0]
>>> export_to_video(output, "video.mp4", fps=24, quality=8)encode_prompt
< source >( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )
Tham số
- prompt (
strhoặclist[str], tùy chọn) — prompt cần được mã hóa - negative_prompt (
strhoặclist[str], tùy chọn) — Prompt hoặc các prompt không dùng để định hướng việc tạo ảnh. Nếu không được định nghĩa, cần truyềnnegative_prompt_embedsthay thế. Bỏ qua khi không sử dụng guidance (tức là bị bỏ qua nếuguidance_scalenhỏ hơn1). - do_classifier_free_guidance (
bool, tùy chọn, mặc định làTrue) — Có sử dụng classifier free guidance hay không. - num_videos_per_prompt (
int, tùy chọn, mặc định là 1) — Số lượng video cần được tạo cho mỗi prompt. torch device để đặt các embeddings kết quả - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, các embedding văn bản sẽ được tạo từ đối số đầu vàoprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. Có thể dùng để dễ dàng điều chỉnh đầu vào văn bản, vd. trọng số prompt. Nếu không được cung cấp, negative_prompt_embeds sẽ được tạo từ đối số đầu vàonegative_prompt. - device — (
torch.device, tùy chọn): thiết bị torch - dtype — (
torch.dtype, tùy chọn): torch dtype
Mã hóa prompt thành các trạng thái ẩn của text encoder.
SkyReelsV2PipelineOutput
lớp diffusers.pipelines.skyreels_v2.pipeline_output.SkyReelsV2PipelineOutput
< source >( frames: Tensor )
Tham số
- frames (
torch.Tensor,np.ndarray, hoặc list[list[PIL.Image.Image]]) — danh sách các đầu ra video - Có thể là một danh sách lồng nhau có độ dàibatch_size,trong đó mỗi danh sách con chứa các chuỗi hình ảnh PIL đã khử nhiễu có độ dàinum_frames.Nó cũng có thể là một mảng NumPy hoặc tensor Torch có hình dạng(batch_size, num_frames, channels, height, width).
Lớp đầu ra cho các pipeline của SkyReelsV2.