Diffusers documentation
Latte
Latte

Monash Üniversitesi, Shanghai AI Lab, Nanjing Üniversitesi ve Nanyang Teknoloji Üniversitesi'nden Latte: Latent Diffusion Transformer for Video Generation.
Makalenin özeti şudur:
Video üretimi için yeni bir Latent Diffusion Transformer olan Latte'yi öneriyoruz. Latte, önce girdi videolarından uzamsal-zamansal jetonları çıkarır ve ardından latent uzayda video dağılımını modellemek için bir dizi Transformer bloğu kullanır. Videolardan çıkarılan önemli ölçüde fazla jetonu modellemek amacıyla, girdi videolarının uzamsal ve zamansal boyutlarını ayrıştırma perspektifinden dört verimli varyant tanıtılmıştır. Üretilen videoların kalitesini artırmak için Latte'nin en iyi uygulamalarını, video klipleri yama gömme (patch embedding), model varyantları, zaman adımı-sınıf bilgisi enjeksiyonu, zamansal konumsal gömme ve öğrenme stratejileri dahil olmak üzere titiz deneysel analizler yoluyla belirledik. Kapsamlı değerlendirmemiz, Latte'nin FaceForensics, SkyTimelapse, UCF101 ve Taichi-HD olmak üzere dört standart video üretimi veri setinde en iyi performansı (state-of-the-art) elde ettiğini göstermektedir. Ayrıca, Latte'yi metinden videoya üretim (T2V) görevine genişlettik; Latte, son T2V modelleriyle karşılaştırıldığında benzer sonuçlar elde etmektedir. Latte'nin, video üretimi için difüzyon modellerine Transformer entegrasyonu üzerine gelecekteki araştırmalar için değerli içgörüler sunduğuna güçlü bir şekilde inanıyoruz.
Vurgular: Latte, farklı modalları modellemek için bir omurga olarak önerilen bir latent difüzyon dönüştürücüsüdür (burada metinden videoya üretim için eğitilmiştir). Dört standart video benchmark'ında - FaceForensics, SkyTimelapse, UCF101 ve Taichi-HD - en iyi performansı elde eder. Değerlendirme için veri setlerini hazırlamak ve indirmek için lütfen bu https URL'ye bakın.
Bu pipeline maxin-cn tarafından katkı sağlanmıştır. Orijinal kod tabanı burada bulunabilir. Orijinal ağırlıklar hf.co/maxin-cn altında bulunabilir.
Scheduler'lar kılavuzunu inceleyerek scheduler hızı ve kalitesi arasındaki ödünleşimi nasıl keşfedebileceğinizi öğrenin ve aynı bileşenleri birden fazla pipeline'a nasıl verimli bir şekilde yükleyebileceğinizi öğrenmek için pipeline'lar arasında bileşenleri yeniden kullanma bölümüne göz atın.
Çıkarım
Çıkarım gecikmesini azaltmak için torch.compile kullanın.
Önce hattı yükleyin:
import torch
from diffusers import LattePipeline
pipeline = LattePipeline.from_pretrained(
"maxin-cn/Latte-1", dtype=torch.float16
).to("cuda") # or "mps", "xpu", "cpu"Ardından, transformer ve vae bileşenlerinin bellek yerleşimini torch.channels-last olarak değiştirin:
pipeline.transformer.to(memory_format=torch.channels_last) pipeline.vae.to(memory_format=torch.channels_last)
Son olarak, bileşenleri derleyin ve çıkarımı çalıştırın:
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]80GB A100 makinedeki benchmark sonuçları şunlardır:
Without torch.compile(): Average inference time: 16.246 seconds.
With torch.compile(): Average inference time: 14.573 seconds.Kantizasyon
Kantizasyon, model ağırlıklarını daha düşük hassasiyetli bir veri türünde saklayarak çok büyük modellerin bellek gereksinimlerini azaltmaya yardımcı olur. Ancak kantizasyonun video kalitesi üzerindeki etkisi, video modeline göre değişebilir.
Desteklenen kuantizasyon arka uçları ve kullanım durumunu destekleyen bir kuantizasyon arka ucunu seçme hakkında daha fazla bilgi edinmek için Quantization genel bakışına başvurun. Aşağıdaki örnek, bitsandbytes ile çıkarım için kuantize edilmiş bir LattePipeline yüklemenin nasıl yapılacağını göstermektedir.
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
sınıf diffusers.LattePipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelvae: AutoencoderKLtransformer: LatteTransformer3DModelscheduler: KarrasDiffusionSchedulers )
Parametreler
- vae (AutoencoderKL) — Video'ları latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli.
- text_encoder (
T5EncoderModel) — Donmuş metin kodlayıcı. Latte T5'i, özellikle de t5-v1_1-xxl varyantını kullanır. - tokenizer (
T5Tokenizer) — T5Tokenizer sınıfının tokenlaştırıcısı. - transformer (LatteTransformer3DModel) —
Kodlanmış video latentlerini gürültüden arındırmak için metin koşullu bir
LatteTransformer3DModel. - scheduler (SchedulerMixin) —
Kodlanmış video latentlerini gürültüden arındırmak için
transformerile birlikte kullanılacak bir zamanlayıcı.
Latte kullanılarak metinden videoya üretim için Pipeline.
Bu model DiffusionPipeline sınıfından devralır. Kütüphanenin tüm pipeline'lar için uyguladığı genel yöntemler (indirme veya kaydetme, belirli bir cihazda çalıştırma vb.) için üst sınıf belgelendirmesine bakın.
__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 = ['latents']clean_caption: bool = Truemask_feature: bool = Trueenable_temporal_attentions: bool = Truedecode_chunk_size: int = 14 ) → LattePipelineOutput or tuple
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — Video üretimini yönlendirmek için istem veya istemler. Tanımlanmadıysa bunun yerineprompt_embedsgeçirilmelidir. - negative_prompt (
strveyalist[str], isteğe bağlı) — Video üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerinenegative_prompt_embedsparametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında yok sayılır (yaniguidance_scale1'den küçükse yok sayılır). - num_inference_steps (
int, isteğe bağlı, varsayılan 100) — Gürültü azaltma adım sayısı. Daha fazla gürültü azaltma adımı genellikle daha yavaş çıkarım pahasına daha yüksek kaliteli bir videoya yol açar. - timesteps (
list[int], isteğe bağlı) — Gürültüden arındırma süreci için kullanılacak özel zaman adımları. Tanımlanmamışsa, eşit aralıklınum_inference_stepszaman adımı kullanılır. Azalan sırada olmalıdır. - guidance_scale (
float, isteğe bağlı, varsayılan 7.0) — Classifier-Free Diffusion Guidance makalesinde tanımlandığı gibi yönlendirme ölçeği.guidance_scale, Imagen Paper makalesindeki 2. denklemindekiwolarak tanımlanır. Yönlendirme ölçeği,guidance_scale > 1olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, metinprompt'u ile yakından ilişkili videoların üretilmesini teşvik eder, genellikle daha düşük video kalitesi pahasına. - video_length (
int, isteğe bağlı, varsayılan 16) — Oluşturulan video karelerinin sayısı. Varsayılan olarak saniyede 8 kare hızında 16 karedir - num_images_per_prompt (
int, isteğe bağlı, varsayılan 1) — Her istem için üretilecek video sayısı. - height (
int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan videonun piksel cinsinden yüksekliği. - width (
int, isteğe bağlı, varsayılan: self.unet.config.sample_size) — Oluşturulan videonun piksel cinsinden genişliği. - eta (
float, isteğe bağlı, varsayılan 0.0) — DDIM makalesindeki eta (η) parametresine karşılık gelir: https://huggingface.co/papers/2010.02502. Yalnızca schedulers.DDIMScheduler için geçerlidir, diğerlerinde yok sayılır. - generator (
torch.Generatorveyalist[torch.Generator], isteğe bağlı) — Üretimi deterministik hale getirmek için bir veya torch üreteci listesi. - latents (
torch.FloatTensor, isteğe bağlı) — Video üretimi için girdi olarak kullanılacak, Gauss dağılımından örneklenmiş önceden oluşturulmuş gürültülü latensler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgelegeneratorkullanılarak örneklemeye dayalı bir latens tensörü oluşturulur. - prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından oluşturulur. - negative_prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Latte için bu negatif istem "" olmalıdır. Sağlanmazsa, negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - output_type (
str, isteğe bağlı, varsayılan"pil") — Oluşturulan videonun çıktı biçimi. Şunlardan birini seçin: PIL:PIL.Image.Imageveyanp.array. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerine~pipelines.stable_diffusion.IFPipelineOutputdöndürülüp döndürülmemesi. - callback_on_step_end (
Callable[[int, int], None],PipelineCallback,MultiPipelineCallbacks, isteğe bağlı) — Her gürültü azaltma adımının sonunda çağrılacak bir geri çağrı işlevi veya geri çağrı işlevleri listesi. - callback_on_step_end_tensor_inputs (
list[str], isteğe bağlı) — Callback fonksiyonuna iletilmesi gereken girdi tensörlerinin listesi. Tanımlanmazsa, tüm girdi tensörleri iletilir. - clean_caption (
bool, isteğe bağlı, varsayılanTrue) — Gömleştirmeler oluşturulmadan önce açıklamanın temizlenip temizlenmeyeceğini belirtir. Bunun içinbeautifulsoup4veftfypaketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, gömleştirmeler ham istemden oluşturulur. - mask_feature (
bool, varsayılanTrue) —Trueolarak ayarlanırsa, metin gömlemeleri maskeleme işlemine tabi tutulur. - enable_temporal_attentions (
bool, isteğe bağlı, varsayılanTrue) — Zamanlı dikkatlerin etkinleştirilip etkinleştirilmeyeceği - decode_chunk_size (
int, isteğe bağlı) — Bir seferde çözümlenecek kare sayısı. Daha yüksek parça boyutu, daha fazla bellek kullanımı pahasına daha iyi zamansal tutarlılık sağlar. Varsayılan olarak, çözücü en yüksek kalite için tüm kareleri bir seferde çözümler. Daha düşük bellek kullanımı içindecode_chunk_sizedeğerini azaltın.
Dönüş değeri
LattePipelineOutput veya tuple
return_dict True ise LattePipelineOutput döndürülür,
aksi halde ilk öğesi üretilen görüntülerin listesi olan bir tuple döndürülür
Üretim için pipeline çağrıldığında tetiklenen işlev.
Örnekler:
>>> 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 )
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — kodlanacak prompt - negative_prompt (
strveyalist[str], isteğe bağlı) — Video üretimini yönlendirmemek için kullanılan istem. Tanımlanmazsa, bunun yerinenegative_prompt_embedsparametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında yok sayılır (yaniguidance_scale,1'den küçükse yok sayılır). Latte için bu değer "" olmalıdır. - do_classifier_free_guidance (
bool, isteğe bağlı, varsayılanTrue) — classifier free guidance kullanılacak mı - num_images_per_prompt (
int, isteğe bağlı, varsayılan 1) — her istem başına oluşturulması gereken video sayısı - device — (
torch.device, isteğe bağlı): Sonuç olarak elde edilen gömme vektörlerinin yerleştirileceği torch cihazı - prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. prompt ağırlıklandırma. Sağlanmazsa, metin gömme değerleripromptgirdi argümanından oluşturulur. - negative_prompt_embeds (
torch.FloatTensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. Latte için, "" dizisinin gömme değerleri olmalıdır. - clean_caption (bool, varsayılan
False) —Trueise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler. - mask_feature — (bool, varsayılan
True):Trueise, işlev metin gömme değerlerini maskeleyecektir.
İsteği metin kodlayıcı gizli durumlarına kodlar.