Diffusers documentation
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler
FlowMapEulerDiscreteScheduler est un échantillonneur de type Euler conçu pour les modèles de diffusion distillés par flow-map. Les modèles flow-map apprennent des transitions sur des intervalles arbitraires plutôt que le mappage fixe des modèles de cohérence. Les deux extrémités de la étape sont fournies par l'appelant, ce qui permet un échantillonnage à nombre de pas arbitraire : un seul point de contrôle distillé peut être évalué avec 1, 2, 4, 8, 16… NFE sans réentraînement.
Le planificateur a été introduit dans AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation et est fourni avec les intégrations AnyFlowPipeline et AnyFlowFARPipeline, mais il n’est pas spécifique à AnyFlow — tout point de contrôle distillé par carte de flux peut l’utiliser.
FlowMapEulerDiscreteScheduler
classe diffusers.FlowMapEulerDiscreteScheduler
< source >( num_train_timesteps: int = 1000shift: float = 1.0 )
Paramètres
- num_train_timesteps (int, par défaut 1000) — Le nombre d'étapes de diffusion utilisées pour entraîner le modèle de carte de flux sous-jacent.
- shift (float, par défaut 1.0) —
Décalage multiplicatif appliqué à l'échelle des pas de temps lors de l'inférence.
shift=1.0correspond à l'identité ; les valeurs supérieures à 1.0 déplacent l'échelle vers un débruitage plus important aux étapes ultérieures (par exemple,shift=5correspond à la valeur par défaut de Wan2.1).
Échantillonneur de type Euler pour les modèles de diffusion distillés par carte de flux.
Les modèles Flow-map apprennent des transitions sur des intervalles arbitraires plutôt que le mappage fixe des modèles de cohérence, ce qui permet d'évaluer un seul point de contrôle distillé à 1, 2, 4, 8, … NFE sans réentraînement. La méthode avance l'échantillon du timestep au r_timestep le long de la vitesse prédite.
Introduit dans AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation par Yuchao Gu, Guian Fang et al.
Ce planificateur hérite de [SchedulerMixin] et de [ConfigMixin]. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les planificateurs (chargement, sauvegarde, etc.).
Appliquer la transformation de décalage configurée à un tenseur sigma.
Retourne l'index de timestep sur le planning actuel, ou None s'il est hors planning.
La recherche est effectuée par rapport à self.timesteps avec une petite tolérance fp. Elle sert à récupérer le sigma correspondant sans supposer la relation linéaire timesteps = sigmas * num_train_timesteps — de cette façon, un calendrier personnalisé (par exemple un décalage non linéaire, des timesteps définis manuellement) est toujours résolu correctement.
Mise à l'échelle d'identité sans effet. Fournie pour la compatibilité de l'API avec d'autres planificateurs Diffusers.
scale_noise
< source >( sample: FloatTensortimestep: typing.Union[float, torch.FloatTensor]noise: typing.Optional[torch.FloatTensor] = None )
Interpoler linéairement sample vers noise en fonction de la valeur normalisée de timestep.
Définit l'index de début pour le planificateur. Les pipelines qui démarrent en cours de planification (par exemple image-to-image) appellent cette fonction entre set_timesteps et la première step pour ancrer le déroulement.
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 )
Paramètres
- num_inference_steps (int, facultatif) —
Nombre d'étapes d'inférence. Si
None, il faut passersigmasoutimesteps. - device (str ou torch.device, facultatif) —
Appareil cible pour
self.sigmas/self.timesteps. - sigmas (List[float], optional) —
Custom sigma schedule of length
num_inference_steps. The terminal0sigma is appended automatically. The configuredshiftis applied on top. - timesteps (List[float], facultatif) —
Planification personnalisée de longueur
num_inference_steps, dans les mêmes unités queself.timesteps(c.-à-d. mise à l'échelle parnum_train_timesteps). Convertie en sigmas en interne. Si à la foissigmasettimestepssont fournis, leurs longueurs doivent correspondre.
Construire le calendrier des pas de temps d'inférence.
Gère en interne self.sigmas de longueur num_inference_steps + 1 (le décalage configuré appliqué par défaut à un
linspace allant de 1.0 à 0.0) ; self.timesteps expose les num_inference_steps premiers sigmas mis à l'échelle par num_train_timesteps — c'est-à-dire un timestep par étape d'inférence, ce qui correspond à FlowMatchEulerDiscreteScheduler. Le sigma final (0) est l'extrémité implicite
de la dernière étape et est ajouté automatiquement lorsque sigmas / timesteps sont fournis par l'utilisateur.
étape
< 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
Paramètres
- model_output (torch.Tensor) — Sortie directe du modèle flow-map (vitesse moyenne prédite).
- timestep (float ou torch.Tensor) —
Timestep source
tdans les mêmes unités queself.timesteps. - sample (torch.Tensor) — Current sample{@html "zt"}.
- r_timestep (float ou torch.Tensor, facultatif) —
Pas de temps cible
r. Par défaut, il s’agit du pas de temps suivant dans le planning lorsqueNone; passez une valeur explicite pour un échantillonnage à pas arbitraire.r_timestep == timestepest une opération sans effet. - return_dict (bool, par défaut True) — Indique s'il faut retourner un [FlowMapEulerDiscreteSchedulerOutput] (par défaut) ou un simple tuple.
Retourne
[FlowMapEulerDiscreteSchedulerOutput] ou tuple
Lorsque return_dict=True, renvoie un [FlowMapEulerDiscreteSchedulerOutput] dont prev_sample est{@html "zr"}. Sinon, renvoie un 1-tuple (prev_sample,).
Faites avancer sample de timestep à r_timestep en utilisant la vitesse prédite par le modèle.
Contrairement à un planificateur Euler standard, les deux extrémités de l'intervalle peuvent être fournies par l'appelant, ce qui permet un échantillonnage à nombre de pas arbitraire : un seul appel au modèle peut passer de t à toute cible r choisie (y compris r=0 pour une génération en une seule étape). Lorsque r_timestep est omis, il prend par défaut la prochaine étape du planificateur (correspondant à la sémantique de FlowMatchEulerDiscreteScheduler).
En interne, les sigmas source et cible sont récupérés en indexant self.sigmas via index_for_timestep plutôt qu’en divisant les timesteps d’entrée par num_train_timesteps, de sorte que tout
plan dont la relation timestep / sigma est non linéaire (par exemple un décalage personnalisé) reste correct. Pour un
r_timestep hors plan, le planificateur revient à r_timestep / num_train_timesteps afin que l’échantillonnage à n’importe quelle étape en dehors du plan reste pris en charge.