Diffusers documentation
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler flow-map-distille edilmiş difüzyon modelleri için tasarlanmış Euler tarzı bir örnekleyicidir. Flow-map modelleri, tutarlılık modellerindeki sabit eğrisinin aksine, keyfi aralıklı geçişleri öğrenir . Adımın her iki ucu da çağıran tarafından sağlanır; bu da herhangi bir adımlı örneklemeyi mümkün kılar: tek bir distille edilmiş checkpoint, yeniden eğitim gerektirmeden 1, 2, 4, 8, 16… NFE'de değerlendirilebilir.
Zamanlayıcı, AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation makalesinde tanıtılmış olup AnyFlowPipeline ve AnyFlowFARPipeline entegrasyonlarıyla birlikte gelir; ancak yalnızca AnyFlow'a özgü değildir — herhangi bir akış haritası damıtılmış kontrol noktası bunu kullanabilir.
FlowMapEulerDiscreteScheduler
sınıf diffusers.FlowMapEulerDiscreteScheduler
< source >( num_train_timesteps: int = 1000shift: float = 1.0 )
Parametreler
- num_train_timesteps (int, varsayılan 1000) — Altta yatan akış haritası modelinin eğitilmesinde kullanılan difüzyon adım sayısı.
- shift (float, varsayılan 1.0) —
Çıkarım zaman çizelgesine uygulanan çarpımsal zaman adımı kaydırması.
shift=1.0kimlik dönüşümüdür; 1.0'dan büyük değerler, zaman çizelgesini sonraki adımlarda daha fazla gürültü azaltmaya doğru iter (ör.shift=5, Wan2.1 varsayılanıyla eşleşir).
Akış haritası damıtılmış difüzyon modelleri için Euler tarzı örnekleyici.
Flow-map modelleri keyfi aralıklı geçişleri öğrenir tutarlılık modellerinin sabit eşlemesinin aksine, tek bir damıtılmış checkpoint, yeniden eğitim gerektirmeden 1, 2, 4, 8, … NFE'de değerlendirilebilir. adım metodu, örneği zaman adımından şuna ilerletir r_zaman_adımı tahmin edilen hız boyunca.
Yuchao Gu, Guian Fang ve diğerleri tarafından AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation makalesinde tanıtıldı.
Bu zamanlayıcı, [SchedulerMixin] ve [ConfigMixin] sınıflarından devralır. Tüm zamanlayıcılar için uygulanan genel yöntemlerin (yükleme, kaydetme vb.) belgelerini üst sınıf dokümantasyonunda bulabilirsiniz.
Yapılandırılmış kaydırma dönüşümünü bir sigma gerginliğine uygulayın.
timestep'in mevcut zaman çizelgesindeki indeksini döndürür; zaman çizelgesi dışında ise None döndürür.
Arama, küçük bir fp toleransı ile self.timesteps üzerinden yapılır. Doğrusal timesteps = sigmas * num_train_timesteps ilişkisini varsaymadan, karşılık gelen sigma değerini geri getirmek için kullanılır; böylece özel bir zaman çizelgesi (ör. doğrusal olmayan kaydırma, elle ayarlanmış timesteps) de doğru şekilde çözümlenir.
No-op kimlik ölçekleme. Diğer Diffusers zamanlayıcılarıyla API uyumluluğu için sağlanır.
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )
timestep'in normalize edilmiş değerine göre sample'ı noise'a doğru doğrusal olarak interpolasyon yapın.
Zamanlayıcı için başlangıç indeksini ayarlar. Programın ortasından başlayan (ör. görüntüden görüntüye) iş akışları, dağıtımı sabitlemek için set_timesteps ile ilk step arasında bunu çağırır.
set_timesteps
< source >( num_inference_steps: typing.Optional[int] = Nonedevice: typing.Union[str, torch.device] = Nonesigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = None )
Parametreler
- num_inference_steps (int, isteğe bağlı) —
Çıkarım adım sayısı.
Noneise,sigmasveyatimestepsparametresinin geçirilmesi gerekir. - device (str veya torch.device, isteğe bağlı) —
self.sigmas/self.timestepsiçin hedef cihaz. - sigmas (List[float], isteğe bağlı) —
num_inference_stepsuzunluğunda özel sigma zamanlaması. Son0sigma değeri otomatik olarak eklenir. Yapılandırılanshiftdeğeri bunun üzerine uygulanır. - timesteps (List[float], isteğe bağlı) —
num_inference_stepsuzunluğunda,self.timestepsile aynı birimlerde (yaninum_train_timestepsile ölçeklenmiş) özel bir timestep zamanlaması. İçeride sigmalara dönüştürülür. Hemsigmashem detimestepsgeçirilirse, uzunluklarının eşleşmesi gerekir.
Çıkarım zaman adımı zamanlamasını oluşturun.
İçsel olarak, num_inference_steps + 1 uzunluğundaki self.sigmas değerlerini takip eder (varsayılan olarak 1.0'dan 0.0'a kadar olan bir linspace'e uygulanan yapılandırılmış kaydırma); self.timesteps, num_train_timesteps ile ölçeklendirilmiş ilk num_inference_steps sigma değerlerini açığa çıkarır — yani her çıkarım adımı için bir zaman adımı, bu da FlowMatchEulerDiscreteScheduler ile eşleşir. Son sigma (0), son adımın örtük r-ucudur ve sigmas / timesteps kullanıcı tarafından sağlandığında otomatik olarak eklenir.
adım
< source >( model_output: FloatTensortimestep: typing.Union[float, torch.FloatTensor]sample: FloatTensorr_timestep: typing.Union[float, torch.FloatTensor, NoneType] = Nonereturn_dict: bool = True ) → [FlowMapEulerDiscreteSchedulerOutput] or tuple
Parametreler
- model_output (torch.Tensor) — Akış haritası modelinden doğrudan çıktı (tahmini ortalama hız).
- timestep (float veya torch.Tensor) —
self.timestepsile aynı birimlerde kaynak timestept. - sample (torch.Tensor) — Current sample{@html "zt"}.
- r_timestep (float veya torch.Tensor, isteğe bağlı) —
Hedef timestep
r.Noneolduğunda, zaman çizelgesindeki bir sonraki timestep varsayılan olarak kullanılır; any-step örneklemesi için açık bir değer geçin.r_timestep == timestepbir no-op'tur. - return_dict (bool, varsayılan True) — Bir [FlowMapEulerDiscreteSchedulerOutput] (varsayılan) veya düz bir tuple döndürülüp döndürülmediğini belirtir.
Dönüş değeri
[FlowMapEulerDiscreteSchedulerOutput] veya tuple
return_dict=True olduğunda, prev_sample değeri {@html "zr"} olan bir [FlowMapEulerDiscreteSchedulerOutput] döndürür. Aksi halde 1-tuple (prev_sample,) döndürür.
Modelin tahmin ettiği hıza göre timestep'ten r_timestep'e sample ilerletin.
Standart bir Euler zamanlayıcısından farklı olarak, aralığın her iki ucu da çağrıcı tarafından sağlanabilir; böylece herhangi bir adımlı örneklemeye olanak tanınır: tek bir model çağrısı, t değerinden herhangi bir seçilen hedef r değerine (tek seferlik üretim için r=0 dahil) adım atabilir. r_timestep parametresi atlandığında, zaman çizelgesindeki bir sonraki adıma varsayılan olarak ayarlanır (FlowMatchEulerDiscreteScheduler semantiğiyle uyumlu).
Dahili olarak kaynak ve hedef sigmalar, girdi adımlarını num_train_timesteps değerine bölmek yerine index_for_timestep üzerinden self.sigmas dizisine indeksleme yapılarak geri kazanılır; bu sayede adım / sigma ilişkisi doğrusal olmayan herhangi bir zaman çizelgesi (örneğin özel bir kaydırma) doğru kalır. Zaman çizelgesi dışındaki bir r_timestep için zamanlayıcı, zaman çizelgesi dışında herhangi bir adımda örneklemenin desteklenmeye devam etmesini sağlamak üzere r_timestep / num_train_timesteps ifadesine geri döner.