Diffusers documentation
DeepFloyd IF
DeepFloyd IF
نظرة عامة
DeepFloyd IF هو نموذج مفتوح المصدر حديث ومتطور لتوليد الصور من النص، يتميز بدرجة عالية من الواقعية الضوئية وفهم اللغة. يتألف النموذج من وحدات معيارية تشمل مشفّر نصي مجمّد وثلاثة وحدات انتشار بكسل متسلسلة:
- المرحلة 1: نموذج أساسي يولّد صورة بدقة 64x64 بكسل بناءً على وصف نصي،
- المرحلة 2: نموذج فائق الدقة 64x64 بكسل => 256x256 بكسل، و
- المرحلة 3: نموذج فائق الدقة 256x256 بكسل => 1024x1024 بكسل تستخدم المرحلة 1 والمرحلة 2 مُشفِّر نص ثابت مبني على محوّل T5 لاستخراج تمثيلات النص، ثم تُغذّى هذه التمثيلات في بنية UNet معززة بآلية الانتباه المتقاطع (cross-attention) وتجميع الانتباه (attention pooling). المرحلة 3 هي نموذج x4 Upscaling من Stability AI. النتيجة هي نموذج شديد الكفاءة يتفوق على أحدث النماذج المتقدمة حاليًا، محققًا درجة FID صفرية (zero-shot) تبلغ 6.66 على مجموعة بيانات COCO. يؤكد عملنا على إمكانات بنية UNet الأكبر حجمًا في المرحلة الأولى من نماذج الانتشار المتسلسلة (cascaded diffusion models)، ويصوّر مستقبلًا واعدًا لتوليد الصور من النص.
الاستخدام
قبل أن تتمكن من استخدام IF، عليك قبول شروط استخدامه. للقيام بذلك:
- تأكد من امتلاك حساب Hugging Face وتسجيل الدخول.
- قبل الترخيص في بطاقة النموذج الخاصة بـ DeepFloyd/IF-I-XL-v1.0. قبول الترخيص في بطاقة نموذج المرحلة الأولى سيقبل تلقائياً لبقية نماذج IF.
- تأكد من تسجيل الدخول محليًا. ثبّت
huggingface_hub:
pip install huggingface_hub --upgrade
شغّل دالة تسجيل الدخول في واجهة Python:
from huggingface_hub import login
login()وأدخل رمز الوصول الخاص بك إلى Hugging Face Hub.
في الخطوة التالية نقوم بتثبيت diffusers والتبعيات:
pip install -q diffusers accelerate transformers
تقدم الأقسام التالية أمثلة أكثر تفصيلاً حول كيفية استخدام IF. على وجه التحديد:
- توليد الصور من النص
- توليد الصور من الصور
- تعبئة المناطق المفقودة
- إعادة استخدام أوزان النموذج
- تحسين السرعة
- تحسين الذاكرة
النقاط المحفوظة المتاحة
المرحلة 1
المرحلة 2
المرحلة 3
توليد الصور من النص
يستخدم نقل النموذج إلى وحدة المعالجة المركزية افتراضياً في diffusers لتشغيل خط أنابيب IF بالكامل باستخدام ما لا يقل عن 14 جيجابايت من ذاكرة الفيديو.
from diffusers import DiffusionPipeline
from diffusers.utils import pt_to_pil, make_image_grid
import torch
# stage 1
stage_1 = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
stage_1.enable_model_cpu_offload()
# stage 2
stage_2 = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16
)
stage_2.enable_model_cpu_offload()
# stage 3
safety_modules = {
"feature_extractor": stage_1.feature_extractor,
"safety_checker": stage_1.safety_checker,
"watermarker": stage_1.watermarker,
}
stage_3 = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-x4-upscaler", **safety_modules, dtype=torch.float16
)
stage_3.enable_model_cpu_offload()
prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
generator = torch.manual_seed(1)
# text embeds
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)
# stage 1
stage_1_output = stage_1(
prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, generator=generator, output_type="pt"
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# stage 2
stage_2_output = stage_2(
image=stage_1_output,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_2_output)[0].save("./if_stage_II.png")
# stage 3
stage_3_output = stage_3(prompt=prompt, image=stage_2_output, noise_level=100, generator=generator).images
#stage_3_output[0].save("./if_stage_III.png")
make_image_grid([pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0], stage_3_output[0]], rows=1, rows=3)توليد الصور من الصور بتوجيه النص
يمكن استخدام أوزان نموذج IF نفسها لتحويل الصورة إلى صورة موجّه بالنص أو لتوليد تنويعات للصورة. في هذه الحالة، تأكد فقط من تحميل الأوزان باستخدام خططي IFImg2ImgPipeline وIFImg2ImgSuperResolutionPipeline.
ملاحظة: يمكنك أيضًا نقل أوزان خطوط أنابيب النص إلى الصورة مباشرةً إلى خطوط أنابيب الصورة إلى الصورة دون تحميلها مرتين من خلال استخدام معامل components كما هو موضح هنا.
from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline, DiffusionPipeline
from diffusers.utils import pt_to_pil, load_image, make_image_grid
import torch
# download image
url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
original_image = load_image(url)
original_image = original_image.resize((768, 512))
# stage 1
stage_1 = IFImg2ImgPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
stage_1.enable_model_cpu_offload()
# stage 2
stage_2 = IFImg2ImgSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16
)
stage_2.enable_model_cpu_offload()
# stage 3
safety_modules = {
"feature_extractor": stage_1.feature_extractor,
"safety_checker": stage_1.safety_checker,
"watermarker": stage_1.watermarker,
}
stage_3 = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-x4-upscaler", **safety_modules, dtype=torch.float16
)
stage_3.enable_model_cpu_offload()
prompt = "A fantasy landscape in style minecraft"
generator = torch.manual_seed(1)
# text embeds
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)
# stage 1
stage_1_output = stage_1(
image=original_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# stage 2
stage_2_output = stage_2(
image=stage_1_output,
original_image=original_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_2_output)[0].save("./if_stage_II.png")
# stage 3
stage_3_output = stage_3(prompt=prompt, image=stage_2_output, generator=generator, noise_level=100).images
#stage_3_output[0].save("./if_stage_III.png")
make_image_grid([original_image, pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0], stage_3_output[0]], rows=1, rows=4)توليد إعادة التلوين الموجّه بالنص
يمكن استخدام أوزان نموذج IF نفسها للترجمة من صورة إلى صورة بإرشاد نصي أو لتوليد تنويعات للصورة. في هذه الحالة، تأكد فقط من تحميل الأوزان باستخدام خططي العمل IFInpaintingPipeline وIFInpaintingSuperResolutionPipeline.
ملاحظة: يمكنك أيضًا نقل أوزان خطوط أنابيب النص إلى الصورة مباشرةً إلى خطوط أنابيب الصورة إلى الصورة دون تحميلها مرتين من خلال استخدام دالة ~DiffusionPipeline.components() كما هو موضح هنا.
from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline, DiffusionPipeline
from diffusers.utils import pt_to_pil, load_image, make_image_grid
import torch
# download image
url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/person.png"
original_image = load_image(url)
# download mask
url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/glasses_mask.png"
mask_image = load_image(url)
# stage 1
stage_1 = IFInpaintingPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
stage_1.enable_model_cpu_offload()
# stage 2
stage_2 = IFInpaintingSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16
)
stage_2.enable_model_cpu_offload()
# stage 3
safety_modules = {
"feature_extractor": stage_1.feature_extractor,
"safety_checker": stage_1.safety_checker,
"watermarker": stage_1.watermarker,
}
stage_3 = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-x4-upscaler", **safety_modules, dtype=torch.float16
)
stage_3.enable_model_cpu_offload()
prompt = "blue sunglasses"
generator = torch.manual_seed(1)
# text embeds
prompt_embeds, negative_embeds = stage_1.encode_prompt(prompt)
# stage 1
stage_1_output = stage_1(
image=original_image,
mask_image=mask_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# stage 2
stage_2_output = stage_2(
image=stage_1_output,
original_image=original_image,
mask_image=mask_image,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
generator=generator,
output_type="pt",
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_II.png")
# stage 3
stage_3_output = stage_3(prompt=prompt, image=stage_2_output, generator=generator, noise_level=100).images
#stage_3_output[0].save("./if_stage_III.png")
make_image_grid([original_image, mask_image, pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0], stage_3_output[0]], rows=1, rows=5)التحويل بين خطوط أنابيب مختلفة
بالإضافة إلى التحميل عبر from_pretrained، يمكن تحميل خطوط الأنابيب مباشرةً من بعضها البعض.
from diffusers import IFPipeline, IFSuperResolutionPipeline
pipe_1 = IFPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0")
pipe_2 = IFSuperResolutionPipeline.from_pretrained("DeepFloyd/IF-II-L-v1.0")
from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline
pipe_1 = IFImg2ImgPipeline(**pipe_1.components)
pipe_2 = IFImg2ImgSuperResolutionPipeline(**pipe_2.components)
from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline
pipe_1 = IFInpaintingPipeline(**pipe_1.components)
pipe_2 = IFInpaintingSuperResolutionPipeline(**pipe_2.components)تحسين الأداء من حيث السرعة
أبسط تحسين لتشغيل IF بشكل أسرع هو نقل جميع مكوّنات النموذج إلى وحدة معالجة الرسوميات (GPU).
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.to("cuda") # or "mps", "xpu", "cpu"يمكنك أيضًا تشغيل عملية الانتشار لعدد أقصر من خطوات الزمن.
يمكن القيام بذلك إما باستخدام معامل num_inference_steps:
pipe("<prompt>", num_inference_steps=30)أو باستخدام معامل timesteps:
from diffusers.pipelines.deepfloyd_if import fast27_timesteps
pipe("<prompt>", timesteps=fast27_timesteps)عند تنفيذ تنويع الصور أو إعادة رسمها (Inpainting)، يمكنك أيضًا تقليل عدد خطوات الزمن (Timesteps) باستخدام معامل القوة (Strength). يمثل معامل القوة كمية الضوضاء المضافة إلى الصورة المدخلة، وهو يحدد أيضًا عدد الخطوات التي سيتم تنفيذها في عملية إزالة الضوضاء. يؤدي استخدام رقم أصغر إلى تقليل درجة تنويع الصورة مع تسريع عملية التنفيذ.
pipe = IFImg2ImgPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
image = pipe(image=image, prompt="<prompt>", strength=0.3).imagesيمكنك أيضًا استخدام torch.compile. لاحظ أننا لم نختبر torch.compile بشكل شامل مع IF وقد لا يعطي النتائج المتوقعة.
from diffusers import DiffusionPipeline
import torch
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
pipe.text_encoder = torch.compile(pipe.text_encoder, mode="reduce-overhead", fullgraph=True)
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)تحسين الأداء من حيث الذاكرة
عند تحسين الذاكرة الخاصة بوحدة معالجة الرسوميات (GPU)، يمكننا استخدام واجهات برمجة التطبيقات (APIs) القياسية الخاصة بإزاحة المعالجة إلى وحدة المعالجة المركزية (CPU) في مكتبة diffusers.
إما إزاحة المعالج المركزي (CPU) بناءً على النموذج،
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.enable_model_cpu_offload()أو الإزاحة إلى وحدة المعالجة المركزية (CPU) على مستوى الطبقات الأكثر عدوانية.
pipe = DiffusionPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", dtype=torch.float16)
pipe.enable_sequential_cpu_offload()بالإضافة إلى ذلك، يمكن تحميل T5 بدقة 8 بت
from transformers import T5EncoderModel
text_encoder = T5EncoderModel.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0", subfolder="text_encoder", device_map="auto", load_in_8bit=True, variant="8bit"
)
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0",
text_encoder=text_encoder, # pass the previously instantiated 8bit text encoder
unet=None,
device_map="auto",
)
prompt_embeds, negative_embeds = pipe.encode_prompt("<prompt>")في الأجهزة ذات الذاكرة العشوائية المعالِج (CPU RAM) المحدودة، مثل الطبقة المجانية من Google Colab حيث لا يمكننا تحميل جميع مكوّنات النموذج إلى الذاكرة العشوائية المعالِج دفعة واحدة، يمكننا يدويًا تحميل خط الأنابيب (pipeline) فقط مع مُشفّر النص (text encoder) أو UNet عند الحاجة إلى مكوّنات النموذج المقابلة.
from diffusers import IFPipeline, IFSuperResolutionPipeline
import torch
import gc
from transformers import T5EncoderModel
from diffusers.utils import pt_to_pil, make_image_grid
text_encoder = T5EncoderModel.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0", subfolder="text_encoder", device_map="auto", load_in_8bit=True, variant="8bit"
)
# text to image
pipe = DiffusionPipeline.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0",
text_encoder=text_encoder, # pass the previously instantiated 8bit text encoder
unet=None,
device_map="auto",
)
prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
# Remove the pipeline so we can re-load the pipeline with the unet
del text_encoder
del pipe
gc.collect()
torch.cuda.empty_cache()
pipe = IFPipeline.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16, device_map="auto"
)
generator = torch.Generator().manual_seed(0)
stage_1_output = pipe(
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
output_type="pt",
generator=generator,
).images
#pt_to_pil(stage_1_output)[0].save("./if_stage_I.png")
# Remove the pipeline so we can load the super-resolution pipeline
del pipe
gc.collect()
torch.cuda.empty_cache()
# First super resolution
pipe = IFSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", dtype=torch.float16, device_map="auto"
)
generator = torch.Generator().manual_seed(0)
stage_2_output = pipe(
image=stage_1_output,
prompt_embeds=prompt_embeds,
negative_prompt_embeds=negative_embeds,
output_type="pt",
generator=generator,
).images
#pt_to_pil(stage_2_output)[0].save("./if_stage_II.png")
make_image_grid([pt_to_pil(stage_1_output)[0], pt_to_pil(stage_2_output)[0]], rows=1, rows=2)الخطوط الأنابيب المتاحة:
| خط أنابيب | المهام | Colab |
|---|---|---|
| pipeline_if.py | توليد الصور من النص | - |
| pipeline_if_superresolution.py | توليد الصور من النص | - |
| pipeline_if_img2img.py | توليد الصور من الصور | - |
| pipeline_if_img2img_superresolution.py | توليد الصور من الصور | - |
| pipeline_if_inpainting.py | توليد الصور من الصور | - |
| pipeline_if_inpainting_superresolution.py | توليد الصور من الصور | - |
IFPipeline
فئة diffusers.IFPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Nonenum_inference_steps: int = 100timesteps: list[int] = Noneguidance_scale: float = 7.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1height: int | None = Nonewidth: int | None = Noneeta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = None ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - num_inference_steps (
int، اختياري، القيمة الافتراضية 100) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعددnum_inference_steps. يجب أن تكون مرتبة تنازليًا. - guidance_scale (
float، اختياري، القيمة الافتراضية 7.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّفguidance_scaleعلى أنهwمن المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيينguidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بـpromptالنصي، وعادةً على حساب انخفاض جودة الصورة. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - height (
int، اختياري، الافتراضي هو self.unet.config.sample_size) — ارتفاع الصورة المولّدة بالبكسل. - width (
int، اختياري، الافتراضي هو self.unet.config.sample_size) — عرض الصورة المولّدة بالبكسل. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على schedulers.DDIMScheduler، وسيتم تجاهله في الحالات الأخرى. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion.IFPipelineOutputبدلاً من tuple عادي. - callback (
Callable، اختياري) — دالة ستُستدعى كلcallback_stepsخطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالةcallback. إذا لم يتم تحديد القيمة، فستُستدعى الدالة في كل خطوة. - clean_caption (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيتbeautifulsoup4وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده.
يعيد
~pipelines.stable_diffusion.IFPipelineOutput أو tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> from diffusers import IFPipeline, IFSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> pipe = IFPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16)
>>> pipe.enable_model_cpu_offload()
>>> prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, output_type="pt").images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image, prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, output_type="pt"
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> safety_modules = {
... "feature_extractor": pipe.feature_extractor,
... "safety_checker": pipe.safety_checker,
... "watermarker": pipe.watermarker,
... }
>>> super_res_2_pipe = DiffusionPipeline.from_pretrained(
... "stabilityai/stable-diffusion-x4-upscaler", **safety_modules, torch_dtype=torch.float16
... )
>>> super_res_2_pipe.enable_model_cpu_offload()
>>> image = super_res_2_pipe(
... prompt=prompt,
... image=image,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه - device — (
torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - clean_caption (bool، القيمة الافتراضية
False) — إذا كانتTrue، سيقوم الدالة بمعالجة النص الوصفي المقدم وتنظيفه قبل الترميز.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
IFSuperResolutionPipeline
فئة diffusers.IFSuperResolutionPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulerimage_noising_scheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Noneheight: int = Nonewidth: int = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor] = Nonenum_inference_steps: int = 50timesteps: list[int] = Noneguidance_scale: float = 4.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 250clean_caption: bool = True ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - height (
int، اختياري، القيمة الافتراضية هي None) — ارتفاع الصورة المولّدة بالبكسل. - width (
int، اختياري، القيمة الافتراضية هي None) — عرض الصورة المولّدة بالبكسل. - image (
PIL.Image.Image،np.ndarray،torch.Tensor) — الصورة التي سيتم رفع دقتها. - num_inference_steps (
int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - timesteps (
list[int]، اختياري، القيمة الافتراضية هي None) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعددnum_inference_steps. يجب أن تكون مرتبة تنازليًا. - guidance_scale (
float، اختياري، القيمة الافتراضية 4.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّفguidance_scaleعلى أنهwمن المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيينguidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بـpromptالنصي، وعادةً على حساب انخفاض جودة الصورة. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على schedulers.DDIMScheduler، وسيتم تجاهله في الحالات الأخرى. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion.IFPipelineOutputبدلاً من tuple عادي. - callback (
Callable، اختياري) — دالة ستُستدعى كلcallback_stepsخطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالةcallback. إذا لم يتم تحديد القيمة، فستُستدعى الدالة في كل خطوة. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده. - noise_level (
int، اختياري، القيمة الافتراضية 250) — كمية الضوضاء التي تُضاف إلى الصورة المُكبَّرة. يجب أن تكون ضمن النطاق[0, 1000) - clean_caption (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيتbeautifulsoup4وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام.
يعيد
~pipelines.stable_diffusion.IFPipelineOutput أو tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> from diffusers import IFPipeline, IFSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> pipe = IFPipeline.from_pretrained("DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16)
>>> pipe.enable_model_cpu_offload()
>>> prompt = 'a photo of a kangaroo wearing an orange hoodie and blue sunglasses standing in front of the eiffel tower holding a sign that says "very deep learning"'
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds, output_type="pt").images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image, prompt_embeds=prompt_embeds, negative_prompt_embeds=negative_embeds
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه - device — (
torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - clean_caption (bool، القيمة الافتراضية
False) — إذا كانتTrue، سيقوم الدالة بمعالجة النص الوصفي المقدم وتنظيفه قبل الترميز.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
IFImg2ImgPipeline
فئة diffusers.IFImg2ImgPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 0.7num_inference_steps: int = 80timesteps: list[int] = Noneguidance_scale: float = 10.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = None ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - strength (
float, اختياري، القيمة الافتراضية 0.7) — مفاهيمياً، يحدد مقدار تحويل الصورة المرجعيةimage. يجب أن يكون بين 0 و 1. ستُستخدمimageكنقطة انطلاق، مع إضافة المزيد من الضوضاء إليها كلما زادstrength. يعتمد عدد خطوات إزالة الضوضاء على كمية الضوضاء المضافة في البداية. عندما تكونstrengthتساوي 1، ستكون الضوضاء المضافة في أقصى حد، وستعمل عملية إزالة الضوضاء لعدد التكرارات الكامل المحدد فيnum_inference_steps. وبالتالي، فإن القيمة 1 تتجاهلimageبشكل أساسي. - num_inference_steps (
int، اختياري، القيمة الافتراضية 80) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعددnum_inference_steps. يجب أن تكون مرتبة تنازليًا. - guidance_scale (
float، اختياري، القيمة الافتراضية 10.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّفguidance_scaleعلى أنهwمن المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيينguidance_scale > 1. كلما زاد مقياس التوجيه، شجّع ذلك على توليد صور مرتبطة ارتباطًا وثيقًا بـpromptالنصي، وعادةً على حساب انخفاض جودة الصورة. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على schedulers.DDIMScheduler، وسيتم تجاهله في الحالات الأخرى. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion.IFPipelineOutputبدلاً من tuple عادي. - callback (
Callable، اختياري) — دالة ستُستدعى كلcallback_stepsخطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالةcallback. إذا لم يتم تحديد القيمة، فستُستدعى الدالة في كل خطوة. - clean_caption (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيتbeautifulsoup4وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده.
يعيد
~pipelines.stable_diffusion.IFPipelineOutput أو tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image.resize((768, 512))
>>> pipe = IFImg2ImgPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0",
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "A fantasy landscape in style minecraft"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFImg2ImgSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0",
... text_encoder=None,
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه - device — (
torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - clean_caption (bool، القيمة الافتراضية
False) — إذا كانتTrue، سيقوم الدالة بمعالجة النص الوصفي المقدم وتنظيفه قبل الترميز.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
IFImg2ImgSuperResolutionPipeline
فئة diffusers.IFImg2ImgSuperResolutionPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulerimage_noising_scheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor]original_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 0.8prompt: str | list[str] = Nonenum_inference_steps: int = 50timesteps: list[int] = Noneguidance_scale: float = 4.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 250clean_caption: bool = True ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
المعاملات
- image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - original_image (
torch.TensorأوPIL.Image.Image) — الصورة الأصلية التي تم تغييرimageبناءً عليها. - strength (
float, اختياري، القيمة الافتراضية 0.8) — مفاهيمياً، يحدد مقدار تحويل الصورة المرجعيةimage. يجب أن يكون بين 0 و 1. ستُستخدمimageكنقطة انطلاق، مع إضافة المزيد من الضوضاء إليها كلما زادstrength. يعتمد عدد خطوات إزالة الضوضاء على كمية الضوضاء المضافة في البداية. عندما تكونstrengthتساوي 1، ستكون الضوضاء المضافة في أقصى حد، وستعمل عملية إزالة الضوضاء لعدد التكرارات الكامل المحدد فيnum_inference_steps. وبالتالي، فإن القيمة 1 تتجاهلimageبشكل أساسي. - prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - num_inference_steps (
int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعددnum_inference_steps. يجب أن تكون مرتبة تنازليًا. - guidance_scale (
float، اختياري، القيمة الافتراضية 4.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّفguidance_scaleعلى أنهwمن المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيينguidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بـpromptالنصي، وعادةً على حساب انخفاض جودة الصورة. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على schedulers.DDIMScheduler، وسيتم تجاهله في الحالات الأخرى. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion.IFPipelineOutputبدلاً من tuple عادي. - callback (
Callable، اختياري) — دالة ستُستدعى كلcallback_stepsخطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالةcallback. إذا لم يتم تحديد القيمة، فستُستدعى الدالة في كل خطوة. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده. - noise_level (
int، اختياري، القيمة الافتراضية 250) — كمية الضوضاء التي تُضاف إلى الصورة المُكبَّرة. يجب أن تكون ضمن النطاق[0, 1000) - clean_caption (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيتbeautifulsoup4وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام.
يعيد
~pipelines.stable_diffusion.IFPipelineOutput أو tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> from diffusers import IFImg2ImgPipeline, IFImg2ImgSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image.resize((768, 512))
>>> pipe = IFImg2ImgPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0",
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "A fantasy landscape in style minecraft"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFImg2ImgSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0",
... text_encoder=None,
... variant="fp16",
... torch_dtype=torch.float16,
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه - device — (
torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - clean_caption (bool، القيمة الافتراضية
False) — إذا كانتTrue، سيقوم الدالة بمعالجة النص الوصفي المقدم وتنظيفه قبل الترميز.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
IFInpaintingPipeline
فئة diffusers.IFInpaintingPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonemask_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 1.0num_inference_steps: int = 50timesteps: list[int] = Noneguidance_scale: float = 7.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1clean_caption: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = None ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - mask_image (
PIL.Image.Image) —Image، أو tensor يمثل دفعة من الصور، لتطبيق قناع علىimage. سيتم إعادة رسم البكسلات البيضاء في القناع، بينما ستُحفظ البكسلات السوداء. إذا كانmask_imageصورة PIL، فسيتم تحويلها إلى قناة واحدة (السطوع) قبل الاستخدام. أما إذا كان tensor، فيجب أن يحتوي على قناة لون واحدة (L) بدلاً من ثلاث، لذا فإن الشكل المتوقع هو(B, H, W, 1). - strength (
float, اختياري، القيمة الافتراضية 1.0) — مفاهيمياً، يُحدد مقدار تحويل الصورة المرجعيةimage. يجب أن يكون بين 0 و 1. ستُستخدمimageكنقطة انطلاق، حيث يُضاف المزيد من الضوضاء إليها كلما زادstrength. يعتمد عدد خطوات إزالة الضوضاء على كمية الضوضاء المضافة في البداية. عندما تكونstrengthتساوي 1، تكون الضوضاء المضافة في أقصى حد، وستعمل عملية إزالة الضوضاء لعدد التكرارات الكامل المحدد فيnum_inference_steps. وبالتالي، فإن القيمة 1 تتجاهلimageبشكل أساسي. - num_inference_steps (
int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعددnum_inference_steps. يجب أن تكون مرتبة تنازليًا. - guidance_scale (
float، اختياري، القيمة الافتراضية 7.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّفguidance_scaleعلى أنهwمن المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيينguidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بـpromptالنصي، وعادةً على حساب انخفاض جودة الصورة. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على schedulers.DDIMScheduler، وسيتم تجاهله في الحالات الأخرى. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion.IFPipelineOutputبدلاً من tuple عادي. - callback (
Callable، اختياري) — دالة ستُستدعى كلcallback_stepsخطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالةcallback. إذا لم يتم تحديد القيمة، فستُستدعى الدالة في كل خطوة. - clean_caption (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيتbeautifulsoup4وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده.
يعيد
~pipelines.stable_diffusion.IFPipelineOutput أو tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/person.png"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/glasses_mask.png"
>>> response = requests.get(url)
>>> mask_image = Image.open(BytesIO(response.content))
>>> mask_image = mask_image
>>> pipe = IFInpaintingPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "blue sunglasses"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... mask_image=mask_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFInpaintingSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... mask_image=mask_image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه - device — (
torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - clean_caption (bool، القيمة الافتراضية
False) — إذا كانتTrue، سيقوم الدالة بمعالجة النص الوصفي المقدم وتنظيفه قبل الترميز.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.
IFInpaintingSuperResolutionPipeline
فئة diffusers.IFInpaintingSuperResolutionPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelunet: UNet2DConditionModelscheduler: DDPMSchedulerimage_noising_scheduler: DDPMSchedulersafety_checker: diffusers.pipelines.deepfloyd_if.safety_checker.IFSafetyChecker | Nonefeature_extractor: transformers.models.clip.image_processing_pil_clip.CLIPImageProcessorPil | Nonewatermarker: diffusers.pipelines.deepfloyd_if.watermark.IFWatermarker | Nonerequires_safety_checker: bool = True )
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor]original_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonemask_image: typing.Union[PIL.Image.Image, torch.Tensor, numpy.ndarray, list[PIL.Image.Image], list[torch.Tensor], list[numpy.ndarray]] = Nonestrength: float = 0.8prompt: str | list[str] = Nonenum_inference_steps: int = 100timesteps: list[int] = Noneguidance_scale: float = 4.0negative_prompt: str | list[str] | None = Nonenum_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecallback: typing.Optional[typing.Callable[[int, int, torch.Tensor], NoneType]] = Nonecallback_steps: int = 1cross_attention_kwargs: dict[str, typing.Any] | None = Nonenoise_level: int = 0clean_caption: bool = True ) → ~pipelines.stable_diffusion.IFPipelineOutput or tuple
المعاملات
- image (
torch.TensororPIL.Image.Image) —Image, or tensor representing an image batch, that will be used as the starting point for the process. - original_image (
torch.TensorأوPIL.Image.Image) — الصورة الأصلية التي تم تغييرimageبناءً عليها. - mask_image (
PIL.Image.Image) —Image، أو tensor يمثل دفعة من الصور، لتطبيق قناع علىimage. سيتم إعادة رسم البكسلات البيضاء في القناع، بينما ستُحفظ البكسلات السوداء. إذا كانmask_imageصورة PIL، فسيتم تحويلها إلى قناة واحدة (السطوع) قبل الاستخدام. أما إذا كان tensor، فيجب أن يحتوي على قناة لون واحدة (L) بدلاً من ثلاث، لذا فإن الشكل المتوقع هو(B, H, W, 1). - strength (
float, اختياري، القيمة الافتراضية 0.8) — مفاهيمياً، يحدد مقدار تحويل الصورة المرجعيةimage. يجب أن يكون بين 0 و 1. ستُستخدمimageكنقطة انطلاق، مع إضافة المزيد من الضوضاء إليها كلما زادstrength. يعتمد عدد خطوات إزالة الضوضاء على كمية الضوضاء المضافة في البداية. عندما تكونstrengthتساوي 1، ستكون الضوضاء المضافة في أقصى حد، وستعمل عملية إزالة الضوضاء لعدد التكرارات الكامل المحدد فيnum_inference_steps. وبالتالي، فإن القيمة 1 تتجاهلimageبشكل أساسي. - prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الصورة. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - num_inference_steps (
int، اختياري، القيمة الافتراضية 100) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعددnum_inference_steps. يجب أن تكون مرتبة تنازليًا. - guidance_scale (
float، اختياري، القيمة الافتراضية 4.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّفguidance_scaleعلى أنهwمن المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيينguidance_scale > 1. يشجع مقياس التوجيه الأعلى على توليد صور مرتبطة ارتباطًا وثيقًا بـpromptالنصي، وعادةً على حساب انخفاض جودة الصورة. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على schedulers.DDIMScheduler، وسيتم تجاهله في الحالات الأخرى. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة مخرجات توليد الصورة. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion.IFPipelineOutputبدلاً من tuple عادي. - callback (
Callable، اختياري) — دالة ستُستدعى كلcallback_stepsخطوات أثناء الاستدلال. سيتم استدعاء الدالة مع الحُجج التالية:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالةcallback. إذا لم يتم تحديد القيمة، فستُستدعى الدالة في كل خطوة. - cross_attention_kwargs (
dict، اختياري) — قاموس kwargs يُمرَّر إلىAttentionProcessorكما هو معرَّف تحتself.processorفي diffusers.models.attention_processor إذا تمَّ تحديده. - noise_level (
int، اختياري، القيمة الافتراضية 0) — كمية الضوضاء التي تُضاف إلى الصورة المُكبَّرة. يجب أن تكون ضمن النطاق[0, 1000) - clean_caption (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيتbeautifulsoup4وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام.
يعيد
~pipelines.stable_diffusion.IFPipelineOutput أو tuple
~pipelines.stable_diffusion.IFPipelineOutput 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) or watermarked content, according to the safety_checker`.
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> from diffusers import IFInpaintingPipeline, IFInpaintingSuperResolutionPipeline, DiffusionPipeline
>>> from diffusers.utils import pt_to_pil
>>> import torch
>>> from PIL import Image
>>> import requests
>>> from io import BytesIO
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/person.png"
>>> response = requests.get(url)
>>> original_image = Image.open(BytesIO(response.content)).convert("RGB")
>>> original_image = original_image
>>> url = "https://huggingface.co/datasets/diffusers/docs-images/resolve/main/if/glasses_mask.png"
>>> response = requests.get(url)
>>> mask_image = Image.open(BytesIO(response.content))
>>> mask_image = mask_image
>>> pipe = IFInpaintingPipeline.from_pretrained(
... "DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.enable_model_cpu_offload()
>>> prompt = "blue sunglasses"
>>> prompt_embeds, negative_embeds = pipe.encode_prompt(prompt)
>>> image = pipe(
... image=original_image,
... mask_image=mask_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... output_type="pt",
... ).images
>>> # save intermediate image
>>> pil_image = pt_to_pil(image)
>>> pil_image[0].save("./if_stage_I.png")
>>> super_res_1_pipe = IFInpaintingSuperResolutionPipeline.from_pretrained(
... "DeepFloyd/IF-II-L-v1.0", text_encoder=None, variant="fp16", torch_dtype=torch.float16
... )
>>> super_res_1_pipe.enable_model_cpu_offload()
>>> image = super_res_1_pipe(
... image=image,
... mask_image=mask_image,
... original_image=original_image,
... prompt_embeds=prompt_embeds,
... negative_prompt_embeds=negative_embeds,
... ).images
>>> image[0].save("./if_stage_II.png")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenum_images_per_prompt: int = 1device: typing.Optional[torch.device] = Nonenegative_prompt: str | list[str] | None = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneclean_caption: bool = False )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي يجب توليدها لكل موجه - device — (
torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.Tensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - clean_caption (bool، القيمة الافتراضية
False) — إذا كانتTrue، سيقوم الدالة بمعالجة النص الوصفي المقدم وتنظيفه قبل الترميز.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.