【Compel】【Diffusers】プロンプト内のワードの重みづけ

最終更新日:2023年6月5日


はじめに

プロンプト内のワードの重みづけをしたい時、DiffusersではCompel Libraryを使うようです。

インストールは簡単です。

pip install compel

使い方

実際のPythonスクリプト

from diffusers import StableDiffusionPipeline, EulerAncestralDiscreteScheduler
import torch
from compel import Compel, DiffusersTextualInversionManager

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
    '--seed',
    type=int,
    default=20000,
    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(
    '--steps',
    type=int,
    default=25,
    help='num_inference_steps',
)
args = parser.parse_args()

seed = args.seed
steps = args.steps
scale = 7.0

model_id = "model/bra_v5.safetensors"
pipe = StableDiffusionPipeline.from_ckpt(
    model_id,
    load_safety_checker=False,
    torch_dtype=torch.float16)
pipe.scheduler = EulerAncestralDiscreteScheduler.from_config(pipe.scheduler.config)
pipe.load_textual_inversion("embeddings", weight_name="EasyNegative.safetensors", token="EasyNegative")
pipe.to("cuda")

prompt = "masterpiece++, 8k+, photorealistic+, (best quality)+, absurdres, attractive, ultra high res, ultra realistic, highly detailed, photo of pretty Japanese woman, short hair"
negative_prompt = "EasyNegative, (Worst Quality)++"

textual_inversion_manager = DiffusersTextualInversionManager(pipe)

compel_proc = Compel(
    tokenizer=pipe.tokenizer, 
    text_encoder=pipe.text_encoder,
    textual_inversion_manager=textual_inversion_manager,
    truncate_long_prompts=False)

prompt_embeds = compel_proc([prompt])
negative_prompt_embeds = compel_proc([negative_prompt])

for i in range(args.n_samples):
    temp_seed = seed + i * 100
    generator = torch.Generator(device="cuda").manual_seed(temp_seed)
    image = pipe(
        prompt_embeds=prompt_embeds,
        negative_prompt_embeds = negative_prompt_embeds,
        generator=generator,
        num_inference_steps=steps,
        guidance_scale=scale,
        width=768,
        height=768,
        ).images[0]
    image.save(f"./step{steps}_seed{temp_seed}.png")




このエントリーをはてなブックマークに追加