画像にタグ付けするWD14 taggerをwebui無しで動かす

公開日:

stable-diffusion-webui-wd14-taggerはStable DiffusionでLoraを作成する際の定番プラグインで、イラストの中に書かれた要素を分析してタグとして出力することができます。

このプラグインはStable Diffusion webui向けのものなので使用するにはwebuiを起動する必要があります。
ただ、タグをつける作業ではwebuiがなくても問題ない場合も多いので単体で動かすコマンドを用意しました。

コード

作ったコードは下記です。Python3があれば動きます。
https://github.com/corkborg/wd14-tagger-standalone

webui-wd14-taggerの方から動作に必要なコードだけを抜き出して作りました。

動かし方

Windowsでの動かし方は下記です。(開発時はMacを使っていたのでそっちでも動きます)
Python3やgitコマンドが事前にインストールされている必要があります。

git clone https://github.com/corkborg/wd14-tagger-standalone.git
cd wd14-tagger-standalone

# 必要なライブラリのインストール
python -m venv venv
venv/Scripts/activate
pip install -r requirements.txt

# コマンド使用前にはactivateを忘れずに
venv/Scripts/activate

# ヘルプの確認
python run.py --help

# シングルファイルの推論
python run.py --file path¥image.jpg

# ディレクトリ内のファイルを一括推論
python run.py --dir path

動作確認

こちらのサイトさんからずんだモンさんの画像をダウンロードしました。
https://zunko.jp/

こんな感じになりました。

>  python run.py --model wd-v1-4-moat-tagger.v2 --file chara_zm.png
solo, green_footwear, short_sleeves, green_hair, suspenders, shirt, white_shirt, green_shorts, suspender_shorts, shorts, white_background, full_body, 1girl, smile, simple_background, open_mouth, puffy_sleeves, looking_at_viewer, puffy_short_sleeves, standing, short_hair, puffy_shorts, orange_eyes, yellow_eyes, :d, hair_between_eyes, boots

単体で使うことができました。

一気に画像にタグ付けをする

多くの場合一枚一枚画像にタグ付けせずに一気に複数枚画像にタグ付けすると思います。
このコマンドではディレクトリを指定すると一括推論を行って画像ごとにキャプションファイルを作成します。

下記の例ではgazou_fileディレクトリ内の画像すべてに対してタグの予想をおこなって画像ファイル名 + ext(拡張子)でキャプションファイルを作っています。

python3 run.py --dir ./gazou_file --ext .txt

推論モデルの変更方法

コマンドのオプションから推論モデルを変更することができます。

python run.py --file image.jpg --model wd14-vit.v1
python run.py --file image.jpg --model wd14-vit.v2
python run.py --file image.jpg --model wd14-convnext.v1
python run.py --file image.jpg --model wd14-convnext.v2
python run.py --file image.jpg --model wd14-convnextv2.v1
python run.py --file image.jpg --model wd14-swinv2-v1
python run.py --file image.jpg --model wd-v1-4-moat-tagger.v2
python run.py --file image.jpg --model mld-caformer.dec-5-97527
python run.py --file image.jpg --model mld-tresnetd.6-30000

推論モデルはいくつか存在してそれぞれのモデルで特色があります。

wd14-swinv2系

SmilingWolfさんが作成したモデルで、SwinTransformerと呼ばれる機械学習の手法で作られています。
SwinTransformerは後述のVisionTransformerに比べて新しい手法です

SmilingWolfさんのモデルの中ではmoatと並んで新しめのモデルでおすすめです

wd-v1-4-moat-tagger系

SmilingWolfさんが作成したモデルで、MObile convolution and ATtention(moat)という機械学習の手法で作られたモデルです。
Transformer系は大量の学習データが無いと精度が上がりづらいので、比較的少数の画像で学習するCNN系の手法をTransformerに応用する流れの一つのようです。

SmilingWolfさんのモデルの中ではmoatと並んで新しめのモデルでおすすめです
こちらのサイトが参考になります。

mld系

通常使われるSmilingWolfさんのモデルとは違いkiriyamaXさんが作成したモデルです(ml-danbooruと呼ばれている?)。

細かく絵の要素を読み取ろうとしてくれるので、学習したいものによってはこっちのほうが向いているかもしれないです。
ただ、細かく絵の要素を読み取ろうとするためか誤りも多い印象です。

少し各タグの確率が高くつく傾向があるので足切り(スレッショルド)を上げたほうが良いです。

python run.py --file image.jpg --model mld-caformer.dec-5-97527 --threshold 0.5
python run.py --file image.jpg --model mld-tresnetd.6-30000 --threshold 0.5

リポジトリです。
kiriyamaX/mld-caformer

wd14-convnext系

SmilingWolfさんが作成したモデルで、CNN系の推論モデルです。

CNNは画像を認識するモデルの中では昔から存在する一番標準的な手法でTransformerに比べると見劣りがする手法のように見えますが、ConvNextは新し目の手法でかなり精度が高いことが知られています。

wd14-vit系

SmilingWolfさんが作成したモデルで、VisionTransformer(Vit)系のモデルです。
機械学習の分野ではTransformerはCNNに比べて成果が上がっている手法ですがtaggerではそこまですごい差は無いように見えます。

マネキンと人間を見分ける精度が良いので個人的によく使っています。

その他

タグの足切り

taggerでは画像に対してすべてのタグの一致率を出して確率の高い物だけを残すようになっています。
確率が高いと判断するタグの足切りラインをthresholdオプションで決めることができます。

デフォルトではwebuiと同じく一律35%以上の一致率のタグだけを残しています。
これはコマンドライン引数で変更することができます。

# 25%に変更
python3 run.py --threshold 0.25 --file image.jpg

高速化

今回は用意したコードはCPU上で推論処理を動かしています。
m1 macでも一瞬で返ってくるのでそんなに問題ないとは思っているのですが、もっと早く動かしたい場合はGPUなどを使うように改造したほうが良いかもしれないです。

 

 

更新日: