Diffusers documentation

Guides

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Guides

Le guidage sans classifieur oriente la génération du modèle afin qu’elle corresponde mieux au prompt et est couramment utilisé pour améliorer la qualité, le contrôle et le respect des prompts. Il existe différents types de méthodes de guidage, et dans Diffusers, on les appelle des guiders. Tout comme pour les blocs, il est facile de basculer et d’utiliser différents guiders pour différents cas d’usage sans réécrire le pipeline.

Ce guide vous montre comment changer de guiders, ajuster les paramètres des guiders, ainsi que les charger et les partager sur le Hub.

Changement de guides

ClassifierFreeGuidance est le guider par défaut et est créé lors de l’initialisation d’un pipeline avec init_pipeline(). Il est créé par from_config, ce qui signifie qu’il n’est pas nécessaire de charger des spécifications depuis un dépôt modulaire. Un guider ne sera pas répertorié dans modular_model_index.json.

Utilisez get_component_spec() pour inspecter un guider.

t2i_pipeline.get_component_spec("guider")
ComponentSpec(name='guider', type_hint=<class 'diffusers.guiders.classifier_free_guidance.ClassifierFreeGuidance'>, description=None, config=FrozenDict([('guidance_scale', 7.5), ('guidance_rescale', 0.0), ('use_original_formulation', False), ('start', 0.0), ('stop', 1.0), ('_use_default_values', ['start', 'guidance_rescale', 'stop', 'use_original_formulation'])]), repo=None, subfolder=None, variant=None, revision=None, default_creation_method='from_config')

Passez à un autre guider en transmettant le nouveau guider à update_components().

Changer les guiders renvoie un texte vous informant que vous changez le type de guider.

ModularPipeline.update_components: adding guider with new type: PerturbedAttentionGuidance, previous type: ClassifierFreeGuidance
from diffusers import LayerSkipConfig, PerturbedAttentionGuidance

config = LayerSkipConfig(indices=[2, 9], fqn="mid_block.attentions.0.transformer_blocks", skip_attention=False, skip_attention_scores=True, skip_ff=False)
guider = PerturbedAttentionGuidance(
    guidance_scale=5.0, perturbed_guidance_scale=2.5, perturbed_guidance_config=config
)
t2i_pipeline.update_components(guider=guider)

Utilisez à nouveau get_component_spec() pour vérifier que le type de guider est différent.

t2i_pipeline.get_component_spec("guider")
ComponentSpec(name='guider', type_hint=<class 'diffusers.guiders.perturbed_attention_guidance.PerturbedAttentionGuidance'>, description=None, config=FrozenDict([('guidance_scale', 5.0), ('perturbed_guidance_scale', 2.5), ('perturbed_guidance_start', 0.01), ('perturbed_guidance_stop', 0.2), ('perturbed_guidance_layers', None), ('perturbed_guidance_config', LayerSkipConfig(indices=[2, 9], fqn='mid_block.attentions.0.transformer_blocks', skip_attention=False, skip_attention_scores=True, skip_ff=False, dropout=1.0)), ('guidance_rescale', 0.0), ('use_original_formulation', False), ('start', 0.0), ('stop', 1.0), ('_use_default_values', ['perturbed_guidance_start', 'use_original_formulation', 'perturbed_guidance_layers', 'stop', 'start', 'guidance_rescale', 'perturbed_guidance_stop']), ('_class_name', 'PerturbedAttentionGuidance'), ('_diffusers_version', '0.35.0.dev0')]), repo=None, subfolder=None, variant=None, revision=None, default_creation_method='from_config')

Chargement de guiders personnalisés

Les guiders déjà enregistrés sur le Hub avec un fichier modular_model_index.json sont désormais considérés comme un composant from_pretrained plutôt que comme un composant from_config.

{
  "guider": [
    null,
    null,
    {
      "repo": "YiYiXu/modular-loader-t2i-guider",
      "revision": null,
      "subfolder": "pag_guider",
      "type_hint": [
        "diffusers",
        "PerturbedAttentionGuidance"
      ],
      "variant": null
    }
  ]
}

Le guider n'est créé qu'après l'appel de load_components(), en fonction de la spécification de chargement dans modular_model_index.json.

t2i_pipeline = t2i_blocks.init_pipeline("YiYiXu/modular-doc-guider")
# not created during init
assert t2i_pipeline.guider is None
t2i_pipeline.load_components()
# loaded as PAG guider
t2i_pipeline.guider

Changer les paramètres de guider

Les paramètres du guider peuvent être ajustés avec la méthode create() et update_components(). L'exemple ci-dessous modifie la valeur de guidance_scale.

guider_spec = t2i_pipeline.get_component_spec("guider")
guider = guider_spec.create(guidance_scale=10)
t2i_pipeline.update_components(guider=guider)

Téléchargement de guiders personnalisés

Appelez la méthode push_to_hub() sur un guider personnalisé pour le partager sur le Hub.

guider.push_to_hub("YiYiXu/modular-loader-t2i-guider", subfolder="pag_guider")

Pour rendre ce guider disponible pour le pipeline, modifiez soit le fichier modular_model_index.json, soit utilisez la méthode update_components().

modular_model_index.json
update_components

Modifiez le fichier modular_model_index.json et ajoutez une spécification de chargement pour le guider en pointant vers un dossier contenant la configuration du guider.

{
  "guider": [
    "diffusers",
    "PerturbedAttentionGuidance",
    {
      "repo": "YiYiXu/modular-loader-t2i-guider",
      "revision": null,
      "subfolder": "pag_guider",
      "type_hint": [
        "diffusers",
        "PerturbedAttentionGuidance"
      ],
      "variant": null
    }
  ],
Update on GitHub