【Waifu Diffusion v1-3-5】今さらですがWaifu Diffusionってすごいですね

はじめに

前回の続きです。
touch-sp.hatenablog.com
「waifu-diffusion-v1-3-5」がdiffusersから使えるようになっていたのでさっそく使ってみました。
huggingface.co

元画像

ぱくたそから使わせて頂きました。
こちらの画像です。

このポーズのイラストを作成してみます。

prompt(呪文)

こちらを参考にさせて頂きました。

prompt

masterpiece
high quality
highly detailed
kawaii princess
white glowing skin
kawaii face with blush
blue eyes with eyelashes
anime
no background
lim lighting

negative prompt

blender
deformed mutated disfigured
lowres
blurred
repetitive double
mutated hands bad hands missing hands extra hands liquid hands poorly drawn hands
mutated fingers bad fingers missing fingers extra fingers liquid fingers poorly drawn fingers
partial head
bad face small face partial face
bad eyes missing eyes too big eyes
bad eyebrows
bad eyelashes
bad nose missing nose
bad mouth missing mouth open mouth
bad ears
thick lips
bad legs missing legs extra legs
bad arms missing arms extra arms
low quality normal quality
crown
black and white

結果

つよつよPCで何枚も作成してから良さそうなものを抽出しました。
使用したPCはこちらです。

seed:202 guidance_scale:11.5
seed:205 guidance_scale:11.5
seed:215 guidance_scale:11.5
seed:219 guidance_scale:9.5
seed:231 guidance_scale:11.5
seed:262 guidance_scale:11.5

Pythonスクリプト

以下のスクリプトで画像を大量生成しました。

import os
import argparse
import datetime
import torch
from PIL import Image
from diffusers import StableDiffusionImg2ImgPipeline

parser = argparse.ArgumentParser()
parser.add_argument(
    '--seed',
    type=int,
    default=200,
    help='the seed (for reproducible sampling)',
)
parser.add_argument(
    '--n_samples',
    type=int,
    default=5,
    help='how many samples to produce for each given prompt',
)
parser.add_argument(
    '--scale',
    action="store_true",
    help='if enabled, use some guidance_scales',
)
parser.add_argument(
    '--negative_prompt',
    action="store_true",
    help='if enabled, use negative prompt',
)
parser.add_argument(
    '--image',
    type=str,
    help='original image'
)
opt = parser.parse_args()

original_image = opt.image
init_image = Image.open(original_image).convert("RGB").resize((512, 512))

if os.path.isfile('prompt.txt'):
    print('reading prompts from prompt.txt')
    with open('prompt.txt', 'r') as f:
        prompt = f.read().splitlines()
        prompt = ','.join(prompt)
else:
    prompt = 'anime of tsundere moe kawaii beautiful girl'

if opt.negative_prompt and os.path.isfile('negative_prompt.txt'):
    print('reading negative prompts from negative_prompt.txt')
    with open('negative_prompt.txt', 'r') as f:
        negative_prompt = f.read().splitlines()
        negative_prompt = ','.join(negative_prompt)
else:
    negative_prompt = None

print(f'prompt: {prompt}')
print(f'negative prompt: {negative_prompt}')

model_id = "./waifu-diffusion-v1-3-5"

pipe = StableDiffusionImg2ImgPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
pipe.enable_attention_slicing()

os.makedirs('results', exist_ok=True)

now = datetime.datetime.today()
now_str = now.strftime('%m%d_%H%M')

if opt.scale:
    scale_list = [3.5, 5.5, 7.5, 9.5, 11.5]
else:
    scale_list = [7.5]

for i in range(opt.n_samples):
    for scale in scale_list:
        seed  = opt.seed + i
        generator = torch.Generator(device="cuda").manual_seed(seed)
        image = pipe(
            prompt = prompt,
            negative_prompt = negative_prompt,
            image = init_image,
            generator = generator,
            guidance_scale = scale,
            num_images_per_prompt = 1).images[0]
        image.save(os.path.join('results', f'{now_str}_seed{seed}_scale{scale}.png'))

感想

残念ながら指の再現まではできませんでしたが、AIがイラストレーターの職を奪うというのが分かるような気がします。

追記(v1-4)

2023年1月1日にv1-4が公開されています。そちらも試してみました。
元画像はこちらです。

元画像
生成画像

prompt

masterpiece
best quality
high quality
absurdres
kawaii princess
white glowing skin
kawaii face with blush
blue eyes with eyelashes
sweater
turtleneck

negative prompt

worst quality
low quality
medium quality
deleted
lowres
comic
bad anatomy
bad hands
text
error
missing fingers
extra digit
fewer digits
cropped
jpeg artifacts
signature
watermark
username
blurry

パラメーター

seed: 216
guidance_scale: 7.5
strength: 0.8
num_inference_steps: 50