【Diffusers】AnimateDiff で Latent Consistency Model (LCM) が使えます

はじめに

Latent Consistency Model (LCM) は画像生成の高速化を可能にします。

基本的な使い方は以前記事を書いたのでそちらを参照して下さい。
touch-sp.hatenablog.com
AnimateDiff でも Latent Consistency Model (LCM) が使えるようなので動画生成の高速化が期待できます。

AnimateDiff に関しても以前に記事を書いているので良かったら見て下さい。
touch-sp.hatenablog.com

Pythonスクリプト

import torch
from diffusers import MotionAdapter, AnimateDiffPipeline, LCMScheduler, AutoencoderKL
from diffusers.utils import export_to_gif
import time

def text2video() -> None:
    adapter = MotionAdapter.from_pretrained("animatediff-motion-adapter-v1-5-2")
    model_id = "model/yabalMixTrue25D_v4_ema"
    pipe = AnimateDiffPipeline.from_pretrained(
        model_id, 
        motion_adapter=adapter,
        vae=AutoencoderKL.from_single_file("vae/vae-ft-mse-840000-ema-pruned.safetensors")
    )
    pipe.scheduler = LCMScheduler.from_config(
        pipe.scheduler.config,
        beta_schedule="linear"
    )

    pipe.load_lora_weights("lora/lcm-lora-sdv1-5", adapter_name="lcm")
    pipe.load_lora_weights("lora/more_details.safetensors", adapter_name="details")

    pipe.set_adapters(["lcm", "details"], adapter_weights=[0.65, 1.0])

    pipe.to("cuda")

    output = pipe(
        prompt="a girl, dancing, blue denim, white plain t-shirt, best quality, extremely detailed",
        negative_prompt="longbody, lowres, bad anatomy, bad hands, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality",
        num_frames=12,
        guidance_scale=1.2,
        num_inference_steps=5,
        generator=torch.manual_seed(2000000000),
    )
    frames = output.frames[0]
    export_to_gif(frames, "animation.gif")

if __name__ == "__main__":
    start = time.time()

    text2video()
    
    end = time.time()
    print(f"処理時間: {end - start:.5f}秒")

結果

処理時間: 48.95444秒

12フレームと少なめにしていますが1分以内で動画が作成できました。
step数5まで下げていますがLCMを使わない時と質はそれほど変わりません。

ちなみにLCMを使わず、通常通りstep数40で動画を作成した結果がこちらです。

処理時間: 236.34991秒





このエントリーをはてなブックマークに追加