Diffusers documentation

Textual Inversion

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Textual Inversion

تعد Textual Inversion طريقة تدريب لتخصيص النماذج من خلال تعلّم تمثيلات نصية جديدة من عدد قليل من الصور المثلثية. الملف الناتج عن التدريب صغير للغاية (بضعة كيلوبايتات) ويمكن تحميل التمثيلات الجديدة في مُشفِّر النص.

يوفر TextualInversionLoaderMixin دالةً لتحميل تمثيلات Textual Inversion من Diffusers وAutomatic1111 إلى مُشفِّر النص، وتحميل رمز خاص لتفعيل هذه التمثيلات.

للتعرف على المزيد حول كيفية تحميل تضمينات Textual Inversion، راجد دليل التحميل الخاص بـ Textual Inversion.

TextualInversionLoaderMixin

فئة diffusers.loaders.TextualInversionLoaderMixin

< >

( )

حمّل رموز ودمج Textual Inversion إلى مُرمّز النص ومُشفّر النص.

load_textual_inversion

< >

( pretrained_model_name_or_path: str | list[str] | dict[str, torch.Tensor] | list[dict[str, torch.Tensor]]token: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None**kwargs )

المعاملات

  • pretrained_model_name_or_path (str أو os.PathLike أو list[str or os.PathLike] أو Dict أو list[Dict]) — يمكن أن يكون أيًا مما يلي أو قائمة بهما:
    • سلسلة نصية، وهي معرف النموذج (على سبيل المثال sd-concepts-library/low-poly-hd-logos-icons) لنموذج مُدرَّب مسبقًا مستضاف على Hub.
    • مسار إلى مجلد (على سبيل المثال ./my_text_inversion_directory/) يحتوي على أوزان عكس النص.
    • مسار إلى ملف (على سبيل المثال ./my_text_inversions.pt) يحتوي على أوزان الانعكاس النصي.
    • حالة torch.
  • token (str أو list[str]، اختياري) — تجاوز الرمز المستخدم لأوزان الانعكاس النصي. إذا كان pretrained_model_name_or_path قائمة، فيجب أن يكون token أيضًا قائمة بطول متساوٍ.
  • text_encoder (CLIPTextModel، اختياري) — مُشفِّر نص ثابت (clip-vit-large-patch14). إذا لم يُحدد، ستأخذ الدالة self.tokenizer.
  • tokenizer (CLIPTokenizer، اختياري) — CLIPTokenizer لتجزئة النص. إذا لم يُحدد، ستأخذ الدالة self.tokenizer.
  • weight_name (str, اختياري) — اسم ملف أوزان مخصص. يجب استخدام هذا المعامل عندما:
    • ملف الانعكاس النصي المحفوظ بصيغة 🤗 Diffusers، لكنه حُفظ باسم وزن محدد مثل text_inv.bin.
    • الملف النصي المحفوظ للتعاكس النصي (textual inversion) هو بصيغة Automatic1111.
  • cache_dir (str | os.PathLike، اختياري) — المسار إلى مجلد حيث يتم تخزين إعدادات النموذج المُدرَّب مسبقًا المُحمَّل مؤقتًا إذا لم يُستخدم المجلد المؤقت القياسي.
  • force_download (bool، اختياري، القيمة الافتراضية False) — ما إذا كان يجب إجبار إعادة تنزيل أوزان النموذج وملفات الإعداد، مع تجاوز النسخ المخزنة مؤقتًا إذا كانت موجودة.
  • proxies (dict[str, str]، اختياري) — قاموس لخوادم الوكيل (proxy) للاستخدام حسب البروتوكول أو نقطة النهاية، على سبيل المثال {'http': 'foo.bar:3128', 'http://hostname': 'foo.bar:4012'}. تُستخدم هذه الوكلاء في كل طلب.
  • local_files_only (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم تحميل أوزان النموذج وملفات الإعداد المحلية فقط أم لا. إذا تم ضبطه على True، فلن يتم تنزيل النموذج من Hub.
  • hf_token (str أو bool، اختياري) — الرمز الذي يُستخدم كتفويض حامل HTTP للملفات البعيدة. إذا كان True، يُستخدم الرمز المولّد من diffusers-cli login (المخزّن في ~/.huggingface).
  • revision (str، اختياري، القيمة الافتراضية "main") — الإصدار المحدد من النموذج الذي سيتم استخدامه. يمكن أن يكون اسم فرع، أو اسم وسم، أو معرف commit، أو أي معرّف مسموح به بواسطة Git.
  • subfolder (str، اختياري، الافتراضي "") — موقع المجلد الفرعي لملف النموذج داخل مستودع نموذج أكبر على Hub أو محليًا.
  • mirror (str، اختياري) — مصدر مرآة لحل مشاكل إمكانية الوصول إذا كنت تقوم بتنزيل نموذج في الصين. نحن لا نضمن حداثة المصدر أو أمانه، وينبغي لك الرجوع إلى موقع المرآة لمزيد من المعلومات.

حمّل ترميزات Textual Inversion في مُشفِّر النص الخاص بـ StableDiffusionPipeline (يُؤمَّن كلٌّ من صيغتي 🤗 Diffusers وAutomatic1111).

مثال:

لتحميل متجه تضمين Textual Inversion بصيغة 🤗 Diffusers:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("sd-concepts-library/cat-toy")

prompt = "A <cat-toy> backpack"

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("cat-backpack.png")

لتحميل متجه تضمين Textual Inversion بصيغة Automatic1111، تأكد أولاً من تنزيل المتجه (على سبيل المثال من civitAI) ثم قم بتحميل المتجه

محليًا:

from diffusers import StableDiffusionPipeline
import torch

model_id = "stable-diffusion-v1-5/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda")

