Diffusers documentation
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler
EDMDPMSolverMultistepScheduler est une formulation de Karras de DPMSolverMultistepScheduler, un planificateur multistep issu des articles DPM-Solver: A Fast ODE Solver for Diffusion Probabilistic Model Sampling in Around 10 Steps et DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models de Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li et Jun Zhu.
DPMSolver (et sa version améliorée DPMSolver++) est un solveur d’ordre élevé dédié et rapide pour les EDO de diffusion, avec une garantie d’ordre de convergence. Empiriquement, l’échantillonnage DPMSolver avec seulement 20 étapes peut générer des échantillons de haute qualité, et il peut produire des échantillons tout à fait bons même en 10 étapes.
EDMDPMSolverMultistepScheduler
classe diffusers.EDMDPMSolverMultistepScheduler
< source >( sigma_min: float = 0.002sigma_max: float = 80.0sigma_data: float = 0.5sigma_schedule: typing.Literal['karras', 'exponential'] = 'karras'num_train_timesteps: int = 1000prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction'] = 'epsilon'rho: float = 7.0solver_order: int = 2thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falsefinal_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero' )
Paramètres
- sigma_min (
float, facultatif, valeur par défaut 0.002) — Amplitude minimale du bruit dans le plan de sigma. Cette valeur a été fixée à 0.002 dans l’article EDM [1] ; une plage raisonnable est [0, 10]. - sigma_max (
float, facultatif, valeur par défaut 80.0) — Amplitude maximale du bruit dans le plan de sigma. Cette valeur a été fixée à 80.0 dans l'article EDM [1] ; une plage raisonnable est [0.2, 80.0]. - sigma_data (
float, facultatif, valeur par défaut 0.5) — L'écart-type de la distribution des données. Cette valeur est fixée à 0,5 dans l'article EDM [1]. - sigma_schedule (
str, facultatif, par défautkarras) — Plan de sigma à utiliser pour calculer lessigmas. Par défaut, nous utilisons le plan introduit dans l’article EDM (https://huggingface.co/papers/2206.00364). Une autre valeur acceptée est « exponential ». Le plan exponentiel a été intégré dans ce modèle : https://huggingface.co/stabilityai/cosxl. - num_train_timesteps (
int, par défaut 1000) — Le nombre d'étapes de diffusion pour entraîner le modèle. - prediction_type (
str, defaults toepsilon, optional) — Prediction type of the scheduler function; can beepsilon(predicts the noise of the diffusion process),sample(directly predicts the noisy sample) orv_prediction` (see section 2.4 of Imagen Video paper). - rho (
float, facultatif, valeur par défaut 7.0) — Le paramètre rho dans le calendrier de sigmas de Karras. Il a été fixé à 7.0 dans l’article EDM [1]. - solver_order (
int, par défaut 2) — L’ordre du DPMSolver, qui peut être1ou2ou3. Il est recommandé d’utilisersolver_order=2pour l’échantillonnage guidé etsolver_order=3pour l’échantillonnage non conditionnel. - thresholding (
bool, par défautFalse) — Indique s'il faut utiliser la méthode de « seuillage dynamique ». Cette méthode n'est pas adaptée aux modèles de diffusion en espace latent tels que Stable Diffusion. - dynamic_thresholding_ratio (
float, par défaut 0,995) — Le ratio pour la méthode de seuillage dynamique. Valable uniquement lorsquethresholding=True. - sample_max_value (
float, par défaut 1.0) — La valeur de seuil pour le seuillage dynamique. Valable uniquement lorsquethresholding=Trueetalgorithm_type="dpmsolver++". - algorithm_type (
str, par défautdpmsolver++) — Type d’algorithme du solveur ; peut êtredpmsolver++ousde-dpmsolver++. Le typedpmsolver++implémente les algorithmes du papier DPMSolver++. Il est recommandé d’utiliserdpmsolver++ousde-dpmsolver++avecsolver_order=2pour un échantillonnage guidé, comme dans Stable Diffusion. - solver_type (
str, par défautmidpoint) — Type de solveur pour le solveur du second ordre ; peut êtremidpointouheun. Le type de solveur affecte légèrement la qualité de l’échantillonnage, en particulier pour un petit nombre d’étapes. Il est recommandé d’utiliser les solveursmidpoint. - lower_order_final (
bool, par défautTrue) — Indique s'il faut utiliser des solveurs d'ordre inférieur aux étapes finales. Valable uniquement pour moins de 15 étapes d'inférence. Cela peut stabiliser l'échantillonnage de DPMSolver pour moins de 15 étapes, en particulier pour 10 étapes ou moins. - euler_at_final (
bool, par défautFalse) — Indique s'il faut utiliser la méthode d'Euler à la dernière étape. Il s'agit d'un compromis entre la stabilité numérique et la richesse des détails. Cela peut stabiliser l'échantillonnage de la variante SDE de DPMSolver pour un petit nombre d'étapes d'inférence, mais peut parfois entraîner un flou. - final_sigmas_type (
str, par défaut"zero") — La valeur finale desigmapour le calendrier de bruit pendant le processus d'échantillonnage. Si"sigma_min", le sigma final est identique au dernier sigma du calendrier d'entraînement. Sizero, le sigma final est défini à 0.
Implémente DPMSolverMultistepScheduler dans la formulation EDM présentée dans Karras et al. 2022 [1]. EDMDPMSolverMultistepScheduler est un solveur rapide et dédié d’ordre élevé pour les EDO de diffusion.
[1] Karras, Tero, et al. “Elucidating the Design Space of Diffusion-Based Generative Models.” https://huggingface.co/papers/2206.00364
Ce modèle hérite de SchedulerMixin et ConfigMixin. Consultez la documentation de la classe parente pour les méthodes génériques que la bibliothèque implémente pour tous les planificateurs, telles que le chargement et l'enregistrement.
add_noise
< source >( original_samples: Tensornoise: Tensortimesteps: Tensor ) → torch.Tensor
Paramètres
- original_samples (
torch.Tensor) — Les échantillons originaux auxquels du bruit sera ajouté. - noise (
torch.Tensor) — Le tenseur de bruit à ajouter aux échantillons d'origine. - timesteps (
torch.Tensor) — Les timesteps auxquels ajouter du bruit, déterminant le niveau de bruit à partir de l'ordonnancement.
Retourne
torch.Tensor
Les échantillons bruités avec un bruit ajouté mis à l'échelle selon le calendrier des pas de temps.
Ajouter du bruit aux échantillons d'origine selon le calendrier de bruit aux pas de temps spécifiés.
convert_model_output
< source >( model_output: Tensorsample: Tensor ) → torch.Tensor
Convertit la sortie du modèle vers le type correspondant dont l'algorithme DPMSolver/DPMSolver++ a besoin. DPM-Solver est conçu pour discrétiser une intégrale du modèle de prédiction du bruit, et DPM-Solver++ est conçu pour discrétiser une intégrale du modèle de prédiction des données.
> L'algorithme et le type de modèle sont découplés. Vous pouvez utiliser DPMSolver ou DPMSolver++ pour les modèles de prédiction du bruit et de prédiction des données.
dpm_solver_first_order_update
< source >( model_output: Tensorsample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
Paramètres
- model_output (
torch.Tensor) — La sortie directe du modèle de diffusion appris. - sample (
torch.Tensor) — Une instance actuelle d'un échantillon créé par le processus de diffusion. - noise (
torch.Tensor, facultatif) — Le tenseur de bruit à ajouter aux échantillons d’origine.
Retourne
torch.Tensor
Le tenseur d'échantillon à l'étape temporelle précédente.
Une étape pour le DPMSolver du premier ordre (équivalent à DDIM).
index_for_timestep
< source >( timestep: typing.Union[int, torch.Tensor]schedule_timesteps: typing.Optional[torch.Tensor] = None ) → int
Trouver l'index pour une étape de temps donnée dans le calendrier.
multistep_dpm_solver_second_order_update
< source >( model_output_list: typing.List[torch.Tensor]sample: Tensornoise: typing.Optional[torch.Tensor] = None ) → torch.Tensor
Paramètres
- model_output_list (
list[torch.Tensor]) — Les sorties directes du modèle de diffusion appris aux pas de temps actuels et ultérieurs. - sample (
torch.Tensor) — Une instance actuelle d'un échantillon créé par le processus de diffusion. - noise (
torch.Tensor, facultatif) — Le tenseur de bruit à ajouter aux échantillons d’origine.
Retourne
torch.Tensor
Le tenseur d'échantillon à l'étape temporelle précédente.
Une étape pour le solveur DPMSolver multistep du second ordre.
multistep_dpm_solver_third_order_update
< source >( model_output_list: listsample: Tensor ) → torch.Tensor
Paramètres
- model_output_list (
list[torch.Tensor]) — Les sorties directes du modèle de diffusion appris aux pas de temps actuels et ultérieurs. - sample (
torch.Tensor) — Une instance actuelle d'un échantillon créé par le processus de diffusion.
Retourne
torch.Tensor
Le tenseur d'échantillon à l'étape temporelle précédente.
Une étape pour le solveur DPMSolver multistep du troisième ordre.
precondition_inputs
< source >( sample: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
Préconditionner l'échantillon d'entrée en le mettant à l'échelle selon la formulation EDM.
precondition_noise
< source >( sigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
Préconditionner le niveau de bruit en appliquant une transformation logarithmique.
precondition_outputs
< source >( sample: Tensormodel_output: Tensorsigma: typing.Union[float, torch.Tensor] ) → torch.Tensor
Paramètres
- sample (
torch.Tensor) — Le tenseur d'échantillon d'entrée. - model_output (
torch.Tensor) — La sortie directe du modèle de diffusion appris. - sigma (
floatoutorch.Tensor) — La valeur actuelle de sigma (niveau de bruit).
Retourne
torch.Tensor
L'échantillon débruité calculé en combinant la connexion de contournement et le facteur d'échelle de sortie.
Préconditionner les sorties du modèle selon la formulation EDM.
scale_model_input
< source >( sample: Tensortimestep: typing.Union[float, torch.Tensor] ) → torch.Tensor
Mettre à l'échelle l'entrée du modèle de débruitage pour correspondre à l'algorithme d'Euler. Assure l'interchangeabilité avec les planificateurs qui doivent mettre à l'échelle l'entrée du modèle de débruitage en fonction de l'étape temporelle actuelle.
set_begin_index
< source >( begin_index: int = 0 )
Définit l'index de début pour le planificateur. Cette fonction doit être exécutée depuis le pipeline avant l'inférence.
set_timesteps
< source >( num_inference_steps: int = Nonedevice: typing.Union[str, torch.device, NoneType] = None )
Définit les pas de temps discrets utilisés pour la chaîne de diffusion (à exécuter avant l'inférence).
étape
< source >( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: Tensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
Paramètres
- model_output (
torch.Tensor) — La sortie directe du modèle de diffusion appris. - timestep (
int) — L'étape discrète actuelle dans la chaîne de diffusion. - sample (
torch.Tensor) — Une instance actuelle d'un échantillon créé par le processus de diffusion. - generator (
torch.Generator, facultatif) — Un générateur de nombres aléatoires. - return_dict (
bool) — Indique s'il faut retourner un SchedulerOutput ou untuple.
Retourne
SchedulerOutput ou tuple
Si return_dict est True, SchedulerOutput est renvoyé, sinon un tuple est renvoyé dont le premier élément est le tenseur d'échantillon.
Prédit l'échantillon de l'étape temporelle précédente en inversant l'EDS. Cette fonction propage l'échantillon avec le solveur DPMSolver multi-étapes.
SchedulerOutput
classe diffusers.schedulers.scheduling_utils.SchedulerOutput
< source >( prev_sample: Tensor )
Classe de base pour la sortie de la fonction step d’un planificateur.