Diffusers documentation

Guías

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Guías

Classifier-free guidance dirige la generación del modelo para que coincida mejor con el prompt y se utiliza comúnmente para mejorar la calidad, el control y la adherencia a los prompts. Existen diferentes tipos de métodos de guía y, en Diffusers, se conocen como guiders. Al igual que con los bloques, es fácil cambiar y utilizar diferentes guiders para distintos casos de uso sin reescribir el pipeline.

Esta guía te mostrará cómo cambiar de guías, ajustar los parámetros de las guías y cargarlas y compartirlas en el Hub.

Cambiar guías

ClassifierFreeGuidance es el guider predeterminado y se crea cuando se inicializa un pipeline con init_pipeline(). Se crea mediante from_config, lo que significa que no requiere cargar especificaciones desde un repositorio modular. Un guider no se enumerará en modular_model_index.json.

Use get_component_spec() para inspeccionar 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')

Cambie a un guider diferente pasando el nuevo guider a update_components().

Cambiar los guías devolverá un texto que te indicará que estás cambiando el tipo de guía.

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)

Use get_component_spec() de nuevo para verificar que el tipo de guider es diferente.

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')

Carga de guías personalizadas

Los guiders que ya están guardados en el Hub con un archivo modular_model_index.json se consideran ahora un componente from_pretrained en lugar de un componente from_config.

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

El guider solo se crea después de llamar a load_components() según la especificación de carga en 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

Cambiar los parámetros del guider

Los parámetros del guider se pueden ajustar con el método create() y update_components(). El ejemplo siguiente cambia el valor de guidance_scale.

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

Subida de guías personalizadas

Llama al método push_to_hub() en un guider personalizado para compartirlo en el Hub.

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

Para hacer este guider disponible para el pipeline, modifique el archivo modular_model_index.json o use el método update_components().

modular_model_index.json
update_components

Edita el archivo modular_model_index.json y añade una especificación de carga para el guider apuntando a una carpeta que contenga la configuración del guider.

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