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

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

قُدِّمت نماذج الاتساق في Consistency Models بواسطة Yang Song وPrafulla Dhariwal وMark Chen وIlya Sutskever.

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

حقّقت نماذج الانتشار تقدماً كبيراً في مجالات توليد الصور والصوت والفيديو، لكنها تعتمد على عملية أخذ عينات تكرارية تسبب بطئاً في التوليد. للتغلب على هذه القيود، نقترح نماذج الاتساق، وهي عائلة جديدة من النماذج تولّد عينات عالية الجودة عن طريق خرائط الضوضاء مباشرةً إلى البيانات. فهي تدعم التوليد السريع بخطوة واحدة بالتصميم، مع السماح في الوقت نفسه بأخذ عينات متعددة الخطوات لتبادل الحسابات مقابل جودة العينة. كما تدعم تحرير البيانات بدون تدريب مسبق، مثل ملء الصور (inpainting)، والتلوين، والدقة الفائقة، دون الحاجة إلى تدريب صريح على هذه المهام. يمكن تدريب نماذج الاتساق إما عن طريق تقطير نماذج الانتشار المدربة مسبقاً، أو كنماذج توليدية مستقلة تماماً. من خلال تجارب شاملة، نثبت أنها تتفوق على تقنيات التقطير الحالية لنماذج الانتشار في أخذ العينات بخطوة واحدة وبضع خطوات، محققةً أحدث مستوى من الأداء (state-of-the-art) بمقياس FID قدره 3.55 على CIFAR-10 و6.20 على ImageNet 64x64 للتوليد بخطوة واحدة. عند تدريبها بشكل منفصل، تصبح نماذج الاتساق عائلة جديدة من النماذج التوليدية يمكن أن تتفوق على النماذج التوليدية الحالية بخطوة واحدة وغير العدائية على المعايير القياسية مثل CIFAR-10 وImageNet 64x64 وLSUN 256x256.

يمكن العثور على قاعدة الكود الأصلية في openai/consistency_models، وتتاح نقاط التفتيش الإضافية في openai.

تمت مساهمة خط المعالجة بواسطة dg845 و ayushtues. ❤️

نصائح

لتحقيق تسريع إضافي، استخدم torch.compile لتوليد عدة صور في أقل من ثانية واحدة:

  import torch
  from diffusers import ConsistencyModelPipeline

  device = "cuda"  # or "mps", "xpu", "cpu"
  # Load the cd_bedroom256_lpips checkpoint.
  model_id_or_path = "openai/diffusers-cd_bedroom256_lpips"
  pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, dtype=torch.float16)
  pipe.to(device)

+ pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)

  # Multistep sampling
  # Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
  # https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L83
  for _ in range(10):
      image = pipe(timesteps=[17, 0]).images[0]
      image.show()

ConsistencyModelPipeline

فئة diffusers.ConsistencyModelPipeline

< >

( unet: UNet2DModelscheduler: CMStochasticIterativeScheduler )

المعاملات

  • unet (UNet2DModel) — نموذج UNet2DModel لإزالة الضوضاء من الكامنات المُرمّزة للصورة.
  • scheduler (SchedulerMixin) — جدولة تُستخدم بالاقتران مع unet لإزالة الضوضاء من الكامنات المُرمّزة للصورة. حاليًا، متوافقة فقط مع CMStochasticIterativeScheduler.

خط أنابيب لتوليد الصور غير الشرطية أو الشرطية على أساس الفئة.

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

__call__

< >

( batch_size: int = 1class_labels: typing.Union[torch.Tensor, list[int], int, NoneType] = Nonenum_inference_steps: int = 1timesteps: list = Nonegenerator: 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 ) → ImagePipelineOutput or tuple

المعاملات

  • batch_size (int، اختياري، القيمة الافتراضية 1) — عدد الصور التي سيتم توليدها.
  • class_labels (torch.Tensor أو list[int] أو int، اختياري) — تسميات فئات اختيارية لتكييف نماذج الاتساق الشرطية على الفئات. لا تُستخدم إذا لم يكن النموذج شرطياً على الفئات.
  • num_inference_steps (int، اختياري، القيمة الافتراضية 1) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى صورة بجودة أعلى على حساب بطء الاستدلال.
  • timesteps (list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعدد num_inference_steps. يجب أن تكون مرتبة تنازليًا.
  • generator (torch.Generator، اختياري) — torch.Generator لجعل التوليد حتميًا.
  • latents (torch.Tensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الصور. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، يتم توليد كائن latents عن طريق الاستخراج باستخدام generator العشوائي المُقدَّم.
  • output_type (str، اختياري، الافتراضي "pil") — صيغة مخرجات الصورة المولّدة. اختر بين PIL.Image أو np.array.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع ImagePipelineOutput بدلاً من tuple عادي.
  • callback (Callable، اختياري) — دالة تُستدعى كل callback_steps خطوات أثناء الاستدلال. تُستدعى الدالة مع الحجج التالية: callback(step: int, timestep: int, latents: torch.Tensor).
  • callback_steps (int، اختياري، القيمة الافتراضية 1) — التردد الذي تُستدعى به دالة callback. إذا لم يُحدد، تُستدعى الدالة في كل خطوة.

يعيد

ImagePipelineOutput أو tuple

إذا كان return_dict هو True، يُعاد ImagePipelineOutput، وإلا يُعاد tuple يكون عنصره الأول قائمة بالصور المولّدة.

أمثلة:

>>> import torch

>>> from diffusers import ConsistencyModelPipeline

>>> device = "cuda"
>>> # Load the cd_imagenet64_l2 checkpoint.
>>> model_id_or_path = "openai/diffusers-cd_imagenet64_l2"
>>> pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)
>>> pipe.to(device)

>>> # Onestep Sampling
>>> image = pipe(num_inference_steps=1).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample.png")

>>> # Onestep sampling, class-conditional image generation
>>> # ImageNet-64 class label 145 corresponds to king penguins
>>> image = pipe(num_inference_steps=1, class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_onestep_sample_penguin.png")

>>> # Multistep sampling, class-conditional image generation
>>> # Timesteps can be explicitly specified; the particular timesteps below are from the original GitHub repo:
>>> # https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L77
>>> image = pipe(num_inference_steps=None, timesteps=[22, 0], class_labels=145).images[0]
>>> image.save("cd_imagenet64_l2_multistep_sample_penguin.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