Diffusers documentation
Guides
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.guiderChanger 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().
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
}
],Modifiez default_creation_method() en from_pretrained et utilisez update_components() pour mettre à jour les spécifications du guider et des composants ainsi que la configuration du pipeline.
Changer la méthode de création renvoie un texte vous informant que vous changez le type de création en
from_pretrained.ModularPipeline.update_components: changing the default_creation_method of guider from from_config to from_pretrained.
guider_spec = t2i_pipeline.get_component_spec("guider")
guider_spec.default_creation_method="from_pretrained"
guider_spec.pretrained_model_name_or_path="YiYiXu/modular-loader-t2i-guider"
guider_spec.subfolder="pag_guider"
pag_guider = guider_spec.load()
t2i_pipeline.update_components(guider=pag_guider)Pour en faire le guider par défaut d'un pipeline, appelez push_to_hub(). Cette étape est facultative et n'est pas nécessaire si vous ne faites que des expérimentations en local.
t2i_pipeline.push_to_hub("YiYiXu/modular-doc-guider")