さて、この前 TripoSR で Image-to-3dModel をやりましたが、また過去のキャッチアップに戻ってきました。
ControlNet も色々使い Inpaint も含め色々触ってきたので、
コントロール画像やマスク画像がどういったものかわかりました。
この記事では diffusers v0.10.0 でリリースされた Pipeline の Paint-by-Example を使ってみます。
Paint-by-Example は、 ソース画像 , マスク画像 , リファレンス画像 の3つを使って画像を生成するようです。
Paint-by-Example とは
Inpaint に似ていて、Prompt の変わりにリファレンス画像を使う感じですかね?
やってみる
画像の準備
from diffusers.utils import load_image init_image_url = "https://raw.githubusercontent.com/Fantasy-Studio/Paint-by-Example/main/examples/image/example_1.png" mask_image_url = "https://raw.githubusercontent.com/Fantasy-Studio/Paint-by-Example/main/examples/mask/example_1.png" example_image_url = "https://raw.githubusercontent.com/Fantasy-Studio/Paint-by-Example/main/examples/reference/example_1.jpg" init_image = load_image(init_image_url).resize((512, 512)) mask_image = load_image(mask_image_url).resize((512, 512)) example_image = load_image(example_image_url).resize((512, 512))
Pipeline の準備
import torch from diffusers import DiffusionPipeline pipe = DiffusionPipeline.from_pretrained( "Fantasy-Studio/Paint-by-Example", torch_dtype=torch.float16 ).to("cuda") pipe.enable_model_cpu_offload()
モデルは Fantasy-Studio/Paint-by-Example を使用します。
最近ずっと ControlNet 使ってましたが、今回は不要です!
パイプライン実行
image = pipe( image=init_image, mask_image=mask_image, example_image=example_image ).images[0] image
あとは実行するだけです。
Prompt 不要でimage, mask_image, example_imageの3つのみ必要です
パンダがバケツに入りましたね。
おまけ
出来上がったもの
バニラソフトを持たせてやりました!
まとめ
モデルの得意不得意に影響するのか、マスク画像はソフトクリームの形にしないと良いものが出来ませんでした。