Buckets:

mishig's picture
|
download
raw
35 kB

AnyFlow

NVIDIA, Ulusal Singapur Üniversitesi ve Massachusetts Teknoloji Enstitüsü'nden Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai, Mike Zheng Shou tarafından geliştirilen AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation.

Kısa özet: AnyFlow, akış haritaları üzerine kurulu ilk adım sayısı esnek video difüzyon çerçevesidir; bu sayede tek bir model (çift yönlü veya nedensel) keyfi çıkarım bütçelerine uyum sağlayabilir.

Az adımlı video üretimi, tutarlılık modelleri tarafından önemli ölçüde ilerletilmiştir. Ancak, performansları genellikle sabit nokta formülasyonu nedeniyle herhangi-bir-adım video difüzyon modellerinde düşer. Bu sınırlamayı ele almak için, akış haritaları üzerine kurulu ilk herhangi-bir-adım video difüzyon damıtma çerçevesi olan AnyFlow'u sunuyoruz. Sadece z_t → z_0 eşlemesini öğrenmek yerine, AnyFlow keyfi zaman aralıklarında z_t → z_r geçişlerini öğrenir ve bu sayede tek bir modelin farklı çıkarım bütçelerine uyum sağlamasını mümkün kılar. Ön eğitilmiş video difüzyon modellerini akış haritası modellerine dönüştüren, geliştirilmiş bir ileri akış haritası eğitim tarifi tasarladık ve akış haritası modelleri için politika-içi damıtmayı mümkün kılmak üzere Flow Map Backward Simulation'ı tanıttık. İki yönlü ve nedensel mimarilerde, 1.3B'den 14B'ye kadar ölçeklerde, metinden-videoya ve görüntüden-videoya görevlerinde yapılan kapsamlı deneyler, AnyFlow'un değişen adım bütçeleri altında yüksek sadakati ve esnek örneklemeyi korurken tutarlılığa dayalı taban çizgilerinden daha iyi performans gösterdiğini kanıtlamaktadır.

AnyFlow pipeline'leri AnyFlow Ekibi tarafından katkı sağlanmıştır. Orijinal kod GitHub'da, proje sayfası nvlabs.github.io/AnyFlow adresinde ve önceden eğitilmiş modeller Hugging Face'teki nvidia/anyflow koleksiyonunda bulunabilir.

Mevcut Modeller:

Kontrol Noktası Backbone Açıklama
nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers Wan2.1 1.3B Çift Yönlü T2V
nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers Wan2.1 14B Çift Yönlü T2V
nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers FAR + Wan2.1 1.3B Nedensel T2V / I2V / V2V
nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers FAR + Wan2.1 14B Nedensel T2V / I2V / V2V

AnyFlowPipeline, metinden videoya (T2V) üretiminde çift yönlü difüzyon modelleri için tasarlanmıştır. AnyFlowFARPipeline, metinden videoya (T2V) üretimini, görüntüden videoya (I2V) üretimini ve video devamını (V2V) destekleyen parça bazlı nedensel bir difüzyon modelidir.

AnyFlow ile Üretim (Çift Yönlü T2V)

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)

AnyFlow (FAR Causal) ile Üretim

Nedensel iş akışı, video (veya video_latents) argümanı üzerinden T2V / I2V / V2V arasında seçim yapar: düz metinden video için her ikisini de atlayın veya mevcut karelere koşullanmak için [0, 1] aralığında, T = 4n + 1 olacak şekilde (B, T, C, H, W) biçiminde video=<tensor> iletin. I2V için tek bir koşullama karesi, V2V devamı için ise daha uzun bir klip kullanın. Model yerleşiminde önceden kodlanmış latentleriniz varsa, VAE kodlamasını atlamak için bunları video_latents=<tensor> üzerinden iletin. video ve video_latents birbirini dışlar.

Yayınlanan checkpoint'ler, transformer yapılandırmasına chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2] (toplam 21) değerini gömülü olarak içerir; bu değer, VAE'nin 4 olan zamansal adımında 21 latent çerçeveye karşılık gelen standart 81 ham çerçeveye uyarlanmıştır. num_frames değerini değiştirdiğinizde, (num_frames - 1) // 4 + 1 değerine eşit toplamı olan uygun bir chunk_partition parametresi geçirmelisiniz; aksi takdirde pipeline bir ValueError hatası fırlatır.

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)