pipe.load_textual_inversion("./charturnerv2.pt", token="charturnerv2")

prompt = "charturnerv2, multiple views of the same character in the same outfit, a character turnaround of a woman wearing a black jacket and red shirt, best quality, intricate details."

image = pipe(prompt, num_inference_steps=50).images[0]
image.save("character.png")

maybe_convert_prompt

< >

( prompt: str | list[str]tokenizer: 'PreTrainedTokenizer' ) → str or list of str

المعاملات

  • prompt (str أو قائمة من str) — الموجّه أو الموجّهات التي تُوجّه توليد الصورة.
  • tokenizer (PreTrainedTokenizer) — المُرمِّز المسؤول عن ترميز المُوجِّه إلى رموز الإدخال.

يعيد

str أو قائمة من str

الموجّه المحوّل

تعالج الأوامر النصية التي تتضمن رمزًا خاصًا يقابل تضمين انعكاس نصي متعدد المتجهات ليتم استبداله بعدة رموز خاصة، حيث يقابل كل رمز واحدًا من المتجهات. إذا لم يحتوي الأمر النصي على رمز انعكاس نصي، أو كان رمز الانعكاس النصي متجهًا واحدًا، يُعاد الأمر النصي المُدخل كما هو.

unload_textual_inversion

< >

( tokens: str | list[str] | None = Nonetokenizer: 'PreTrainedTokenizer' | None = Nonetext_encoder: 'PreTrainedModel' | None = None )

إزالة تضمينات Textual Inversion من مُشفّر النص الخاص بـ StableDiffusionPipeline

مثال:

from diffusers import AutoPipelineForText2Image
import torch

pipeline = AutoPipelineForText2Image.from_pretrained("stable-diffusion-v1-5/stable-diffusion-v1-5")

# Example 1
pipeline.load_textual_inversion("sd-concepts-library/gta5-artwork")
pipeline.load_textual_inversion("sd-concepts-library/moeb-style")

# Remove all token embeddings
pipeline.unload_textual_inversion()

# Example 2
pipeline.load_textual_inversion("sd-concepts-library/moeb-style")
pipeline.load_textual_inversion("sd-concepts-library/gta5-artwork")

# Remove just one token
pipeline.unload_textual_inversion("<moe-bius>")

# Example 3: unload from SDXL
pipeline = AutoPipelineForText2Image.from_pretrained("stabilityai/stable-diffusion-xl-base-1.0")
embedding_path = hf_hub_download(
    repo_id="linoyts/web_y2k", filename="web_y2k_emb.safetensors", repo_type="model"
)

# load embeddings to the text encoders
state_dict = load_file(embedding_path)

# load embeddings of text_encoder 1 (CLIP ViT-L/14)
pipeline.load_textual_inversion(
    state_dict["clip_l"],
    tokens=["<s0>", "<s1>"],
    text_encoder=pipeline.text_encoder,
    tokenizer=pipeline.tokenizer,
)
# load embeddings of text_encoder 2 (CLIP ViT-G/14)
pipeline.load_textual_inversion(
    state_dict["clip_g"],
    tokens=["<s0>", "<s1>"],
    text_encoder=pipeline.text_encoder_2,
    tokenizer=pipeline.tokenizer_2,
)

# Unload explicitly from both text encoders and tokenizers
pipeline.unload_textual_inversion(
    tokens=["<s0>", "<s1>"], text_encoder=pipeline.text_encoder, tokenizer=pipeline.tokenizer
)
pipeline.unload_textual_inversion(
    tokens=["<s0>", "<s1>"], text_encoder=pipeline.text_encoder_2, tokenizer=pipeline.tokenizer_2
)
Update on GitHub