ジャコ Lab

プログラミング関連のメモ帳的ブログです

IP-Adapter を使ってみる - LCM LoRA を併用

github.com

ゴールデンウィークはほとんどPCを触らず、デジタルデトックス状態でした。
そんな中、ようやく到着しました。IP-Adapter !!

どうやら IP-Adapter と一口に言ってもなんか色々な種類がありそうな予感。

何にせよ、触っていかないと進まないですからね。
色々調べるのは後にして、とりあえず触ってみます。

IP-Adapter とは?

IP-Adapter とは Image Prompt Adapter の略のようです。

アダプターとしては、 T2I-Adapter の画像版みたいな感じだと思います!
そして Image-to-Image の強い版みたいな感じという認識です。

凄く適当な説明!

何が強いかと言うと、既存の SD系モデルを使用でき、 LCM LoRAControlNet の組み合わせなどに強いところ、って感じでしょうか?

たぶん!きっと!恐らく!

この記事時点では、まだ IP-Adapter の旨味はわかっておらず、
今までのImage-to-ImageControlNetと同じ雰囲気に見えている状態

使ってみる

モデルのロード等 (SD系モデル, IP-Adapter, LCM LoRA, LCMScheduler)

import torch
from diffusers import DiffusionPipeline, LCMScheduler

# SDモデルのロード
pipe = DiffusionPipeline.from_pretrained(
    "sd-dreambooth-library/herge-style",
    torch_dtype=torch.float16
)

# IP-Adapter のロード
pipe.load_ip_adapter(
    "h94/IP-Adapter",
    subfolder="models",
    weight_name="ip-adapter_sd15.bin"
)

# LoRA のロード (LCM LoRA)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

# スケジューラの設定 (LCMScheduler)
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

# enable memory savings
pipe.enable_vae_slicing()
pipe.enable_model_cpu_offload()

入力画像のロード

from diffusers.utils import load_image

input_image_url = "https://user-images.githubusercontent.com/24734142/266492875-2d50d223-8475-44f0-a7c6-08b51cb53572.png"
input_image = load_image(input_image_url)

プロンプト実行

import torch

# シードの設定
generator = torch.Generator()
generator.seed()

# パイプライン実行
prompt = "best quality, high quality"
image = pipe(
    prompt=prompt,
    ip_adapter_image=input_image,
    num_inference_steps=4,
    guidance_scale=1,
    generator=generator
).images[0]

実行結果

from datetime import datetime
from zoneinfo import ZoneInfo

# Asia/Tokyo タイムゾーンの現在時刻を YYYYMMDDhhmmss 形式で得る
formattedNow = datetime.now(tz=ZoneInfo("Asia/Tokyo")).strftime("%Y%m%d%H%M%S")

# 実行結果
image.save(f"image_{formattedNow}_{generator.initial_seed()}.png")

生成に使用した入力画像生成された画像
(左) 入力画像 | (右) 生成画像

まとめ

今日のところはこれくらいにしてやるか...
(全然わからなかった...)

でも、IP-Adapter は公式サンプルも多そうなので、これからたくさん触っていこうと思います。