Notlar

  • Classifier-free guidance, yayınlanan checkpoint'lere entegre edilmiştir; bu nedenle çıkarım sırasında ikinci bir yönlendirilmiş ileri geçiş çalıştırılmaz. Kendi checkpoint'iniz aksi gerektirmedikçe varsayılan guidance_scale=1.0 değerini koruyun.
  • FlowMapEulerDiscreteScheduler genel amaçlıdır. from_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)) yoluyla herhangi bir flow-map-distilled checkpoint'e bağlayabilirsiniz.
  • AnyFlowPipeline, AnyFlowTransformer3DModel kullanır (çift yönlü). AnyFlowFARPipeline, sıkıştırılmış çerçeve yama gömme ve FAR nedensel blok maskesi ekleyen AnyFlowFARTransformer3DModel kullanır.
  • LoRA yükleme, WanLoraLoaderMixin üzerinden desteklenmektedir; bu, üst akış Wan pipeline'ları tarafından kullanılan aynı mixin'dir.
  • Eğitim tarifleri (forward flow-map eğitimi ve on-policy distillation) için, eğitim diffusers kapsamı dışında olduğundan, orijinal NVlabs/AnyFlow eğitim çerçevesine başvurun.

AnyFlowPipeline[[diffusers.AnyFlowPipeline]]

diffusers.AnyFlowPipeline[[diffusers.AnyFlowPipeline]]

diffusers.AnyFlowPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler)

Kaynak

Parametreler:

tokenizer ([AutoTokenizer]) : google/umt5-xxl modelinden Tokenizer.

text_encoder ([UMT5EncoderModel]) : google/umt5-xxl metin kodlayıcı.

transformer ([AnyFlowTransformer3DModel]) : Çift yönlü akış haritası 3D Transformer.

vae ([AutoencoderKLWan]) : Videoları latent temsillere kodlayan ve latent temsillerden videolara çözen VAE.

scheduler ([FlowMapEulerDiscreteScheduler]) : Akış haritası örnekleyici. Boru hattı, çıkarım adımının her birinde scheduler.step(..., timestep, sample, r_timestep) çağrısını tetikler.

AnyFlow'da tanıtılan, AnyFlow akış haritası damıtılmış kontrol noktaları için çift yönlü metinden videoya üretim hattı.

AnyFlow, tutarlılık modellerindeki sabit zt→z0z_t \to z_0 eşlemesi yerine keyfi aralıklı geçişleri zt→zrz_t \to z_r öğrenir; bu sayede yeniden eğitim gerektirmeden tek bir damıtılmış kontrol noktası 1, 2, 4, 8, 16... NFE değerlerinde değerlendirilebilir. Bu boru hattı, tam video tensörü üzerinde tek bir çift yönlü geçişte çalışır; parça bazlı otoregresif (nedensel) üretim için AnyFlowFARPipeline kullanın.

Örnekleme, yeniden gürültüleme olmadan ortalama hız formunda düz Euler'dir (z_r = z_t - (t - r) * u). Yayınlanan NVIDIA kontrol noktaları, sınıflandırıcı-ücretsiz yönlendirmeyi model ağırlıklarına katlar; bu nedenle varsayılan guidance_scale=1.0 önerilen ayar olarak kabul edilir.

Bu model, [DiffusionPipeline] sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda kontrol edin.

call[[diffusers.AnyFlowPipeline.call]]

__call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True)

Kaynak

Parametreler:

prompt (str veya List[str], isteğe bağlı) : Video üretimini yönlendirmek için istem veya istemler. Tanımlanmamışsa, bunun yerine prompt_embeds geçirin.

video (torch.Tensor, isteğe bağlı) : [0, 1] aralığında, (B, T, C, H, W) biçimindeki ön-VAE koşullandırma kareleri. Sağlandığında, pipeline bunları VAE ile kodlar ve örneklem sırasında ilgili gizli öneki sabit tutar. video_latents ile karşılıklı dışlayıcıdır.

