画像にタグ付けする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などがWindowsに事前にインストールされている必要があります。
環境セットアップ
まず、WindowsにgitとPython3をインストールします。
gitのインストール方法は下記が参考になります。
https://qiita.com/T-H9703EnAc/items/4fbe6593d42f9a844b1c
Pythonのインストールは下記のMicrosoft公式ストアからダウンロードしたファイルを実行することで行えます。
https://apps.microsoft.com/detail/9ncvdn91xzqp
プロジェクトの展開
適当にディレクトリを作成します。そのなかでshiftキーを押しながら右クリックを押します。
コンテキストメニューの中に「PowerShell ウィンドウをここで開く」というメニューがあるのでそれを押します。
PowerShell上では下記のようなコマンドを1行づつ入力します。
# コードの展開
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 wd-v1-4-vit-tagger.v3
python run.py --file image.jpg --model wd-v1-4-convnext-tagger.v3
python run.py --file image.jpg --model wd-v1-4-swinv2-tagger.v3
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
高速化
NVIDIAのGPUを使用していて新し目のCUDAとcuDNNを使用している場合はGPUで推論することができます。
下記のようなコマンドでgpuに対応したライブラリをインストールします。
pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
https://onnxruntime.ai/docs/install/
https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements