Diffusers documentation

نماذج الاتساق الكامن

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

نماذج الاتساق الكامن

LoRA

قُدِّمت نماذج الاتساق الكامن (LCMs) في Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference من قِبل Simian Luo وYiqin Tan وLongbo Huang وJian Li وHang Zhao.

المستخلص الخاص بالورقة البحثية هو على النحو التالي:

حقّقت نماذج الانتشار الكامن (LDMs) نتائج مذهلة في توليد صور عالية الدقة. ومع ذلك، فإن عملية العينة التكرارية كثيفة الحسابات وتؤدي إلى بطء في التوليد. مستوحين من نماذج الاتساق (song et al.)، نقترح نماذج الاتساق الكامنة (LCMs)، مما يتيح استنتاجًا سريعًا بخطوات قليلة على أي نماذج LDMs مُدرَّبة مسبقًا، بما في ذلك Stable Diffusion (rombach et al). بالنظر إلى عملية الانتسار العكسي الموجَّه على أنه حل لمعادلة تفاضلية عادية (PF-ODE) محسّنة لتدفق الاحتمال، صُممت LCMs للتنبؤ المباشر بحل هذه المعادلة التفاضلية العادية في الفضاء الكامن، مما يقلل الحاجة إلى تكرارات عديدة ويسمح بعينة سريعة عالية الدقة. وقد تم تقطيرها بكفاءة من نماذج الانتشار الموجَّه بدون مُصنِّف مُدرَّبة مسبقًا، حيث يستغرق تدريب LCM عالي الجودة بدقة 768 x 768 وبخطوتين إلى أربع خطوات فقط 32 ساعة GPU من نوع A100. علاوة على ذلك، نعرّف ضبط الدقة للاتساق الكامن (LCF)، وهو أسلوب جديد مصمم خصيصًا لضبط دقة LCMs على مجموعات بيانات صور مخصصة. تُظهر التقييمات على مجموعة بيانات LAION-5B-Aesthetics أن LCMs تحقق أداءً متقدمًا في توليد الصور من النص مع استنتاج بخطوات قليلة. صفحة المشروع: this https URL.

يمكن العثور على عرض توضيحي لنقطة التفتيش SimianLuo/LCM_Dreamshaper_v7 هنا.

تمت مساهمة خطوط الأنابيب من قِبل luosiallen وnagolinc وdg845.

تتوفر نماذج LCMs وLCM-LoRAs لنموذج Stable Diffusion v1.5، ونموذج Stable Diffusion XL، ونموذج SSD-1B. يمكنك العثور على نقاط التفتيش الخاصة بها في مجموعات Latent Consistency.

النص إلى صورة

LCM
LCM-LoRA

لاستخدام LCMs، عليك تحميل نقطة التفتيش (checkpoint) الخاصة بـ LCM للنموذج المدعوم لديك في UNet2DConditionModel واستبدال المجدول (scheduler) بـ LCMScheduler. بعد ذلك، يمكنك استخدام خط الأنابيب (pipeline) كما هو معتاد، وتمرير موجه نصي (text prompt) لتوليد صورة في 4 خطوات فقط.

بعض الملاحظات التي يجب وضعها في الاعتبار عند استخدام LCMs هي:

  • عادةً، يتم مضاعفة حجم الدفعة داخل خط الأنابيب للإرشاد الحر من التصنيف. لكن LCM يطبّق الإرشاد عبر تضمينات الإرشاد ولا يحتاج إلى مضاعفة حجم الدفعة، مما يؤدي إلى استنتاج أسرع. والعيوب هي أن التلميحات السلبية لا تعمل مع LCM لأنها لا تُحدث أي تأثير على عملية إزالة الضوضاء.
  • النطاق المثالي لـ guidance_scale هو [3., 13.] لأن ذلك هو ما تم تدريب UNet به. ومع ذلك، فإن تعطيل guidance_scale بقيمة 1.0 يكون فعالاً أيضاً في معظم الحالات.
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image

من صورة إلى صورة

LCM
LCM-LoRA

للاستخدام LCMs لتحويل الصورة إلى صورة، تحتاج إلى تحميل نقطة التفتيش LCM الخاصة بالنموذج المدعوم لديك في UNet2DConditionModel واستبدال المجدول بـ LCMScheduler. بعد ذلك يمكنك استخدام خط الأنابيب كما هو معتاد، وتمرير موجه نصي وصورة أولية لتوليد صورة في 4 خطوات فقط.

جرّب قيمًا مختلفة لـ num_inference_steps وstrength وguidance_scale للحصول على أفضل النتائج.

import torch
from diffusers import AutoPipelineForImage2Image, UNet2DConditionModel, LCMScheduler
from diffusers.utils import load_image

unet = UNet2DConditionModel.from_pretrained(
    "SimianLuo/LCM_Dreamshaper_v7",
    subfolder="unet",
    dtype=torch.float16,
)

pipe = AutoPipelineForImage2Image.from_pretrained(
    "Lykon/dreamshaper-7",
    unet=unet,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png")
prompt = "Astronauts in a jungle, cold color palette, muted colors, detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt,
    image=init_image,
    num_inference_steps=4,
    guidance_scale=7.5,
    strength=0.5,
    generator=generator
).images[0]
image
الصورة الأولية
صورة مولّدة

الترميم

لاستخدام LCM-LoRAs لإعادة التلوين (Inpainting)، يجب عليك استبدال المجدول (Scheduler) بـ LCMScheduler وتحميل أوزان LCM-LoRA باستخدام الطريقة load_lora_weights(). بعد ذلك، يمكنك استخدام خط الأنابيب (Pipeline) كما هو معتاد، مع تمرير موجه نصي، وصورة أولية، وصورة قناع (Mask) لتوليد صورة في 4 خطوات فقط.

import torch
from diffusers import AutoPipelineForInpainting, LCMScheduler
from diffusers.utils import load_image, make_image_grid

pipe = AutoPipelineForInpainting.from_pretrained(
    "stable-diffusion-v1-5/stable-diffusion-inpainting",
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint.png")
mask_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint_mask.png")

prompt = "concept art digital painting of an elven castle, inspired by lord of the rings, highly detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    image=init_image,
    mask_image=mask_image,
    generator=generator,
    num_inference_steps=4,
    guidance_scale=4,
).images[0]
image
الصورة الأولية
صورة مولّدة

المُكيِّفات

تتوافق LCMs مع المُكيّفات مثل LoRA وControlNet وT2I-Adapter وAnimateDiff. يمكنك نقل سرعة LCMs إلى هذه المُكيّفات لتوليد الصور بأسلوب معين أو لتكييف النموذج على مدخل آخر مثل صورة canny.

LoRA

يمكن ضبط LoRA بسرعة لتعلم نمط جديد من عدد قليل من الصور فقط، ثم دمجها في نموذج مُدرَّب مسبقًا لتوليد صور بهذا النمط.

LCM
LCM-LoRA

حمّل نقطة التفتيش (checkpoint) الخاصة بـ LCM للنموذج المدعوم لديك في UNet2DConditionModel واستبدل المجدول (scheduler) بـ LCMScheduler. بعد ذلك، يمكنك استخدام طريقة load_lora_weights() لتحميل أوزان LoRA في LCM وتوليد صورة بأسلوب معين في خطوات قليلة.

from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")

prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image

ControlNet

ControlNet هي محوِّلات يمكن تدريبها على مجموعة متنوعة من المدخلات مثل حواف canny، وتقدير الوضعية، أو العمق. يمكن إدراج ControlNet في خط الأنابيب لتوفير شروط وتحكم إضافيين للنموذج من أجل توليد أكثر دقة.

يمكنك العثور على نماذج ControlNet إضافية مدرّبة على مدخلات أخرى في مستودع lllyasviel.

LCM
LCM-LoRA

حمّل نموذج ControlNet مُدرَّب على صور canny وقم بتمريره إلى ControlNetModel. ثم يمكنك تحميل نموذج LCM في StableDiffusionControlNetPipeline واستبدال المجدول بـ LCMScheduler. الآن مرّر صورة canny إلى خط الأنابيب وولّد صورة.

جرّب قيمًا مختلفة لـnum_inference_steps وcontrolnet_conditioning_scale وcross_attention_kwargs وguidance_scale للحصول على أفضل النتائج.