video_latents (torch.Tensor, isteğe bağlı) : AnyFlow yerleşimindeki (B, T_latent, C, H_latent, W_latent) önceden kodlanmış VAE latensleri. Pipeline tarafında VAE kodlamasını atlar. video ile birbirini dışlar.

negative_prompt (str veya List[str], isteğe bağlı) : Video üretimi sırasında kaçınılması gereken istem veya istemler. Rehberlik kullanılmadığında (guidance_scale < 1) yok sayılır.

height (int, varsayılan 480) : Üretilen videonun piksel cinsinden yüksekliği.

width (int, varsayılan 832) : Üretilen videonun piksel cinsinden genişliği.

num_frames (int, varsayılan 81) : Üretilen videodaki kare sayısı. (num_frames - 1) % vae_scale_factor_temporal == 0 koşulunu sağlamalıdır.

num_inference_steps (int, varsayılan 50) : Gürültü azaltma adım sayısı. Distilled AnyFlow checkpoint'leri herhangi bir adımda örneklemeyi desteklediğinden, 1, 2, 4 veya 8 gibi düşük değerler yaygındır. sigmas veya timesteps sağlandığında yok sayılır.

sigmas (List[float], isteğe bağlı) : Gürültülüden temizden sıralanmış, [0, 1] aralığında, herhangi bir adım örneklemesi için özel sigma zamanlaması. Uzunluk, etkin num_inference_steps değerini belirler; zamanlayıcı son 0 sigma değerini ekler.

timesteps (List[float], isteğe bağlı) : Herhangi bir adımlı örneklemeler için özel zaman adımı zamanlaması, self.scheduler.timesteps ile aynı birimlerde (yani num_train_timesteps ile ölçeklenmiş). sigmas ile birbirini dışlar.

guidance_scale (float, varsayılan 1.0) : Classifier-free guidance ölçeği. Yayınlanan AnyFlow checkpoint'leri, eğitim sırasında CFG'yi ağırlıklara entegre eder; checkpoint'inizin farklı bir değer beklediğinden emin olmadıkça 1.0 olarak bırakın.

num_videos_per_prompt (int, isteğe bağlı, varsayılan 1) : Her istem için üretilecek video sayısı.

generator (torch.Generator veya List[torch.Generator], isteğe bağlı) : Üretimi deterministik hale getirmek için bir torch.Generator.

latents (torch.Tensor, isteğe bağlı) : Girdi olarak kullanılacak önceden oluşturulmuş gürültülü latentler. Sağlanmazsa, latentler sağlanan generator örnekleme işleminden alınır.

prompt_embeds (torch.Tensor, isteğe bağlı) : Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini ayarlamak için kullanılabilir (ör. istem ağırlıklandırma). Sağlanmazsa, gömme değerleri prompt üzerinden oluşturulur.

negative_prompt_embeds (torch.Tensor, isteğe bağlı) : Önceden oluşturulmuş negatif metin gömme değerleri.

output_type (str, isteğe bağlı, varsayılan "np") : Çıktı biçimi. "pil", "np", "pt" veya "latent" değerlerinden biri.

return_dict (bool, isteğe bağlı, varsayılan True) : Düz bir tuple yerine AnyFlowPipelineOutput döndürülüp döndürülmemesi.

attention_kwargs (dict, isteğe bağlı) : Belirtilirse, diffusers.models.attention_processor içinde self.processor altında tanımlanan AttentionProcessor'a iletilen bir kwargs sözlüğü.

callback_on_step_end (Callable, isteğe bağlı) : Her çıkarım adımının sonunda çağrılan bir fonksiyon veya PipelineCallback. Ayrıntılar için callbacks bölümüne bakın.

callback_on_step_end_tensor_inputs (List[str], isteğe bağlı, varsayılan ["latents"]) : Geri çağrıya (callback) iletilecek girdi tensörleri. self._callback_tensor_inputs'ün bir alt kümesi olmalıdır.

max_sequence_length (int, varsayılan 512) : Metin kodlayıcısının (text-encoder) maksimum dizi uzunluğu. Daha uzun istekler kırpılır.

use_mean_velocity (bool, varsayılan True) : True olduğunda, akış haritası modeli, eğitim zamanındaki davranışla uyumlu olarak ortalama bir hız tahmin etmek için hem kaynak zaman adımına t hem de hedef zaman adımına r göre koşullandırılır. Ham Euler adımını yansıtmak için devre dışı bırakın (r = t).

