最終更新日:2023年2月17日
はじめに
最近公開された「Instruct-Pix2Pix」をDiffusersから使ってみました。huggingface.co
結果
ベンチに座る犬を猫に変換してみました。画像はこちらから使わせて頂きました。
比較
他の方法と比較したのがこの表になります。Pythonスクリプト
Instruct-Pix2Pix
from PIL import Image import torch from diffusers import StableDiffusionInstructPix2PixPipeline from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument('--image', type=str, help='original image' ) opt = parser.parse_args() img_fname = opt.image image = Image.open(img_fname).convert('RGB').resize((512, 512)) pipe = StableDiffusionInstructPix2PixPipeline.from_pretrained( 'instruct-pix2pix', torch_dtype=torch.float32, safety_checker=None).to("cuda") prompt = "replace dog with cat" n_samples = 5 for i in range(n_samples): image = pipe( prompt=prompt, image=image, image_guidance_scale=1).images[0] image.save(f'result_{i}.png')
Paint-by-Example
from PIL import Image import torch from diffusers import DiffusionPipeline from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument('--image', type=str, help='original image' ) parser.add_argument('--mask', type=str, help='mask image' ) parser.add_argument('--example', type=str, help='example image' ) opt = parser.parse_args() img_fname = opt.image mask_fname = opt.mask example_fname = opt.example init_image = Image.open(img_fname).convert('RGB').resize((512, 512)) mask_image = Image.open(mask_fname).convert('RGB').resize((512, 512)) example_image = Image.open(example_fname).convert('RGB').resize((512, 512)) pipe = DiffusionPipeline.from_pretrained( 'Paint-by-Example', torch_dtype=torch.float32).to("cuda") n_samples = 5 for i in range(n_samples): image = pipe( image=init_image, mask_image=mask_image, example_image=example_image).images[0] image.save(f'result_{i}.png')
Stable-Diffusion-2-Inpainting
from PIL import Image import torch from diffusers import DiffusionPipeline from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument('--image', type=str, help='original image' ) parser.add_argument('--mask', type=str, help='mask image' ) opt = parser.parse_args() img_fname = opt.image mask_fname = opt.mask init_image = Image.open(img_fname).convert('RGB').resize((512, 512)) mask_image = Image.open(mask_fname).convert('RGB').resize((512, 512)) pipe = DiffusionPipeline.from_pretrained( 'stable-diffusion-2-inpainting', torch_dtype=torch.float32).to("cuda") prompt = 'cat, sitting on a park bench' n_samples = 5 for i in range(n_samples): image = pipe( prompt=prompt, image=init_image, mask_image=mask_image).images[0] image.save(f'result_{i}.png')
追記
SDXLに対応したInstruct-Pix2Pixの記事はこちらになります。touch-sp.hatenablog.com
関連記事
touch-sp.hatenablog.comtouch-sp.hatenablog.com
touch-sp.hatenablog.com