ジャコ Lab

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

IP-Adapter の InstantStyle を試してみる (4) - IP-Adapter のスケール未設定の場合

前回の記事

今回は、IP-Adapter のスケールは未設定で行きます。つまり InstantStyle ではなく、通常の IP-Adapter ということになります。

まずは結果から

スクリプトは前回とほぼ一緒なので、後述に省略します。

スケール未設定の IP-Adapter で出力した様子
スケール未設定の IP-Adapter で出力した様子

ウサギが若干ネコに寄った感じがしますね

スクリプト全体

(折りたたみ)

各種インストール

!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 のスケールを設定する
# pipe.set_ip_adapter_scale(scale)
今回は未設定です。つまりデフォルト値が適用されると思います!

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

まとめ

スタイルレイヤー(up)レイアウトレイヤー(down) も指定しない場合を試してみました。

ほぼ画像プロンプトの見た目で、ネコが適用された感じがします。

スタイルレイヤー(up) では、完全にネコになり、
レイアウトレイヤー(down) では、服装も残りました。