Dönüş: ~AnyFlowPipelineOutput veya tuple

return_dict True ise AnyFlowPipelineOutput döndürülür, aksi halde ilk öğesi üretilen video olan bir tuple döndürülür.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:

>>> 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[[diffusers.AnyFlowPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : kodlanacak istem

negative_prompt (str veya list[str], isteğe bağlı) : Görsel üretimi yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine negative_prompt_embeds parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani guidance_scale değeri 1'den küçükse) yok sayılır.

do_classifier_free_guidance (bool, isteğe bağlı, varsayılan True) : Sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı.

num_videos_per_prompt (int, opsiyonel, varsayılan 1) : Her istem için oluşturulması gereken video sayısı. Sonuç gömme vektörlerinin yerleştirileceği torch cihazı

prompt_embeds (torch.Tensor, isteğe bağlı) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri prompt girdi argümanından oluşturulur.

negative_prompt_embeds (torch.Tensor, isteğe bağlı) : Ön oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds, negative_prompt girdi argümanından oluşturulur.

device : (torch.device, isteğe bağlı): torch cihazı

dtype : (torch.dtype, isteğe bağlı): torch dtype

İsteği metin kodlayıcı gizli durumlarına kodlar.

encode_video[[diffusers.AnyFlowPipeline.encode_video]]

encode_video(video: Tensor, height: int, width: int)

Kaynak

Bir piksel uzayı videosunu AnyFlow'un gizli düzenine kodlayın.

Diğer diffusers pipeline'larının tek yardımcı fonksiyon (single-helper) sözleşmesini yansıtır (bkz. WanImageToVideoPipeline.encode_image): ön işleme, VAE kodlaması ve latent normalizasyonunu tek bir çağrıda birleştirir. Çıkış düzeni (B, T_latent, C, H, W)'dir ve bu, AnyFlow transformer'ın koşullu kareler (conditioning frames) için beklediği düzenin ta kendisidir.

AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]]

diffusers.AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]]

diffusers.AnyFlowFARPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowFARTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler)

Kaynak

Parametreler:

tokenizer ([AutoTokenizer]) : google/umt5-xxl modelinden Tokenizer.

text_encoder ([UMT5EncoderModel]) : google/umt5-xxl metin kodlayıcı.

transformer ([AnyFlowFARTransformer3DModel]) : FAR nedensel akış haritası 3B Transformer.

vae ([AutoencoderKLWan]) : Videoları latent temsillere kodlayan ve latent temsillerden videolara çözen VAE.

scheduler ([FlowMapEulerDiscreteScheduler]) : Akış haritası örnekleyici.

Causal AnyFlow'da tanıtılan, AnyFlow kontrol noktaları için (FAR tabanlı) metinden videoya / görüntüden videoya / videodan videoya hattı.

Pipeline, parça bazlı otoregresif örneklem döngüsünü yönetir: her parça, blok-sparse nedensel dikkat ile yalnızca önceki parçalara odaklanarak flow-map adımlarıyla gürültüden arındırılır ve ara KV önbelleği parçalar arasında yeniden kullanılır.

Görev modu (T2V / I2V / V2V), __call__'ye hangi koşullandırma argümanının geçirildiğine göre seçilir:

  • hem video=None hem de video_latents=None — saf metinden videoya.
  • video=&amp;lt;tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1> — VAE öncesi koşullandırma kareleri; pipeline bunları VAE ile kodlar. I2V için tek kareli bir video, V2V için çok kareli bir klip iletin.
  • video_latents=&amp;lt;latent tensor of shape (B, T_latent, C, H_latent, W_latent)> — FAR yerleşiminde zaten kodlanmış latentler (VAE kodlama adımını atlar).

FAR omurgası, FAR tarafından tanıtılan nedensel Wan2.1 varyantıdır. Çıkarım, yeniden gürültüleme olmadan, parça başına ortalama hız formunda düz Euler ile yapılır. Tek bir damıtılmış model ile ortak T2V / I2V / V2V desteklenir.

Bu model, [DiffusionPipeline] sınıfından devralır. Tüm pipeline'lar için uygulanan genel yöntemlerin (indirme, kaydetme, belirli bir cihazda çalıştırma vb.) belgelerini üst sınıfın dokümantasyonunda kontrol edin.

