Diffusers documentation
DPMSolverMultistepScheduler
DPMSolverMultistepScheduler
DPMSolverMultistepScheduler est 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.
Astuces
Il est recommandé de définir solver_order à 2 pour l'échantillonnage guidé, et solver_order=3 pour l'échantillonnage non conditionnel.
Le seuillage dynamique issu de Imagen est pris en charge. Pour les modèles de diffusion en espace pixel, vous pouvez définir à la fois algorithm_type="dpmsolver++" et thresholding=True afin d’utiliser le seuillage dynamique. Cette méthode de seuillage n’est pas adaptée aux modèles de diffusion en espace latent, tels que Stable Diffusion.
La variante SDE de DPMSolver et de DPM-Solver++ est également prise en charge, mais uniquement pour les solveurs du premier et du second ordre. Il s’agit d’un solveur SDE rapide pour l’EDR de diffusion inverse. Il est recommandé d’utiliser le solveur du second ordre sde-dpmsolver++.
DPMSolverMultistepScheduler
classe diffusers.DPMSolverMultistepScheduler
< source >( num_train_timesteps: int = 1000beta_start: float = 0.0001beta_end: float = 0.02beta_schedule: str = 'linear'trained_betas: numpy.ndarray | list[float] | None = Nonesolver_order: int = 2prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon'thresholding: bool = Falsedynamic_thresholding_ratio: float = 0.995sample_max_value: float = 1.0algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver', 'sde-dpmsolver++'] = 'dpmsolver++'solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint'lower_order_final: bool = Trueeuler_at_final: bool = Falseuse_karras_sigmas: bool = Falseuse_exponential_sigmas: bool = Falseuse_beta_sigmas: bool = Falseuse_lu_lambdas: bool = Falseuse_flow_sigmas: bool = Falseflow_shift: float = 1.0final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero'lambda_min_clipped: float = -infvariance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = Nonetimestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace'steps_offset: int = 0rescale_betas_zero_snr: bool = Falseuse_dynamic_shifting: bool = Falsetime_shift_type: typing.Literal['exponential'] = 'exponential' )
Paramètres
- num_train_timesteps (
int, par défaut 1000) — Le nombre d'étapes de diffusion pour entraîner le modèle. - beta_start (
float, par défaut 0.0001) — Valeur de départ debetapour l'inférence. - beta_end (
float, par défaut 0.02) — La valeur finale debeta. - beta_schedule (
"linear","scaled_linear"ou"squaredcos_cap_v2", par défaut"linear") — Le planning des bêtas, une correspondance entre une plage de bêtas et une séquence de bêtas pour faire avancer le modèle. - trained_betas (
np.ndarray, facultatif) — Transmettez un tableau de betas directement au constructeur pour contournerbeta_startetbeta_end. - 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. - prediction_type (
"epsilon","sample","v_prediction"ou"flow_prediction", par défaut"epsilon") — Type de prédiction de la fonction du planificateur.epsilonprédit le bruit du processus de diffusion,sampleprédit directement l'échantillon bruité,v_predictionprédit la vitesse (voir la section 2.4 de l'article Imagen Video) etflow_predictionprédit le flux. - 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 (
"dpmsolver","dpmsolver++","sde-dpmsolver"ou"sde-dpmsolver++", par défaut"dpmsolver++") — Type d'algorithme pour le solveur. Le typedpmsolverimplémente les algorithmes de l'article DPMSolver, et le typedpmsolver++implémente les algorithmes de l'article DPMSolver++. Il est recommandé d'utiliserdpmsolver++ousde-dpmsolver++avecsolver_order=2pour un échantillonnage guidé, comme dans Stable Diffusion. - solver_type (
"midpoint"ou"heun", par défaut"midpoint") — Type de solveur pour le solveur du second ordre. 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. - use_karras_sigmas (
bool, facultatif, valeur par défautFalse) — Indique s'il faut utiliser les sigmas de Karras pour les tailles de pas dans le calendrier de bruit pendant le processus d'échantillonnage. SiTrue, les sigmas sont déterminés selon une séquence de niveaux de bruit {σi}. - use_exponential_sigmas (
bool, facultatif, valeur par défautFalse) — Indique s'il faut utiliser des sigmas exponentiels pour les tailles de pas dans le calendrier de bruit pendant le processus d'échantillonnage. - use_beta_sigmas (
bool, facultatif, par défautFalse) — Indique s'il faut utiliser des sigmas bêta pour les tailles de pas dans le calendrier de bruit pendant le processus d'échantillonnage. Consultez Beta Sampling is All You Need pour plus d'informations. - use_lu_lambdas (
bool, facultatif, valeur par défautFalse) — Indique s'il faut utiliser le uniform-logSNR pour les tailles de pas proposées par le DPM-Solver de Lu dans le plan de bruit pendant le processus d'échantillonnage. SiTrue, les sigmas et les pas de temps sont déterminés selon une séquence delambda(t). - use_flow_sigmas (
bool, facultatif, valeur par défautFalse) — Indique s'il faut utiliser les sigmas de flux pour les tailles de pas dans le calendrier de bruit pendant le processus d'échantillonnage. - flow_shift (
float, facultatif, valeur par défaut 1.0) — La valeur de décalage pour l’ordonnancement des pas de temps pour le flow matching. - final_sigmas_type (
"zero"ou"sigma_min", facultatif, 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. Si"zero", le sigma final est défini à 0. - lambda_min_clipped (
float, par défaut-inf) — Seuil de rognage pour la valeur minimale delambda(t)afin d'assurer la stabilité numérique. Ce paramètre est essentiel pour le calendrier de bruit cosinus (squaredcos_cap_v2). - variance_type (
"learned"ou"learned_range", facultatif) — À définir sur"learned"ou"learned_range"pour les modèles de diffusion qui prédisent la variance. Si défini, la sortie du modèle contient la variance gaussienne prédite. - timestep_spacing (
"linspace","leading"ou"trailing", par défaut"linspace") — La manière dont les timesteps doivent être mis à l’échelle. Reportez-vous au tableau 2 de l’article Common Diffusion Noise Schedules and Sample Steps are Flawed pour plus d’informations. - steps_offset (
int, par défaut 0) — Un décalage ajouté aux étapes d'inférence, tel que requis par certaines familles de modèles. - rescale_betas_zero_snr (
bool, par défautFalse) — Indique s'il faut rééchelonner les betas pour obtenir un SNR terminal nul. Cela permet au modèle de générer des échantillons très clairs et très sombres, au lieu de se limiter à des échantillons de luminosité moyenne. Lié de manière lâche à--offset_noise. - use_dynamic_shifting (
bool, par défautFalse) — Indique s'il faut utiliser un décalage dynamique pour le calendrier des timesteps. - time_shift_type (
"exponential", par défaut"exponential") — Le type de décalage temporel à appliquer lors de l'utilisation du décalage dynamique.
DPMSolverMultistepScheduler est un solveur d'ordre élevé dédié et rapide pour les EDO de diffusion.
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: IntTensor ) → torch.Tensor
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: Tensor*argssample: typing.Optional[torch.Tensor] = None**kwargs ) → 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: Tensor*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → torch.Tensor
Paramètres
- model_output (
torch.Tensor) — La sortie directe du modèle de diffusion appris. - sample (
torch.Tensor, facultatif) — Une instance actuelle d'un échantillon créé par le processus de diffusion. - noise (
torch.Tensor, facultatif) — Le tenseur de bruit.
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: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → 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, facultatif) — Une instance actuelle d'un échantillon créé par le processus de diffusion. - noise (
torch.Tensor, facultatif) — Bruit aléatoire utilisé par les variantes de solveur stochastiques (sde-*). Obligatoire lorsquealgorithm_typeest défini sur l’une d’entre elles, et inutilisé dans le cas contraire.
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: list*argssample: typing.Optional[torch.Tensor] = Nonenoise: typing.Optional[torch.Tensor] = None**kwargs ) → 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, facultatif) — Une instance actuelle d'un échantillon créé par le processus de diffusion. - noise (
torch.Tensor, facultatif) — Le tenseur de bruit.
Retourne
torch.Tensor
Le tenseur d'échantillon à l'étape temporelle précédente.
Une étape pour le solveur DPMSolver multistep du troisième ordre.
scale_model_input
< source >( sample: Tensor*args**kwargs ) → torch.Tensor
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] = Nonemu: float | None = Nonetimesteps: list[int] | None = None )
Paramètres
- num_inference_steps (
int, facultatif) — Le nombre d'étapes de diffusion utilisées lors de la génération d'échantillons avec un modèle pré-entraîné. - device (
stroutorch.device, facultatif) — L'appareil vers lequel les timesteps doivent être déplacés. SiNone, les timesteps ne sont pas déplacés. - mu (
float, facultatif) — Exposant pour le décalage temporel dynamique. Nécessiteuse_dynamic_shiftinget untime_shift_typede"exponential"; lorsqu’il est transmis,flow_shiftest défini surexp(mu). - timesteps (
list[int], facultatif) — Timesteps personnalisés utilisés pour prendre en charge un calendrier de timesteps arbitraire. SiNone, les timesteps seront générés sur la base de l'attributtimestep_spacing. Sitimestepsest transmis,num_inference_stepsetsigmasdoivent êtreNone, et l'attributtimestep_spacingsera ignoré.
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] = Nonevariance_noise: typing.Optional[torch.Tensor] = Nonereturn_dict: bool = True ) → SchedulerOutput or tuple
Paramètres
- model_output (
torch.Tensor) — La sortie directe du modèle de diffusion appris. - timestep (
intoutorch.Tensor) — 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. - variance_noise (
torch.Tensor, facultatif) — Alternative à la génération de bruit avecgeneratoren fournissant directement le bruit pour la variance elle-même. Utile pour des méthodes telles queLEdits++. - return_dict (
bool, par défautTrue) — 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.