Buckets:

mishig's picture
|
download
raw
17.9 kB

Apache Lisansı, 2.0 Sürümü ("Lisans") altında lisanslanmıştır;

bu dosyayı, Lisansa uygun olarak kullanabilirsiniz.

Lisansın bir kopyasını şu adresten edinebilirsiniz

http://www.apache.org/licenses/LICENSE-2.0

Uygulanabilir yasa gerektirmedikçe veya yazılı olarak anlaşılmadıkça, yazılım

Lisans kapsamında dağıtılan, "OLDUĞU GİBİ" esasına göre dağıtılır,

HİÇBİR TÜR AÇIK VEYA ZIMMİ GARANTİ VEYA ŞART İÇERMEZ.

İzinleri ve

lisans kapsamındaki kısıtlamalar. -->

Latte

latte text-to-video

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[[diffusers.LattePipeline]]

diffusers.LattePipeline[[diffusers.LattePipeline]]

diffusers.LattePipeline(tokenizer: T5Tokenizer, text_encoder: T5EncoderModel, vae: AutoencoderKL, transformer: LatteTransformer3DModel, scheduler: KarrasDiffusionSchedulers)

Kaynak

Parametreler:

vae (AutoencoderKL) : Video'ları latent temsillere kodlamak ve bu temsillerden video'ları çö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 tokenizer'ı.

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 transformer ile 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[[diffusers.LattePipeline.call]]

__call__(prompt: str | list[str] = None, negative_prompt: str = '', num_inference_steps: int = 50, timesteps: list[int] | None = None, guidance_scale: float = 7.5, num_images_per_prompt: int = 1, video_length: int = 16, height: int = 512, width: int = 512, eta: float = 0.0, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str = 'pil', return_dict: bool = True, callback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: list = ['latents'], clean_caption: bool = True, mask_feature: bool = True, enable_temporal_attentions: bool = True, decode_chunk_size: int = 14)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : Video üretimini yönlendirmek için istem veya istemler. Tanımlanmamışsa, bunun yerine prompt_embeds geçirilmelidir.

negative_prompt (str veya list[str], isteğe bağlı) : Video üretimini yönlendirmemek için kullanılan istem veya istemler. Tanımlanmazsa, bunun yerine negative_prompt_embeds parametresinin geçirilmesi gerekir. Yönlendirme kullanılmadığında (yani guidance_scale değeri 1'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ü azaltma süreci için kullanılacak özel zaman adımları. Tanımlanmamışsa, eşit aralıklı num_inference_steps zaman 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'de tanımlandığı gibi yönlendirme ölçeği. guidance_scale, Imagen Paper'deki 2. denklemindeki w olarak tanımlanır. Yönlendirme ölçeği, guidance_scale > 1 olarak ayarlanarak etkinleştirilir. Daha yüksek yönlendirme ölçeği, genellikle daha düşük video kalitesi pahasına, metin prompt'u ile yakından ilişkili videoların üretilmesini teşvik eder.

video_length (int, isteğe bağlı, varsayılan 16) : Üretilen 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) : Üretilen videonun piksel cinsinden yüksekliği.

width (int, isteğe bağlı, varsayılan: self.unet.config.sample_size) : Üretilen 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.Generator veya list[torch.Generator], isteğe bağlı) : Üretimi deterministik hale getirmek için bir veya torch üreteci(leri) 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ü latentler. Farklı istemlerle aynı üretimi ayarlamak için kullanılabilir. Sağlanmazsa, sağlanan rastgele generator kullanılarak örneklemeye dayalı bir latent tensörü oluşturulur.

prompt_embeds (torch.FloatTensor, isteğe bağlı) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri prompt girdi 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_prompt girdi argümanından oluşturulur.

output_type (str, isteğe bağlı, varsayılan "pil") : Üretilen videonun çıktı biçimi. PIL: PIL.Image.Image veya np.array arasında seçim yapın.

return_dict (bool, isteğe bağlı, varsayılan True) : Düz bir tuple yerine ~pipelines.stable_diffusion.IFPipelineOutput döndürülecek mi?

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ı) : Geri çağrı fonksiyonuna iletilmesi gereken gergilik girdilerinin listesi. Tanımlanmazsa, tüm gergilik girdileri iletilir.

clean_caption (bool, isteğe bağlı, varsayılan True) : Embedding oluşturulmadan önce başlığın temizlenip temizlenmeyeceğini belirtir. Bunun için beautifulsoup4 ve ftfy paketlerinin yüklü olması gerekir. Bağımlılıklar yüklü değilse, embedding'ler ham istemden oluşturulur.

mask_feature (bool varsayılan olarak True) : True olarak ayarlanırsa, metin gömlemeleri maskeleme işlemine tabi tutulur.

enable_temporal_attentions (bool, isteğe bağlı, varsayılan True) : Zamanlı dikkat mekanizmalarının 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çin decode_chunk_size değerini azaltın.

Dönüş: LattePipelineOutput veya tuple

return_dict True ise LattePipelineOutput döndürülür, aksi halde ilk öğesi üretilen görsellerin listesini içeren 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[[diffusers.LattePipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], do_classifier_free_guidance: bool = True, negative_prompt: str = '', num_images_per_prompt: int = 1, device: typing.Optional[torch.device] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, clean_caption: bool = False, mask_feature: bool = True, dtype = None)

Kaynak

Parametreler:

prompt (str veya list[str], isteğe bağlı) : kodlanacak istem

negative_prompt (str veya list[str], isteğe bağlı) : Video üretimini yönlendirmemek için kullanılan istem. Tanımlanmamışsa bunun yerine negative_prompt_embeds geçirilmelidir. Yönlendirme kullanılmadığında yok sayılır (yani guidance_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ılan True) : sınıflandırıcı serbest yönlendirmenin (classifier free guidance) kullanılıp kullanılmayacağı

num_images_per_prompt (int, isteğe bağlı, varsayılan 1) : her istem başına oluşturulacak 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ı) : Ön oluşturulmuş metin gömme değerleri. Metin girdilerini kolayca ayarlamak için kullanılabilir, ör. istem ağırlıklandırması. Sağlanmazsa, metin gömme değerleri prompt girdi 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) : True ise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler.

mask_feature : (bool, varsayılan True): True ise, işlev metin gömme değerlerini maskeleyecektir.

İsteği metin kodlayıcı gizli durumlarına kodlar.

Xet Storage Details

Size:
17.9 kB
·
Xet hash:
4168171d01f1a3b03ceeb4c0bb7b633fa5ece228a1411b48ab8b65beb6e77bbe

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.