はじめに
1枚の顔写真からアニメ風画像を作成することが目的です。前回PhotoMakerというものを使って同様のことをしました。touch-sp.hatenablog.com
今回はmultiple IP-Adaptersを使ってみました。
結果
左の画像から右の画像を作成しました。よーく見ると、なんとなく特徴を捉えているような気もします。どうでしょう?
Pythonスクリプト
こちらからスタイルイメージをダウンロードさせて頂きました。import torch from diffusers import AutoPipelineForText2Image, DDIMScheduler from transformers import CLIPVisionModelWithProjection from diffusers.utils import load_image from pathlib import Path import random import argparse parser = argparse.ArgumentParser() parser.add_argument( '--face', type=str, required=True, help="folder of face images", ) args = parser.parse_args() face_images_folder = args.face image_encoder = CLIPVisionModelWithProjection.from_pretrained( "IP-Adapter", subfolder="models/image_encoder", torch_dtype=torch.float16 ) pipeline = AutoPipelineForText2Image.from_pretrained( "model/modernDisneyXL_v3", torch_dtype=torch.float16, variant="fp16", image_encoder=image_encoder ) pipeline.scheduler = DDIMScheduler.from_config( pipeline.scheduler.config, clip_sample=False ) pipeline.load_ip_adapter( "IP-Adapter", subfolder="sdxl_models", weight_name=[ "ip-adapter-plus_sdxl_vit-h.safetensors", "ip-adapter-plus-face_sdxl_vit-h.safetensors" ] ) pipeline.set_ip_adapter_scale([0.7, 0.8]) pipeline.to("cuda") face_images_list = list(Path(face_images_folder).glob("*.png")) if len(face_images_list) > 5: face_images_list = random.sample(face_images_list, 5) face_images = [load_image(x.as_posix()) for x in face_images_list] style_images = [load_image(x.as_posix()) for x in Path("style_ziggy").glob("*.png")] generator = torch.Generator(device="cpu").manual_seed(20240130) image = pipeline( prompt="wonderwoman, disney style", ip_adapter_image=[style_images, face_images], negative_prompt="monochrome, lowres, bad anatomy, worst quality, low quality", num_inference_steps=50, num_images_per_prompt=1, generator=generator, ).images[0] image.save(f"{Path(face_images_folder).stem}_result.png")