Buckets:

hf-doc-build/doc / diffusers /main /fr /api /schedulers /singlestep_dpm_solver.md
mishig's picture
|
download
raw
21.9 kB

DPMSolverSinglestepScheduler

DPMSolverSinglestepScheduler est un planificateur à pas unique 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 la version améliorée DPMSolver++) est un solveur rapide et dédié d’ordre élevé 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.

L'implémentation originale peut être trouvée sur LuChengTHU/dpm-solver.

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.

DPMSolverSinglestepScheduler[[diffusers.DPMSolverSinglestepScheduler]]

diffusers.DPMSolverSinglestepScheduler[[diffusers.DPMSolverSinglestepScheduler]]

diffusers.DPMSolverSinglestepScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: typing.Literal['linear', 'scaled_linear', 'squaredcos_cap_v2'] = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, solver_order: int = 2, prediction_type: typing.Literal['epsilon', 'sample', 'v_prediction', 'flow_prediction'] = 'epsilon', thresholding: bool = False, dynamic_thresholding_ratio: float = 0.995, sample_max_value: float = 1.0, algorithm_type: typing.Literal['dpmsolver', 'dpmsolver++', 'sde-dpmsolver++'] = 'dpmsolver++', solver_type: typing.Literal['midpoint', 'heun'] = 'midpoint', lower_order_final: bool = False, use_karras_sigmas: bool = False, use_exponential_sigmas: bool = False, use_beta_sigmas: bool = False, use_flow_sigmas: bool = False, flow_shift: float = 1.0, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero', lambda_min_clipped: float = -inf, variance_type: typing.Optional[typing.Literal['learned', 'learned_range']] = None, use_dynamic_shifting: bool = False, time_shift_type: typing.Literal['exponential'] = 'exponential')

Source

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 initiale de beta pour l'inférence.

beta_end (float, par défaut 0.02) : La valeur finale de beta.

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. Choisissez parmi linear, scaled_linear ou squaredcos_cap_v2.

trained_betas (np.ndarray ou list[float], facultatif) : Passez un tableau de bêtas directement au constructeur pour contourner beta_start et beta_end.

solver_order (int, par défaut 2) : L'ordre du DPMSolver, qui peut être 1 ou 2 ou 3. Il est recommandé d'utiliser solver_order=2 pour l'échantillonnage guidé et solver_order=3 pour l'échantillonnage non conditionnel.

