Diffusers documentation
Textual Inversion
Textual Inversion
تعد Textual Inversion طريقة تدريب لتخصيص النماذج من خلال تعلّم تمثيلات نصية جديدة من عدد قليل من الصور المثلثية. الملف الناتج عن التدريب صغير للغاية (بضعة كيلوبايتات) ويمكن تحميل التمثيلات الجديدة في مُشفِّر النص.
يوفر TextualInversionLoaderMixin دالةً لتحميل تمثيلات Textual Inversion من Diffusers وAutomatic1111 إلى مُشفِّر النص، وتحميل رمز خاص لتفعيل هذه التمثيلات.
للتعرف على المزيد حول كيفية تحميل تضمينات Textual Inversion، راجد دليل التحميل الخاص بـ Textual Inversion.
TextualInversionLoaderMixin
حمّل رموز ودمج Textual Inversion إلى مُرمّز النص ومُشفّر النص.
load_textual_inversion
< source >( 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.
- ملف الانعكاس النصي المحفوظ بصيغة 🤗 Diffusers، لكنه حُفظ باسم وزن محدد مثل
- 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
< source >( prompt: str | list[str]tokenizer: 'PreTrainedTokenizer' ) → str or list of str
تعالج الأوامر النصية التي تتضمن رمزًا خاصًا يقابل تضمين انعكاس نصي متعدد المتجهات ليتم استبداله بعدة رموز خاصة، حيث يقابل كل رمز واحدًا من المتجهات. إذا لم يحتوي الأمر النصي على رمز انعكاس نصي، أو كان رمز الانعكاس النصي متجهًا واحدًا، يُعاد الأمر النصي المُدخل كما هو.
unload_textual_inversion
< source >( 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
)