見出し画像

diffusers で IP-Adapter を試す

「diffusers」で「IP-Adapter」を試したので、まとめました。

【注意】Google Colab Pro/Pro+ の A100で動作確認しています。


前回

1. IP-Adapter

IP-Adapter」は、指定した画像をプロンプトのように扱える機能です。詳かいプロンプトを記述しなくても、画像を指定するだけで類似画像を生成することができます。「Img2Img2」「ControlNet」「LCM-LoRA」など、diffusersの重要なパイプラインで利用できるようになりました。

2. Colabでの実行

Colabでの実行手順は、次のとおりです。

(1) パッケージのインストール。

# パッケージのインストール
!pip install diffusers accelerate controlnet_aux omegaconf

(2) 左端のフォルダアイコンでファイル一覧を表示し、初期画像とIP-Adapter画像をアップロード。

・init_image.png (512x512)

・ip_adapter_image.png (512x512)

(3) 初期画像とIP-Adapter画像の読み込み。

from diffusers.utils import load_image

# 初期画像の準備
init_image = load_image("init_image.png")
init_image = init_image.resize((512, 512))

# 確認
init_image
from diffusers.utils import load_image

# 初期画像の準備
ip_adapter_image = load_image("ip_adapter_image.png")
ip_adapter_image = ip_adapter_image.resize((512, 512))

# 確認
ip_adapter_image

(4) コントロール画像の準備。
今回は、OpenPoseのコントロール画像を準備します。
controlnet_aux」で初期画像をコントロール画像に変換します。

from controlnet_aux import OpenposeDetector

# コントロール画像の準備
openpose_detector = OpenposeDetector.from_pretrained("lllyasviel/ControlNet")
openpose_image = openpose_detector(init_image)

# 確認
openpose_image

(5) ControlNetモデルの準備。
今回は、OpenPoseのControlNetモデルを準備します

import torch
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, DDIMScheduler

# ControlNetモデルの準備
controlnet_pose = ControlNetModel.from_pretrained(
    "lllyasviel/control_v11p_sd15_openpose",
    torch_dtype=torch.float16
).to("cuda")

(6) モデルのダウンロード。
今回は、「Counterfeit-V3.0」を使います。

# モデルのダウンロード
!wget https://huggingface.co/gsdf/Counterfeit-V3.0/resolve/main/Counterfeit-V3.0_fix_fp16.safetensors

(7) パイプラインの準備。
ControlNet用に「StableDiffusionControlNetPipeline」を使用して、controlnetにControlNetモデルを指定します。

# パイプラインの準備
pipe = StableDiffusionControlNetPipeline.from_single_file(
    "Counterfeit-V3.0_fix_fp16.safetensors",
    controlnet=[controlnet_pose],
    torch_dtype=torch.float16
).to("cuda")
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)

(8) IP-Adapterの準備。

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

(9) 画像生成。
imageにコントロール画像、ip_adapter_imageにIP-Adapter画像を指定します。

# 画像生成
image = pipe(
    "cute 1girl dancing, best quality, high quality",
    negative_prompt="worst quality, low quality, monochrome",
    num_inference_steps=100,
    generator=torch.Generator(device="cpu").manual_seed(223),
    eta=1.0,
    image=[openpose_image],
    ip_adapter_image=ip_adapter_image,
).images[0]

# 確認
image

3. 他のIP-Adapter画像での確認

他のIP-Adapter画像でも試してみます。

(1) 画像の変更。

・ip_adapter_image.png (512x512)

(2) プロンプトの 1girl を cat character に変更。

# 画像生成
image = pipe(
    "cute cat character dancing, best quality, high quality",
    negative_prompt="worst quality, low quality, monochrome",
    num_inference_steps=50,
    generator=torch.Generator(device="cpu").manual_seed(223),
    eta=1.0,
    image=[openpose_image],
    ip_adapter_image=ip_adapter_image,
).images[0]

# 確認
image



この記事が気に入ったらサポートをしてみませんか?