import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, LCMScheduler
from diffusers.utils import load_image, make_image_grid

image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((512, 512))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)

controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "SimianLuo/LCM_Dreamshaper_v7",
    controlnet=controlnet,
    dtype=torch.float16,
    safety_checker=None,
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

generator = torch.manual_seed(0)
image = pipe(
    "the mona lisa",
    image=canny_image,
    num_inference_steps=4,
    generator=generator,
).images[0]
make_image_grid([canny_image, image], rows=1, cols=2)

T2I-Adapter

T2I-Adapter هو مُكيّف أخفّ من ControlNet، يوفر مدخلًا إضافيًا لتكييف نموذج مُدرَّب مسبقًا. إنه أسرع من ControlNet، لكن النتائج قد تكون أقل جودة بشكل طفيف.

يمكنك العثور على نقاط تفتيش إضافية لنموذج T2I-Adapter تم تدريبها على مدخلات أخرى في مستودع TencentArc.

LCM
LCM-LoRA

حمّل T2IAdapter مُدرَّبًا على صور canny وقم بتمريره إلى StableDiffusionXLAdapterPipeline. ثم حمّل نقطة تحقق LCM إلى UNet2DConditionModel واستبدل المجدول بـ LCMScheduler. الآن مرّر صورة canny إلى خط الأنابيب وولّد صورة.

import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionXLAdapterPipeline, UNet2DConditionModel, T2IAdapter, LCMScheduler
from diffusers.utils import load_image, make_image_grid

# detect the canny map in low resolution to avoid high-frequency details
image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((384, 384))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image).resize((1024, 1216))

adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda")  # or "mps", "xpu", "cpu"

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    unet=unet,
    adapter=adapter,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "the mona lisa, 4k picture, high quality"
negative_prompt = "extra digit, fewer digits, cropped, worst quality, low quality, glitch, deformed, mutated, ugly, disfigured"

generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=canny_image,
    num_inference_steps=4,
    guidance_scale=5,
    adapter_conditioning_scale=0.8,
    adapter_conditioning_factor=1,
    generator=generator,
).images[0]

AnimateDiff

AnimateDiff هو مُكيّف يضيف الحركة إلى صورة. يمكن استخدامه مع معظم نماذج Stable Diffusion، مما يحوّلها فعليًا إلى نماذج “توليد فيديو”. عادةً ما يتطلب توليد نتائج جيدة باستخدام نموذج فيديو توليد عدة إطارات (16-24)، وهو ما قد يكون بطيئًا جدًا مع نموذج Stable Diffusion عادي. يمكن لـ LCM-LoRA تسريع هذه العملية من خلال استخدام 4-8 خطوات فقط لكل إطار.

حمّل AnimateDiffPipeline ومرّر إليه MotionAdapter. ثم استبدل المجدول بـ LCMScheduler، وادمج كلا مُكيّفي LoRA باستخدام طريقة ~loaders.UNet2DConditionLoadersMixin.set_adapters. الآن يمكنك تمرير موجه إلى خط الأنابيب وتوليد صورة متحركة.

import torch
from diffusers import MotionAdapter, AnimateDiffPipeline, DDIMScheduler, LCMScheduler
from diffusers.utils import export_to_gif

adapter = MotionAdapter.from_pretrained("guoyww/animatediff-motion-adapter-v1-5")
pipe = AnimateDiffPipeline.from_pretrained(
    "frankjoshua/toonyou_beta6",
    motion_adapter=adapter,
).to("cuda")  # or "mps", "xpu", "cpu"

# set scheduler
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

# load LCM-LoRA
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5", adapter_name="lcm")
pipe.load_lora_weights("guoyww/animatediff-motion-lora-zoom-in", weight_name="diffusion_pytorch_model.safetensors", adapter_name="motion-lora")

pipe.set_adapters(["lcm", "motion-lora"], adapter_weights=[0.55, 1.2])

prompt = "best quality, masterpiece, 1girl, looking at viewer, blurry background, upper body, contemporary, dress"
generator = torch.manual_seed(0)
frames = pipe(
    prompt=prompt,
    num_inference_steps=5,
    guidance_scale=1.25,
    cross_attention_kwargs={"scale": 1},
    num_frames=24,
    generator=generator
).frames[0]
export_to_gif(frames, "animation.gif")