call[[diffusers.AnyFlowFARPipeline.call]]

__call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True, use_kv_cache: bool = True, chunk_partition: typing.Optional[typing.List[int]] = None)

Kaynak

Parametreler:

prompt (str veya List[str], isteğe bağlı) : Video üretimini yönlendirmek için istem veya istemler. Tanımlanmamışsa, bunun yerine prompt_embeds geçirin.

video (torch.Tensor, isteğe bağlı) : [0, 1] aralığında, T = 4n + 1 olmak üzere (B, T, C, H, W) biçimindeki ön-VAE koşullandırma kareleri. Sağlandığında, pipeline bunları VAE ile kodlar ve örneklem sırasında ilgili gizli öneki sabit tutar. video_latents ile karşılıklı dışlayıcıdır.

video_latents (torch.Tensor, isteğe bağlı) : FAR yerleşimindeki (B, T_latent, C, H_latent, W_latent) önceden kodlanmış VAE latentleri. Pipeline tarafında VAE kodlamasını atlar. video ile birbirini dışlar.

negative_prompt (str veya List[str], isteğe bağlı) : Video üretimi sırasında kaçınılması gereken istem veya istemler. Rehberlik kullanılmadığında (guidance_scale < 1) yok sayılır.

height (int, varsayılan 480) : Üretilen videonun piksel cinsinden yüksekliği.

width (int, varsayılan 832) : Üretilen videonun piksel cinsinden genişliği.

num_frames (int, varsayılan 81) : Üretilen videodaki kare sayısı. (num_frames - 1) % vae_scale_factor_temporal == 0 koşulunu sağlamalıdır.

num_inference_steps (int, varsayılan 50) : Her parça için gürültü azaltma adım sayısı. Distilled AnyFlow-FAR checkpoint'leri herhangi bir adımlı örneklemeyi (1, 2, 4, 8, ...) destekler. sigmas veya timesteps sağlandığında yok sayılır.

sigmas (List[float], isteğe bağlı) : Gürültülüden temizden sıralanmış, [0, 1] aralığında, herhangi bir adım örneklemesi için özel sigma zamanlaması. Uzunluk, etkin num_inference_steps değerini belirler; zamanlayıcı son 0 sigma değerini ekler.

timesteps (List[float], isteğe bağlı) : Herhangi bir adımlı örneklemeler için özel zaman adımı zamanlaması, self.scheduler.timesteps ile aynı birimlerde (yani num_train_timesteps ile ölçeklenmiş). sigmas ile birbirini dışlar.

guidance_scale (float, varsayılan 1.0) : Classifier-free guidance ölçeği. Yayınlanan AnyFlow checkpoint'leri, eğitim sırasında CFG'yi ağırlıklara entegre eder; checkpoint aksi gerektirmedikçe 1.0 olarak bırakın.

num_videos_per_prompt (int, isteğe bağlı, varsayılan 1) : Her istem için üretilecek video sayısı.

generator (torch.Generator veya List[torch.Generator], isteğe bağlı) : Örnekleme için tohum olarak kullanılan üreteç.

latents (torch.Tensor, isteğe bağlı) : Önceden oluşturulmuş gürültülü latensler. Sağlanmazsa, latensler sağlanan generator örnekleme işleminden alınır.

prompt_embeds (torch.Tensor, isteğe bağlı) : Önceden oluşturulmuş metin gömme değerleri. Sağlanmazsa, gömme değerleri prompt üzerinden oluşturulur.

negative_prompt_embeds (torch.Tensor, isteğe bağlı) : Önceden oluşturulmuş negatif metin gömme değerleri.

output_type (str, isteğe bağlı, varsayılan "np") : Çıktı biçimi. "pil", "np", "pt" veya "latent" değerlerinden biri.

return_dict (bool, isteğe bağlı, varsayılan True) : Düz bir tuple yerine AnyFlowPipelineOutput döndürülüp döndürülmemesi.

attention_kwargs (dict, isteğe bağlı) : Belirtilirse, diffusers.models.attention_processor içinde self.processor altında tanımlanan AttentionProcessor'a iletilen bir kwargs sözlüğü.

