Buckets:

mishig's picture
|
download
raw
8.92 kB

Гиды

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 и добавьте спецификацию загрузки для guider, указав на папку, содержащую конфигурацию guider.

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

Измените default_creation_method() на from_pretrained и используйте update_components(), чтобы обновить спецификации guider и компонентов, а также конфигурацию конвейера.

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

Чтобы сделать его guider по умолчанию для pipeline, вызовите push_to_hub(). Это необязательный шаг, и он не требуется, если вы экспериментируете только локально.

t2i_pipeline.push_to_hub("YiYiXu/modular-doc-guider")

Xet Storage Details

Size:
8.92 kB
·
Xet hash:
5881a1803d69b89cef2499d499b2b1c795cfe40878bac8e1ade2f5c8f4b4c64d

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.