Diffusers documentation

لاتيه

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

لاتيه

latte text-to-video

لاتيه: محوّل الانتشار الكامن لتوليد الفيديو من جامعة موناش، مختبر شنغهاي للذكاء الاصطناعي، جامعة نانجينغ، وجامعة نانيانغ التكنولوجية.

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

نقترح هنا نموذج تحويلات انتشار كامن جديد، وهو 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

< >

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

< >

( 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

< >

( 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، فستقوم الدالة بإخفاء تمثيلات النص.

يقوم بتشفير الموجه إلى حالات مخفية لمشفّر النص.

Update on GitHub