Diffusers documentation
Latte
Latte

Monash University、Shanghai AI Lab、Nanjing University、Nanyang Technological University による Latte: Latent Diffusion Transformer for Video Generation。
論文の抄録は以下の通りです:
私たちは、動画生成のための新しい Latent Diffusion Transformer、すなわち Latte を提案します。Latte はまず入力動画から時空間トークンを抽出し、その後、一連の Transformer ブロックを用いて潜在空間における動画の分布をモデル化します。動画から抽出される大量のトークンをモデル化するために、入力動画の空間次元と時間次元を分解する観点から、4 つの効率的なバリアントを導入します。生成動画の品質を向上させるため、動画クリップのパッチ埋め込み、モデルのバリアント、タイムステップとクラス情報の注入、時間的位置埋め込み、学習戦略を含む厳密な実験分析を通じて、Latte のベストプラクティスを決定しました。包括的な評価により、Latte は FaceForensics、SkyTimelapse、UCF101、Taichi-HD という 4 つの標準的な動画生成データセットにおいて、最先端の性能を達成することが示されました。さらに、Latte をテキストから動画生成(T2V)タスクに拡張し、最近の T2V モデルと比較して同等の結果を達成しました。私たちは、Latte が動画生成のための拡散モデルへの Transformer の統合に関する今後の研究に貴重な洞察を提供すると強く信じています。
ハイライト: Latte は、異なるモダリティのモデリングのバックボーンとして提案された潜在拡散トランスフォーマーです(ここではテキストから動画への生成のために学習されています)。4 つの標準的な動画ベンチマーク、FaceForensics、SkyTimelapse、UCF101、Taichi-HD で、最先端の性能を達成しています。評価用のデータセットの準備とダウンロードについては、この https URL を参照してください。
このパイプラインは 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]80GB A100マシンでのベンチマーク結果は以下の通りです:
Without torch.compile(): Average inference time: 16.246 seconds.
With torch.compile(): Average inference time: 14.573 seconds.量子化
Quantizationは、モデルの重みを低精度のデータ型で保存することで、非常に大規模なモデルのメモリ要件を軽減するのに役立ちます。ただし、動画モデルによって、Quantizationが動画の品質に与える影響は異なります。
サポートされている量子化バックエンドと、ユースケースに対応する量子化バックエンドの選択について詳しくは、Quantizationの概要を参照してください。以下の例では、bitsandbytesを使用して量子化されたLattePipelineを読み込み、推論を実行する方法を示しています。
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
class diffusers.LattePipeline
< source >( tokenizer: T5Tokenizertext_encoder: T5EncoderModelvae: AutoencoderKLtransformer: LatteTransformer3DModelscheduler: KarrasDiffusionSchedulers )
パラメータ
- vae (AutoencoderKL) — 潜在表現へのエンコードとデコードを行う、Variational Auto-Encoder (VAE) モデル。
- text_encoder (
T5EncoderModel) — 凍結されたテキストエンコーダー。Latte は T5、具体的には t5-v1_1-xxl バリアントを使用しています。 - tokenizer (
T5Tokenizer) — クラス T5Tokenizer のトークナイザー。 - transformer (LatteTransformer3DModel) —
テキスト条件付きの
LatteTransformer3DModelで、エンコードされた動画の潜在変数(latents)のノイズ除去を行います。 - scheduler (SchedulerMixin) —
transformerと組み合わせて、エンコードされた動画の潜在変数(latents)のノイズ除去を行うために使用するスケジューラ。
Latte を使用したテキストから動画への生成を行う Pipeline。
このモデルは DiffusionPipeline を継承しています。すべてのパイプラインに対してライブラリが実装している汎用的なメソッド(ダウンロードや保存、特定のデバイスでの実行など)については、スーパークラスのドキュメントを参照してください。
__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
パラメータ
- 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 フレームで、これは 1 秒あたり 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 ジェネレーター1つまたはリスト。 - latents (
torch.FloatTensor, 任意) — ガウス分布からサンプリングされた、動画生成の入力として使用する事前生成されたノイズ付き潜在変数。異なるプロンプトで同じ生成を調整するために使用できます。指定されない場合、指定されたランダムgeneratorを使用してサンプリングを行い、潜在変数テンソルが生成されます。 - prompt_embeds (
torch.FloatTensor, 任意) — 事前に生成されたテキスト埋め込み。テキスト入力の調整、例えばプロンプトの重み付けなどを容易に行うために使用できます。指定されない場合、prompt入力引数からテキスト埋め込みが生成されます。 - negative_prompt_embeds (
torch.FloatTensor, 任意) — 事前に生成されたネガティブテキストの埋め込みです。Latte の場合、このネガティブプロンプトは "" である必要があります。指定されない場合、negative_prompt入力引数から negative_prompt_embeds が生成されます。 - output_type (
str、任意、デフォルトは"pil") — generate video の出力形式です。 PIL:PIL.Image.Imageまたはnp.arrayから選択します。 - return_dict (
bool、省略可能、デフォルトはTrue) —~pipelines.stable_diffusion.IFPipelineOutputを返すか、プレーンなタプルを返すかを指定します。 - 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
< 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 )
パラメータ
- 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)— 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の場合、この関数はテキスト埋め込みをマスクします。
プロンプトをテキストエンコーダーの隠れ状態にエンコードします。