はじめに
DiffusersからPIA(Personalized Image Animator)とFreeInitを使ってImage2Videoを行いました。一枚の画像から動画を作成しています。用意した画像
結果
Pythonスクリプト
さまざまな組み合わせで実行しました。このスクリプトで一気に18通りの動画が作成されます。組み合わせによってはほとんど動きのない動画になってしまいます。上に載せた動画は「num_iters=5」「strength=0.7」「gaussian」の組み合わせです。import torch from diffusers import DDIMScheduler, MotionAdapter, PIAPipeline, AutoencoderKL from diffusers.utils import export_to_gif, load_image import itertools adapter = MotionAdapter.from_pretrained( # from https://huggingface.co/openmmlab/PIA-condition-adapter "PIA-condition-adapter", torch_dtype=torch.float16, variant="fp16" ) pipe = PIAPipeline.from_pretrained( # from https://huggingface.co/SG161222/Realistic_Vision_V6.0_B1_noVAE "model/Realistic_Vision_V6.0_B1_noVAE", motion_adapter=adapter, torch_dtype=torch.float16 ) pipe.scheduler = DDIMScheduler.from_config( pipe.scheduler.config, clip_sample=False, beta_schedule="linear" ) pipe.to("cuda") image = load_image("0.png") image = image.resize((512, 512)) prompt = "raccoon on a boat on the sea, playing the guitar" negative_prompt = "sketches, worst quality, low quality, bad_pictures" strength_list = [0.7, 1.0] num_iters_list = [1, 3, 5] method_list = ["butterworth", "ideal", "gaussian"] for (strength, num_iters, method) in itertools.product(strength_list, num_iters_list, method_list): generator = torch.manual_seed(2024) pipe.enable_free_init( method=method, num_iters=num_iters, use_fast_sampling=False ) output = pipe( image=image, prompt=prompt, generator=generator, strength=strength ) frames = output.frames[0] export_to_gif(frames, f"{method}_numiters{num_iters}_strength{strength}result.gif") pipe.disable_free_init()