Diffusers documentation
نماذج الاتساق الكامن
نماذج الاتساق الكامن
قُدِّمت نماذج الاتساق الكامن (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.
النص إلى صورة
لاستخدام 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-LoRAs، يجب عليك استبدال المجدول بـ LCMScheduler وتحميل أوزان LCM-LoRA باستخدام الطريقة load_lora_weights(). بعد ذلك، يمكنك استخدام خط الأنابيب كما هو معتاد، وتمرير موجه نصي لتوليد صورة في 4 خطوات فقط.
بعض الملاحظات التي يجب وضعها في الاعتبار عند استخدام LCM-LoRAs هي:
- عادةً، يتم مضاعفة حجم الدفعة داخل خط الأنابيب للإرشاد الحر من التصنيف. لكن LCM يطبّق الإرشاد عبر تضمينات الإرشاد ولا يحتاج إلى مضاعفة حجم الدفعة، مما يؤدي إلى استنتاج أسرع. والعيوب هي أن التلميحات السلبية لا تعمل مع LCM لأنها لا تُحدث أي تأثير على عملية إزالة الضوضاء.
- يمكنك استخدام التوجيه مع LCM-LoRAs، لكنه حساس للغاية للقيم العالية لـ
guidance_scaleوقد يؤدي إلى ظهور عيوب في الصورة المولّدة. أفضل القيم التي وجدناها تتراوح بين [1.0, 2.0]. - استبدل stabilityai/stable-diffusion-xl-base-1.0 بأي نموذج مُعدّل. على سبيل المثال، جرّب استخدام نقطة التفتيش animagine-xl لتوليد صور أنمي باستخدام SDXL.
import torch
from diffusers import DiffusionPipeline, LCMScheduler
pipe = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
variant="fp16",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")
prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(42)
image = pipe(
prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=1.0
).images[0]
image
من صورة إلى صورة
للاستخدام 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 لتحويل الصورة إلى صورة، يجب عليك استبدال المجدول بـ LCMScheduler وتحميل أوزان LCM-LoRA باستخدام الطريقة load_lora_weights(). بعد ذلك، يمكنك استخدام خط الأنابيب كما هو معتاد، مع تمرير موجه نصي وصورة أولية لتوليد صورة في 4 خطوات فقط.
جرّب قيمًا مختلفة لـ
num_inference_stepsوstrengthوguidance_scaleللحصول على أفضل النتائج.
import torch
from diffusers import AutoPipelineForImage2Image, LCMScheduler
from diffusers.utils import make_image_grid, load_image
pipe = AutoPipelineForImage2Image.from_pretrained(
"Lykon/dreamshaper-7",
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/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=1,
strength=0.6,
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 بسرعة لتعلم نمط جديد من عدد قليل من الصور فقط، ثم دمجها في نموذج مُدرَّب مسبقًا لتوليد صور بهذا النمط.
حمّل نقطة التفتيش (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
استبدل المجدول بـ LCMScheduler. ثم يمكنك استخدام طريقة load_lora_weights() لتحميل أوزان LCM-LoRA وأوزان LoRA الخاصة بالنمط الذي تريد استخدامه. ادمج كلا من محوّلي LoRA باستخدام طريقة ~loaders.UNet2DConditionLoadersMixin.set_adapters وأنشئ صورة ذات نمط في خطوات قليلة.
import torch
from diffusers import DiffusionPipeline, LCMScheduler
pipe = DiffusionPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
variant="fp16",
dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl", adapter_name="lcm")
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")
pipe.set_adapters(["lcm", "papercut"], adapter_weights=[1.0, 0.8])
prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(prompt, num_inference_steps=4, guidance_scale=1, generator=generator).images[0]
image
ControlNet
ControlNet هي محوِّلات يمكن تدريبها على مجموعة متنوعة من المدخلات مثل حواف canny، وتقدير الوضعية، أو العمق. يمكن إدراج ControlNet في خط الأنابيب لتوفير شروط وتحكم إضافيين للنموذج من أجل توليد أكثر دقة.
يمكنك العثور على نماذج ControlNet إضافية مدرّبة على مدخلات أخرى في مستودع lllyasviel.
حمّل نموذج 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)
حمّل نموذج ControlNet مُدرَّب على صور canny وقم بتمريره إلى ControlNetModel. ثم يمكنك تحميل نموذج Stable Diffusion v1.5 في StableDiffusionControlNetPipeline واستبدال المجدول بـ LCMScheduler. استخدم طريقة load_lora_weights() لتحميل أوزان LCM-LoRA، وتمرير صورة 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
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(
"stable-diffusion-v1-5/stable-diffusion-v1-5",
controlnet=controlnet,
dtype=torch.float16,
safety_checker=None,
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")
generator = torch.manual_seed(0)
image = pipe(
"the mona lisa",
image=canny_image,
num_inference_steps=4,
guidance_scale=1.5,
controlnet_conditioning_scale=0.8,
cross_attention_kwargs={"scale": 1},
generator=generator,
).images[0]
image
T2I-Adapter
T2I-Adapter هو مُكيّف أخفّ من ControlNet، يوفر مدخلًا إضافيًا لتكييف نموذج مُدرَّب مسبقًا. إنه أسرع من ControlNet، لكن النتائج قد تكون أقل جودة بشكل طفيف.
يمكنك العثور على نقاط تفتيش إضافية لنموذج T2I-Adapter تم تدريبها على مدخلات أخرى في مستودع TencentArc.
حمّل 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]
حمّل T2IAdapter مُمَدربًا على صور canny وقم بتمريره إلى StableDiffusionXLAdapterPipeline. استبدل المجدول بـ LCMScheduler، واستخدم طريقة load_lora_weights() لتحميل أوزان LCM-LoRA. مرّر صورة 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, 1024))
adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda") # or "mps", "xpu", "cpu"
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0",
adapter=adapter,
dtype=torch.float16,
variant="fp16",
).to("cuda")
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")
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=1.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
< source >( 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. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
تورث خط الأنابيب أيضًا طرق التحميل التالية:
- load_textual_inversion() لتحميل تضمينات الانعكاس النصي
- load_lora_weights() لتحميل أوزان LoRA
- save_lora_weights() لحفظ أوزان LoRA
- from_single_file() لتحميل ملفات
.ckpt - load_ip_adapter() لتحميل وحدات IP Adapter
__call__
< source >( 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
< source >( 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.
يعطّل آلية FreeU إذا كانت مفعّلة.
encode_prompt
< source >( 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
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
المعاملات
- w (
torch.Tensor) — توليد متجهات تضمين بمقياس توجيه محدد لغرض إثراء تضمينات خطوة الزمن اللاحقة. - embedding_dim (
int، اختياري، القيمة الافتراضية 512) — أبعاد التضمينات (embeddings) التي سيتم توليدها. - dtype (
torch.dtype، اختياري، الافتراضيtorch.float32) — نوع البيانات للتضمينات المولّدة.
يعيد
torch.Tensor
متجهات تضمين بشكل (len(w), embedding_dim).
LatentConsistencyModelImg2ImgPipeline
فئة diffusers.LatentConsistencyModelImg2ImgPipeline
< source >( 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. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
تورث خط الأنابيب أيضًا طرق التحميل التالية:
- load_textual_inversion() لتحميل تضمينات الانعكاس النصي
- load_lora_weights() لتحميل أوزان LoRA
- save_lora_weights() لحفظ أوزان LoRA
- from_single_file() لتحميل ملفات
.ckpt - load_ip_adapter() لتحميل وحدات IP Adapter
__call__
< source >( 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
< source >( 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.
يعطّل آلية FreeU إذا كانت مفعّلة.
encode_prompt
< source >( 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
< source >( w: Tensorembedding_dim: int = 512dtype: dtype = torch.float32 ) → torch.Tensor
المعاملات
- w (
torch.Tensor) — توليد متجهات تضمين بمقياس توجيه محدد لغرض إثراء تضمينات خطوة الزمن اللاحقة. - embedding_dim (
int، اختياري، القيمة الافتراضية 512) — أبعاد التضمينات (embeddings) التي سيتم توليدها. - dtype (
torch.dtype، اختياري، الافتراضيtorch.float32) — نوع البيانات للتضمينات المولّدة.
يعيد
torch.Tensor
متجهات تضمين بشكل (len(w), embedding_dim).
StableDiffusionPipelineOutput
فئة diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarraynsfw_content_detected: list[bool] | None )
المعاملات
- images (
list[PIL.Image.Image]أوnp.ndarray) — قائمة من صور PIL منزوعة الضوضاء بطولbatch_sizeأو مصفوفة NumPy بأبعاد(batch_size, height, width, num_channels). - nsfw_content_detected (
list[bool]) — قائمة تُشير إلى ما إذا كانت الصورة المولدة المقابلة تحتوي على محتوى “غير آمن للعمل” (nsfw) أوNoneإذا تعذّر إجراء فحص السلامة.
فئة الإخراج لخطوط أنابيب Stable Diffusion.