オリジナルイラストやキャラクターをAIに描かせたい。
そのための「ローカルマシンでDreamboothを使ってモデルに絵を学習させる」メモです。
- 今回:Dreambooth-GUI(簡易版)
- 次回:AUTOMATIC1111のDreambooth Extension(詳細版)
として2回に分けて書き残します。
正確性を欠いた記述もあると思いますが、難解な部分が多いため現時点の認識という事で。
まずは簡易版のDreambooth-GUIから。
Dreambooth-GUI
ダウンロードは以下から行います。
このツールはシンプルですが、
「Huggingfaceに登録されており、tokenizerディレクトリのあるモデルしか使えない」
という制限がありました。
つまりダウンロードしてきた.ckptファイルは(そのままでは)使えません。
おそらくは他のツールでDiffuser形式に変換する必要あり(未確認)。
また最新のv0.1.10、v0.1.9 – alphaはイメージ作成段階でファイルが見つからないとエラーが出ました。
おま環?
結局v0.1.8まで落として動作を確認できました。
また予めDockerのインストールが必要。
詳しくは文末にかいた参考URLのGigazineに詳しく載っています。
素材画像の準備
まずは学習対象の素材画像を用意。
- サイズは512×768。生成画像と同じのにしました。
- 10枚程度。角度、明るさや背景を変わっているものを10枚程度。
フェイスアップが半分、残りはバストアップ、全身像などをバランスよく。 - 髪型や服装などがそろっているのがベスト。
- 奇抜でないポーズ。手やフレームなどは取り除く。
素材は4枚でも可。
という記事もありますが、覚え込ませるモデルデータと親和性次第という気がします。Anything V3.0ならアニメのキャラ、とか。
また髪型や服装が合っていれば”自分の思っている学習対象(キャラ)”と認識しやすくなる様です。なので素材はこれらを揃えておきます。
逆にいうと顔とかは「まあそうかも?」という程度には変化して出力されます。
実行手順
- Docker Desktopを起動
- Dreambooth-GUIを起動
- [Pick Image]タブで素材画像の入っているフォルダを指定
- [Config Trainer]で各要素を設定
- “Model”はHuggingfaceで表示される各モデルのタイトルパス(例:Linaqruf/anything-v3.0)
- “Instance prompt”はベースモデルに含まれていなそうなユニークな文字列。要は意味のないフレーズ。sksとかscsとか自由。
- ”Class prompt”は学習する素材を指す固有名詞等。
実際のPromptに”sks 固有名詞”というフレーズを入れると学習物が読み出される。 - ”Training Steps”は学習回数。とりあえず1000回が目安。少なすぎると学習不足、多すぎても過学習になる。
- “Learning Rate”は学習率。1e-5=0.00001。多いほうが学習強度?が上がるがStepsとのバランスが必要。とりあえずデフォルトでOK。
- [Train]タブにHugging faceのTokenを設定。OutputにWebUIのmodelフォルダを指定
- ”Start”ボタンを押して学習開始
あとがき
当初は次に書くAUTOMATIC1111-Extensionがうまく動かず、とりあえず使えたコレで理解が深まりました。
このツールで大きく調整できるのは素材画像。
あとはベースにするモデルとStepeとLearning Rateくらい。
モデルは冒頭に描いた通りTokenizerディレクトリが必要なので、”naclbit/trinart_derrida_characters_v2_stable_diffusion“などは使えません。
huggingface/diffusersのconvert_models_diffuser_to_diffusers.pyで変換できるかも?
Stepは素材画像を増やした場合に比例して増やす必要あり。
ただし75枚で学習するより10枚の方が良かった、という記事もありました。
自分が試した中では30枚をStep:2,000、Learning Rate:5e-6で学習させたあたりがベターだったように思います。
参考URL: