diffusers で IP-Adapter を試す
「diffusers」で「IP-Adapter」を試したので、まとめました。
前回
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
この記事が気に入ったらサポートをしてみませんか?