Dreamboothを使ったモデルの追加学習をWindowsローカルマシンで行う方法 – Dreambooth gui編

Dreamboothを使ったモデルの追加学習をWindowsローカルマシンで行う方法 – Dreambooth gui編

オリジナルイラストやキャラクターをAIに描かせたい。
そのための「ローカルマシンでDreamboothを使ってモデルに絵を学習させる」メモです。

として2回に分けて書き残します。
正確性を欠いた記述もあると思いますが、難解な部分が多いため現時点の認識という事で。

まずは簡易版のDreambooth-GUIから。

Dreambooth-GUI

ダウンロードは以下から行います。

smy20011/dreambooth-gui

このツールはシンプルですが、

Huggingfaceに登録されており、tokenizerディレクトリのあるモデルしか使えない」

という制限がありました。
つまりダウンロードしてきた.ckptファイルは(そのままでは)使えません。
おそらくは他のツールでDiffuser形式に変換する必要あり(未確認)

また最新のv0.1.10v0.1.9 – alphaはイメージ作成段階でファイルが見つからないとエラーが出ました。
おま環?
結局v0.1.8まで落として動作を確認できました。

また予めDockerのインストールが必要。
詳しくは文末にかいた参考URLのGigazineに詳しく載っています。

素材画像の準備

まずは学習対象の素材画像を用意。

  • サイズは512×768。生成画像と同じのにしました。
  • 10枚程度。角度、明るさや背景を変わっているものを10枚程度。
    フェイスアップが半分、残りはバストアップ、全身像などをバランスよく。
  • 髪型や服装などがそろっているのがベスト。
  • 奇抜でないポーズ。手やフレームなどは取り除く。

素材は4枚でも可。
という記事もありますが、覚え込ませるモデルデータと親和性次第という気がします。Anything V3.0ならアニメのキャラ、とか。

また髪型や服装が合っていれば”自分の思っている学習対象(キャラ)”と認識しやすくなる様です。なので素材はこれらを揃えておきます。
逆にいうと顔とかは「まあそうかも?」という程度には変化して出力されます。

実行手順

  1. Docker Desktopを起動
  2. Dreambooth-GUIを起動
  3. [Pick Image]タブで素材画像の入っているフォルダを指定
  4. [Config Trainer]で各要素を設定
    1. “Model”はHuggingfaceで表示される各モデルのタイトルパス(例:Linaqruf/anything-v3.0)
    2. “Instance prompt”はベースモデルに含まれていなそうなユニークな文字列。要は意味のないフレーズ。sksとかscsとか自由。
    3. ”Class prompt”は学習する素材を指す固有名詞等。
      実際のPromptに”sks 固有名詞”というフレーズを入れると学習物が読み出される。
    4. ”Training Steps”は学習回数。とりあえず1000回が目安。少なすぎると学習不足、多すぎても過学習になる。
    5. “Learning Rate”は学習率。1e-5=0.00001。多いほうが学習強度?が上がるがStepsとのバランスが必要。とりあえずデフォルトでOK。
  5. [Train]タブにHugging faceのTokenを設定。OutputにWebUIのmodelフォルダを指定
  6. ”Start”ボタンを押して学習開始

あとがき

当初は次に書くAUTOMATIC1111-Extensionがうまく動かず、とりあえず使えたコレで理解が深まりました。

このツールで大きく調整できるのは素材画像。
あとはベースにするモデルとStepeとLearning Rateくらい。
モデルは冒頭に描いた通りTokenizerディレクトリが必要なので、”naclbit/trinart_derrida_characters_v2_stable_diffusion“などは使えません。
huggingface/diffusersconvert_models_diffuser_to_diffusers.pyで変換できるかも?

Stepは素材画像を増やした場合に比例して増やす必要あり。
ただし75枚で学習するより10枚の方が良かった、という記事もありました。
自分が試した中では30枚をStep:2,000、Learning Rate:5e-6で学習させたあたりがベターだったように思います。

参考URL:

コメントを残す