Diffusers documentation
LEDITS++
LEDITS++
قُدم LEDITS++ في LEDITS++: Limitless Image Editing using Text-to-Image Models بواسطة Manuel Brack وFelix Friedrich وKatharina Kornmeier وLinoy Tsaban وPatrick Schramowski وKristian Kersting وApolinário Passos.
ملخص الورقة البحثية هو:
لقد حظيت نماذج الانتشار من النص إلى الصورة باهتمام متزايد مؤخراً لقدرتها المذهلة على إنتاج صور عالية الدقة من مدخلات نصية فقط. تهدف الجهود البحثية اللاحقة إلى استغلال قدراتها وتطبيقها على تحرير الصور الحقيقية. ومع ذلك، غالباً ما تكون طرق الصورة إلى الصورة الحالية غير فعّالة، وغير دقيقة، ومحدودة المرونة. فهي إما تتطلب ضبطاً دقيقاً يستغرق وقتاً طويلاً، أو تنحرف بشكل مفرط وغير ضروري عن الصورة المدخلة، و/أو تفتقر إلى دعم التعديلات المتعددة المتزامنة. لمعالجة هذه المشكلات، نطرح LEDITS++، وهي تقنية فعّالة ومرنة ودقيقة في الوقت نفسه للتعديل النصي على الصور. تتطلب نهج LEDITS++ الجديد للعكس أي ضبط أو تحسين، وتنتج نتائج عالية الدقة بعدد قليل من خطوات الانتشار. ثانياً، تدعم منهجيتنا التعديلات المتزامنة المتعددة وهي مستقلة عن البنية المعمارية. ثالثاً، نستخدم تقنية إقناع ضمني جديدة تحدّ التغييرات إلى المناطق ذات الصلة في الصورة. نقترح معيار TEdBench++ الجديد كجزء من تقييمنا الشامل. تُظهر نتائجنا قدرات LEDITS++ وتحسيناتها مقارنةً بالطرق السابقة. صفحة المشروع متاحة على https://leditsplusplus-project.static.hf.space .
يمكنك العثور على معلومات إضافية حول LEDITS++ في صفحة المشروع وتجربته في عرض توضيحي.
بسبب بعض مشاكل التوافق العكسي مع التنفيذ الحالي لـ DPMSolverMultistepScheduler في مكتبة diffusers، لم يعد بإمكان هذا التنفيذ من LEdits++ ضمان عكس مثالي. من غير المرجح أن يكون لهذا الخطأ أي تأثير ملحوظ في حالات الاستخدام العملية. ومع ذلك، نوفر تنفيذاً بديلاً يضمن عكس مثالياً في مستودع GitHub مخصص.
نوفّر خطّتيّ أنابيب (pipelines) مختلفتين مبنيتين على نماذج مُدرَّبة مسبقًا مختلفة.
LEditsPPPipelineStableDiffusion
فئة diffusers.LEditsPPPipelineStableDiffusion
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )
المعاملات
- vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
- text_encoder (CLIPTextModel) — مُشفِّر نص ثابت. يستخدم Stable Diffusion الجزء النصي من CLIP، وتحديداً النسخة clip-vit-large-patch14.
- tokenizer (CLIPTokenizer) — مُقسِّم من الفئة CLIPTokenizer.
- unet (UNet2DConditionModel) — بنية U-Net الشرطية لإزالة الضوضاء من الكامنات المُرمّزة للصورة.
- scheduler (DPMSolverMultistepScheduler أو DDIMScheduler) —
جدول زمني يُستخدم بالاقتران مع
unetلإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد DPMSolverMultistepScheduler أو DDIMScheduler. إذا تم تمرير أي جدول زمني آخر، فسيتم ضبطه تلقائيًا على DPMSolverMultistepScheduler. - safety_checker (
StableDiffusionSafetyChecker) — وحدة تصنيف تُقدّر ما إذا كانت الصور المولّدة يمكن اعتبارها مسيئة أو ضارة. يرجى الرجوع إلى بطاقة النموذج للاطلاع على التفاصيل. - feature_extractor (CLIPImageProcessor) —
نموذج يستخرج الميزات من الصور المولّدة لاستخدامها كمدخلات لـ
safety_checker.
خط أنابيب لتحرير الصور النصية باستخدام LEDits++ مع Stable Diffusion.
يرث هذا النموذج من DiffusionPipeline ويُبنى على أساس StableDiffusionPipeline. راجع توثيق الفئة الأصلية للاطلاع على الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، وما إلى ذلك).
__call__
< source >( negative_prompt: str | list[str] | None = Nonegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = Trueediting_prompt: str | list[str] | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9user_mask: typing.Optional[torch.Tensor] = Nonesem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Trueattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0clip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple
المعاملات
- negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. يتم تجاهلها عند عدم استخدام التوجيه (أي يتم تجاهلها إذا كانguidance_scaleأقل من1). - generator (
torch.Generator، اختياري) — واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع LEditsPPDiffusionPipelineOutput بدلاً من tuple عادي. - editing_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. يتم إعادة بناء الصورة عن طريق تعيينediting_prompt = None. يجب تحديد اتجاه توجيه الموجّه عبرreverse_editing_direction. - editing_prompt_embeds (
torch.Tensor>، اختياري) — تضمينات محسوبة مسبقًا لاستخدامها في توجيه توليد الصورة. يجب تحديد اتجاه التوجيه للتضمين عبرreverse_editing_direction. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (وزن الموجه). إذا لم تُقدَّم، يتم توليدnegative_prompt_embedsمن معامل الإدخالnegative_prompt. - reverse_editing_direction (
boolأوlist[bool]، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب زيادة أو تقليل الموجه المقابل فيediting_prompt. - edit_guidance_scale (
floatأوlist[float]، اختياري، القيمة الافتراضية 5) — مقياس التوجيه لتوجيه توليد الصورة. إذا تم تقديمه كقائمة، يجب أن تتوافق القيم معediting_prompt. يُعرَّفedit_guidance_scaleعلى أنهs_eفي المعادلة 12 من ورقة LEDITS++. - edit_warmup_steps (
floatأوlist[float]، اختياري، القيمة الافتراضية 10) — عدد خطوات الانتشار (لكل موجه) التي لن يُطبَّق فيها التوجيه. - edit_cooldown_steps (
floatأوlist[float]، اختياري، القيمة الافتراضيةNone) — عدد خطوات الانتشار (لكل موجه) بعد التي لن يتم تطبيق التوجيه بعدها. - edit_threshold (
floatأوlist[float]، اختياري، القيمة الافتراضية 0.9) — حدّ الإخفاء للإرشاد. يجب أن يكون الحدّ متناسباً مع منطقة الصورة التي يتم تعديلها. يُعرَّف ‘edit_threshold’ بأنه ‘λ’ في المعادلة 12 من ورقة LEDITS++. - user_mask (
torch.Tensor، اختياري) — قناع يوفّره المستخدم للحصول على تحكم أدق في عملية التحرير. يكون هذا مفيدًا عندما لا تلبي الأقنعة الضمنية في LEDITS++ تفضيلات المستخدم. - sem_guidance (
list[torch.Tensor]، اختياري) — قائمة من متجهات التوجيه المُولَّدة مسبقًا لتُطبَّق أثناء التوليد. يجب أن يتطابق طول القائمة معnum_inference_steps. - use_cross_attn_mask (
bool، القيمة الافتراضيةFalse) — ما إذا كانت أقنعة الانتباه المتقاطع تُستخدم. تُستخدم أقنعة الانتباه المتقاطع دائمًا عند ضبط use_intersect_mask على true. تُعرَّف أقنعة الانتباه المتقاطع على أنها ‘M^1’ من المعادلة 12 في ورقة LEDITS++. - use_intersect_mask (
bool، القيمة الافتراضيةTrue) — ما إذا كان يُحسب حدّ الأقنعة (masking) على أنه تقاطع بين أقنعة الانتباه المتقاطع (cross-attention masks) والأقنعة المشتقة من تقدير الضوضاء. تُعرَّف أقنعة الانتباه المتقاطع على أنها ‘M^1’ والأقنعة المشتقة من تقدير الضوضاء على أنها ‘M^2’ في المعادلة 12 من ورقة LEDITS++. - attn_store_steps (
list[int]، اختياري) — الخطوات التي تُخزَّن فيها خرائط الانتباه في AttentionStore. لأغراض العرض المرئي فقط. - store_averaged_over_steps (
bool، القيمة الافتراضيةTrue) — ما إذا كانت خرائط الانتباه الخاصة بـ ‘attn_store_steps’ تُخزَّن مُتوسَّطةً عبر خطوات الانتشار. إذا كانت القيمة False، تُخزَّن خرائط الانتباه لكل خطوة بشكل منفصل. لأغراض العرض المرئي فقط. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف فيself.processorإذا تمَّ تحديده. - guidance_rescale (
float, optional, defaults to 0.0) — Guidance rescale factor from Common Diffusion Noise Schedules and Sample Steps are Flawed. Guidance rescale factor should fix overexposure when using zero terminal SNR. - clip_skip (
int, اختياري) — عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه. - callback_on_step_end (
Callable، اختياري) — دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). ستتضمنcallback_kwargsقائمة بجميع المصفوفات كما حددتهاcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك.
يعيد
LEditsPPDiffusionPipelineOutput أو tuple
LEditsPPDiffusionPipelineOutput if return_dict is True, otherwise a tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of bools denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the safety_checker`.
دالة الاستدعاء لخط الأنابيب للتعديل. يجب استدعاء الطريقة invert() مسبقاً. سيتم تنفيذ التعديلات دائماً على آخر صورة أو صور معكوسة.
أمثلة:
>>> import torch
>>> from diffusers import LEditsPPPipelineStableDiffusion
>>> from diffusers.utils import load_image
>>> pipe = LEditsPPPipelineStableDiffusion.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")
>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/cherry_blossom.png"
>>> image = load_image(img_url).resize((512, 512))
>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.1)
>>> edited_image = pipe(
... editing_prompt=["cherry blossom"], edit_guidance_scale=10.0, edit_threshold=0.75
... ).images[0]invert
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]source_prompt: str = ''source_guidance_scale: float = 3.5num_inversion_steps: int = 30skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput
المعاملات
- image (
PipelineImageInput) — المدخلات الخاصة بالصورة أو الصور التي سيتم تحريرها. يجب أن تكون جميع الصور المدخلة متعددة بنفس نسبة العرض إلى الارتفاع. - source_prompt (
str، القيمة الافتراضية"") — موجّه يصف صورة الإدخال الذي سيُستخدم للإرشاد أثناء العكس. يُعطَّل الإرشاد إذا كانsource_promptهو"". - source_guidance_scale (
float، القيمة الافتراضية3.5) — قوة التوجيه أثناء العكس. - num_inversion_steps (
int، القيمة الافتراضية30) — عدد خطوات العكس الإجمالية المنفذة بعد استبعاد الخطوات الأوليةskip. - skip (
float، القيمة الافتراضية0.15) — النسبة من الخطوات الأولية التي سيتم تجاهلها في عملية العكس والتوليد اللاحق. تؤدي القيم الأدنى إلى إحداث تغييرات أقوى في الصورة المدخلة. يجب أن تكون قيمةskipبين0و1. - generator (
torch.Generator، اختياري) —torch.Generatorلجعل عملية العكس حتمية. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف فيself.processorإذا تمَّ تحديده. - clip_skip (
int, اختياري) — عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه. - height (
int، اختياري، القيمة الافتراضيةNone) — الارتفاع في الصورة بعد المعالجة المسبقة. إذا كانتNone، فسيتم استخدامget_default_height_width()للحصول على الارتفاع الافتراضي. - width (
int, optional, defaults toNone) -- The width in preprocessed. IfNone, will use get_default_height_width()to get the default width. - resize_mode (
str, اختياري، القيمة الافتراضيةdefault) — وضع تغيير الحجم، يمكن أن يكون أحدdefaultأوfill. إذا كانdefault، فسيتم تغيير حجم الصورة لتناسب العرض والارتفاع المحددين، وقد لا يحافظ على نسبة العرض إلى الارتفاع الأصلية. إذا كانfill، فسيتم تغيير حجم الصورة لتناسب العرض والارتفاع المحددين مع الحفاظ على نسبة العرض إلى الارتفاع، ثم يتم توسيط الصورة ضمن الأبعاد، مع ملء الفراغات ببيانات من الصورة. إذا كانcrop، فسيتم تغيير حجم الصورة لتناسب العرض والارتفاع المحددين مع الحفاظ على نسبة العرض إلى الارتفاع، ثم يتم توسيط الصورة ضمن الأبعاد، مع قص الفائض. لاحظ أن وضعي تغيير الحجمfillوcropمدعومان فقط لإدخال صور PIL. - crops_coords (
list[tuple[int, int, int, int]]، اختياري، القيمة الافتراضيةNone) — إحداثيات القص لكل صورة في الدفعة. إذا كانتNone، فلن يتم قص الصورة.
ستحتوي المخرجات على صورة الإدخال المُعاد تحجيمها وإعادة بناء VAE المقابلة لها.
الدالة الخاصة بخط أنابيب عكس الصور كما ورد في ورقة LEDITS++. إذا تم ضبط المجدول على DDIMScheduler فسيتم تنفيذ عكس الصور المقترح بواسطة edit-friendly DPDM بدلاً من ذلك.
encode_prompt
< source >( devicenum_images_per_promptenable_edit_guidancenegative_prompt = Noneediting_prompt = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )
المعاملات
- device — (
torch.device): جهاز torch - num_images_per_prompt (
int) — عدد الصور التي يجب توليدها لكل موجه - enable_edit_guidance (
bool) — ما إذا كان سيتم تنفيذ أي تحرير أو إعادة بناء الصورة المدخلة بدلاً من ذلك - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - editing_prompt (
strأوlist[str]، اختياري) — موجّهات التحرير التي سيتم ترميزها. إذا لم يتم تعريفها، يجب تمريرediting_prompt_embedsبدلاً من ذلك. - editing_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُوفَّر، سيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - lora_scale (
float، اختياري) — مقياس LoRA سيُطبَّق على جميع طبقات LoRA في مُشفِّر النص إذا كانت طبقات LoRA محمَّلة. - clip_skip (
int, اختياري) — عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
LEditsPPPipelineStableDiffusionXL
فئة diffusers.LEditsPPPipelineStableDiffusionXL
< source >( vae: AutoencoderKLtext_encoder: CLIPTextModeltext_encoder_2: CLIPTextModelWithProjectiontokenizer: CLIPTokenizertokenizer_2: CLIPTokenizerunet: UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler | diffusers.schedulers.scheduling_ddim.DDIMSchedulerimage_encoder: CLIPVisionModelWithProjection = Nonefeature_extractor: CLIPImageProcessorPil = Noneforce_zeros_for_empty_prompt: bool = Trueadd_watermarker: bool | None = None )
المعاملات
- vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
- text_encoder (CLIPTextModel) — مُشفِّر نص ثابت. يستخدم Stable Diffusion XL الجزء النصي من CLIP، وتحديداً النسخة clip-vit-large-patch14.
- text_encoder_2 (CLIPTextModelWithProjection) — المُشفِّر النصي الثاني المُجمَّد. يستخدم Stable Diffusion XL الجزء النصي والجزء المُجمَّع (pool) من CLIP، وتحديداً النسخة laion/CLIP-ViT-bigG-14-laion2B-39B-b160k.
- tokenizer (CLIPTokenizer) — مُقسِّم من الفئة CLIPTokenizer.
- tokenizer_2 (CLIPTokenizer) — المُرمِّز الثاني من الفئة CLIPTokenizer.
- unet (UNet2DConditionModel) — بنية U-Net الشرطية لإزالة الضوضاء من الكامنات المُرمّزة للصورة.
- scheduler (DPMSolverMultistepScheduler أو DDIMScheduler) —
جدول زمني يُستخدم بالاقتران مع
unetلإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد DPMSolverMultistepScheduler أو DDIMScheduler. إذا تم تمرير أي جدول زمني آخر، فسيتم ضبطه تلقائيًا على DPMSolverMultistepScheduler. - force_zeros_for_empty_prompt (
bool، اختياري، القيمة الافتراضية"True") — ما إذا كان يجب إجبار تضمينات الموجه السلبي على أن تكون دائمًا 0. راجع أيضًا إعداداتstabilityai/stable-diffusion-xl-base-1-0. - add_watermarker (
bool، اختياري) — ما إذا كان سيتم استخدام مكتبة invisible_watermark لإضافة علامة مائية على الصور الناتجة. إذا لم يُعرَّف، فسيكون الافتراضي True إذا كانت الحزمة مثبّتة، وإلا فلن تُستخدم أي علامة مائية.
خط أنابيب لتحرير الصور النصية باستخدام LEDits++ مع Stable Diffusion XL.
يرث هذا النموذج من DiffusionPipeline ويُبنى على أساس StableDiffusionXLPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
بالإضافة إلى ذلك، يرث خط الأنابيب طرق التحميل التالية:
- LoRA: LEditsPPPipelineStableDiffusionXL.load_lora_weights()
- Ckpt: loaders.FromSingleFileMixin.from_single_file()
وكذلك طرق الحفظ التالية:
- LoRA:
loaders.StableDiffusionXLPipeline.save_lora_weights
__call__
< source >( denoising_end: float | None = Nonenegative_prompt: str | list[str] | None = Nonenegative_prompt_2: str | list[str] | None = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Noneip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneguidance_rescale: float = 0.0crops_coords_top_left: tuple = (0, 0)target_size: tuple[int, int] | None = Noneediting_prompt: str | list[str] | None = Noneediting_prompt_embeddings: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonereverse_editing_direction: bool | list[bool] | None = Falseedit_guidance_scale: float | list[float] | None = 5edit_warmup_steps: int | list[int] | None = 0edit_cooldown_steps: int | list[int] | None = Noneedit_threshold: float | list[float] | None = 0.9sem_guidance: list[torch.Tensor] | None = Noneuse_cross_attn_mask: bool = Falseuse_intersect_mask: bool = Falseuser_mask: typing.Optional[torch.Tensor] = Noneattn_store_steps: list[int] | None = []store_averaged_over_steps: bool = Trueclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → LEditsPPDiffusionPipelineOutput or tuple
المعاملات
- denoising_end (
float, اختياري) — عند تحديده، يحدد نسبة (بين 0.0 و 1.0) من إجمالي عملية إزالة الضوضاء التي يجب إتمامها قبل إنهائها مبكرًا عمدًا. ونتيجةً لذلك، سيحتفظ العينة المُعاد بها بكمية كبيرة من الضوضاء كما تحددها الخطوات الزمنية المنفصلة التي يختارها المجدول. ينبغي استخدام معامل denoising_end بشكل مثالي عندما يشكل هذا الخط الأنابيب جزءًا من إعداد متعدد الخطوط الأنابيب “خليط من مُزيلات الضوضاء”، كما هو موضح في [**تحسين الصورة - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - negative_prompt_2 (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي توجيه توليد الصورة إليها، والتي تُرسل إلىtokenizer_2وtext_encoder_2. إذا لم يُعرَّف، يُستخدمnegative_promptفي كلا مشفّري النص - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - negative_pooled_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن المحفّز. إذا لم تُقدَّم، فسيتم توليد تضمينات negative_prompt_embeds المجمعة من معامل الإدخالnegative_prompt. - ip_adapter_image — (
PipelineImageInput، اختياري): مدخل صورة اختياري للعمل مع IP Adapters. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutputبدلاً من tuple عادي. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده. - guidance_rescale (
float, optional, defaults to 0.7) — Guidance rescale factor proposed by Common Diffusion Noise Schedules and Sample Steps are Flawedguidance_scaleis defined asφin equation 16. of Common Diffusion Noise Schedules and Sample Steps are Flawed. Guidance rescale factor should fix overexposure when using zero terminal SNR. - crops_coords_top_left (
tuple[int], اختياري، القيمة الافتراضية (0, 0)) — يمكن استخدامcrops_coords_top_leftلتوليد صورة تبدو وكأنها “مقتطعة” من الموضعcrops_coords_top_leftإلى الأسفل. عادةً ما يتم تحقيق صور جيدة ومركزة بشكل مفضل عن طريق تعيينcrops_coords_top_leftإلى (0, 0). جزء من التكييف الدقيق (micro-conditioning) الخاص بـ SDXL كما هو موضح في القسم 2.2 من https://huggingface.co/papers/2307.01952. - target_size (
tuple[int]، اختياري، القيمة الافتراضية (1024, 1024)) — في معظم الحالات، يجب ضبطtarget_sizeعلى الارتفاع والعرض المطلوبين للصورة المولّدة. إذا لم يُحدَّد، فسيكون الافتراضي(width, height). وهو جزء من التكييف الدقيق (micro-conditioning) في SDXL كما هو موضح في القسم 2.2 من https://huggingface.co/papers/2307.01952. - editing_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. يتم إعادة بناء الصورة عن طريق تعيينediting_prompt = None. يجب تحديد اتجاه توجيه الموجّه عبرreverse_editing_direction. - editing_prompt_embeddings (
torch.Tensor, اختياري) — تضمينات نصوص تحرير مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن التلميح. إذا لم تُقدَّم، فسيتم توليد editing_prompt_embeddings من معامل الإدخالediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, اختياري) — تضمينات نصية مجمعة مُعدّة مسبقًا للتحرير. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم يُقدَّم، فسيتم توليد editing_prompt_embeddings من معامل الإدخالediting_prompt. - reverse_editing_direction (
boolأوlist[bool]، اختياري، القيمة الافتراضيةFalse) — ما إذا كان يجب زيادة أو تقليل الموجه المقابل فيediting_prompt. - edit_guidance_scale (
floatأوlist[float]، اختياري، القيمة الافتراضية 5) — مقياس التوجيه لتوجيه توليد الصورة. إذا تم تقديمه كقائمة، يجب أن تتوافق القيم معediting_prompt. يُعرَّفedit_guidance_scaleعلى أنهs_eفي المعادلة 12 من ورقة LEDITS++. - edit_warmup_steps (
floatأوlist[float]، اختياري، القيمة الافتراضية 10) — عدد خطوات الانتشار (لكل موجه) التي لا يُطبَّق فيها التوجيه. - edit_cooldown_steps (
floatأوlist[float]، اختياري، القيمة الافتراضيةNone) — عدد خطوات الانتشار (لكل موجه) بعد التي لم يعد يُطبَّق فيها التوجيه. - edit_threshold (
floatأوlist[float]، اختياري، القيمة الافتراضية 0.9) — حدّ الإخفاء للإرشاد. يجب أن يكون الحدّ متناسباً مع منطقة الصورة التي يتم تعديلها. يُعرَّف ‘edit_threshold’ بأنه ‘λ’ في المعادلة 12 من ورقة LEDITS++. - sem_guidance (
list[torch.Tensor]، اختياري) — قائمة من متجهات التوجيه المُولَّدة مسبقًا لتُطبَّق أثناء التوليد. يجب أن يتطابق طول القائمة معnum_inference_steps. - use_cross_attn_mask — ما إذا كانت أقنعة الانتباه المتقاطع تُستخدم. تُستخدم أقنعة الانتباه المتقاطع دائمًا عند ضبط use_intersect_mask على true. تُعرَّف أقنعة الانتباه المتقاطع على أنها ‘M^1’ من المعادلة 12 في ورقة LEDITS++.
- use_intersect_mask — ما إذا كان حد القناع يُحسب كتقاطع بين أقنعة الانتباه المتقاطع والأقنعة المشتقة من تقدير الضوضاء. تُعرَّف أقنعة الانتباه المتقاطع على أنها ‘M^1’ والأقنعة المشتقة من تقدير الضوضاء على أنها ‘M^2’ في المعادلة 12 من ورقة LEDITS++.
- user_mask — قناع يوفّره المستخدم للحصول على تحكم أفضل في عملية التحرير. يكون هذا مفيدًا عندما لا تلبي الأقنعة الضمنية في LEDITS++ تفضيلات المستخدم.
- attn_store_steps — الخطوات التي تُخزَّن فيها خرائط الانتباه في AttentionStore. لأغراض العرض المرئي فقط.
- store_averaged_over_steps — ما إذا كانت خرائط الانتباه الخاصة بـ ‘attn_store_steps’ تُخزَّن مُتوسَّطةً عبر خطوات الانتشار. إذا كانت القيمة False، تُخزَّن خرائط الانتباه لكل خطوة بشكل منفصل. لأغراض العرض المرئي فقط.
- clip_skip (
int, اختياري) — عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه. - callback_on_step_end (
Callable، اختياري) — دالة تُستدعى في نهاية كل خطوة إزالة ضوضاء أثناء الاستدلال. تُستدعى الدالة بالحجج التالية:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). ستتضمنcallback_kwargsقائمة بجميع المصفوفات كما حددتهاcallback_on_step_end_tensor_inputs. - callback_on_step_end_tensor_inputs (
list، اختياري) — قائمة مدخلات المصفوفات (tensors) لدالةcallback_on_step_end. سيتم تمرير المصفوفات المحددة في القائمة كحجةcallback_kwargs. لن تتمكن من تضمين متغيرات غير مدرجة في خاصية._callback_tensor_inputsلفئة خط الأنابيب (pipeline) الخاص بك.
يعيد
LEditsPPDiffusionPipelineOutput أو tuple
LEditsPPDiffusionPipelineOutput إذا كان return_dict هو True، وإلا فسيكون `tuple. عند إرجاع tuple، يكون العنصر الأول قائمة تحتوي على الصور المولّدة.
دالة الاستدعاء لخط الأنابيب للتعديل. يجب استدعاء الطريقة invert() مسبقاً. ستتم التعديلات دائماً على آخر صورة معكوسة أو صور معكوسة.
أمثلة:
>>> import torch
>>> from diffusers import LEditsPPPipelineStableDiffusionXL
>>> from diffusers.utils import load_image
>>> pipe = LEditsPPPipelineStableDiffusionXL.from_pretrained(
... "stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")
>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/tennis.jpg"
>>> image = load_image(img_url).resize((1024, 1024))
>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.2)
>>> edited_image = pipe(
... editing_prompt=["tennis ball", "tomato"],
... reverse_editing_direction=[True, False],
... edit_guidance_scale=[5.0, 10.0],
... edit_threshold=[0.9, 0.85],
... ).images[0]invert
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]source_prompt: str = ''source_guidance_scale = 3.5negative_prompt: str = Nonenegative_prompt_2: str = Nonenum_inversion_steps: int = 50skip: float = 0.15generator: typing.Optional[torch.Generator] = Nonecrops_coords_top_left: tuple = (0, 0)num_zero_noise_steps: int = 3cross_attention_kwargs: dict[str, typing.Any] | None = Noneheight: int | None = Nonewidth: int | None = Noneresize_mode: str | None = 'default'crops_coords: tuple[int, int, int, int] | None = None ) → LEditsPPInversionPipelineOutput
المعاملات
- image (
PipelineImageInput) — المدخلات الخاصة بالصورة أو الصور التي سيتم تحريرها. يجب أن تكون جميع الصور المدخلة متعددة بنفس نسبة العرض إلى الارتفاع. - source_prompt (
str، القيمة الافتراضية"") — موجّه يصف صورة الإدخال الذي سيُستخدم للإرشاد أثناء العكس. يُعطَّل الإرشاد إذا كانsource_promptهو"". - source_guidance_scale (
float، القيمة الافتراضية3.5) — قوة التوجيه أثناء العكس. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - negative_prompt_2 (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي توجيه توليد الصورة إليها، والتي تُرسل إلىtokenizer_2وtext_encoder_2. إذا لم يُعرَّف، يُستخدمnegative_promptفي كلا مشفّري النص - num_inversion_steps (
int، القيمة الافتراضية50) — عدد خطوات العكس الإجمالية المنفذة بعد استبعاد الخطوات الأوليةskip. - skip (
float، القيمة الافتراضية0.15) — النسبة من الخطوات الأولية التي سيتم تجاهلها في عملية العكس والتوليد اللاحق. تؤدي القيم الأدنى إلى إحداث تغييرات أقوى في الصورة المدخلة. يجب أن تكون قيمةskipبين0و1. - generator (
torch.Generator، اختياري) —torch.Generatorلجعل عملية العكس حتمية. - crops_coords_top_left (
tuple[int], اختياري، القيمة الافتراضية (0, 0)) — يمكن استخدامcrops_coords_top_leftلتوليد صورة تبدو وكأنها “مقتطعة” من الموضعcrops_coords_top_leftإلى الأسفل. عادةً ما يتم تحقيق صور جيدة ومركزة بشكل مفضل عن طريق تعيينcrops_coords_top_leftإلى (0, 0). جزء من التكييف الدقيق (micro-conditioning) الخاص بـ SDXL كما هو موضح في القسم 2.2 من https://huggingface.co/papers/2307.01952. - num_zero_noise_steps (
int، القيمة الافتراضية3) — عدد خطوات الانتشار النهائية التي لن تعيد إضافة الضوضاء إلى الصورة الحالية. إذا لم يتم تعيين أي خطوات إلى الصفر، فسيؤدي استخدام SD-XL مع DPMSolverMultistepScheduler إلى ظهور شوائب ضوضائية. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده.
ستحتوي المخرجات على صورة الإدخال المُعاد تحجيمها وإعادة بناء VAE المقابلة لها.
الدالة الخاصة بخط أنابيب عكس الصور كما ورد في ورقة LEDITS++. إذا تم ضبط المجدول على DDIMScheduler فسيتم تنفيذ عكس الصور المقترح بواسطة edit-friendly DPDM بدلاً من ذلك.
encode_prompt
< source >( device: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1negative_prompt: str | None = Nonenegative_prompt_2: str | None = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = Noneenable_edit_guidance: bool = Trueediting_prompt: str | None = Noneediting_prompt_embeds: typing.Optional[torch.Tensor] = Noneediting_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None )
المعاملات
- device — (
torch.device): جهاز torch - num_images_per_prompt (
int) — عدد الصور التي يجب توليدها لكل موجه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً منه. - negative_prompt_2 (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي توجيه توليد الصورة إليها، والتي تُرسل إلىtokenizer_2وtext_encoder_2. إذا لم يُعرَّف، يُستخدمnegative_promptفي كلا مشفّري النص - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - negative_pooled_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مجمعة سالبة مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن المحفّز. إذا لم تُقدَّم، فسيتم توليد تضمينات negative_prompt_embeds المجمعة من معامل الإدخالnegative_prompt. - lora_scale (
float، اختياري) — مقياس LoRA سيُطبَّق على جميع طبقات LoRA في مُشفِّر النص إذا كانت طبقات LoRA محمَّلة. - clip_skip (
int, اختياري) — عدد الطبقات التي سيتم تجاوزها من CLIP أثناء حساب تمثيلات الموجه. القيمة 1 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه. - enable_edit_guidance (
bool) — ما إذا كان سيتم التوجيه نحو موجه التحرير أم لا. - editing_prompt (
strأوlist[str]، اختياري) — موجّهات التحرير (prompt) التي سيتم ترميزها. إذا لم يتم تعريفها وكان ‘enable_edit_guidance’ True، يجب تمريرediting_prompt_embedsبدلاً من ذلك. - editing_prompt_embeds (
torch.Tensor, اختياري) — تضمينات نص تعديل مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم يُقدَّم وكان ‘enable_edit_guidance’ True، فسيتم توليد editing_prompt_embeds من معامل الإدخالediting_prompt. - editing_pooled_prompt_embeds (
torch.Tensor, اختياري) — تضمينات نصية مجمّعة مُعدّة مسبقًا للتحرير. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن المحفّز. إذا لم يُقدَّم، سيتم توليد editing_pooled_prompt_embeds المجمّعة من معامل الإدخالediting_prompt.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
get_guidance_scale_embedding
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
المعاملات
- w (
torch.Tensor) — توليد متجهات تضمين بمقياس توجيه محدد لغرض إثراء تضمينات خطوة الزمن اللاحقة. - embedding_dim (
int، اختياري، القيمة الافتراضية 512) — أبعاد التضمينات (embeddings) التي سيتم توليدها. - dtype (
torch.dtype، اختياري، الافتراضيtorch.float32) — نوع البيانات للتضمينات المولّدة.
يعيد
torch.Tensor
متجهات تضمين بشكل (len(w), embedding_dim).
LEditsPPDiffusionPipelineOutput
فئة diffusers.pipelines.LEditsPPDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
المعاملات
- images (
list[PIL.Image.Image]أوnp.ndarray) — قائمة من صور PIL منزوعة الضوضاء بطولbatch_sizeأو مصفوفة NumPy بأبعاد(batch_size, height, width, num_channels). - nsfw_content_detected (
list[bool]) — قائمة تُشير إلى ما إذا كانت الصورة المولدة المقابلة تحتوي على محتوى “غير آمن للعمل” (nsfw) أوNoneإذا تعذّر إجراء فحص السلامة.
فئة الإخراج لخطوط أنابيب LEdits++ Diffusion.
LEditsPPInversionPipelineOutput
فئة diffusers.pipelines.LEditsPPInversionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarrayvae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray )
المعاملات
- input_images (
list[PIL.Image.Image]أوnp.ndarray) — قائمة من صور الإدخال المقصوصة والمُعاد تحديدها كصور PIL بطولbatch_sizeأو مصفوفة NumPy بأبعاد(batch_size, height, width, num_channels). - vae_reconstruction_images (
list[PIL.Image.Image]أوnp.ndarray) — قائمة بإعادة بناء VAE لجميع الصور المدخلة بصيغة صور PIL بطولbatch_sizeأو مصفوفة NumPy بأبعاد(batch_size, height, width, num_channels).
فئة الإخراج لخطوط أنابيب LEdits++ Diffusion.