【Diffusers】multiple IP-Adapters で遊んでみた

はじめに

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")





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