インペインティングのモデルというものがあるんですね。
そもそも、インペインティング(inpainting)って何?状態でした。絵画の修復という意味があるんですね。これも、モデルを使ってみて腑に落ちました。
GPUクラスターを使います。
%pip install mlflow==2.17.2 diffusers==0.31.0
dbutils.library.restartPython()
import torch
print(torch.cuda.is_available())
True
from huggingface_hub import login
login(token="<Hugging Faceのアクセストークン>")
from diffusers import AutoPipelineForInpainting
from diffusers.utils import load_image
import torch
pipe = AutoPipelineForInpainting.from_pretrained("diffusers/stable-diffusion-xl-1.0-inpainting-0.1", torch_dtype=torch.float16, variant="fp16").to("cuda")
img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
image = load_image(img_url).resize((1024, 1024))
mask_image = load_image(mask_url).resize((1024, 1024))
prompt = "a tiger sitting on a park bench"
generator = torch.Generator(device="cuda").manual_seed(0)
image = pipe(
prompt=prompt,
image=image,
mask_image=mask_image,
guidance_scale=8.0,
num_inference_steps=20, # steps between 15 and 30 work well for us
strength=0.99, # make sure to use `strength` below 1.0
generator=generator,
).images[0]
img_urlの画像
mask_urlの画像
つまり、img_urlの画像で、修復すべき(入れ替えるべき)領域をmask_urlの画像で指定するということですね。いわゆる顔ハメ看板ですね。面白い。
アウトプット画像を保存します。
image.save("./output_image.png")
上で指定したprompt = "a tiger sitting on a park bench"
の通り、ベンチに虎が座ってます。
![](./output_image.png)
プロンプトを変えてみます。
prompt = "a cat sitting on a park bench"
画像系生成AIも色々なアプリケーションが出てきてますね。