IP-Adapter の基本形(General Tasks)を SD1.5 版でやってみる
前回、チャレンジして Text-to-Image , Image-to-Image , Inpaint 全てにおいてメモリ不足によるクラッシュが発生しました。
原因としては、サンプルコードが SDXL 系の IP-Adapter となっており、パイプラインを実行する以前に IP-Adapter のロードを突破することができませんでした。
そこで、SDXL 系ではなく SD1.5 系に置き換えて実行してみようと思います。
Text-to-Image
stabilityai/stable-diffusion-xl-base-1.0 と ip-adapter_sdxl.bin の2つをロードすることが叶いませんでした。
runwayml/stable-diffusion-v1-5 と ip-adapter_sd15.bin に置き換えます。
モデル等をロード (SD1.5, IP-Adapter)
import torch
from diffusers import AutoPipelineForText2Image
# SD1.5系のモデルをロードする
pipe = AutoPipelineForText2Image.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
).to("cuda")
# IP-Adapter をロードする
pipe.load_ip_adapter(
"h94/IP-Adapter",
subfolder="models",
weight_name="ip-adapter_sd15.bin"
)
pipe.set_ip_adapter_scale(0.6)
IP-Adapter に使用する画像をロード
from diffusers.utils import load_image # IP-Adapter に使用する画像をロードする ip_adapter_image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ip_adapter_diner.png" ip_adapter_image = load_image(ip_adapter_image_url)
パイプラインを実行
import torch
# シードの設定
generator = torch.Generator(device="cpu").manual_seed(0)
# プロンプト実行
prompt="a polar bear sitting in a chair drinking a milkshake"
negative_prompt="deformed, ugly, wrong proportion, low res, bad anatomy, worst quality, low quality"
image = pipe(
prompt,
negative_prompt=negative_prompt,
ip_adapter_image=ip_adapter_image,
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")


うーん。。。しろくま居ませんね。
期待値(SDXL版)

こういう感じの出力結果を期待していたんですけどね。
シードガチャをやってみる
10枚ほどやってみましたがしろくま現れずでした
Image-to-Image
モデル等をロード (SD1.5, IP-Adapter)
ここは Text-to-Image と変わらず
import torch
from diffusers import AutoPipelineForText2Image
# SD1.5系のモデルをロードする
pipe = AutoPipelineForText2Image.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
).to("cuda")
# IP-Adapter をロードする
pipe.load_ip_adapter(
"h94/IP-Adapter",
subfolder="models",
weight_name="ip-adapter_sd15.bin"
)
pipe.set_ip_adapter_scale(0.6)
IP-Adapter に使用する画像をロード
from diffusers.utils import load_image # インプット画像のロード input_image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ip_adapter_bear_1.png" input_image = load_image(input_image_url) # IP-Adapter に使用する画像をロードする ip_adapter_image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ip_adapter_bear_2.png" ip_adapter_image = load_image(ip_adapter_image_url)
パイプラインを実行
import torch
# シードの設定
generator = torch.Generator(device="cpu").manual_seed(4)
# パイプライン実行
prompt = "best quality, high quality"
image = pipe(
prompt,
image=input_image,
ip_adapter_image=ip_adapter_image,
generator=generator,
strength=0.6,
).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")



しろくまの面影無し!
期待値(SDXL版)

しろくまの輪郭がある...
一応シードガチャ
Text-to-Image に同じくしろくま現れず
Inpainting
もう期待値が低い...
モデル等をロード (SD1.5, IP-Adapter)
from diffusers import AutoPipelineForInpainting
import torch
# SD1.5系のモデルをロードする
pipe = AutoPipelineForInpainting.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16
).to("cuda")
# IP-Adapter をロードする
pipe.load_ip_adapter(
"h94/IP-Adapter",
subfolder="models",
weight_name="ip-adapter_sd15.bin"
)
pipe.set_ip_adapter_scale(0.6)
IP-Adapter に使用する画像をロード
from diffusers.utils import load_image
# インプット画像をロードする
input_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ip_adapter_bear_1.png")
# マスク画像をロードする
mask_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ip_adapter_mask.png")
# IP-Adapter に使用する画像をロードする
ip_adapter_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/ip_adapter_gummy.png")
Inpaint は数が多いなぁ
パイプラインを実行
import torch
# シードの設定
generator = torch.Generator(device="cpu").manual_seed(4)
# パイプラインの実行
prompt = "a cute gummy bear waving"
image = pipe(
prompt,
image=input_image,
mask_image=mask_image,
ip_adapter_image=ip_adapter_image,
generator=generator,
num_inference_steps=100,
).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")




居たーーー!!品質悪いけどいたーーー!!
期待値(SDXL版)

流石、SDXL。。。綺麗すぎる
まとめ
IP-Adapter は SD1.5系でも十分な品質を期待できるのか不安になった
IP-Adapter では SDXL 系はロードでクラッシュしてしまうので、自分では使えることはないのではないか?と不安になった