Diffusers documentation
انتشار كامن
انتشار كامن
قُدم نموذج الانتشار الكامن (Latent Diffusion) في High-Resolution Image Synthesis with Latent Diffusion Models من قِبل روبن رومباخ، وأندرياس بلاتمان، ودومينيك لورنتس، وباتريك إيسر، وبيرن أومر.
ملخص الورقة البحثية هو:
من خلال تفكيك عملية تكوين الصورة إلى تطبيق متسلسل لمشفّرات إزالة الضوضاء، تحقق نماذج الانتشار (DMs) من نتائج تركيب متقدمة على بيانات الصور وما وراءها. بالإضافة إلى ذلك، يتيح صياغتها آلية توجيه للتحكم في عملية توليد الصور دون إعادة التدريب. ومع ذلك، نظرًا لأن هذه النماذج تعمل عادةً مباشرةً في فضاء البكسلات، فإن تحسين نماذج الانتشار القوية يستهلك غالبًا مئات أيام وحدات معالجة الرسوميات (GPU)، ويكون الاستدلال مكلفًا بسبب التقييمات المتسلسلة. لتمكين تدريب نماذج الانتشار على موارد حاسوبية محدودة مع الحفاظ على جودتها ومرونتها، نطبقها في الفضاء الكامن لمشفّرات إزالة الضوضاء القوية المدربة مسبقًا. على عكس الأعمال السابقة، يتيح تدريب نماذج الانتشار على مثل هذا التمثيل، لأول مرة، الوصول إلى نقطة شبه مثالية بين تقليل التعقيد والحفاظ على التفاصيل، مما يعزز الوفاء البصري بشكل كبير. من خلال إدخال طبقات الانتباه المتقاطع في بنية النموذج، نحوّل نماذج الانتشار إلى مولدات قوية ومرنة لإدخالات التكييف العامة مثل النص أو صناديق الحدود، ويصبح تركيب الدقة العالية ممكنًا بطريقة تلافيفية. تحقق نماذج الانتشار الكامنة (LDMs) لدينا من مستوى جديد من التقدم في ترميم الصور وأداءً تنافسيًا للغاية في مهام متنوعة، بما في ذلك توليد الصور غير المشروطة، وتركيب المشاهد الدلالية، والدقة الفائقة، مع تقليل كبير في المتطلبات الحسابية مقارنةً بنماذج الانتشار القائمة على البكسلات.
يمكن العثور على قاعدة الكود الأصلية في CompVis/latent-diffusion.
تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.
LDMTextToImagePipeline
فئة diffusers.LDMTextToImagePipeline
< source >( vqvae: diffusers.models.autoencoders.vq_model.VQModel | diffusers.models.autoencoders.autoencoder_kl.AutoencoderKLbert: PreTrainedModeltokenizer: PythonBackendunet: diffusers.models.unets.unet_2d.UNet2DModel | diffusers.models.unets.unet_2d_condition.UNet2DConditionModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler )
المعاملات
- vqvae (VQModel) — نموذج مُكمَّم متجهياً (VQ) لتشفير الصور وفك تشفيرها إلى تمثيلات كامنة ومنها.
- bert (
LDMBertModel) — نموذج لتشفير النص مبني علىBERT. - tokenizer (BertTokenizer) —
BertTokenizerلتجزئة النص. - unet (UNet2DConditionModel) —
نموذج
UNet2DConditionModelلإزالة الضوضاء من الكامنات المُرمّزة للصورة. - scheduler (SchedulerMixin) —
مجدول يُستخدم بالاقتران مع
unetلإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد DDIMScheduler أو LMSDiscreteScheduler أو PNDMScheduler.
خط أنابيب لتوليد الصور من النص باستخدام الانتشار الكامن.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
__call__
< source >( prompt: str | list[str]height: int | None = Nonewidth: int | None = Nonenum_inference_steps: int | None = 50guidance_scale: float | None = 1.0eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'pil'return_dict: bool = True**kwargs ) → ImagePipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]) — الموجّه أو الموجّهات التي تُوجّه توليد الصورة. - 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) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - guidance_scale (
float, اختياري، القيمة الافتراضية 1.0) — تشجع قيمة أعلى لمقياس التوجيه النموذج على توليد صور مرتبطة ارتباطًا وثيقًا بنصpromptعلى حساب انخفاض جودة الصورة. يتم تفعيل مقياس التوجيه عندما يكونguidance_scale > 1. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) من ورقة DDIM. ينطبق فقط على DDIMScheduler، ويُتجاهل في المجدولين الآخرين. - generator (
torch.Generator، اختياري) —torch.Generatorلجعل التوليد حتميًا. - latents (
torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدامgeneratorالعشوائي المُقدَّم. - output_type (
str، اختياري، الافتراضي"pil") — تنسيق الصورة المولّدة. اختر بين"pil"(PIL.Image) أو"np"(np.array) أو"pt"(torch.Tensor). - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع ImagePipelineOutput بدلاً من tuple عادي.
يعيد
ImagePipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد ImagePipelineOutput، وإلا يُعاد tuple يكون عنصره الأول قائمة بالصور المولّدة.
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
مثال:
>>> from diffusers import DiffusionPipeline
>>> # load model and scheduler
>>> ldm = DiffusionPipeline.from_pretrained("CompVis/ldm-text2im-large-256")
>>> # run pipeline in inference (sample random noise and denoise)
>>> prompt = "A painting of a squirrel eating a burger"
>>> images = ldm([prompt], num_inference_steps=50, eta=0.3, guidance_scale=6).images
>>> # save images
>>> for idx, image in enumerate(images):
... image.save(f"squirrel-{idx}.png")LDMSuperResolutionPipeline
فئة diffusers.LDMSuperResolutionPipeline
< source >( vqvae: VQModelunet: UNet2DModelscheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_pndm.PNDMScheduler | diffusers.utils.dummy_torch_and_scipy_objects.LMSDiscreteScheduler | diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteScheduler | diffusers.schedulers.scheduling_euler_ancestral_discrete.EulerAncestralDiscreteScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler )
المعاملات
- vqvae (VQModel) — نموذج مُكمَّم متجهياً (VQ) لتشفير الصور وفك تشفيرها إلى تمثيلات كامنة ومنها.
- unet (UNet2DModel) —
نموذج
UNet2DModelلإزالة الضوضاء من الصورة المُرمَّزة. - scheduler (SchedulerMixin) —
جدول زمني يُستخدم بالاقتران مع
unetلإزالة الضوضاء من كائنات الصورة المُرمّزة. يمكن أن يكون أحد DDIMScheduler، LMSDiscreteScheduler، EulerDiscreteScheduler، EulerAncestralDiscreteScheduler، DPMSolverMultistepScheduler، أو PNDMScheduler.
خط أنابيب لرفع دقة الصور باستخدام الانتشار الكامن.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
__call__
< source >( image: typing.Union[torch.Tensor, PIL.Image.Image] = Nonebatch_size: int | None = 1num_inference_steps: int | None = 100eta: float | None = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Noneoutput_type: str | None = 'pil'return_dict: bool = True ) → ImagePipelineOutput or tuple
المعاملات
- image (
torch.TensorأوPIL.Image.Image) —Imageأو tensor يمثل دفعة من الصور ليتم استخدامه كنقطة انطلاق للعملية. - batch_size (
int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها. - num_inference_steps (
int، اختياري، القيمة الافتراضية 100) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) من ورقة DDIM. ينطبق فقط على DDIMScheduler، ويُتجاهل في المجدولين الآخرين. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) —torch.Generatorلجعل التوليد حتميًا. - output_type (
str، اختياري، الافتراضي"pil") — تنسيق الصورة المولّدة. اختر بين"pil"(PIL.Image) أو"np"(np.array) أو"pt"(torch.Tensor). - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع ImagePipelineOutput بدلاً من tuple عادي.
يعيد
ImagePipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد ImagePipelineOutput، وإلا يُعاد tuple يكون عنصره الأول قائمة بالصور المولّدة
دالة الاستدعاء call لخط الأنابيب pipeline الخاص بالتوليد.
مثال:
>>> import requests
>>> from PIL import Image
>>> from io import BytesIO
>>> from diffusers import LDMSuperResolutionPipeline
>>> import torch
>>> # load model and scheduler
>>> pipeline = LDMSuperResolutionPipeline.from_pretrained("CompVis/ldm-super-resolution-4x-openimages")
>>> pipeline = pipeline.to("cuda")
>>> # let's download an image
>>> url = (
... "https://user-images.githubusercontent.com/38061659/199705896-b48e17b8-b231-47cd-a270-4ffa5a93fa3e.png"
... )
>>> response = requests.get(url)
>>> low_res_img = Image.open(BytesIO(response.content)).convert("RGB")
>>> low_res_img = low_res_img.resize((128, 128))
>>> # run pipeline in inference (sample random noise and denoise)
>>> upscaled_image = pipeline(low_res_img, num_inference_steps=100, eta=1).images[0]
>>> # save image
>>> upscaled_image.save("ldm_generated_image.png")ImagePipelineOutput
فئة diffusers.ImagePipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
فئة الإخراج لخطوط أنابيب الصور.