ジャコ Lab

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

IP-Adapter の InstantStyle を試してみる (2) - スタイルレイヤーだけ IP-Adapter を適用してみる

前回の記事

さて、前回は、レイアウトレイヤーとスタイルレイヤーがあり、 以下の理解に至りました。

つまり?

down-part の block_2 がレイアウト情報の層
up-part の block_0 がスタイル情報の層

ということでしょうか?

今回はそのうち up-part だけ残して スタイルの層 だけに IP-Adapter を適用してみます。

そもそも

スタイルレイアウト の違いはなんなのか。。。

スタイル
1. 姿。かっこう。
2. 様式。型。文体。
レイアウト
割付け(をすること)。また洋裁で、型紙の配列。また一般に、物の配置・配列をすること。
姿・格好 or 配置・配列

ということで、やってみます

各種インストール

!pip install pip install git+https://github.com/huggingface/diffusers
!pip install -U transformers accelerate peft
diffusers v0.27.2 には実装されていない機能を使うので main branch をインストールします!間違えないように!

各種モデルをロードする

import torch
from diffusers import AutoPipelineForText2Image

# ベースモデルをロードする
pipe = AutoPipelineForText2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    torch_dtype=torch.float16
).to("cuda")

# IP-Adapter をロードする
pipe.load_ip_adapter(
    "h94/IP-Adapter", 
    subfolder="sdxl_models", 
    weight_name="ip-adapter_sdxl.bin"
)

IP-Adapter のスケールを設定する

# IP-Adapter のスケールを設定する
scale = {
    "up": {
        "block_0": [0.0, 1.0, 0.0]
    },
}
pipe.set_ip_adapter_scale(scale)
ここがポイントです。upのみを定義します。
他は、全部前回の記事と一緒です!

IP-Adapter に使用する画像をロードする

from diffusers.utils import load_image

# IP-Adapter に使用する画像をロードする
ip_adapter_image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/0052a70beed5bf71b92610a43a52df6d286cd5f3/diffusers/rabbit.jpg"
ip_adapter_image = load_image(ip_adapter_image_url)

パイプラインを実行する

import torch

# シードを設定する
generator = torch.Generator(device="cpu").manual_seed(26)

# パイプラインを実行する
# 猫、傑作、最高品質、高品質
prompt = "a cat, masterpiece, best quality, high quality"
negative_prompt = "text, watermark, lowres, low quality, worst quality, deformed, glitch, low contrast, noisy, saturation, blurry"
images = pipe(
    prompt,
    negative_prompt=negative_prompt,
    ip_adapter_image=ip_adapter_image,
    guidance_scale=5,
    num_inference_steps=30,
    num_images_per_prompt=1,
    generator=generator,
).images
画像プロンプト
IP-Adapter 用のウサギの画像
IP-Adapter 用のウサギの画像
テキストプロンプト
a cat, masterpiece, best quality, high quality

実行結果を保存する

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

for idx, image in enumerate(images):
    # 実行結果
    image.save(f"image_{formattedNow}_{idx}_{generator.initial_seed()}.png")

にゃーん
にゃーん

まとめ

画像プロンプトのウサギの格好は丸っきり無視され、背景の雰囲気が維持されたように思います。

果たして、スタイルだけ IP-Adapter が適用される。。。とは?

いまいち、スッと理解できない状態です。

次回は、レイアウトレイヤーだけ IP-Adapter を適用してみましょう。