前回の記事
さて、前回は、レイアウトレイヤーとスタイルレイヤーがあり、 以下の理解に至りました。
つまり?
down-part の block_2 がレイアウト情報の層
up-part の block_0 がスタイル情報の層ということでしょうか?
今回はそのうち up-part だけ残して スタイルの層 だけに IP-Adapter を適用してみます。
そもそも
スタイル と レイアウト の違いはなんなのか。。。
スタイル
1. 姿。かっこう。
2. 様式。型。文体。
2. 様式。型。文体。
レイアウト
割付け(をすること)。また洋裁で、型紙の配列。また一般に、物の配置・配列をすること。
姿・格好 or 配置・配列
ということで、やってみます
各種インストール
!pip install 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 のスケールを設定する scale = { "up": { "block_0": [0.0, 1.0, 0.0] }, } pipe.set_ip_adapter_scale(scale)
ここがポイントです。upのみを定義します。
他は、全部前回の記事と一緒です!
他は、全部前回の記事と一緒です!
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 用のウサギの画像](https://cdn-ak.f.st-hatena.com/images/fotolife/z/zako_lab929/20240523/20240523205350.jpg)
テキストプロンプト
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")
まとめ
画像プロンプトのウサギの格好は丸っきり無視され、背景の雰囲気が維持されたように思います。
果たして、スタイルだけ IP-Adapter が適用される。。。とは?
いまいち、スッと理解できない状態です。
次回は、レイアウトレイヤーだけ IP-Adapter を適用してみましょう。