Diffusers 文件
Latte
並獲得增強的文件體驗
開始使用
Latte
Latte: 影片生成潛在擴散Transformer 來自蒙納士大學、上海人工智慧實驗室、南京大學和南洋理工大學。
論文摘要如下:
我們提出了一種新穎的潛在擴散 Transformer,即 Latte,用於影片生成。Latte 首先從輸入影片中提取時空 token,然後採用一系列 Transformer 塊來建模潛在空間中的影片分佈。為了建模從影片中提取的大量 token,從分解輸入影片的時空維度角度引入了四種高效的變體。為了提高生成影片的質量,我們透過嚴格的實驗分析確定了 Latte 的最佳實踐,包括影片剪輯補丁嵌入、模型變體、時間步長-類別資訊注入、時間位置嵌入和學習策略。我們的綜合評估表明,Latte 在 FaceForensics、SkyTimelapse、UCF101 和 Taichi-HD 四個標準影片生成資料集上取得了最先進的效能。此外,我們將 Latte 擴充套件到文字到影片生成 (T2V) 任務,在此任務中,Latte 與最近的 T2V 模型相比取得了可媲美的結果。我們堅信 Latte 為未來將 Transformer 整合到擴散模型中用於影片生成的研究提供了寶貴的見解。
亮點:Latte 是一種潛在擴散 Transformer,被提議作為建模不同模態的骨幹(此處用於文字到影片生成)。它在四個標準影片基準資料集上取得了最先進的效能——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", torch_dtype=torch.float16
).to("cuda")
然後將管道 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]
在 80GB A100 機器上的基準測試結果如下:
Without torch.compile(): Average inference time: 16.246 seconds.
With torch.compile(): Average inference time: 14.573 seconds.
量化
量化有助於透過以較低精度資料型別儲存模型權重來減少大型模型的記憶體需求。但是,量化對影片質量的影響可能因影片模型而異。
請參閱量化概述,瞭解更多關於支援的量化後端以及如何選擇支援您用例的量化後端的資訊。下面的示例演示如何載入量化後的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,
torch_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,
torch_dtype=torch.float16,
)
pipeline = LattePipeline.from_pretrained(
"maxin-cn/Latte-1",
text_encoder=text_encoder_8bit,
transformer=transformer_8bit,
torch_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
class diffusers.LattePipeline
< 來源 >( tokenizer: T5Tokenizer text_encoder: T5EncoderModel vae: AutoencoderKL transformer: LatteTransformer3DModel scheduler: 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: typing.Union[str, typing.List[str]] = None negative_prompt: str = '' num_inference_steps: int = 50 timesteps: typing.Optional[typing.List[int]] = 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._C.Generator, typing.List[torch._C.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, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'] clean_caption: bool = True mask_feature: bool = True enable_temporal_attentions: bool = True decode_chunk_size: int = 14 ) → LattePipelineOutput
或 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
定義為 Imagen Paper 中公式 2 的w
。透過設定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) — 對應於 DDIM 論文中的引數 eta (η): https://huggingface.co/papers/2010.02502。僅適用於 schedulers.DDIMScheduler,對其他排程器將被忽略。 - generator (
torch.Generator
或List[torch.Generator]
, 可選) — 一個或多個 torch 生成器,用於使生成確定。 - latents (
torch.FloatTensor
, 可選) — 預生成的帶噪潛在表示,從高斯分佈中取樣,用作影片生成的輸入。可用於使用不同的提示詞調整相同的生成。如果未提供,將使用提供的隨機generator
取樣生成一個潛在張量。 - prompt_embeds (
torch.FloatTensor
, 可選) — 預生成的文字嵌入。可用於輕鬆調整文字輸入,例如提示詞加權。如果未提供,文字嵌入將從prompt
輸入引數生成。 - negative_prompt_embeds (
torch.FloatTensor
, 可選) — 預生成的負向文字嵌入。對於 Latte,此負向提示詞應為 ""。如果未提供,負向提示詞嵌入將從negative_prompt
輸入引數生成。 - output_type (
str
, 可選, 預設為"pil"
) — 生成影片的輸出格式。選擇 PIL:PIL.Image.Image
或np.array
。 - return_dict (
bool
, 可選, 預設為True
) — 是否返回~pipelines.stable_diffusion.IFPipelineOutput
而不是普通元組。 - callback_on_step_end (
Callable[[int, int, Dict], 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: typing.Union[str, typing.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 )
引數
- prompt (
str
或List[str]
, 可選) — 待編碼的提示。 - negative_prompt (
str
或List[str]
, 可選) — 不用於引導影片生成的提示。如果未定義,則必須傳遞negative_prompt_embeds
。當不使用引導時(即,如果guidance_scale
小於1
時),將被忽略。對於 Latte,這應該為空字串 “”。 - do_classifier_free_guidance (
bool
, 可選, 預設為True
) — 是否使用分類器自由引導。 - 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
,函式將遮罩文字嵌入。
將提示編碼為文字編碼器隱藏狀態。