Buckets:

mishig's picture
|
download
raw
10 kB

Apache License, Version 2.0(「ライセンス」)の下でライセンスされています。

このファイルは、ライセンスに準拠した場合にのみ使用できます。

ライセンスのコピーは以下から入手できます

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

適用される法律で要求される場合、または書面による合意がある場合を除き、ソフトウェア

ライセンスに基づき配布される本ソフトウェアは、「現状のまま」

明示的または黙示的を問わず、いかなる種類の保証や条件も付随しません。

権限を管理する特定の言語については、ライセンスを参照してください。

ライセンスの下での制限。-->

エコー

Echoは、長尺動画生成モデルです。任意のクリーンな先頭フレーム、順序付けられた画像/音声メモリスロット、および確率的な少数ステップのDistribution Matching Distillation (DMD) サンプラーをサポートしています。このパイプラインは、同期された動画と音声を生成します。

Echo は ModularPipeline として実装されており、テキストエンコーディング、メモリ条件付け、確率的 DMD によるデノイジング、デコーディングの各ブロックを、完全なワークフローとして実行したり、独立して組み合わせたりできます。

推論

公式の jdopensource/JoyAI-Echo チェックポイントを直接読み込みます。テキストエンコーダーとトークナイザーには google/gemma-3-12b-it が使用されています。Gemma リポジトリはゲート付き(アクセス制限あり)のため、パイプラインを読み込む前に、ライセンスに同意し、Hugging Face で認証してください。

公開されているモデルは、長尺動画の例で241フレームを使用しています。動画のRoPE座標は、出力コンテナのレートに関係なく、トレーニング時のレートである24 fpsのまま維持されます。

import torch
import torchaudio
from PIL import Image

from diffusers import ComponentsManager, ModularPipeline
from diffusers.utils import encode_video

manager = ComponentsManager()
pipe = ModularPipeline.from_pretrained("jdopensource/JoyAI-Echo", components_manager=manager)
pipe.load_components(dtype={"default": torch.bfloat16, "audio_vae": torch.float32})
manager.enable_auto_cpu_offload(device="cuda")
pipe.vae.enable_tiling()

first_frame = Image.open("first_frame.png").convert("RGB")
memory_images = [Image.open(path).convert("RGB") for path in ["memory_0.png", "memory_1.png"]]
memory_audio_with_rates = [torchaudio.load(path) for path in ["memory_0.wav", "memory_1.wav"]]
memory_audio = [waveform for waveform, _ in memory_audio_with_rates]
memory_audio_rates = [sample_rate for _, sample_rate in memory_audio_with_rates]

output = pipe(
    prompt="A cinematic dialogue scene in a quiet cafe.",
    image=first_frame,
    memory_images=memory_images,
    memory_audio_waveforms=memory_audio,
    memory_audio_sample_rates=memory_audio_rates,
    width=1280,
    height=736,
    num_frames=241,
    frame_rate=25.0,
    model_frame_rate=24.0,
    generator=torch.Generator(device="cuda").manual_seed(42),
    output_type="np",
    output=["videos", "audio"],
)

encode_video(
    output["videos"][0],
    fps=25,
    audio=output["audio"][0].float().cpu(),
    audio_sample_rate=pipe.vocoder.config.output_sampling_rate,
    output_path="echo.mp4",
)

デフォルトの DMD シグマスケジュールは、リリースされた 8 ステップのスケジュールです。各ステップで x0 を予測し、次のシグマで新しいガウスノイズを用いて再ノイズ化するため、シード付きの torch.Generator が初期ノイズおよびすべての中間再ノイズ化を制御します。

生のオーディオメモリエンコーディングには torchaudio が必要です。参照実装との整合性を保つため、上記に示したように audio_vae は FP32 のままにしてください。モジュール化されたワークフローでは、VAE エンコーダーの正規化済み・アンパック済みテンソルをキャッシュできます。動画の潜在変数は (batch, channels, frames, height, width) の形状を持ち、オーディオの潜在変数は (batch, channels, time, mel_bins) の形状を持ちます。コアとなる denoise ブロックは、これらのテンソルをパックし、num_videos_per_prompt に対して条件を拡張し、ノイズ除去後の出力を元の VAE 形式にアンパックします。初期の latents と audio_latents も、このアンパック済み形式で渡してください。デコーダーは正規化済み VAE テンソルを受け取り、デコード直前にデノーマライズします。output=["latents", "audio_latents"] を指定すると、正規化済み VAE テンソルが返されます。output_type="latent" と output=["videos", "audio"] を指定すると、デコードせずにデノーマライズ済み VAE テンソルが得られます。

