Diffusers documentation
نماذج الاتساق
نماذج الاتساق
قُدِّمت نماذج الاتساق في 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
< source >( unet: UNet2DModelscheduler: CMStochasticIterativeScheduler )
المعاملات
- unet (UNet2DModel) —
نموذج
UNet2DModelلإزالة الضوضاء من الكامنات المُرمّزة للصورة. - scheduler (SchedulerMixin) —
جدولة تُستخدم بالاقتران مع
unetلإزالة الضوضاء من الكامنات المُرمّزة للصورة. حاليًا، متوافقة فقط مع CMStochasticIterativeScheduler.
خط أنابيب لتوليد الصور غير الشرطية أو الشرطية على أساس الفئة.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة المُنفَّذة لجميع خطوط الأنابيب (التنزيل، الحفظ، التشغيل على جهاز معين، إلخ).
__call__
< source >( 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
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
فئة الإخراج لخطوط أنابيب الصور.