Diffusers documentation
لاتيه
لاتيه

لاتيه: محوّل الانتشار الكامن لتوليد الفيديو من جامعة موناش، مختبر شنغهاي للذكاء الاصطناعي، جامعة نانجينغ، وجامعة نانيانغ التكنولوجية.
ملخص الورقة البحثية هو:
نقترح هنا نموذج تحويلات انتشار كامن جديد، وهو Latte، لتوليد الفيديو. يقوم Latte أولاً باستخراج الرموز المكانية الزمنية من مقاطع الفيديو المدخلة، ثم يتبنى سلسلة من كتل التحويلات لنمذجة توزيع الفيديو في الفضاء الكامن. ولإدارة العدد الكبير من الرموز المستخرجة من مقاطع الفيديو، تم تقديم أربعة متغيرات فعالة من منظور تفكيك الأبعاد المكانية والزمنية لمقاطع الفيديو المدخلة. ولتحسين جودة مقاطع الفيديو المولّدة، حددنا أفضل الممارسات لـ Latte من خلال تحليل تجريبي صارم، يشمل تضمين بقع مقاطع الفيديو، ومتغيرات النموذج، وحقن معلومات خطوة الزمن والفئة، وتضمين الموضع الزمني، واستراتيجيات التعلم. تُظهر تقييمنا الشامل أن Latte يحقق أداءً متقدماً على أحدث التقنيات عبر أربعة مجموعات بيانات قياسية لتوليد الفيديو، وهي FaceForensics وSkyTimelapse وUCF101 وTaichi-HD. بالإضافة إلى ذلك، قمنا بتوسيع Latte ليغطي مهمة توليد الفيديو من النص (T2V)، حيث يحقق Latte نتائج مماثلة مقارنة بنماذج T2V الحديثة. نؤمن إيماناً راسخاً بأن Latte يوفر رؤى قيّمة للبحوث المستقبلية حول دمج التحويلات في نماذج الانتشار لتوليد الفيديو.
أبرز النقاط: Latte هو محوّل انتشار كامن اقترح كهيكل أساسي لنمذجة أنماط مختلفة (تم تدريبه هنا لتوليد الفيديو من النص). يحقق أداءً متقدماً على مستوى الفن عبر أربعة معايير فيديو قياسية - FaceForensics، SkyTimelapse، UCF101 و Taichi-HD. للتحضير وتحميل مجموعات البيانات للتقييم، يُرجى الرجوع إلى هذا الرابط.
تمت مساهمة خط المعالجة هذا من قِبل maxin-cn. يمكن العثور على قاعدة الكود الأصلية هنا. يمكن العثور على الأوزان الأصلية تحت hf.co/maxin-cn.
تأكد من الاطلاع على دليل المجدولين لمعرفة كيفية استكشاف التوازن بين سرعة المجدول وجودة النتائج، واطّلع على قسم إعادة استخدام المكونات عبر خطوط الأنابيب لمعرفة كيفية تحميل نفس المكونات بكفاءة في خطوط أنابيب متعددة.
الاستدلال
استخدم torch.compile لتقليل زمن الاستدلال.
أولاً، حمّل خط الأنابيب:
import torch
from diffusers import LattePipeline
pipeline = LattePipeline.from_pretrained(
"maxin-cn/Latte-1", dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"ثم غيّر تخطيط الذاكرة لمكوّني خطّ الأنابيب transformer وvae إلى torch.channels-last:
pipeline.transformer.to(memory_format=torch.channels_last) pipeline.vae.to(memory_format=torch.channels_last)
أخيرًا، قم بتجميع المكونات وتنفيذ الاستدلال:
pipeline.transformer = torch.compile(pipeline.transformer)
pipeline.vae.decode = torch.compile(pipeline.vae.decode)
video = pipeline(prompt="A dog wearing sunglasses floating in space, surreal, nebulae in background").frames[0]نتائج الاختبار المرجعي على جهاز A100 بسعة 80 جيجابايت هي:
Without torch.compile(): Average inference time: 16.246 seconds.
With torch.compile(): Average inference time: 14.573 seconds.التكميم
يساعد التكميم (Quantization) في تقليل متطلبات الذاكرة للنماذج الكبيرة جدًا من خلال تخزين أوزان النموذج في نوع بيانات بدقة أقل. ومع ذلك، قد يكون للتكميم تأثير متباين على جودة الفيديو اعتمادًا على نموذج الفيديو المستخدم.
راجع نظرة عامة حول التكميم لمعرفة المزيد حول محركات التكميم المدعومة واختيار محرك تكميم يدعم حالتك الاستخدامية. يوضح المثال أدناه كيفية تحميل خط أنابيب LattePipeline مُكمَّم للاستدلال باستخدام bitsandbytes.
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, LatteTransformer3DModel, LattePipeline
from diffusers.utils import export_to_gif
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel
quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
"maxin-cn/Latte-1",
subfolder="text_encoder",
quantization_config=quant_config,
dtype=torch.float16,
)
quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = LatteTransformer3DModel.from_pretrained(
"maxin-cn/Latte-1",
subfolder="transformer",
quantization_config=quant_config,
dtype=torch.float16,
)
pipeline = LattePipeline.from_pretrained(
"maxin-cn/Latte-1",
text_encoder=text_encoder_8bit,
transformer=transformer_8bit,
dtype=torch.float16,
device_map="balanced",
)
prompt = "A small cactus with a happy face in the Sahara desert."
video = pipeline(prompt).frames[0]
export_to_gif(video, "latte.gif")LattePipeline
فئة diffusers.LattePipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelvae: AutoencoderKLtransformer: LatteTransformer3DModelscheduler: KarrasDiffusionSchedulers )
المعاملات
- vae (AutoencoderKL) — نموذج الترميز التبايني التلقائي (VAE) لتشفير وفك تشفير مقاطع الفيديو إلى تمثيلات كامنة ومنها.
- text_encoder (
T5EncoderModel) — مُشفِّر نص ثابت. يستخدم Latte T5، وتحديداً النسخة t5-v1_1-xxl. - tokenizer (
T5Tokenizer) — مُقسِّم من الفئة T5Tokenizer. - transformer (LatteTransformer3DModel) —
نموذج
LatteTransformer3DModelمشروط بالنص، يُستخدم لإزالة الضوضاء من كامنات الفيديو المُرمّزة. - scheduler (SchedulerMixin) —
جدول زمني يُستخدم بالاقتران مع
transformerلإزالة الضوضاء من كامنات الفيديو المُرمّزة.
خط أنابيب لتوليد الفيديو من النص باستخدام Latte.
يرث هذا النموذج من DiffusionPipeline. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع خطوط الأنابيب (مثل التنزيل أو الحفظ، أو التشغيل على جهاز معين، وما إلى ذلك).
__call__
< source >( prompt: str | list[str] = Nonenegative_prompt: str = ''num_inference_steps: int = 50timesteps: list[int] | None = Noneguidance_scale: float = 7.5num_images_per_prompt: int = 1video_length: int = 16height: int = 512width: int = 512eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.FloatTensor] = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneoutput_type: str = 'pil'return_dict: bool = Truecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']clean_caption: bool = Truemask_feature: bool = Trueenable_temporal_attentions: bool = Truedecode_chunk_size: int = 14 ) → LattePipelineOutput or tuple
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي توجّه توليد الفيديو. إذا لم يُعرَّف، يجب تمريرprompt_embedsبدلاً من ذلك. - negative_prompt (
strأوlist[str]، اختياري) — الموجّه أو الموجّهات التي لا ينبغي استخدامها لتوجيه توليد الفيديو. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً من ذلك. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). - num_inference_steps (
int، اختياري، القيمة الافتراضية 100) — عدد خطوات إزالة الضوضاء. تؤدي زيادة عدد خطوات إزالة الضوضاء عادةً إلى فيديو بجودة أعلى على حساب بطء الاستدلال. - timesteps (
list[int]، اختياري) — خطوات زمنية مخصصة لاستخدامها في عملية إزالة الضوضاء. إذا لم تُعرَّف، تُستخدم خطوات زمنية متساوية المسافات بعددnum_inference_steps. يجب أن تكون مرتبة تنازليًا. - guidance_scale (
float، اختياري، القيمة الافتراضية 7.0) — مقياس التوجيه كما هو مُعرَّف في Classifier-Free Diffusion Guidance. يُعرَّفguidance_scaleعلى أنهwمن المعادلة 2 في Imagen Paper. يتم تفعيل مقياس التوجيه عن طريق تعيينguidance_scale > 1. كلما زاد مقياس التوجيه، شجّع ذلك على توليد مقاطع فيديو مرتبطة ارتباطًا وثيقًا بـpromptالنصي، وعادةً على حساب انخفاض جودة الفيديو. - video_length (
int، اختياري، القيمة الافتراضية 16) — عدد إطارات الفيديو التي يتم توليدها. القيمة الافتراضية هي 16 إطارًا، أي ما يعادل 8 إطارات في الثانية - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد مقاطع الفيديو التي سيتم توليدها لكل موجه. - height (
int، اختياري، الافتراضي هو self.unet.config.sample_size) — ارتفاع الفيديو المولّد بالبكسل. - width (
int، اختياري، الافتراضي هو self.unet.config.sample_size) — العرض بالبكسلات للفيديو المولّد. - eta (
float، اختياري، القيمة الافتراضية 0.0) — يتوافق مع المعامل eta (η) في ورقة DDIM: https://huggingface.co/papers/2010.02502. ينطبق فقط على schedulers.DDIMScheduler، وسيتم تجاهله في الحالات الأخرى. - generator (
torch.Generatorأوlist[torch.Generator]، اختياري) — مولّد واحد أو قائمة من مولّدات torch لجعل التوليد حتميًا. - latents (
torch.FloatTensor، اختياري) — كائنات latents ضجيجية مُولّدة مسبقًا، مُستخرجة من توزيع غاوسي، تُستخدم كمدخلات لتوليد الفيديو. يمكن استخدامها لتعديل نفس التوليد باستخدام أوامر مختلفة. إذا لم تُقدَّم، سيتم إنشاء كائن latents عن طريق الاستخراج باستخدامgeneratorالعشوائي المُقدَّم. - prompt_embeds (
torch.FloatTensor, اختياري) — تضمينات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.FloatTensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. بالنسبة إلى Latte، يجب أن يكون هذا الموجه السلبي "". إذا لم يُقدَّم، فسيتم توليد negative_prompt_embeds من معامل الإدخالnegative_prompt. - output_type (
str، اختياري، القيمة الافتراضية"pil") — صيغة المخرجات لتوليد الفيديو. اختر بين PIL:PIL.Image.Imageأوnp.array. - return_dict (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~pipelines.stable_diffusion.IFPipelineOutputبدلاً من tuple عادي. - callback_on_step_end (
Callable[[int, int], None]،PipelineCallback،MultiPipelineCallbacks، اختياري) — دالة استجابة أو قائمة من دوال الاستجابة التي تُستدعى في نهاية كل خطوة إزالة ضوضاء. - callback_on_step_end_tensor_inputs (
list[str]، اختياري) — قائمة من مدخلات المصفوفات التي يجب تمريرها إلى دالة الاستدعاء. إذا لم تُعرَّف، فسيتم تمرير جميع مدخلات المصفوفات. - clean_caption (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تنظيف الوصف قبل إنشاء التضمينات. يتطلب تثبيتbeautifulsoup4وftfy. إذا لم يتم تثبيت الاعتماديات، فسيتم إنشاء التضمينات من النص الخام. - mask_feature (
boolالافتراضيTrue) — إذا تم ضبطه علىTrue، فسيتم إخفاء تمثيلات النص. - enable_temporal_attentions (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم تفعيل الانتباه الزمني - decode_chunk_size (
int, اختياري) — عدد الإطارات التي يتم فك ترميزها في كل مرة. يؤدي حجم الدفعة الأكبر إلى اتساق زمني أفضل على حساب زيادة استخدام الذاكرة. افتراضيًا، يفكّ المُرمِّز جميع الإطارات دفعة واحدة للحصول على أقصى جودة. لتقليل استخدام الذاكرة، قم بتقليلdecode_chunk_size.
يعيد
LattePipelineOutput أو tuple
إذا كان return_dict هو True، يُعاد LattePipelineOutput،
وإلا يُعاد tuple يكون عنصره الأول قائمة بالصور المولّدة
الدالة التي تُستدعى عند استدعاء خط الأنابيب للتوليد.
أمثلة:
>>> import torch
>>> from diffusers import LattePipeline
>>> from diffusers.utils import export_to_gif
>>> # You can replace the checkpoint id with "maxin-cn/Latte-1" too.
>>> pipe = LattePipeline.from_pretrained("maxin-cn/Latte-1", torch_dtype=torch.float16)
>>> # Enable memory optimizations.
>>> pipe.enable_model_cpu_offload()
>>> prompt = "A small cactus with a happy face in the Sahara desert."
>>> videos = pipe(prompt).frames[0]
>>> export_to_gif(videos, "latte.gif")encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_images_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.FloatTensor] = Nonenegative_prompt_embeds: typing.Optional[torch.FloatTensor] = Noneclean_caption: bool = Falsemask_feature: bool = Truedtype = None )
المعاملات
- prompt (
strأوlist[str]، اختياري) — الموجّه الذي سيتم ترميزه - negative_prompt (
strأوlist[str]، اختياري) — الموجّه الذي لا يُستخدم لتوجيه توليد الفيديو. إذا لم يُعرَّف، يجب تمريرnegative_prompt_embedsبدلاً منه. يتم تجاهله عند عدم استخدام التوجيه (أي يتم تجاهله إذا كانguidance_scaleأقل من1). بالنسبة إلى Latte، يجب أن يكون "". - do_classifier_free_guidance (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام classifier free guidance أم لا - num_images_per_prompt (
int، اختياري، القيمة الافتراضية 1) — عدد مقاطع الفيديو التي يجب توليدها لكل موجه - device — (
torch.device، اختياري): جهاز torch لوضع التضمينات الناتجة عليه - prompt_embeds (
torch.FloatTensor, اختياري) — تضمينات نصية مُولّدة مسبقًا. يمكن استخدامها لتعديل مدخلات النص بسهولة، مثلًا وزن الموجه. إذا لم تُقدَّم، فسيتم توليد تضمينات النص من معامل الإدخالprompt. - negative_prompt_embeds (
torch.FloatTensor، اختياري) — تضمينات نصية سلبية مُولّدة مسبقًا. بالنسبة إلى Latte، يجب أن تكون تضمينات السلسلة "". - clean_caption (bool، القيمة الافتراضية
False) — إذا كانتTrue، سيقوم الدالة بمعالجة النص الوصفي المقدم وتنظيفه قبل الترميز. - mask_feature — (bool، القيمة الافتراضية
True): إذا كانتTrue، فستقوم الدالة بإخفاء تمثيلات النص.
يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.