見出し画像

SDWebUI上でDanbooruタグを自動生成したい!「sd-danbooru-tags-upsampler」の紹介

以下の記事では、画像生成のプロンプトを生成したり補完したりできるLLMを作ったり、その使い方を解説しました。

便利そうなプロンプト生成、ローカルのWebUI でも使いたいと思うかもしれません。

そんなプロンプトを生成してくれる拡張機能を Stable Diffusion WebUI 向けに作成しました。Forge と本家版で動作確認しています。


インストール

多くの拡張機能と変わらず同じようにインストールでき、特殊な操作は必要ありません。

Extensions > Install from URL > URL for extension's repository に

https://github.com/p1atdev/sd-danbooru-tags-upsampler

を入れて Install します。

多分 WebUI の再起動が必要になるので再起しましょう。

使い方

更新ごとに拡張機能のインターフェースが変わることがありますが、記事中のスクリーンショットは古い場合があるので注意してください。

雑に生成する

再起すると ControlNet 等と同じような場所に Danbooru Tags Upsampler が追加されていると思います。

アコーディオンを開いた様子

基本的には Enabled のチェックを入れるだけでプロンプトのかさ増しが動作するようになります。

あとはいつもと同じようにプロンプトを入力し、生成するだけです。

手入力したプロンプトは "2girls, chibi" のみだが、生成画像のプロンプトはそこそこ長い。(指定しているStyles は "best quality" と公式推奨のネガティブ)

プロンプトを入れなくても何かしら生成されるので、もはや空っぽにしても大丈夫です。(ネガティブプロンプトは指定しようね)

ネガティブプロンプトのみの指定で生成。"1girl, animal ear fluff, animal ears, blonde hair, blue eyes, bow, cat ears, cat tail, dress, hair bow, holding, holding hair, long hair, long sleeves, looking at viewer, mole, mole under eye, pink bow, pink dress, smile, solo, tail, upper body, white bow, white dress" は生成されたプロンプト

基本的に何も指定しない場合は 1girl になりますが、稀に 1boy が発生するのでそれが嫌な人はなにか指定しましょう。

版権・キャラクタータグ

Spaceのデモと異なり、キャラクターや版権タグの入力がありませんが問題なく指定することができます。といっても、普段の生成と変わったことは必要ありません。プロンプトに版権・キャラクタータグを含めると自動でそれを認識して適切に処理してくれます。

"1girl, frieren, sousou no frieren" のみの指定。"black pantyhose, blue sky, cloud, cloudy sky, contrail, day, earrings, elf, flower, grass, holding, holding flower, hood, hood down, hooded cloak, jewelry, long hair, long sleeves, looking away, outdoors, pantyhose, parted bangs, piercing, pointy ears, skirt, sky, solo, twintails, white bow, white hair, white skirt" が補完されている。elf や hooded cloak, pantyhose, piercing など、正しいキャラクターの特徴のタグを補完できています。

フリーレンはわりと学習件数が多いのと服装のバリエーションが少ないのでうまくいきますが、ものによってはうまくいったりいかなかったりします。

レーティング

版権やキャラクタータグと同様に、こちらも自動で判定して裏側でいい感じに処理しています。

対応しているタグは

  • rating:general (スペースなし)

  • rating:sensitive

  • rating:questionable

  • rating:explicit

  • sfw

  • nsfw

です。特に何も指定がない場合は、"rating:sfw, rating:general` の条件でプロンプト生成されます。安全です。
逆に、このうちのどれかが指定された場合はそれに応じて補完されるプロンプトが変わるので、プロンプトを組む際は特に細かいこと気にする必要はないです。

"1girl, rating:sensitive" を指定した例。"black hair, breasts, brown eyes, cleavage, cleavage cutout, clothing cutout, covered nipples, cowboy shot, gloves, gradient background, grin, hair ornament, hairclip, large breasts, light brown hair, long hair, looking at viewer, simple background, smile, solo, standing, teeth, white background, white gloves" が補完されました。rating:sensitive はちょっと肌面積が増える感じです。

矛盾するレーティングのタグを入れたらどうなるんだろう!?とか考える人もいるかもしれませんが、複数あった場合はプロンプトの補完では基本的に NSFW 度が強い方のタグが採用されます。ただし、sfw, nsfw の両方のみだった場合はどっちにしたいのかよくわからないので安全を取って sfw が採用されます。(画像生成時には入力された部分のプロンプトが削られたりすることはないです)

存在しないタグ・文字列の扱い

不正なタグや語彙にないタグについては、アップサンプル時には無視されますが最終的な画像生成のプロンプトにはそのまま含まれるので、特に気にしなくて大丈夫です。

拡張機能のパラメーターについて

「有効か無効か」を決めるチェックボックス以外にもいくつか変更できる要素があるので紹介します。

