はじめに
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秒