Diffusers documentation
Guias
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.guiderAlterando 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().
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
}
],Altere o default_creation_method() para from_pretrained e use update_components() para atualizar as especificações do guider e dos componentes, bem como a configuração do pipeline.
Alterar o método de criação retornará um texto informando que você está alterando o tipo de criação para
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)Para torná-lo o guia padrão de um pipeline, chame push_to_hub(). Essa é uma etapa opcional e não é necessária se você estiver apenas experimentando localmente.
t2i_pipeline.push_to_hub("YiYiXu/modular-doc-guider")