最終的なプロンプト長を決める。very short はめちゃくちゃ少なくて very long はめちゃくちゃ長くなる。試してみたほうが速いので使ってみてね。


ここに入れたタグはプロンプトの補完で出現しなくなります。`* ears` のようにすると `animal ears` や `cat ears` のような ~ ears 系のタグをまとめて禁止できます。
プロンプト生成につかうシード値です。これと入力のポジティブプロンプトが固定されていると、補完されるプロンプトも全く同じやつになります。これを固定したまま画像の方のシードはランダムにするということもできます。
アップサンプル処理を行うタイミングです。sd-dynamic-prompts や Styles 機能などの他のプロンプト加工処理の適用前か後か選べます。デフォルトは適用後 (After ~)です。何かしらの理由で加工される前に適用したい場合は Before ~ にするといいと思います。
多様性レベルです。ちょっと後ろの方で説明します。

Upsampling timing について

上でも軽く説明しているようにアップサンプル処理を行うタイミングが変わるのですが、実装の都合上他の副作用もあります。

Batch count などを指定して生成した場合の挙動がそれぞれ違います。

Seed for upsampling tags が -1 の場合、Before applying other prompt processing の場合、同一バッチ内のプロンプトは全て同じになりますが、After ~の場合はそれぞれ異なるタグがアップサンプルされます。

これは Before ~ を指定して 4 枚生成したときで、4枚とも同一のタグが補完されて同一プロンプトで生成されました
これは After ~ を指定して 4 枚生成したときで、4枚とも異なるタグで補完されました

Variety level について

補完されるタグの多様性を指定できます。

Very unvaried、Unvaried は多様性が落ちますが、同時に入力されたプロンプトに忠実になるため、無難なタグを生成しやすくなります。
Very varied, Varied は多様性が上がりますが、入力されたプロンプトを無視したり不自然な生成になりやすくなります。

このパラメーターはLLMの生成設定のプリセットになっているので、こっちを直接弄って出力されるタグの傾向を変えることもできます。

生成オプション

Temperature は今回は 1.0~4.0 まで取れるようにしたのですが、高くても2.0くらいがいいと思います。高すぎると意味不明なことになります。
Top p は下げれば下げるほどまともなタグ(無難なタグ)を選ぶようになりますが多様性とのトレードオフです。
Top k は上げると奇抜なタグが入りやすくなります。一応10~1000まで取れます。
Num beams は上げるほど無難な結果になりやすくなりますが、多様性が著しく下がるので基本的に 1 でいいと思います。(1~10まで取れます)

生成速度について

Spaceのデモではプロンプト生成に5秒くらいかかっていましたが、この拡張機能では 0.5 秒くらいで生成ができます。

Upsampling tags has taken 0.30 seconds なのでここでは 0.3 秒でプロンプトのかさ増しができている。

GPU を使わず CPU のみの推論でこの速度になっているので、よっぽど強い GPU を使っていなければTensorRTを使っていてもボトルネックにはあんまりならないと思います。


おわり

プロンプトについて全然知らなくても 1girl さえ知ってればそれっぽい画像が生成できるようになりました。danbooru タグに詳しくない人や初心者の人でも扱いやすくなったと思います。

1024x1024 サイズで TensorRT と併用しながらランダムなプロンプトで生成してデータセット作成をしたり、ファインチューンモデルやマージモデルを作ったあとの性能検証用プロンプトを考えるときが面倒くさいときや、モデルカード用の画像のプロンプト考えるの面倒くさいときなどに便利そうです。

自動化したいときや色々と面倒くさいときに結構役に立ってくれるじゃないでしょうか。

変更履歴

2024/2/23

最初のバージョン (0.1.0) をリリースしました。

2024/2/25

0.1.1 をリリースしました。

  • 拡張機能のインターフェースが変更されたので記事中の一部のスクリーンショットは差し替えられましたが、一部は古いままなので少し注意です。

  • () を含むタグの処理を修正しました。エスケープされた状態のタグでも認識できるようになったのと、出力時のタグに () が含まれる場合にエスケープされるようになりました。

  • シードの扱い、特にX/Y/Zでの不自然な挙動が修正されました。

  • "Seed for upsampling tags" のデフォルト値が -1 になりました。-1じゃない変な数値になっている場合は WebUI のルートフォルダ直下にある ui-config.json の "customscript/dart_upsampler.py/txt2img/Seed for upsampling tags/value" の項目を削除して再起動すると -1 になります。

  • その他軽微なバグやタイポが修正されました

2024/2/29

0.2.0 をリリースしました。

  • LLMの生成設定を変更できるようにしました。

  • 多様性プリセットのオプションを追加しました。

  • 範囲禁止タグで、出力タグの制限を簡単にできるようにしました。

  • その他軽微なバグやタイポが修正されました

この記事が気に入ったらサポートをしてみませんか?