LatentConsistencyModelPipeline

فئة diffusers.LatentConsistencyModelPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: LCMSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilimage_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = Nonerequires_safety_checker: bool = True )

المعاملات

  • vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
  • text_encoder (CLIPTextModel) — مُشفِّر نص ثابت (clip-vit-large-patch14).
  • tokenizer (CLIPTokenizer) — CLIPTokenizer لتجزئة النص.
  • unet (UNet2DConditionModel) — نموذج UNet2DConditionModel لإزالة الضوضاء من الكامنات المُرمّزة للصورة.
  • scheduler (SchedulerMixin) — جدولة تُستخدم بالاقتران مع unet لإزالة الضوضاء من الكامنات المُرمّزة للصورة. تدعم حاليًا LCMScheduler فقط.
  • safety_checker (StableDiffusionSafetyChecker) — وحدة تصنيف تُقدّر ما إذا كانت الصور المولّدة قد تُعتبر مسيئة أو ضارة. يرجى الرجوع إلى بطاقة النموذج لمزيد من التفاصيل حول الأضرار المحتملة التي قد يسببها النموذج.
  • feature_extractor (CLIPImageProcessor) — معالج CLIPImageProcessor لاستخراج الميزات من الصور المولّدة؛ يُستخدم كمدخلات لـ safety_checker.
  • requires_safety_checker (bool، اختياري، الافتراضي True) — ما إذا كانت خط المعالجة تتطلب مكوّن فحص الأمان.

خط أنابيب لتوليد الصور من النص باستخدام نموذج الاتساق الكامن.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

تورث خط الأنابيب أيضًا طرق التحميل التالية:

__call__

< >

( prompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 4original_inference_steps: int = Nonetimesteps: list = Noneguidance_scale: float = 8.5num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_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] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب عليك تمرير prompt_embeds.
  • height (int، اختياري، القيمة الافتراضية هي self.unet.config.sample_size * self.vae_scale_factor) — ارتفاع الصورة المولّدة بالبكسل.
  • width (int، اختياري، القيمة الافتراضية self.unet.config.sample_size * self.vae_scale_factor) — عرض الصورة المولدة بالبكسل.
  • num_inference_steps (int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال.
  • original_inference_steps (int, اختياري) — عدد خطوات الاستدلال الأصلية المستخدمة لتوليد جدول أزمنة متباعد خطياً، سنستخرج منه num_inference_steps أزمنة متباعدة بالتساوي كجدول الأزمنة النهائي، وفقاً لطريقة تخطي الخطوات الواردة في الورقة (انظر القسم 4.3). إذا لم يتم ضبطه، فسيتم افتراضياً استخدام خاصية original_inference_steps للمجدول.
  • timesteps (list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم num_inference_steps خطوات زمنية متساوية التباعد على جدول الخطوات الزمنية الأصلي للتدريب/التقطير الخاص بـ LCM. يجب أن تكون بترتيب تنازلي.
  • guidance_scale (float، اختياري، القيمة الافتراضية 7.5) — تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صور مرتبطة ارتباطًا وثيقًا بنص prompt على حساب انخفاض جودة الصورة. يتم تفعيل مقياس التوجيه عندما يكون guidance_scale > 1. يرجى ملاحظة أن ورقة latent consistency models الأصلية تستخدم صياغة مختلفة لـ CFG حيث يتم تقليل مقاييس التوجيه بمقدار 1 (لذا في صياغة الورقة يتم تفعيل CFG عندما يكون guidance_scale > 0).
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • generator (torch.Generator أو list[torch.Generator]، اختياري) — torch.Generator لجعل التوليد حتميًا.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام generator العشوائي المُقدَّم.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (مثل وزن الموجهات). إذا لم تُقدَّم، يتم توليد التضمينات النصية من معامل الإدخال prompt.
  • ip_adapter_image — (PipelineImageInput، اختياري): مدخل صورة اختياري للعمل مع IP Adapters.
  • ip_adapter_image_embeds (list[torch.Tensor]، اختياري) — تضمينات صور مُولّدة مسبقًا لـ IP-Adapter. يجب أن تكون قائمة بطول يساوي عدد وحدات IP-Adapter. يجب أن يكون كل عنصر منها متجهًا (tensor) بشكل (batch_size, num_images, emb_dim). يجب أن يحتوي على تضمين الصورة السلبية إذا كان do_classifier_free_guidance مضبوطًا على True. إذا لم يُقدَّم، تُحسب التضمينات من معامل الإدخال ip_adapter_image.
  • output_type (str، اختياري، الافتراضي "pil") — صيغة مخرجات الصورة المولّدة. اختر بين PIL.Image أو np.array.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع StableDiffusionPipelineOutput بدلاً من tuple عادي.
  • cross_attention_kwargs (dict، اختياري) — قاموس kwargs يُمرَّر إلى AttentionProcessor كما هو معرَّف في self.processor إذا تمَّ تحديده.
  • 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) الخاص بك.

يعيد

StableDiffusionPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد StableDiffusionPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى “غير آمن للعمل” (nsfw).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:

>>> from diffusers import DiffusionPipeline
>>> import torch

>>> pipe = DiffusionPipeline.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)

