ローカル環境でStable Diffusionを動かすためにOptimized Stable Diffusion GUI Toolを導入してみた。Optimized Stable DiffusionはVRAMが少ないGPUに最適化されたフォークで、VRAMが4GBしかないGTX 1050 Tiでも十分に動作した。
また、Stable Diffusion web UIにはNegative promptという機能が実装されている。Promptとは逆に排除したい要素を指定することができ、特に繊細な人物のイラストを生成する際に有用だそうだ。
仕組みや実装方法は上のページに書かれているので、詳しくはそちらを参照してほしい。Optimized Stable DiffusionでもNegative promptを使用するため、適当に自分で実装してみた。結論から言ってしまえば一箇所の引数を置き換えるだけでOKである。
実装
既存のGUIを使用するため、Promptの「--」以降をNegative promptとして認識するような設計とした。
optimized_txt2img.py
batch_size = opt.n_samples n_rows = opt.n_rows if opt.n_rows > 0 else batch_size if not opt.from_file: assert opt.prompt is not None prompt = opt.prompt # promptを分割 negative_prompts = batch_size * [""] negative_prompt_delimiter = "--" if negative_prompt_delimiter in prompt: splited_prompt = prompt.split(negative_prompt_delimiter) prompt = splited_prompt[0].rstrip() negative_prompts = [splited_prompt[1]] data = [batch_size * [prompt]]
modelCS.get_learned_conditioning()に渡す引数を、negative_promptsに変更。
if opt.scale != 1.0: #uc = modelCS.get_learned_conditioning(batch_size * [""]) uc = modelCS.get_learned_conditioning(negative_prompts)
サンプル
Negative prompt: なし
Negative prompt: purple
Negative prompt: purple, red