はじめに
「PhotoMaker」をつかえば色々人物写真をカスタマイズできるようですが、今回は1枚の写真から同一人物の写真を作成してみます。以前「IP-Adapter」を使って同様のことをしています。touch-sp.hatenablog.com
touch-sp.hatenablog.com
用意した画像
用意した画像は1枚だけです。「fudukiMix_v2.0」を使って作成したものです。
結果
ベストと思われるのがこちらです。prompt: A photo of a woman img, frontal face, purple sunset, best quality
似ているでしょうか?
似ていると言えば似ていますし、微妙といえば微妙です。
方法
以下のPythonスクリプトを実行すれば画像が作成されます。import torch import os from diffusers.utils import load_image from diffusers import DPMSolverMultistepScheduler from photomaker.pipeline import PhotoMakerStableDiffusionXLPipeline pipe = PhotoMakerStableDiffusionXLPipeline.from_pretrained( "model/fudukiMix_v20", torch_dtype=torch.bfloat16, use_safetensors=True, variant="fp16" ).to("cuda") pipe.load_photomaker_adapter( "weights", subfolder="", weight_name="photomaker-v1.bin", trigger_word="img" ) pipe.scheduler = DPMSolverMultistepScheduler.from_config( pipe.scheduler.config, algorithm_type="sde-dpmsolver++", use_karras_sigmas=True ) ''' pipe.load_lora_weights("lora/xl_more_art-full_v1.safetensors", adapter_name="xl_more_art-full") pipe.set_adapters(["photomaker", "xl_more_art-full"], adapter_weights=[1.0, 0.5]) pipe.fuse_lora() ''' input_folder_name = "./examples/girl_image" image_basename_list = os.listdir(input_folder_name) image_path_list = sorted([os.path.join(input_folder_name, basename) for basename in image_basename_list]) input_id_images = [] for image_path in image_path_list: input_id_images.append(load_image(image_path)) prompt = "A photo of a woman img, frontal face, purple sunset, best quality" negative_prompt = "worst quality, low quality, illustration, 3d, 2d, painting, cartoons, sketch, grayscale" generator = torch.manual_seed(2024) gen_image = pipe( prompt=prompt, input_id_images=input_id_images, negative_prompt=negative_prompt, num_images_per_prompt=1, num_inference_steps=35, start_merge_step=10, generator=generator, ).images[0] gen_image.save('out_photomaker.png')
画像の指定はフォルダで行います。
複数の画像を入力できるということです。
まずは普通に実行
用意した1枚の画像のみを使って実行した時の結果がこちらです。まずまず?
StyleGAN3を使って画像を拡張
複数の画像を入力に使えるので、StyleGAN3を使って画像を拡張してみました。拡張の時点で元画像から遠ざかっているかもしれません。
結果はこちらです。
完全に失敗です。
StyleGAN3の使い方はこちら。
SadTalkerを使って画像を拡張
SadTalkerでも画像を拡張してみました。結果はこちらです。
いちばん良いような気がします。
SadTalkerの使い方はこちら。
SadTalkerでの画像拡張を使って「start_merge_step」というパラメーターを変化させてみました。
左から 5→10→15→20 です。
「start_merge_step=5」をベストとして冒頭に載せています。
Python環境構築
pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --index-url https://download.pytorch.org/whl/cu118 pip install git+https://github.com/huggingface/diffusers pip install transformers spaces numpy accelerate omegaconf peft pip install git+https://github.com/TencentARC/PhotoMaker