>>> prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"

>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(prompt=prompt, num_inference_steps=num_inference_steps, guidance_scale=8.0).images
>>> images[0].save("image.png")

enable_freeu

< >

( s1: floats2: floatb1: floatb2: float )

المعاملات

  • s1 (float) — معامل التوسيع للمرحلة 1 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من “تأثير الإفراط في التنعيم” في عملية إزالة الضوضاء المعززة.
  • s2 (float) — معامل التوسيع للمرحلة 2 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من “تأثير الإفراط في التنعيم” في عملية إزالة الضوضاء المعززة.
  • b1 (float) — معامل التوسيع للمرحلة 1 لتضخيم مساهمات ميزات الهيكل الأساسي.
  • b2 (float) — معامل التوسيع للمرحلة 2 لتضخيم مساهمات ميزات الهيكل الأساسي.

يُفعّل آلية FreeU كما في https://huggingface.co/papers/2309.11497.

تمثل البادئات التي تلي معاملات التوسيع المراحل التي تُطبَّق فيها.

يرجى الرجوع إلى المستودع الرسمي لمعرفة التوليفات من القيم التي يُعرف أنها تعمل بشكل جيد لأنابيب مختلفة مثل Stable Diffusion v1 وv2 وStable Diffusion XL.

disable_freeu

< >

( )

يعطّل آلية FreeU إذا كانت مفعّلة.

encode_prompt

< >

( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي سيتم ترميزه
  • device — (torch.device): جهاز torch
  • num_images_per_prompt (int) — عدد الصور التي يجب توليدها لكل موجه
  • do_classifier_free_guidance (bool) — ما إذا كان سيتم استخدام classifier free guidance أم لا
  • negative_prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).
  • 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 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

get_guidance_scale_embedding

< >

( 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).

انظر إلى https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

LatentConsistencyModelImg2ImgPipeline

فئة diffusers.LatentConsistencyModelImg2ImgPipeline

< >

( vae: AutoencoderKLtext_encoder: CLIPTextModeltokenizer: CLIPTokenizerunet: UNet2DConditionModelscheduler: LCMSchedulersafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilimage_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = Nonerequires_safety_checker: bool = True )

المعاملات

  • vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
  • text_encoder (CLIPTextModel) — مُشفِّر نص ثابت (clip-vit-large-patch14).
  • tokenizer (CLIPTokenizer) — CLIPTokenizer لتجزئة النص.
  • unet (UNet2DConditionModel) — نموذج UNet2DConditionModel لإزالة الضوضاء من الكامنات المُرمّزة للصورة.
  • scheduler (SchedulerMixin) — جدولة تُستخدم بالاقتران مع unet لإزالة الضوضاء من الكامنات المُرمّزة للصورة. تدعم حاليًا LCMScheduler فقط.
  • safety_checker (StableDiffusionSafetyChecker) — وحدة تصنيف تُقدّر ما إذا كانت الصور المولّدة قد تُعتبر مسيئة أو ضارة. يرجى الرجوع إلى بطاقة النموذج لمزيد من التفاصيل حول الأضرار المحتملة التي قد يسببها النموذج.
  • feature_extractor (CLIPImageProcessor) — معالج CLIPImageProcessor لاستخراج الميزات من الصور المولّدة؛ يُستخدم كمدخلات لـ safety_checker.
  • requires_safety_checker (bool، اختياري، الافتراضي True) — ما إذا كانت خط المعالجة تتطلب مكوّن فحص الأمان.

