Diffusers documentation
AnyFlow
AnyFlow
AnyFlow: Mô hình khuếch tán video bất kỳ bước nào với chưng cất bản đồ luồng theo chính sách từ NVIDIA, Đại học Quốc gia Singapore và Viện Công nghệ Massachusetts, bởi Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai, Mike Zheng Shou.
Tóm tắt: AnyFlow là khung khuếch tán video theo bước tùy ý đầu tiên được xây dựng dựa trên bản đồ dòng chảy, cho phép một mô hình duy nhất (hai chiều hoặc nhân quả) thích ứng với các ngân sách suy luận tùy ý.
Sinh video ít bước đã được thúc đẩy đáng kể bởi các mô hình nhất quán. Tuy nhiên, hiệu suất của chúng thường suy giảm trong các mô hình khuếch tán video bất kỳ bước nào do công thức điểm cố định. Để giải quyết hạn chế này, chúng tôi giới thiệu AnyFlow, khung trích xuất mô hình khuếch tán video bất kỳ bước nào đầu tiên được xây dựng dựa trên các bản đồ dòng chảy. Thay vì chỉ học ánh xạ z_t → z_0, AnyFlow học các chuyển tiếp z_t → z_r trên các khoảng thời gian tùy ý, cho phép một mô hình duy nhất thích ứng với các ngân sách suy luận khác nhau. Chúng tôi thiết kế một công thức huấn luyện bản đồ dòng chảy tiến bộ được cải thiện để tinh chỉnh các mô hình khuếch tán video được huấn luyện trước thành các mô hình bản đồ dòng chảy, và giới thiệu Mô phỏng ngược Bản đồ dòng chảy để cho phép trích xuất theo chính sách cho các mô hình bản đồ dòng chảy. Các thí nghiệm rộng rãi trên cả kiến trúc hai chiều và nhân quả, ở quy mô từ 1.3B đến 14B, trên các tác vụ từ văn bản sang video và từ hình ảnh sang video cho thấy AnyFlow vượt trội hơn so với các đường cơ sở dựa trên tính nhất quán trong khi vẫn duy trì độ trung thực cao và lấy mẫu linh hoạt dưới các ngân sách bước khác nhau.
Các pipeline AnyFlow được đóng góp bởi nhóm AnyFlow. Mã nguồn gốc có sẵn trên GitHub, trang dự án nằm tại nvlabs.github.io/AnyFlow, và các mô hình được huấn luyện trước có thể tìm thấy trong bộ sưu tập nvidia/anyflow trên Hugging Face.
Các Mô hình Có sẵn:
| Checkpoint | Backbone | Mô tả |
|---|---|---|
nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers | Wan2.1 1.3B | T2V hai chiều |
nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers | Wan2.1 14B | T2V hai chiều |
nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers | FAR + Wan2.1 1.3B | T2V / I2V / V2V nhân quả |
nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers | FAR + Wan2.1 14B | T2V / I2V / V2V nhân quả |
AnyFlowPipelineđược thiết kế cho các mô hình khuếch tán hai chiều trong việc tạo video từ văn bản (T2V).AnyFlowFARPipelinelà mô hình khuếch tán nhân quả theo từng khối, hỗ trợ tạo video từ văn bản (T2V), tạo video từ hình ảnh (I2V) và tiếp nối video (V2V).
Tạo nội dung với AnyFlow (T2V hai chiều)
import torch
from diffusers import AnyFlowPipeline
from diffusers.utils import export_to_video
pipe = AnyFlowPipeline.from_pretrained(
"nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
prompt = (
"An astronaut runs smoothly and appears almost weightless on the lunar surface, "
"as seen from a low-angle shot that highlights the vast, desolate background of the moon. "
"The moon's craters and rocky terrain are clearly visible, creating a stark contrast against "
"the running astronaut who moves with graceful, fluid motions."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_t2v.mp4", fps=16)Sinh nội dung với AnyFlow (FAR Causal)
Pipeline nhân quả chọn giữa T2V / I2V / V2V thông qua đối số video (hoặc video_latents):
bỏ trống cả hai để tạo video từ văn bản thuần túy, hoặc truyền video=<tensor> có hình dạng (B, T, C, H, W) trong khoảng [0, 1] với T = 4n + 1 để điều kiện hóa dựa trên các khung hình có sẵn. Sử dụng một khung hình điều kiện duy nhất cho I2V và một đoạn clip dài hơn cho việc tiếp nối V2V. Nếu bạn đã có các latent được mã hóa trước theo bố cục của mô hình, hãy truyền chúng qua video_latents=<tensor> để bỏ qua bước mã hóa VAE. video và video_latents là hai đối số loại trừ lẫn nhau.
Các checkpoint đã phát hành tích hợp
chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2](tổng 21) vào cấu hình transformer, phù hợp với 81 khung hình thô chuẩn (21 khung hình latent ở bước thời gian 4 của VAE). Khi bạn thay đổinum_frames, hãy truyền mộtchunk_partitioncó tổng bằng(num_frames - 1) // 4 + 1, nếu không pipeline sẽ gây raValueError.
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video
pipe = AnyFlowFARPipeline.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
prompt = (
"An astronaut runs smoothly and appears almost weightless on the lunar surface, "
"as seen from a low-angle shot that highlights the vast, desolate background of the moon."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_far_t2v.mp4", fps=16)import numpy as np
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video, load_image
pipe = AnyFlowFARPipeline.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
# Example conditioning image from the AnyFlow repo.
first_frame = load_image(
"https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/images/1.jpg"
).resize((832, 480))
arr = np.asarray(first_frame).astype("float32") / 255.0 # (480, 832, 3)
context_tensor = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda") # (1, 1, 3, 480, 832)
prompt = (
"A towering, battle-scarred humanoid robot, reminiscent of a Transformer with powerful, segmented armor "
"and glowing red optics, walking through the skeletal remains of a city ruin. Twisted metal and shattered "
"concrete crunch under its heavy steps, as the robot scans the desolate, dust-choked skyline under an dark sky."
)
video = pipe(
prompt=prompt,
video=context_tensor,
num_inference_steps=4,
num_frames=81,
).frames[0]
export_to_video(video, "anyflow_far_i2v.mp4", fps=16)import numpy as np
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video, load_video
pipe = AnyFlowFARPipeline.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
# Example conditioning clip from the AnyFlow repo — take the first 9 frames (3 latent frames at VAE temporal stride 4).
context_frames = load_video(
"https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/videos/2.mp4"
)[:9]
arr = np.stack([np.asarray(f.resize((832, 480))) for f in context_frames]).astype("float32") / 255.0
context_tensor = torch.from_numpy(arr).permute(0, 3, 1, 2).unsqueeze(0).to("cuda") # (1, 9, 3, 480, 832)
prompt = (
"A focused trail runner's powerful strides through a dense, sun-dappled forest. "
"The camera tracks alongside, highlighting muscular exertion, sweat, and determined facial expression."
)
video = pipe(
prompt=prompt,
video=context_tensor,
num_inference_steps=4,
num_frames=81,
# Override chunk_partition so the first chunk covers exactly the 3 latent context frames.
chunk_partition=[3, 3, 3, 3, 3, 3, 3],
).frames[0]
export_to_video(video, "anyflow_far_v2v.mp4", fps=16)Ghi chú
- Classifier-free guidance đã được tích hợp vào các checkpoint được phát hành, do đó quá trình suy luận không thực hiện thêm một bước truyền dẫn có hướng dẫn thứ hai. Giữ nguyên giá trị mặc định
guidance_scale=1.0trừ khi checkpoint của bạn yêu cầu khác. FlowMapEulerDiscreteSchedulercó tính đa dụng. Bạn có thể gắn nó vào bất kỳ checkpoint nào đã được chưng cất bằng flow-map thông quafrom_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).AnyFlowPipelinesử dụngAnyFlowTransformer3DModel(hai chiều).AnyFlowFARPipelinesử dụngAnyFlowFARTransformer3DModel, trong đó bổ sung patch embedding cho khung nén và khối mask nhân quả FAR.- Việc nạp LoRA được hỗ trợ thông qua
WanLoraLoaderMixin, cùng một mixin được sử dụng bởi các pipeline Wan upstream. - Đối với các công thức huấn luyện (huấn luyện forward flow-map và chưng cất on-policy), hãy tham khảo khung huấn luyện AnyFlow gốc tại
NVlabs/AnyFlow; việc huấn luyện nằm ngoài phạm vi của diffusers.
AnyFlowPipeline
lớp diffusers.AnyFlowPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )
Tham số
- tokenizer ([AutoTokenizer]) — Tokenizer từ google/umt5-xxl.
- text_encoder ([UMT5EncoderModel]) — bộ mã hóa văn bản google/umt5-xxl.
- transformer ([AnyFlowTransformer3DModel]) — Transformer 3D flow-map hai chiều.
- vae ([AutoencoderKLWan]) — VAE mã hóa/giải mã video từ và sang các biểu diễn ẩn.
- scheduler ([FlowMapEulerDiscreteScheduler]) —
Trình lấy mẫu flow-map. Pipeline điều khiển
scheduler.step(..., timestep, sample, r_timestep)cho mỗi bước suy luận.
Pipeline tạo video từ văn bản hai chiều cho các checkpoint được chưng cất flow-map của AnyFlow, được giới thiệu trong AnyFlow.
AnyFlow học các chuyển tiếp có khoảng thời gian tùy ý thay vì ánh xạ cố định của các mô hình nhất quán, do đó một checkpoint đã được chưng cất duy nhất có thể được đánh giá ở 1, 2, 4, 8, 16… NFE mà không cần huấn luyện lại. Pipeline này hoạt động trên toàn bộ tensor video trong một lượt hai chiều; để tạo tự hồi quy theo từng khối (nhân quả), hãy sử dụng AnyFlowFARPipeline.
Sampling là Euler thuần túy ở dạng vận tốc trung bình (z_r = z_t - (t - r) * u) mà không có re-noising. Các checkpoint NVIDIA được phát hành đã tích hợp classifier-free guidance vào trọng số mô hình, do đó cài đặt mặc định guidance_scale=1.0 là cấu hình được khuyến nghị.
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: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = True ) → ~AnyFlowPipelineOutput 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 video. Nếu không được định nghĩa, hãy truyềnprompt_embedsthay thế. - video (
torch.Tensor, tùy chọn) — Các khung hình điều kiện trước VAE có hình dạng(B, T, C, H, W)trong khoảng[0, 1]. Khi được cung cấp, pipeline sẽ mã hóa chúng bằng VAE và giữ nguyên phần tiền tố latent tương ứng trong suốt quá trình lấy mẫu. Loại trừ lẫn nhau vớivideo_latents. - video_latents (
torch.Tensor, tùy chọn) — Các latents VAE đã được mã hóa trước theo bố cục AnyFlow(B, T_latent, C, H_latent, W_latent). Bỏ qua bước mã hóa VAE ở phía pipeline. Loại trừ lẫn nhau vớivideo. - negative_prompt (
strhoặcList[str], tùy chọn) — Prompt hoặc các prompt cần tránh trong quá trình tạo video. Bỏ qua khi không sử dụng guidance (guidance_scale < 1). - height (
int, mặc định là480) — Chiều cao của video được tạo ra, tính bằng pixel. - width (
int, mặc định là832) — Chiều rộng của video được tạo ra, tính bằng pixel. - num_frames (
int, mặc định là81) — Số lượng khung hình trong video được tạo ra. Phải thỏa mãn(num_frames - 1) % vae_scale_factor_temporal == 0. - num_inference_steps (
int, mặc định là50) — Số bước khử nhiễu. Các checkpoint AnyFlow đã được chưng cất hỗ trợ lấy mẫu ở bất kỳ bước nào, do đó các giá trị thấp như1,2,4hoặc8là phổ biến. Tham số này bị bỏ qua khisigmashoặctimestepsđược cung cấp. - sigmas (
List[float], tùy chọn) — Lịch sigma tùy chỉnh cho lấy mẫu bất kỳ bước nào, trong khoảng[0, 1]và được sắp xếp từ nhiễu đến sạch. Độ dài xác địnhnum_inference_stepshiệu dụng; trình lập lịch sẽ thêm sigma0cuối cùng. - timesteps (
List[float], tùy chọn) — Lịch trình timestep tùy chỉnh cho việc lấy mẫu any-step, cùng đơn vị vớiself.scheduler.timesteps(tức là được nhân vớinum_train_timesteps). Loại trừ lẫn nhau vớisigmas. - guidance_scale (
float, mặc định là1.0) — Thang độ hướng dẫn không có bộ phân loại (classifier-free guidance). Các checkpoint AnyFlow đã phát hành tích hợp CFG vào trọng số trong quá trình huấn luyện; giữ ở mức1.0trừ khi bạn biết chắc checkpoint của mình yêu cầu khác. - num_videos_per_prompt (
int, tùy chọn, mặc định là1) — Số lượng video 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 để sử dụng làm đầu vào. Nếu không được cung cấp, latents sẽ được lấy mẫu từgeneratorđượ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ể được sử dụng để điều chỉnh đầu vào văn bản (ví dụ: trọng số prompt). Nếu không được cung cấp, các embedding sẽ được tạo từprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra. Một trong số"pil","np","pt"hoặc"latent". - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtAnyFlowPipelineOutputthay 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, tùy chọn) — Một hàm hoặcPipelineCallbackđược gọi vào cuối mỗi bước suy luận. Xemcallbacksđể biết thêm chi tiết. - callback_on_step_end_tensor_inputs (
List[str], tùy chọn, mặc định là["latents"]) — Các tensor đầu vào được chuyển tiếp đến callback. Phải là một tập con củaself._callback_tensor_inputs. - max_sequence_length (
int, mặc định là512) — Độ dài tối đa của chuỗi trình mã hóa văn bản. Các prompt dài hơn sẽ bị cắt bớt. - use_mean_velocity (
bool, mặc định làTrue) — KhiTrue, mô hình flow-map được điều kiện hóa dựa trên cả bước thời gian nguồntvà bước thời gian đíchrđể dự đoán vận tốc trung bình, khớp với hành vi khi huấn luyện. Tắt đi để mô phỏng bước Euler thô (r = t).
Trả về
~AnyFlowPipelineOutput hoặc tuple
Nếu return_dict là True, AnyFlowPipelineOutput sẽ được trả về, ngược lại một tuple mà phần tử đầu tiên là video được tạo sẽ được trả về.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> import torch
>>> from diffusers import AnyFlowPipeline
>>> from diffusers.utils import export_to_video
>>> pipe = AnyFlowPipeline.from_pretrained(
... "nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")
>>> prompt = "A red panda eating bamboo in a forest, cinematic lighting"
>>> video = pipe(prompt, num_inference_steps=4, num_frames=33).frames[0]
>>> export_to_video(video, "anyflow_t2v.mp4", fps=16)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.
Mã hóa video trong không gian pixel thành bố cục ẩn của AnyFlow.
Tuân theo quy ước helper đơn của các pipeline diffusers khác (xem WanImageToVideoPipeline.encode_image): đóng gói tiền xử lý, mã hóa VAE và chuẩn hóa latent thành một lần gọi. Bố cục đầu ra là (B, T_latent, C, H, W), đây là định dạng mà transformer AnyFlow mong đợi cho các khung hình điều kiện.
AnyFlowFARPipeline
lớp diffusers.AnyFlowFARPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowFARTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )
Tham số
- tokenizer ([AutoTokenizer]) — Tokenizer từ google/umt5-xxl.
- text_encoder ([UMT5EncoderModel]) — bộ mã hóa văn bản google/umt5-xxl.
- transformer ([AnyFlowFARTransformer3DModel]) — Transformer 3D flow-map nhân quả FAR.
- vae ([AutoencoderKLWan]) — VAE mã hóa/giải mã video từ và sang các biểu diễn ẩn.
- scheduler ([FlowMapEulerDiscreteScheduler]) — Trình lấy mẫu flow-map.
Pipeline tạo video từ văn bản / tạo video từ hình ảnh / tạo video từ video dựa trên nhân quả (dựa trên FAR) cho các checkpoint của AnyFlow, được giới thiệu trong AnyFlow.
Pipeline điều khiển một vòng lặp lấy mẫu tự hồi quy theo từng khối: mỗi khối được khử nhiễu bằng các bước flow-map trong khi chỉ chú ý đến các khối trước đó thông qua chú ý nhân quả thưa theo khối, và bộ nhớ đệm KV trung gian được tái sử dụng giữa các khối.
Chế độ tác vụ (T2V / I2V / V2V) được chọn dựa trên đối số điều kiện nào được truyền vào __call__:
- cả
video=Nonevàvideo_latents=None— thuần văn bản sang video. video=<tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1>— các khung hình điều kiện trước VAE; pipeline sẽ mã hóa chúng bằng VAE. Truyền một video một khung hình cho I2V hoặc một đoạn clip nhiều khung hình cho V2V.video_latents=<latent tensor of shape (B, T_latent, C, H_latent, W_latent)>— các latent đã được mã hóa sẵn theo bố cục FAR (bỏ qua bước mã hóa VAE).
Khung xương FAR là biến thể nhân quả Wan2.1 được giới thiệu bởi FAR. Việc suy luận sử dụng Euler thuần túy ở dạng vận tốc trung bình cho từng khối, không có tái nhiễu. Hỗ trợ T2V / I2V / V2V kết hợp bằng một mô hình chưng cất duy nhất.
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: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = Trueuse_kv_cache: bool = Truechunk_partition: typing.Optional[typing.List[int]] = None ) → ~AnyFlowPipelineOutput 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 video. Nếu không được định nghĩa, hãy truyềnprompt_embedsthay thế. - video (
torch.Tensor, tùy chọn) — Các khung hình điều kiện trước VAE có hình dạng(B, T, C, H, W)trong khoảng[0, 1](T = 4n + 1). Khi được cung cấp, pipeline sẽ mã hóa chúng bằng VAE và giữ nguyên phần tiền tố latent tương ứng trong quá trình lấy mẫu. Loại trừ lẫn nhau vớivideo_latents. - video_latents (
torch.Tensor, tùy chọn) — Các latents VAE đã được mã hóa trước theo bố cục FAR(B, T_latent, C, H_latent, W_latent). Bỏ qua bước mã hóa VAE ở phía pipeline. Loại trừ lẫn nhau vớivideo. - negative_prompt (
strhoặcList[str], tùy chọn) — Prompt hoặc các prompt cần tránh trong quá trình tạo video. Bỏ qua khi không sử dụng guidance (guidance_scale < 1). - height (
int, mặc định là480) — Chiều cao của video được tạo ra, tính bằng pixel. - width (
int, mặc định là832) — Chiều rộng của video được tạo ra, tính bằng pixel. - num_frames (
int, mặc định là81) — Số lượng khung hình trong video được tạo ra. Phải thỏa mãn(num_frames - 1) % vae_scale_factor_temporal == 0. - num_inference_steps (
int, mặc định là50) — Số bước khử nhiễu cho mỗi khối. Các checkpoint AnyFlow-FAR đã được chưng cất hỗ trợ lấy mẫu theo bất kỳ bước nào (1, 2, 4, 8, …). Tham số này bị bỏ qua khisigmashoặctimestepsđược cung cấp. - sigmas (
List[float], tùy chọn) — Lịch sigma tùy chỉnh cho lấy mẫu bất kỳ bước nào, trong khoảng[0, 1]và được sắp xếp từ nhiễu đến sạch. Độ dài xác địnhnum_inference_stepshiệu dụng; trình lập lịch sẽ thêm sigma0cuối cùng. - timesteps (
List[float], tùy chọn) — Lịch trình timestep tùy chỉnh cho việc lấy mẫu any-step, cùng đơn vị vớiself.scheduler.timesteps(tức là được nhân vớinum_train_timesteps). Loại trừ lẫn nhau vớisigmas. - guidance_scale (
float, mặc định là1.0) — Thang độ hướng dẫn không có bộ phân loại (classifier-free guidance). Các checkpoint AnyFlow đã phát hành tích hợp CFG vào trọng số trong quá trình huấn luyện; giữ ở mức1.0trừ khi checkpoint yêu cầu khác. - num_videos_per_prompt (
int, tùy chọn, mặc định là1) — Số lượng video cần tạo cho mỗi prompt. - generator (
torch.GeneratorhoặcList[torch.Generator], tùy chọn) — Bộ tạo được dùng để đặt hạt giống (seed) cho quá trình lấy mẫu. - latents (
torch.Tensor, tùy chọn) — Các latents nhiễu đã được tạo trước. Nếu không được cung cấp, latents sẽ được lấy mẫu từgeneratorđược cung cấp. - prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản đã được tạo trước. Nếu không được cung cấp, các embedding sẽ được tạo từprompt. - negative_prompt_embeds (
torch.Tensor, tùy chọn) — Các embedding văn bản âm đã được tạo trước. - output_type (
str, tùy chọn, mặc định là"np") — Định dạng đầu ra. Một trong"pil","np","pt", hoặc"latent". - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtAnyFlowPipelineOutputthay 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, tùy chọn) — Một hàm hoặcPipelineCallbackđược gọi vào cuối mỗi bước suy luận. - callback_on_step_end_tensor_inputs (
List[str], tùy chọn, mặc định là["latents"]) — Các tensor đầu vào được chuyển tiếp đến callback. Phải là một tập con củaself._callback_tensor_inputs. - max_sequence_length (
int, mặc định là512) — Độ dài tối đa của chuỗi trình mã hóa văn bản. - use_mean_velocity (
bool, mặc định làTrue) — KhiTrue, điều kiện hóa mô hình flow-map dựa trên cả bước thời gian nguồntvà bước thời gian đíchrđể dự đoán vận tốc trung bình. Tắt đi để mô phỏng bước Euler thô. - use_kv_cache (
bool, mặc định làTrue) — Tái sử dụng bộ nhớ đệm KV của FAR attention giữa các khối nhân quả. Chỉ tắt khi gỡ lỗi. - chunk_partition (
List[int], tùy chọn) — Số lượng khung hình cho mỗi chunk. Mặc định làself.transformer.config.chunk_partition(khớp với các checkpoint 81 khung hình đã phát hành). Khi bạn thay đổinum_frames, hãy cung cấp mộtchunk_partitioncó tổng bằng(num_frames - 1) // vae_scale_factor_temporal + 1.
Trả về
~AnyFlowPipelineOutput hoặc tuple
Nếu return_dict là True, một AnyFlowPipelineOutput sẽ được trả về, ngược lại một tuple mà phần tử đầu tiên là video được tạo ra.
Hàm gọi call của pipeline để tạo nội dung.
Ví dụ:
>>> import numpy as np
>>> import torch
>>> from diffusers import AnyFlowFARPipeline
>>> from diffusers.utils import export_to_video, load_image
>>> pipe = AnyFlowFARPipeline.from_pretrained(
... "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")
>>> # Single-frame I2V: wrap the conditioning image as a (1, 1, 3, H, W) tensor in [0, 1].
>>> first_frame = load_image("path/to/first_frame.png").resize((832, 480))
>>> arr = np.asarray(first_frame).astype("float32") / 255.0
>>> context = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda")
>>> video = pipe(
... prompt="a cat walks across a sunlit lawn",
... video=context,
... num_inference_steps=4,
... num_frames=81,
... ).frames[0]
>>> export_to_video(video, "anyflow_far.mp4", fps=16)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.
Mã hóa video trong không gian pixel thành bố cục ẩn của AnyFlow.
Tuân theo quy ước helper đơn của các pipeline diffusers khác (xem WanImageToVideoPipeline.encode_image): đóng gói tiền xử lý, mã hóa VAE và chuẩn hóa latent thành một lần gọi. Bố cục đầu ra là (B, T_latent, C, H, W), đây là định dạng mà transformer AnyFlow mong đợi cho các khung hình điều kiện.
AnyFlowPipelineOutput
lớp diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput
< 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 AnyFlow.