前回、チャレンジして 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 系はロードでクラッシュしてしまうので、自分では使えることはないのではないか?と不安になった