EchoModularPipeline[[diffusers.EchoModularPipeline]]

diffusers.EchoModularPipeline[[diffusers.EchoModularPipeline]]

diffusers.EchoModularPipeline(blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = None, pretrained_model_name_or_path: str | os.PathLike | None = None, components_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = None, collection: str | None = None, workflow: str | None = None, modular_config_dict: dict[str, typing.Any] | None = None, config_dict: dict[str, typing.Any] | None = None, **kwargs)

ソース

Echoの長時間動画DMDチェックポイント用のModularPipelineです。

EchoBlocks[[diffusers.EchoBlocks]]

diffusers.EchoBlocks[[diffusers.EchoBlocks]]

diffusers.EchoBlocks()

ソース

Echoは、クリーンな初フレーム条件付け、順序付けられた画像/音声メモリスロット、および確率的DMDデノイジングを備えた、参照から動画への生成を実現します。

コンポーネント: text_encoder (PreTrainedModel) tokenizer (PreTrainedTokenizerBase) connectors (LTX2TextConnectors) vae (AutoencoderKLLTX2Video) audio_vae (AutoencoderKLLTX2Audio) transformer (LTX2VideoTransformer3DModel) video_processor (VideoProcessor) vocoder (LTX2Vocoder)

Inputs: prompt (str): 画像生成をガイドするためのプロンプト、またはプロンプトのリスト。 max_sequence_length (int, 任意, デフォルト値 1024): プロンプトエンコードの最大シーケンス長。 image (Image | Tensor, 任意): クリーンな参照条件として使用される、任意の単一の最初のフレーム。 memory_images (list, 任意): Echo メモリスロットごとに1枚の、順序付けられた参照画像。 memory_audio_waveforms (list, 任意): (channels, samples) テンソルとしての、順序付けられたメモリ波形。9.62 秒を超える入力は、最も応答が高いウィンドウにクロップされます。無音のスロットには None を使用します。 memory_audio_sample_rates (int | list, 任意): すべてのメモリ波形で共有されるサンプリングレート、またはスロットごとのレート。 height (int, 任意, デフォルト値 512): 生成される画像のピクセル単位の縦幅。 width (int, 任意, デフォルト値 704): 生成される画像のピクセル単位の横幅。 model_frame_rate (float, 任意, デフォルト値 24.0): Echo ビデオ RoPE 座標に使用される、学習時のフレームレート。 memory_position_offset (float, 任意, デフォルト値 500.0): 最初のメモリスロットに割り当てられる時間的中心。 memory_position_slot_stride (float, 任意, デフォルト値 50.0): 連続するメモリスロットの中心間の時間的距離。 num_videos_per_prompt (int, 任意, デフォルト値 1): プロンプトごとのビデオ数。 num_frames (int, 任意, デフォルト値 241): 生成されるピクセルフレームの数。1 + k * vae_temporal_compression_ratio である必要があります。 frame_rate (float, 任意, デフォルト値 25.0): 生成されるビデオのフレームレート。 latents (Tensor, 任意): VAE 形式 (B, C, F, H, W) の、任意の初期ビデオノイズ。 audio_latents (Tensor, 任意): VAE 形式 (B, C, L, M) の、任意の初期オーディオノイズ。 generator (Generator, 任意): 決定論的な生成のための Torch ジェネレーター。 sigmas (list | tuple): 終端のゼロを含む、DMD シグマスケジュール。 attention_kwargs (dict, 任意): アテンションプロセッサー用の追加の kwargs。 output_type (str, 任意, デフォルト値 pil): 出力形式: 'pil', 'np', 'pt'。 decode_timestep (None, 任意, デフォルト値 0.0): 最終的な潜在変数をデコードするために使用されるタイムステップ。 decode_noise_scale (None, 任意): デコードタイムステップで適用されるノイズ補間係数。

出力: videos (list): 生成された動画。 audio (Tensor): 生成された音声波形。

Xet Storage Details

Size:
10 kB
·
Xet hash:
fea97369883a3f0db2aae1bc0f3d62b65b04fc8956d7fd9d5e2da83aeaab0e0d

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