ゴールデンウィークはほとんどPCを触らず、デジタルデトックス状態でした。
そんな中、ようやく到着しました。IP-Adapter !!
どうやら IP-Adapter と一口に言ってもなんか色々な種類がありそうな予感。
何にせよ、触っていかないと進まないですからね。
色々調べるのは後にして、とりあえず触ってみます。
IP-Adapter とは?
IP-Adapter とは Image Prompt Adapter の略のようです。
アダプターとしては、 T2I-Adapter の画像版みたいな感じだと思います!
そして Image-to-Image の強い版みたいな感じという認識です。
凄く適当な説明!
何が強いかと言うと、既存の SD系モデルを使用でき、 LCM LoRA や ControlNet の組み合わせなどに強いところ、って感じでしょうか?
たぶん!きっと!恐らく!
この記事時点では、まだ IP-Adapter の旨味はわかっておらず、
今までのImage-to-ImageやControlNetと同じ雰囲気に見えている状態
今までのImage-to-ImageやControlNetと同じ雰囲気に見えている状態
使ってみる
モデルのロード等 (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 は公式サンプルも多そうなので、これからたくさん触っていこうと思います。