最終更新日: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")
