Diffusers documentation
Pemandu
Pemandu
Classifier-free guidance mengarahkan generasi model agar lebih sesuai dengan prompt dan umum digunakan untuk meningkatkan kualitas, kontrol, serta kepatuhan terhadap prompt. Terdapat berbagai jenis metode guidance, dan di Diffusers, metode-metode ini dikenal sebagai guiders. Sama seperti blocks, mudah untuk beralih dan menggunakan guiders yang berbeda untuk berbagai kasus penggunaan tanpa perlu menulis ulang pipeline.
Panduan ini akan menunjukkan cara Anda mengganti guider, menyesuaikan parameter guider, serta memuat dan membagikannya ke Hub.
Mengganti guiders
ClassifierFreeGuidance adalah guider bawaan yang dibuat saat pipeline diinisialisasi dengan init_pipeline(). Guider ini dibuat oleh from_config, yang berarti tidak memerlukan pemuatan spesifikasi dari repositori modular. Guider tidak akan terdaftar di modular_model_index.json.
Gunakan get_component_spec() untuk memeriksa sebuah 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')Beralih ke guider yang berbeda dengan meneruskan guider baru ke update_components().
Mengubah guider akan mengembalikan teks yang memberi tahu Anda bahwa Anda sedang mengubah tipe 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)Gunakan get_component_spec() lagi untuk memverifikasi bahwa tipe guider berbeda.
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')Memuat panduan kustom
Guiders yang sudah disimpan di Hub dengan file modular_model_index.json sekarang dianggap sebagai komponen from_pretrained alih-alih komponen from_config.
{
"guider": [
null,
null,
{
"repo": "YiYiXu/modular-loader-t2i-guider",
"revision": null,
"subfolder": "pag_guider",
"type_hint": [
"diffusers",
"PerturbedAttentionGuidance"
],
"variant": null
}
]
}Guider hanya dibuat setelah memanggil load_components() berdasarkan spesifikasi pemuatan di 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.guiderMengubah parameter guider
Parameter guider dapat disesuaikan dengan metode create() dan update_components(). Contoh di bawah ini mengubah nilai guidance_scale.
guider_spec = t2i_pipeline.get_component_spec("guider")
guider = guider_spec.create(guidance_scale=10)
t2i_pipeline.update_components(guider=guider)Mengunggah panduan kustom
Panggil metode push_to_hub() pada guider kustom untuk membagikannya ke Hub.
guider.push_to_hub("YiYiXu/modular-loader-t2i-guider", subfolder="pag_guider")Untuk membuat guider ini tersedia untuk pipeline, ubah file modular_model_index.json atau gunakan metode update_components().
Edit file modular_model_index.json dan tambahkan spesifikasi pemuatan untuk guider dengan menunjuk ke folder yang berisi konfigurasi guider.
{
"guider": [
"diffusers",
"PerturbedAttentionGuidance",
{
"repo": "YiYiXu/modular-loader-t2i-guider",
"revision": null,
"subfolder": "pag_guider",
"type_hint": [
"diffusers",
"PerturbedAttentionGuidance"
],
"variant": null
}
],Ubah default_creation_method() menjadi from_pretrained dan gunakan update_components() untuk memperbarui spesifikasi guider dan komponen serta konfigurasi pipeline.
Mengubah metode pembuatan akan mengembalikan teks yang memberi tahu Anda bahwa Anda mengubah tipe pembuatan menjadi
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)Untuk menjadikannya guider default untuk sebuah pipeline, panggil push_to_hub(). Ini adalah langkah opsional dan tidak diperlukan jika Anda hanya bereksperimen secara lokal.
t2i_pipeline.push_to_hub("YiYiXu/modular-doc-guider")