خط أنابيب لتوليد صورة من صورة باستخدام نموذج الاتساق الكامن.

يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).

تورث خط الأنابيب أيضًا طرق التحميل التالية:

__call__

< >

( prompt: str | list[str] = Noneimage: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = Nonenum_inference_steps: int = 4strength: float = 0.8original_inference_steps: int = Nonetimesteps: list = Noneguidance_scale: float = 8.5num_images_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_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] = Noneip_adapter_image_embeds: list[torch.Tensor] | None = Noneoutput_type: str | None = 'pil'return_dict: bool = Truecross_attention_kwargs: dict[str, typing.Any] | None = Noneclip_skip: int | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents']**kwargs ) → StableDiffusionPipelineOutput or tuple

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي تُوجّه توليد الصورة. إذا لم يُعرَّف، يجب عليك تمرير prompt_embeds.
  • image (torch.Tensor، PIL.Image.Image، np.ndarray، list[torch.Tensor]، list[PIL.Image.Image]، أو list[np.ndarray]) — Image أو tensor يمثل دفعة من الصور ليتم استخدامه كنقطة انطلاق. يمكنه أيضًا قبول كامنات الصور (image latents) كـ image، ولكن إذا تم تمرير الكامنات مباشرةً فلن يتم ترميزها مرة أخرى.
  • num_inference_steps (int، اختياري، القيمة الافتراضية 50) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال.
  • strength (float، اختياري، القيمة الافتراضية 0.8) — يشير إلى مدى تحويل الصورة المرجعية image. يجب أن يكون بين 0 و 1. تُستخدم image كنقطة انطلاق، وكلما ارتفعت قيمة strength زاد مقدار الضوضاء المضافة. يعتمد عدد خطوات إزالة الضوضاء على كمية الضوضاء المضافة في البداية. عندما تكون strength تساوي 1، تكون الضوضاء المضافة في أقصى حد، وتعمل عملية إزالة الضوضاء لعدد التكرارات الكامل المحدد في num_inference_steps. القيمة 1 تتجاهل image بشكل أساسي.
  • original_inference_steps (int, اختياري) — عدد خطوات الاستدلال الأصلية المستخدمة لتوليد جدول أزمنة متباعد خطياً، سنستخرج منه num_inference_steps أزمنة متباعدة بالتساوي كجدول الأزمنة النهائي، وفقاً لطريقة تخطي الخطوات الواردة في الورقة (انظر القسم 4.3). إذا لم يتم ضبطه، فسيتم افتراضياً استخدام خاصية original_inference_steps للمجدول.
  • timesteps (list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم num_inference_steps خطوات زمنية متساوية التباعد على جدول الخطوات الزمنية الأصلي للتدريب/التقطير الخاص بـ LCM. يجب أن تكون بترتيب تنازلي.
  • guidance_scale (float، اختياري، القيمة الافتراضية 7.5) — تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صور مرتبطة ارتباطًا وثيقًا بنص prompt على حساب انخفاض جودة الصورة. يتم تفعيل مقياس التوجيه عندما يكون guidance_scale > 1. يرجى ملاحظة أن ورقة latent consistency models الأصلية تستخدم صياغة مختلفة لـ CFG حيث يتم تقليل مقاييس التوجيه بمقدار 1 (لذا في صياغة الورقة يتم تفعيل CFG عندما يكون guidance_scale > 0).
  • num_images_per_prompt (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه.
  • generator (torch.Generator أو list[torch.Generator]، اختياري) — torch.Generator لجعل التوليد حتميًا.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام generator العشوائي المُقدَّم.
  • prompt_embeds (torch.Tensor، اختياري) — تضمينات نصية مُولَّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة (مثل وزن الموجهات). إذا لم تُقدَّم، يتم توليد التضمينات النصية من معامل الإدخال prompt.
  • ip_adapter_image — (PipelineImageInput، اختياري): مدخل صورة اختياري للعمل مع IP Adapters.
  • ip_adapter_image_embeds (list[torch.Tensor]، اختياري) — تضمينات صور مُولّدة مسبقًا لـ IP-Adapter. يجب أن تكون قائمة بطول يساوي عدد وحدات IP-Adapter. يجب أن يكون كل عنصر منها متجهًا (tensor) بشكل (batch_size, num_images, emb_dim). يجب أن يحتوي على تضمين الصورة السلبية إذا كان do_classifier_free_guidance مضبوطًا على True. إذا لم يُقدَّم، تُحسب التضمينات من معامل الإدخال ip_adapter_image.
  • output_type (str، اختياري، الافتراضي "pil") — صيغة مخرجات الصورة المولّدة. اختر بين PIL.Image أو np.array.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع StableDiffusionPipelineOutput بدلاً من tuple عادي.
  • cross_attention_kwargs (dict، اختياري) — قاموس kwargs يُمرَّر إلى AttentionProcessor كما هو معرَّف في self.processor إذا تمَّ تحديده.
  • 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) الخاص بك.

يعيد

StableDiffusionPipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد StableDiffusionPipelineOutput، وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى “غير آمن للعمل” (nsfw).

دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.

أمثلة:

>>> from diffusers import AutoPipelineForImage2Image
>>> import torch
>>> import PIL

>>> pipe = AutoPipelineForImage2Image.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)

