Diffusers documentation
تباين الصورة
تباين الصورة
يمكن لنموذج Stable Diffusion أيضًا توليد تنويعات من صورة مدخلة. وهو يستخدم نسخة مُعدّلة من نموذج Stable Diffusion بواسطة Justin Pinkney من Lambda.
يمكن العثور على قاعدة الكود الأصلية في LambdaLabsML/lambda-diffusers ويمكن العثور على نقاط تفتيش رسمية إضافية لتباين الصور في lambdalabs/sd-image-variations-diffusers.
تأكد من الاطلاع على قسم نصائح الخاصة بـ Stable Diffusion لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، وكيفية إعادة استخدام مكونات خط الأنابيب بكفاءة!
StableDiffusionImageVariationPipeline
فئة diffusers.StableDiffusionImageVariationPipeline
< source >( vae: AutoencoderKLimage_encoder: CLIPVisionModelWithProjectionunet: UNet2DConditionModelscheduler: KarrasDiffusionSchedulerssafety_checker: StableDiffusionSafetyCheckerfeature_extractor: CLIPImageProcessorPilrequires_safety_checker: bool = True )
المعاملات
- vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير الصور إلى تمثيلات كامنة ومنها.
- image_encoder (CLIPVisionModelWithProjection) — مُشفِّر صور CLIP ثابت (clip-vit-large-patch14).
- text_encoder (CLIPTextModel) — مُشفِّر نص ثابت (clip-vit-large-patch14).
- tokenizer (CLIPTokenizer) —
CLIPTokenizerلتجزئة النص. - unet (UNet2DConditionModel) —
نموذج
UNet2DConditionModelلإزالة الضوضاء من الكامنات المُرمّزة للصورة. - scheduler (SchedulerMixin) —
مجدول يُستخدم بالاقتران مع
unetلإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد DDIMScheduler أو LMSDiscreteScheduler أو PNDMScheduler. - safety_checker (
StableDiffusionSafetyChecker) — وحدة تصنيف تُقدّر ما إذا كانت الصور المولّدة قد تُعتبر مسيئة أو ضارة. يرجى الرجوع إلى بطاقة النموذج لمزيد من التفاصيل حول الأضرار المحتملة التي قد يسببها النموذج. - feature_extractor (CLIPImageProcessor) —
معالج
CLIPImageProcessorلاستخراج الميزات من الصور المولّدة؛ يُستخدم كمدخلات لـsafety_checker.
خط أنابيب لتوليد تنويعات للصور من صورة مدخلة باستخدام Stable Diffusion.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
__call__
< source >( image: typing.Union[PIL.Image.Image, list[PIL.Image.Image], torch.Tensor]height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 50guidance_scale: float = 7.5num_images_per_prompt: int | None = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: 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 = 1 ) → StableDiffusionPipelineOutput or tuple
المعاملات
- image (
PIL.Image.Imageأوlist[PIL.Image.Image]أوtorch.Tensor) — صورة أو صور لتوجيه توليد الصور. إذا قمت بتوفير tensor، فيجب أن يكون متوافقًا معCLIPImageProcessor. - 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) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة ذات جودة أعلى على حساب بطء الاستدلال. يتم تعديل هذا المعامل بواسطةstrength. - guidance_scale (
float, اختياري، القيمة الافتراضية 7.5) — تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صور مرتبطة ارتباطًا وثيقًا بنصpromptعلى حساب انخفاض جودة الصورة. يتم تفعيل مقياس التوجيه عندما يكونguidance_scale > 1. - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها لكل موجه. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) من ورقة DDIM. ينطبق فقط على DDIMScheduler، ويُتجاهل في المجدولين الآخرين. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) —torch.Generatorلجعل التوليد حتميًا. - latents (
torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدامgeneratorالعشوائي المُقدَّم. - output_type (
str، اختياري، الافتراضي"pil") — صيغة مخرجات الصورة المولّدة. اختر بينPIL.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع StableDiffusionPipelineOutput بدلاً من tuple عادي. - callback (
Callable، اختياري) — دالة تُستدعى كلcallback_stepsخطوات أثناء الاستدلال. تُستدعى الدالة مع الحجج التالية:callback(step: int, timestep: int, latents: torch.Tensor). - callback_steps (
int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالةcallback. إذا لم يُحدد، تُستدعى الدالة في كل خطوة.
يعيد
StableDiffusionPipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد StableDiffusionPipelineOutput،
وإلا يُعاد tuple حيث يكون العنصر الأول قائمة بالصور المولّدة والعنصر الثاني قائمة من قيم bool تشير إلى ما إذا كانت الصورة المولّدة المقابلة تحتوي على محتوى
“غير آمن للعمل” (nsfw).
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
أمثلة:
from diffusers import StableDiffusionImageVariationPipeline
from PIL import Image
from io import BytesIO
import requests
pipe = StableDiffusionImageVariationPipeline.from_pretrained(
"lambdalabs/sd-image-variations-diffusers", revision="v2.0"
)
pipe = pipe.to("cuda")
url = "https://lh3.googleusercontent.com/y-iFOHfLTwkuQSUegpwDdgKmOjRSTvPxat63dQLB25xkTs4lhIbRUFeNBWZzYf370g=s1200"
response = requests.get(url)
image = Image.open(BytesIO(response.content)).convert("RGB")
out = pipe(image, num_images_per_prompt=3, guidance_scale=15)
out["images"][0].save("result.jpg")enable_attention_slicing
< source >( slice_size: str | int = 'auto' )
المعاملات
- slice_size (
strأوint، اختياري، القيمة الافتراضية"auto") — عندما تكون القيمة"auto"، يتم تقسيم المدخلات إلى رؤوس الانتباه إلى نصفين، بحيث يُحسب الانتباه في خطوتين. أما إذا كانت"max"، فسيتم توفير أقصى قدر من الذاكرة من خلال تشغيل شريحة واحدة في كل مرة. وإذا تم تقديم رقم، يتم استخدام عدد من الشرائح يساويattention_head_dim // slice_size. في هذه الحالة، يجب أن يكونattention_head_dimمضاعفًا لـslice_size.
تفعيل حساب الانتباه المقطّع. عند تفعيل هذا الخيار، يقسم وحدة الانتباه المصفوفة المدخلة إلى شرائح لحساب الانتباه على عدة خطوات. في حالة وجود أكثر من رأس انتباه، يتم تنفيذ الحساب بشكل تسلسلي على كل رأس. وهذا مفيد لتوفير بعض الذاكرة مقابل انخفاض طفيف في السرعة.
> ⚠️ لا تفعّل تقطيع الانتباه إذا كنت تستخدم بالفعل
scaled_dot_product_attention(SDPA) من PyTorch > 2.0 أو xFormers. فحسابات الانتباه هذه فعّالة جداً من حيث الذاكرة، لذا لن تحتاج إلى تفعيل > هذه الوظيفة. إذا فعّلت تقطيع الانتباه مع SDPA أو xFormers، فقد يؤدي ذلك إلى تباطؤ كبير!
أمثلة:
>>> import torch
>>> from diffusers import StableDiffusionPipeline
>>> pipe = StableDiffusionPipeline.from_pretrained(
... "stable-diffusion-v1-5/stable-diffusion-v1-5",
... dtype=torch.float16,
... use_safetensors=True,
... )
>>> prompt = "a photo of an astronaut riding a horse on mars"
>>> pipe.enable_attention_slicing()
>>> image = pipe(prompt).images[0]تعطيل حساب الانتباه المقطّع. إذا كان enable_attention_slicing قد تم استدعاؤه سابقًا، يتم حساب الانتباه في خطوة واحدة.
enable_xformers_memory_efficient_attention
< source >( attention_op: typing.Optional[typing.Callable] = None )
المعاملات
- attention_op (
Callable، اختياري) — تجاوز المشغّل الافتراضيNoneلاستخدامه كحجةopفي دالةmemory_efficient_attention()الخاصة بـ xFormers.
تفعيل الانتباه الموفّر للذاكرة من xFormers. عند تفعيل هذا الخيار، يجب أن تلاحظ انخفاضًا في استخدام ذاكرة وحدة معالجة الرسوميات (GPU) وتسريعًا محتملًا أثناء الاستدلال. لا يُضمن التسريع أثناء التدريب.
> ⚠️ عند تفعيل كل من الانتباه الموفّر للذاكرة والانتباه المقطّع، فإنّ الانتباه الموفّر للذاكرة يحظى بالأولوية.
أمثلة:
>>> import torch
>>> from diffusers import DiffusionPipeline
>>> from xformers.ops import MemoryEfficientAttentionFlashAttentionOp
>>> pipe = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", dtype=torch.float16)
>>> pipe = pipe.to("cuda")
>>> pipe.enable_xformers_memory_efficient_attention(attention_op=MemoryEfficientAttentionFlashAttentionOp)
>>> # Workaround for not accepting attention shape using VAE for Flash Attention
>>> pipe.vae.enable_xformers_memory_efficient_attention(attention_op=None)تعطيل الانتباه الموفّر للذاكرة من xFormers.
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.