prediction_type ("epsilon", "sample", "v_prediction", or "flow_prediction", defaults to "epsilon") : Prediction type of the scheduler function; can be epsilon (predicts the noise of the diffusion process), sample (directly predicts the noisy sample), v_prediction(see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper), orflow_prediction`.

thresholding (bool, par défaut False) : 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 lorsque thresholding=True.

sample_max_value (float, par défaut 1.0) : La valeur de seuil pour le seuillage dynamique. Valable uniquement lorsque thresholding=True et algorithm_type="dpmsolver++".

algorithm_type ("dpmsolver", "dpmsolver++" ou "sde-dpmsolver++", par défaut "dpmsolver++") : Type d'algorithme du solveur ; peut être dpmsolver, dpmsolver++ ou sde-dpmsolver++. Le type dpmsolver implémente les algorithmes de l'article DPMSolver, et le type dpmsolver++ implémente les algorithmes de l'article DPMSolver++. Il est recommandé d'utiliser dpmsolver++ ou sde-dpmsolver++ avec solver_order=2 pour 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 ; peut être midpoint ou heun. 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 solveurs midpoint.

lower_order_final (bool, par défaut False) : 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.

use_karras_sigmas (bool, facultatif, par défaut False) : Indique s'il faut utiliser les sigmas de Karras pour les tailles de pas dans le calendrier de bruit pendant le processus d'échantillonnage. Si True, les sigmas sont déterminés selon une séquence de niveaux de bruit {σi}.

use_exponential_sigmas (bool, facultatif, par défaut False) : 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éfaut False) : 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_flow_sigmas (bool, facultatif, valeur par défaut False) : 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) : Le paramètre de décalage de flux pour les modèles basés sur le flux.

final_sigmas_type ("zero" ou "sigma_min", facultatif, par défaut "zero") : La valeur finale de sigma pour 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 troncature pour la valeur minimale de lambda(t) afin d'assurer la stabilité numérique. C'est un paramètre crucial pour le plan 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.

use_dynamic_shifting (bool, par défaut False) : Indique s'il faut utiliser un décalage dynamique pour le calendrier de bruit.

time_shift_type ("exponential", par défaut "exponential") : Le type de décalage temporel à appliquer.

DPMSolverSinglestepScheduler est un solveur rapide et dédié d'ordre élevé 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[[diffusers.DPMSolverSinglestepScheduler.add_noise]]

add_noise(original_samples: Tensor, noise: Tensor, timesteps: IntTensor)

Source

Paramètres :

original_samples (torch.Tensor) : Les échantillons d'origine sans bruit.

noise (torch.Tensor) : Le bruit à ajouter aux échantillons.

timesteps (torch.IntTensor) : Les pas de temps auxquels ajouter du bruit aux échantillons.

Retourne : torch.Tensor

Les échantillons bruités.

Ajouter du bruit aux échantillons d'origine selon le calendrier de bruit aux pas de temps spécifiés.

convert_model_output[[diffusers.DPMSolverSinglestepScheduler.convert_model_output]]

convert_model_output(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, **kwargs)

Source

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.

Retourne : torch.Tensor

La sortie du modèle converti.

Convertir 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 deux bruit > prédiction et modèles de prédiction de données.

dpm_solver_first_order_update[[diffusers.DPMSolverSinglestepScheduler.dpm_solver_first_order_update]]

dpm_solver_first_order_update(model_output: Tensor, *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Source

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.

prev_timestep (int) : L'étape discrète précédente dans la chaîne de diffusion.

sample (torch.Tensor) : 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-*). Requis lorsque algorithm_type est 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 DPMSolver du premier ordre (équivalent à DDIM).

get_order_list[[diffusers.DPMSolverSinglestepScheduler.get_order_list]]

get_order_list(num_inference_steps: int)

Source

Paramètres :

num_inference_steps (int) : Le nombre d'étapes de diffusion utilisées lors de la génération d'échantillons avec un modèle pré-entraîné.

Retourne : list[int]

La liste des ordres du solveur pour chaque pas de temps.

Calcule l'ordre du solveur à chaque pas de temps.

index_for_timestep[[diffusers.DPMSolverSinglestepScheduler.index_for_timestep]]

index_for_timestep(timestep: typing.Union[int, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)

Source

Paramètres :

timestep (int ou torch.Tensor) : Le pas de temps pour lequel trouver l'index.

schedule_timesteps (torch.Tensor, facultatif) : Le calendrier des pas de temps à explorer. Si None, utilise self.timesteps.

Retourne : int

L'indice de la pas de temps dans le calendrier.

Trouver l'index pour une étape de temps donnée dans le calendrier.

scale_model_input[[diffusers.DPMSolverSinglestepScheduler.scale_model_input]]

scale_model_input(sample: Tensor, *args, **kwargs)

Source

Paramètres :

sample (torch.Tensor) : L'échantillon d'entrée.

Retourne : torch.Tensor

Un échantillon d'entrée mis à l'échelle.

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[[diffusers.DPMSolverSinglestepScheduler.set_begin_index]]

set_begin_index(begin_index: int = 0)

Source

Paramètres :

begin_index (int, par défaut 0) : L'index de début pour le planificateur.

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[[diffusers.DPMSolverSinglestepScheduler.set_timesteps]]

set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device] = None, mu: float | None = None, timesteps: list[int] | None = None)

Source

Paramètres :

num_inference_steps (int, facultatif) : Le nombre d'étapes de diffusion utilisé lors de la génération d'échantillons avec un modèle pré-entraîné.

device (str ou torch.device, facultatif) : L'appareil vers lequel les timesteps doivent être déplacés. Si None, les timesteps ne sont pas déplacés.

mu (float, facultatif) : Exposant du décalage temporel dynamique. Nécessite use_dynamic_shifting et un time_shift_type de "exponential" ; lorsqu'il est transmis, flow_shift est défini sur exp(mu).

timesteps (list[int], facultatif) : Étapes personnalisées utilisées pour prendre en charge un espacement arbitraire entre les étapes. Si None, la stratégie d’espacement par défaut du calendrier d’étapes, à savoir un espacement égal entre les étapes, est utilisée. Si timesteps est transmis, num_inference_steps doit être None.

Définit les pas de temps discrets utilisés pour la chaîne de diffusion (à exécuter avant l'inférence).

singlestep_dpm_solver_second_order_update[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_second_order_update]]

singlestep_dpm_solver_second_order_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Source

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.

timestep (int) : L'étape discrète actuelle et suivante dans la chaîne de diffusion.

prev_timestep (int) : L'étape discrète précédente dans la chaîne de diffusion.

sample (torch.Tensor) : 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-*). Requis lorsque algorithm_type est 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 DPMSolver singlestep du second ordre qui calcule la solution au temps prev_timestep à partir du temps timestep_list[-2].

singlestep_dpm_solver_third_order_update[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_third_order_update]]

singlestep_dpm_solver_third_order_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Source

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.

timestep (int) : L'étape discrète actuelle et suivante dans la chaîne de diffusion.

prev_timestep (int) : L'étape discrète précédente dans la chaîne de diffusion.

sample (torch.Tensor) : 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-*). Requis lorsque algorithm_type est 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 DPMSolver singlestep d'ordre trois qui calcule la solution au temps prev_timestep à partir du temps timestep_list[-3].

singlestep_dpm_solver_update[[diffusers.DPMSolverSinglestepScheduler.singlestep_dpm_solver_update]]

singlestep_dpm_solver_update(model_output_list: list[torch.Tensor], *args, sample: typing.Optional[torch.Tensor] = None, order: int = None, noise: typing.Optional[torch.Tensor] = None, **kwargs)

Source

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.

timestep (int) : L'étape discrète actuelle et suivante dans la chaîne de diffusion.

prev_timestep (int) : L'étape discrète précédente dans la chaîne de diffusion.

sample (torch.Tensor) : Instance actuelle d'un échantillon créé par le processus de diffusion.

order (int) : Ordre du solveur à cette étape.

noise (torch.Tensor, facultatif) : Bruit aléatoire utilisé par les variantes de solveur stochastiques (sde-*). Requis lorsque algorithm_type est 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 DPMSolver singlestep.

étape[[diffusers.DPMSolverSinglestepScheduler.step]]

step(model_output: Tensor, timestep: typing.Union[int, torch.Tensor], sample: Tensor, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)

Source

Paramètres :

model_output (torch.Tensor) : La sortie directe du modèle de diffusion appris.

timestep (int ou torch.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 pour l'échantillonnage stochastique.

return_dict (bool, par défaut True) : Indique s'il faut retourner un SchedulerOutput ou un tuple.

Retourne : SchedulerOutput ou tuple

If return_dict est True, SchedulerOutput est retourné, sinon un tuple est retourné 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 DPMSolver singlestep.

SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)

Source

Paramètres :

prev_sample (torch.Tensor de forme (batch_size, num_channels, height, width) pour les images) : Échantillon calculé (x_{t-1}) de l'étape temporelle précédente. prev_sample doit être utilisé comme entrée du modèle suivante dans la boucle de débruitage.

Classe de base pour la sortie de la fonction step d'un planificateur.

Xet Storage Details

Size:
21.9 kB
·
Xet hash:
a4c0f303655d720ecd98930d01ea54d644ab8ae8a97f17dde8039964d3a6f79b

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