>>> prompt = "High altitude snowy mountains"
>>> image = PIL.Image.open("./snowy_mountains.png")

>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(
...     prompt=prompt, image=image, num_inference_steps=num_inference_steps, guidance_scale=8.0
... ).images

>>> images[0].save("image.png")

enable_freeu

< >

( s1: floats2: floatb1: floatb2: float )

المعاملات

  • s1 (float) — معامل التوسيع للمرحلة 1 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من “تأثير الإفراط في التنعيم” في عملية إزالة الضوضاء المعززة.
  • s2 (float) — معامل التوسيع للمرحلة 2 لتخفيف مساهمات ميزات التخطي. يتم ذلك للتخفيف من “تأثير الإفراط في التنعيم” في عملية إزالة الضوضاء المعززة.
  • b1 (float) — معامل التوسيع للمرحلة 1 لتضخيم مساهمات ميزات الهيكل الأساسي.
  • b2 (float) — معامل التوسيع للمرحلة 2 لتضخيم مساهمات ميزات الهيكل الأساسي.

يُفعّل آلية FreeU كما في https://huggingface.co/papers/2309.11497.

تمثل البادئات التي تلي معاملات التوسيع المراحل التي تُطبَّق فيها.

يرجى الرجوع إلى المستودع الرسمي لمعرفة التوليفات من القيم التي يُعرف أنها تعمل بشكل جيد لأنابيب مختلفة مثل Stable Diffusion v1 وv2 وStable Diffusion XL.

disable_freeu

< >

( )

يعطّل آلية FreeU إذا كانت مفعّلة.

encode_prompt

< >

( promptdevicenum_images_per_promptdo_classifier_free_guidancenegative_prompt = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonelora_scale: float | None = Noneclip_skip: int | None = None )

المعاملات

  • prompt (str أو list[str]، اختياري) — الموجّه الذي سيتم ترميزه
  • device — (torch.device): جهاز torch
  • num_images_per_prompt (int) — عدد الصور التي يجب توليدها لكل موجه
  • do_classifier_free_guidance (bool) — ما إذا كان سيتم استخدام classifier free guidance أم لا
  • negative_prompt (str أو list[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الصورة. إذا لم يُعرَّف، يجب تمرير negative_prompt_embeds بدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كان guidance_scale أقل من 1).
  • 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 تعني أنه سيتم استخدام مخرجات الطبقة قبل الأخيرة لحساب تمثيلات الموجه.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

get_guidance_scale_embedding

< >

( 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).

انظر إلى https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

StableDiffusionPipelineOutput

فئة diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput

< >

( 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 إذا تعذّر إجراء فحص السلامة.

فئة الإخراج لخطوط أنابيب Stable Diffusion.

Update on GitHub