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.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Гиды

Classifier-free guidance направляет генерацию модели так, чтобы она лучше соответствовала промпту, и часто используется для повышения качества генерации, управляемости и следования промпту. Существует несколько типов методов guidance, и в Diffusers они называются guiders. Как и в случае с блоками, легко переключаться между различными guiders и использовать их для разных задач, не переписывая пайплайн.

В этом руководстве показано, как переключать guider'ы, настраивать параметры guider'ов, а также загружать их в Hub и делиться ими.

Переключение направляющих

ClassifierFreeGuidance — это guider по умолчанию, создаваемый при инициализации пайплайна с помощью init_pipeline(). Он создаётся методом from_config, что означает, что для него не требуется загрузка спецификаций из модульного репозитория. Guider не будет указан в modular_model_index.json.

Используйте get_component_spec() для проверки 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')

Переключитесь на другой guider, передав новый guider в update_components().

Смена guider'а вернёт текст, уведомляющий вас об изменении типа 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)

Снова используйте get_component_spec(), чтобы убедиться, что тип guider отличается.

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
    }
  ]
}

Guider создаётся только после вызова load_components() на основе спецификации загрузки в 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

Изменение параметров guider

Параметры guider можно настроить с помощью методов create() и update_components(). В примере ниже изменяется значение guidance_scale.

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

Загрузка пользовательских направляющих

Вызовите метод push_to_hub() для пользовательского guider, чтобы поделиться им в Hub.

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

Чтобы сделать этот guider доступным для pipeline, измените файл modular_model_index.json или используйте метод update_components().

modular_model_index.json
update_components

Отредактируйте файл modular_model_index.json и добавьте спецификацию загрузки для guider, указав на папку, содержащую конфигурацию guider.

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