callback_on_step_end (Callable, isteğe bağlı) : Her çıkarım adımının sonunda çağrılan bir işlev veya PipelineCallback.

callback_on_step_end_tensor_inputs (List[str], isteğe bağlı, varsayılan ["latents"]) : Geri çağrıya (callback) iletilecek girdi tensörleri. self._callback_tensor_inputs'ün bir alt kümesi olmalıdır.

max_sequence_length (int, varsayılan 512) : Metin kodlayıcısının (text-encoder) maksimum dizi uzunluğu.

use_mean_velocity (bool, varsayılan True) : True olduğunda, akış haritası modeli, ortalama bir hız tahmin etmek için hem kaynak zaman adımına t hem de hedef zaman adımına r göre koşullandırılır. Ham Euler adımını yansıtmak için devre dışı bırakın.

use_kv_cache (bool, varsayılan True) : Nedenli parçalar arasında FAR dikkat KV önbelleğini yeniden kullanın. Yalnızca hata ayıklama için devre dışı bırakın.

chunk_partition (List[int], isteğe bağlı) : Parça başına kare sayıları. Varsayılan değer self.transformer.config.chunk_partition'dir (yayınlanan 81 karelik kontrol noktalarıyla eşleşir). num_frames değerini değiştirdiğinizde, toplamı (num_frames - 1) // vae_scale_factor_temporal + 1 olan bir chunk_partition belirtin.

Dönüş: ~AnyFlowPipelineOutput veya tuple

return_dict True ise bir AnyFlowPipelineOutput döndürülür, aksi halde ilk öğesi üretilen video olan bir tuple döndürülür.

Üretim için pipeline'ın çağrı fonksiyonu.

Örnekler:

>>> 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[[diffusers.AnyFlowFARPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : kodlanacak istem

negative_prompt (str veya list[str], isteğe bağlı) : Görsel üretimi yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine negative_prompt_embeds parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani guidance_scale değeri 1'den küçükse) yok sayılır.

do_classifier_free_guidance (bool, isteğe bağlı, varsayılan True) : Sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı.

num_videos_per_prompt (int, opsiyonel, varsayılan 1) : Her istem için oluşturulması gereken video sayısı. Sonuç gömme vektörlerinin yerleştirileceği torch cihazı

prompt_embeds (torch.Tensor, isteğe bağlı) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri prompt girdi argümanından oluşturulur.

negative_prompt_embeds (torch.Tensor, isteğe bağlı) : Ön oluşturulmuş negatif metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, negative_prompt_embeds, negative_prompt girdi argümanından oluşturulur.

device : (torch.device, isteğe bağlı): torch cihazı

dtype : (torch.dtype, isteğe bağlı): torch dtype

İsteği metin kodlayıcı gizli durumlarına kodlar.

encode_video[[diffusers.AnyFlowFARPipeline.encode_video]]

encode_video(video: Tensor, height: int, width: int)

Kaynak

Bir piksel uzayı videosunu AnyFlow'un gizli düzenine kodlayın.

Diğer diffusers pipeline'larının tek yardımcı fonksiyon (single-helper) sözleşmesini yansıtır (bkz. WanImageToVideoPipeline.encode_image): ön işleme, VAE kodlaması ve latent normalizasyonunu tek bir çağrıda birleştirir. Çıkış düzeni (B, T_latent, C, H, W)'dir ve bu, AnyFlow transformer'ın koşullu kareler (conditioning frames) için beklediği düzenin ta kendisidir.

AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]

diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]

diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput(frames: Tensor)

Kaynak

Parametreler:

frames (torch.Tensor, np.ndarray veya list[list[PIL.Image.Image]]) : video çıktıları listesi - batch_size, uzunluğunda iç içe geçmiş bir liste olabilir; her alt liste, num_frames. uzunluğunda gürültüsü azaltılmış PIL görüntü dizileri içerir. Ayrıca (batch_size, num_frames, channels, height, width) biçiminde bir NumPy dizi veya Torch tensörü de olabilir.

AnyFlow hatları için çıktı sınıfı.

Xet Storage Details

Size:
35 kB
·
Xet hash:
0554790aa5fbba184636d7f5baa92fa62d5fd034abedd42916332bf67b21f089

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.