前回の記事では StableDiffusionGLIGENPipeline を用いて diffusers で GLIGEN (Grounded Language-to-Image GENeration) を試しました。GLIGEN は、バウンディングボックスとキャプションを用いて、枠に意味を持たせて Text-to-Image をするものでした。
この記事では StableDiffusionGLIGENTextImagePipeline を用いて、文字列によるキャプションの代わりに画像によるキャプションを試してみます。
はじめに
前回利用したモデルは以下になります。
前回利用したモデル
・masterful/gligen-1-4-generation-text-box
・masterful/gligen-1-4-inpainting-text-box
・masterful/gligen-1-4-inpainting-text-box
今回利用するモデル
・anhnct/Gligen_Text_Image
・anhnct/Gligen_Inpainting_Text_Image
・anhnct/Gligen_Inpainting_Text_Image
Grounded Inpainting
モデルのロード等 (StableDiffusionGLIGENTextImagePipeline)
import torch from diffusers import StableDiffusionGLIGENTextImagePipeline # パイプラインの準備 pipe = StableDiffusionGLIGENTextImagePipeline.from_pretrained( "anhnct/Gligen_Inpainting_Text_Image", torch_dtype=torch.float16 ).to("cuda")
Inpainting 元の画像や枠の準備
from diffusers.utils import load_image # 元画像 init_image_url = "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/gligen/livingroom_modern.png" init_image = load_image(init_image_url) # 枠の準備と設定 boxes = [[0.2676, 0.4088, 0.4773, 0.7183]] phrases = None gligen_image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/gligen/backpack.jpeg" gligen_image = load_image(gligen_image_url)
phrases が見ての通り None になっています
パイプライン実行
from diffusers.utils import make_image_grid # パイプラインの実行 prompt = "a backpack" image = pipe( prompt=prompt, gligen_phrases=phrases, gligen_inpaint_image=init_image, gligen_boxes=boxes, gligen_images=[gligen_image], gligen_scheduled_sampling_beta=1, ).images[0] # 実行結果 make_image_grid([init_image, gligen_image, image], rows=1, cols=3)
gligen_phrases には None になっている phrases が入り、
gligen_images には「青いリュック」の画像が入りました。
gligen_images には「青いリュック」の画像が入りました。
実行結果
矩形の確認
Grounded Generation (1)
モデルのロード等
import torch from diffusers import StableDiffusionGLIGENTextImagePipeline # パイプラインの準備 pipe = StableDiffusionGLIGENTextImagePipeline.from_pretrained( "anhnct/Gligen_Text_Image", torch_dtype=torch.float16 ).to("cuda")
枠の準備と設定
from diffusers.utils import load_image # 枠の設定 boxes = [[0.0, 0.09, 0.53, 0.76]] phrases = ["flower"] gligen_image_url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/gligen/pexels-pixabay-60597.jpg" gligen_image = load_image(gligen_image_url)
phrases にキーワードが入ったので画像に更に補足できそうな感じ
パイプライン実行
from diffusers.utils import make_image_grid # パイプラインの実行 prompt = "a flower sitting on the beach" image = pipe( prompt=prompt, gligen_phrases=phrases, gligen_images=[gligen_image], gligen_boxes=boxes, gligen_scheduled_sampling_beta=1 ).images[0] # 実行結果 make_image_grid([gligen_image, image], rows=1, cols=2)
実行結果
矩形の確認
まとめ
キャプションは文字列だけでなく、画像も可能ということがわかりました。
もう1つ使用例があったのですが、やや理解が難しかったので次回の記事で再度まとめることにしました!