Diffusers documentation

引导器

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

and get access to the augmented documentation experience

to get started

引导器

Classifier-free guidance 引导模型生成更好地匹配提示,通常用于提高生成质量、控制和提示的遵循度。有不同类型的引导方法,在 Diffusers 中,它们被称为引导器。与块类似,可以轻松切换和使用不同的引导器以适应不同的用例,而无需重写管道。

本指南将向您展示如何切换引导器、调整引导器参数,以及将它们加载并共享到 Hub。

切换引导器

ClassifierFreeGuidance 是默认引导器,在使用 init_pipeline() 初始化管道时创建。它通过 from_config 创建,这意味着它不需要从模块化存储库加载规范。引导器不会列在 modular_model_index.json 中。

使用 get_component_spec() 来检查引导器。

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

通过将新引导器传递给 update_components() 来切换到不同的引导器。

更改引导器将返回文本,让您知道您正在更改引导器类型。

ModularPipeline.update_components: 添加具有新类型的引导器: PerturbedAttentionGuidance, 先前类型: 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)

再次使用 get_component_spec() 来验证引导器类型是否不同。

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

加载自定义引导器

已经在 Hub 上保存并带有 modular_model_index.json 文件的引导器现在被视为 from_pretrained 组件,而不是 from_config 组件。

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

引导器只有在调用 load_default_components() 之后才会创建,基于 modular_model_index.json 中的加载规范。

t2i_pipeline = t2i_blocks.init_pipeline("YiYiXu/modular-doc-guider")
# 在初始化时未创建
assert t2i_pipeline.guider is None
t2i_pipeline.load_default_components()
# 加载为 PAG 引导器
t2i_pipeline.guider

更改引导器参数

引导器参数可以通过 create() 方法或 update_components() 方法进行调整。下面的示例更改了 guidance_scale 值。

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

上传自定义引导器

在自定义引导器上调用 push_to_hub() 方法,将其分享到 Hub。

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

要使此引导器可用于管道,可以修改 modular_model_index.json 文件或使用 update_components() 方法。

modular_model_index.json
update_components

编辑 modular_model_index.json 文件,并添加引导器的加载规范,指向包含引导器配置的文件夹 例如。

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