Diffusers documentation

Guias

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

Guias

Classifier-free guidance direciona a geração do modelo para que ela corresponda melhor ao prompt e é comumente usada para melhorar a qualidade, o controle e a aderência aos prompts. Existem diferentes tipos de métodos de orientação e, no Diffusers, eles são conhecidos como guiders. Assim como os blocos, é fácil alternar e usar diferentes guiders para diferentes casos de uso sem reescrever o pipeline.

Este guia mostrará como alternar entre guias, ajustar os parâmetros do guia e carregá-los e compartilhá-los no Hub.

Alterando guias

ClassifierFreeGuidance é o guia padrão e é criado quando um pipeline é inicializado com init_pipeline(). Ele é criado por from_config, o que significa que não requer o carregamento de especificações de um repositório modular. Um guia não será listado em modular_model_index.json.

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

Alterne para um guider diferente passando o novo guider para update_components().

Alterar os guias retornará um texto informando que você está alterando o tipo de guia.

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() novamente para verificar se o tipo de guider é 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')

Carregando guias personalizados

Guiders que já estão salvos no Hub com um arquivo modular_model_index.json agora são considerados um componente from_pretrained em vez de um componente from_config.

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

O guider é criado apenas após a chamada de load_components(), com base na especificação de carregamento em 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

Alterando os parâmetros do guider

Os parâmetros do guider podem ser ajustados com o método create() e update_components(). O exemplo abaixo altera o 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)

Carregando guias personalizados

Chame o método push_to_hub() em um guider personalizado para compartilhá-lo no Hub.

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

Para tornar este guider disponível para o pipeline, modifique o arquivo modular_model_index.json ou use o método update_components().

modular_model_index.json
update_components

Edite o arquivo modular_model_index.json e adicione uma especificação de carregamento para o guider, apontando para uma pasta que contenha a configuração do guider.

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