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

انتشار كامن

قُدم نموذج الانتشار الكامن (Latent Diffusion) في High-Resolution Image Synthesis with Latent Diffusion Models من قِبل روبن رومباخ، وأندرياس بلاتمان، ودومينيك لورنتس، وباتريك إيسر، وبيرن أومر.

ملخص الورقة البحثية هو:

من خلال تفكيك عملية تكوين الصورة إلى تطبيق متسلسل لمشفّرات إزالة الضوضاء، تحقق نماذج الانتشار (DMs) من نتائج تركيب متقدمة على بيانات الصور وما وراءها. بالإضافة إلى ذلك، يتيح صياغتها آلية توجيه للتحكم في عملية توليد الصور دون إعادة التدريب. ومع ذلك، نظرًا لأن هذه النماذج تعمل عادةً مباشرةً في فضاء البكسلات، فإن تحسين نماذج الانتشار القوية يستهلك غالبًا مئات أيام وحدات معالجة الرسوميات (GPU)، ويكون الاستدلال مكلفًا بسبب التقييمات المتسلسلة. لتمكين تدريب نماذج الانتشار على موارد حاسوبية محدودة مع الحفاظ على جودتها ومرونتها، نطبقها في الفضاء الكامن لمشفّرات إزالة الضوضاء القوية المدربة مسبقًا. على عكس الأعمال السابقة، يتيح تدريب نماذج الانتشار على مثل هذا التمثيل، لأول مرة، الوصول إلى نقطة شبه مثالية بين تقليل التعقيد والحفاظ على التفاصيل، مما يعزز الوفاء البصري بشكل كبير. من خلال إدخال طبقات الانتباه المتقاطع في بنية النموذج، نحوّل نماذج الانتشار إلى مولدات قوية ومرنة لإدخالات التكييف العامة مثل النص أو صناديق الحدود، ويصبح تركيب الدقة العالية ممكنًا بطريقة تلافيفية. تحقق نماذج الانتشار الكامنة (LDMs) لدينا من مستوى جديد من التقدم في ترميم الصور وأداءً تنافسيًا للغاية في مهام متنوعة، بما في ذلك توليد الصور غير المشروطة، وتركيب المشاهد الدلالية، والدقة الفائقة، مع تقليل كبير في المتطلبات الحسابية مقارنةً بنماذج الانتشار القائمة على البكسلات.

يمكن العثور على قاعدة الكود الأصلية في CompVis/latent-diffusion.

تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.

LDMTextToImagePipeline

فئة diffusers.LDMTextToImagePipeline

< >

( 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__

< >

( 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

< >

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

المعاملات

خط أنابيب لرفع دقة الصور باستخدام الانتشار الكامن.

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

__call__

< >

( 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

< >

( images: list[PIL.Image.Image] | numpy.ndarray )

المعاملات

  • images (List[PIL.Image.Image] أو np.ndarray) — قائمة من صور PIL منزوعة الضوضاء بطول batch_size أو مصفوفة NumPy بأبعاد (batch_size, height, width, num_channels).

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

Update on GitHub