Diffusers documentation
Allegro
Allegro
RhymesAI'den Yuan Zhou, Qiuyue Wang, Yuxuan Cai ve Huan Yang tarafından Allegro: Ticari Seviyede Video Üretim Modelinin Kara Kutusunu Açın
Makalenin özeti şudur:
Video üretimi alanında önemli ilerlemeler kaydedilmiş olup açık kaynak topluluğu, yüksek kaliteli modellerin eğitimi için zengin bir araştırma makalesi ve araç havuzu sunmuştur. Ancak bu çabalara rağmen, mevcut bilgi ve kaynaklar ticari düzeyde performans elde etmek için yetersiz kalmaktadır. Bu raporda, siyah kutuyu açıp hem kalitede hem de zamansal tutarlılıkta üstün olan gelişmiş bir video üretim modeli olan Allegro'yu tanıtıyoruz. Ayrıca alanın mevcut sınırlılıklarını vurguluyor ve veri, model mimarisi, eğitim hattı ve değerlendirme gibi temel unsurları ele alarak yüksek performanslı, ticari düzeyde video üretim modelleri eğitmek için kapsamlı bir metodoloji sunuyoruz. Kullanıcı çalışmamız, Allegro'nun mevcut açık kaynak modelleri ve çoğu ticari modeli geride bıraktığını, yalnızca Hailuo ve Kling'in hemen arkasında yer aldığını göstermektedir. Kod: https://github.com/rhymes-ai/Allegro , Model: https://huggingface.co/rhymes-ai/Allegro , Galeri: https://rhymes.ai/allegro_gallery .
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.
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 AllegroPipeline yüklemenin nasıl yapılacağını göstermektedir.
import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, AllegroTransformer3DModel, AllegroPipeline
from diffusers.utils import export_to_video
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel
quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
"rhymes-ai/Allegro",
subfolder="text_encoder",
quantization_config=quant_config,
dtype=torch.float16,
)
quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = AllegroTransformer3DModel.from_pretrained(
"rhymes-ai/Allegro",
subfolder="transformer",
quantization_config=quant_config,
dtype=torch.float16,
)
pipeline = AllegroPipeline.from_pretrained(
"rhymes-ai/Allegro",
text_encoder=text_encoder_8bit,
transformer=transformer_8bit,
dtype=torch.float16,
device_map="balanced",
)
prompt = (
"A seaside harbor with bright sunlight and sparkling seawater, with many boats in the water. From an aerial view, "
"the boats vary in size and color, some moving and some stationary. Fishing boats in the water suggest that this "
"location might be a popular spot for docking fishing boats."
)
video = pipeline(prompt, guidance_scale=7.5, max_sequence_length=512).frames[0]
export_to_video(video, "harbor.mp4", fps=15)AllegroPipeline
sınıf diffusers.AllegroPipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelvae: AutoencoderKLAllegrotransformer: AllegroTransformer3DModelscheduler: KarrasDiffusionSchedulers )
Parametreler
- vae (
AllegroAutoEncoderKL3D) — Videoyu latent temsillere kodlamak ve bu temsillerden çözmek için kullanılan Varyasyonel Oto-Kodlayıcı (VAE) Modeli. - text_encoder (
T5EncoderModel) — Donmuş metin kodlayıcı. PixArt-Alpha T5'i, özellikle de t5-v1_1-xxl varyantını kullanır. - tokenizer (
T5Tokenizer) — Tokenizer of class T5Tokenizer. - transformer (AllegroTransformer3DModel) —
Kodlanmış video latentlerini gürültüden arındırmak için metin koşullu bir
AllegroTransformer3DModel. - scheduler (SchedulerMixin) —
Kodlanmış video latentlerini gürültüden arındırmak için
transformerile birlikte kullanılacak bir zamanlayıcı.
Allegro 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 = 100timesteps: list = Noneguidance_scale: float = 7.5num_frames: int | None = Noneheight: int | None = Nonewidth: int | None = Nonenum_videos_per_prompt: int = 1eta: float = 0.0generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = '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 = Truemax_sequence_length: int = 512 ) → AllegroPipelineOutput 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.5) — 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. - num_videos_per_prompt (
int, isteğe bağlı, varsayılan 1) — Her prompt için üretilecek video sayısı. - num_frames — (
int, isteğe bağlı, varsayılan 88): Bu parametre, oluşturulan video karelerinin sayısını kontrol eder. - 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.Tensor, opsiyonel) — Giriş olarak kullanılacak, video üretimi için Gauss dağılımından örneklenen ö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.Tensor, 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. - prompt_attention_mask (
torch.Tensor, isteğe bağlı) — Metin gömme (embedding) için önceden oluşturulmuş dikkat maskesi. - negative_prompt_embeds (
torch.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömme değerleri. PixArt-Sigma için bu negatif istem "" olmalıdır. Sağlanmazsa, negative_prompt_embeds,negative_promptgirdi argümanından oluşturulur. - negative_prompt_attention_mask (
torch.Tensor, isteğe bağlı) — Negatif metin gömme verileri için önceden oluşturulmuş dikkat maskesi. - 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, isteğe bağlı) — Çıkarım sırasında her gürültü azaltma adımının sonunda çağrılan bir işlev. İşlev aşağıdaki argümanlarla çağrılır:callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict).callback_kwargs,callback_on_step_end_tensor_inputstarafından belirtilen tüm tensörlerin listesini içerir. - callback_on_step_end_tensor_inputs (
List, optional) — The list of tensor inputs for thecallback_on_step_endfunction. The tensors specified in the list will be passed ascallback_kwargsargument. You will only be able to include variables listed in the._callback_tensor_inputsattribute of your pipeline class. - 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. - max_sequence_length (
int, varsayılan512) —promptile kullanılacak maksimum dizi uzunluğu.
Dönüş değeri
AllegroPipelineOutput veya tuple
return_dict True ise AllegroPipelineOutput döndürülür,
aksi halde ilk öğesi üretilen videoların 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 AutoencoderKLAllegro, AllegroPipeline
>>> from diffusers.utils import export_to_video
>>> vae = AutoencoderKLAllegro.from_pretrained("rhymes-ai/Allegro", subfolder="vae", torch_dtype=torch.float32)
>>> pipe = AllegroPipeline.from_pretrained("rhymes-ai/Allegro", vae=vae, torch_dtype=torch.bfloat16).to("cuda")
>>> pipe.vae.enable_tiling()
>>> prompt = (
... "A seaside harbor with bright sunlight and sparkling seawater, with many boats in the water. From an aerial view, "
... "the boats vary in size and color, some moving and some stationary. Fishing boats in the water suggest that this "
... "location might be a popular spot for docking fishing boats."
... )
>>> video = pipe(prompt, guidance_scale=7.5, max_sequence_length=512).frames[0]
>>> export_to_video(video, "output.mp4", fps=15)encode_prompt
< source >( prompt: str | list[str]do_classifier_free_guidance: bool = Truenegative_prompt: str = ''num_videos_per_prompt: int = 1device: typing.Optional[torch.device] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneclean_caption: bool = Falsemax_sequence_length: int = 512**kwargs )
Parametreler
- prompt (
strveyalist[str], isteğe bağlı) — kodlanacak prompt - negative_prompt (
strveyalist[str], isteğe bağlı) — Görsel üretimini yönlendirmemek için kullanılan istem. Tanımlanmazsa, bunun yerinenegative_prompt_embedsdeğeri geçirilmelidir. Yönlendirme kullanılmadığında yok sayılır (yaniguidance_scale,1'den küçükse yok sayılır). PixArt-Alpha 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_videos_per_prompt (
int, isteğe bağlı, varsayılan 1) — her istem için oluşturulacak görüntü 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.Tensor, 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.Tensor, isteğe bağlı) — Önceden oluşturulmuş negatif metin gömümleri. PixArt-Alpha için, "" dizgisinin gömümleri olmalıdır. - clean_caption (
bool, varsayılanFalse) —Trueise, fonksiyon kodlamadan önce sağlanan başlığı ön işler ve temizler. - max_sequence_length (
int, varsayılan 512) — İstem için kullanılacak maksimum dizi uzunluğu.
İsteği metin kodlayıcı gizli durumlarına kodlar.
AllegroPipelineOutput
sınıf diffusers.pipelines.allegro.pipeline_output.AllegroPipelineOutput
< source >( frames: typing.Union[torch.Tensor, numpy.ndarray, list[list[PIL.Image.Image]]] )
Parametreler
- frames (
torch.Tensor,np.ndarrayveya list[list[PIL.Image.Image]]) — video çıktıları listesi -batch_size,uzunluğunda iç içe geçmiş bir liste olabilir; her alt liste,num_frames.uzunluğunda gürültüsü azaltılmış PIL görüntü dizileri içerir. Ayrıca(batch_size, num_frames, channels, height, width)biçiminde bir NumPy dizisi veya Torch tensörü de olabilir.
Allegro hatları için çıktı sınıfı.