追加学習させるとはどういうことか?そのメリットは?
ファインチューニングでは、事前に訓練されたモデルの一部または全体を、新しいデータセットで追加学習します。
追加学習とは既に学習済みのモデルを転移学習させてその一部をすり替えたモデルになります。
メリットは少ないデータで学習モデルが作れます。
またアニメーションを作る際に役立つというとあるアニメ業界の評価もあります。
この報告では提供されているCheckpointモデルで生成したキャラでアニメーションを作ることが前提でしたが、これを応用するとLoRAモデルで自作キャラを追加学習させておきさえすれば、Animatediffで自作もしくは自社キャラでアニメーションを作る際に役立つことをも意味します。
その代わり追加学習時間がGPUを使っても1日ぐらいかかります。(Stable Diffusion WebUIの場合)
それに似たものに転移学習がありますが、そちらは訓練済みのモデルの出力層に新しい層を追加し、その層だけを新しいデータで追加学習する方法になります。
追加学習の方法
Stable Diffusionの追加学習の方法は以下の方法が知られています。
Train(学習)を使う
train tool(学習ツール)/extention(追加機能)を使う
以下の記事はMitchyさんのnoteを参考にしました。
LORA/LyCORISモデル
自分で作成しても他サイトから分けてもらってダウンロードしてきても、使い方は同じになります。
LyCORISモデルはすでにSDv1.6にデフォでインストールされているLORAに入っているのでLyCORISのための拡張機能を入れなくてもLORAでLyCORISまで取り扱えるようになっているようです。
インストール
インストール環境は以下になります。バージョンが違うと再現できない場合もありますのでこの記事に興味ある方はできるだけこのリンクを使ってインストールをしましょう。
API • Github • Gradio • Startup profile • Reload UI
version: v1.6.0 • python: 3.10.12 • torch: 2.1.0 • xformers: N/A • gradio: 3.41.2 • checkpoint: cd8732bdc3
デフォだとMacで動かすとエラーが出てしまいます。
そこで以下のようにstable-diffusion-webui/extensions/sd-webui-train-tools/liasece_sd_webui_train_tools/ui.py とstable-diffusion-webui/webui-macos-env.shのソースコードを修正します。
#train_mixed_precision = gr.Dropdown(label="Mixed precision (If your graphics card supports bf16 better)",value="fp16", choices=["fp16", "bf16","no"], interactive = True, elem_id="train_mixed_precision")
train_mixed_precision = gr.Dropdown(label="Mixed precision (If your graphics card supports bf16 better)",value="fp16", choices=["no", "fp16", "bf16"], interactive = True, elem_id="train_mixed_precision")
キャプション付け
学習の時は画像とテキスト文を対にして行います。(ファイル名も拡張子以外は同じ名前になっています。)
ツール | 特徴 | 備考 |
---|---|---|
deepbooru | 短い単語でコンマで分ける。 | 比較的無難な単語になる。 |
BLIP | 文章でキャプションを付ける。 | だいぶんズレる傾向がある。 |
一通り素材とする画像でキャプションを書かせてみて後から修正を加える形で仕上げます。
例えば画像によっては少年の絵でも少女と認識されてしまう場合もありえます。そういう場合に修正かけると良いと思います。
前処理
画像の大きさは1024×1024が良いようです。
これで大きさが不揃いだった素材の画像は大きさを揃えることができます。
「自動サイズで切り取り」のチェックは外し、「deepbooruで説明をつける」にチェックを入れます。
そして「Update Dataset」のボタンを押すと前処理が始まります。
この前処理の時にバージョンを変更しないと新しく画像を処理した場合キャプションも消えてしまうのでもしも細かい変更をする場合はバックアップを取るかバージョンを変更して行うことをオススメします。
またキャプションは完璧ではないのでできるだけオリジナルのものを作った方が良いと思います。
その場合以下が参考にしていただけます。
学習
「Base on Stable Diffusion V2」、「Use Xformers」のチェックを外しMixed precision (If your graphics card supports bf16 better)は「no」を選びます。
Begin trainボタンを押します。
成功すれば
stable-diffusion-webui/outputs/train_tools/projects/(モデル名)/versions/(設定したバージョン)/trains/(参考にしたモデル名)/モデル名.safetensors
と言う形で得られます。
preview_config.json
このファイルに保存する各ステップ数ごとのプレビュー画像のポジ、ネガやLora multiplier(反映度指数)などが記録されて管理されています。
成否に注意する(追加)
必ずしも結果は良いばかりではありません。中間のepochごとの中身を点検する必要があります。というのは通常epoch数が上がれば結果が良くなるのが理想だからです。それが悪くなる場合はそれ以上学習することはむしろ悪い結果になることを意味します。
点検のポイントはtrain toolタブの下の方に画像もしくは保存指定epochごとにフォルダができていて画像も生成されているので、確認することが大切です。
それらはそのepoch数までに学習を終えて(デフォ設定では)影響0.6から1の範囲で0.1ごとに絵を描かせています。
過学習してしまったと思った場合はうまく生成されているepoch数値のmodelを使った方が良いです。
一つ気がついたのは同じバージョンを繰り返し使っている場合、epoch数の指定を変化させたり設定を変えた場合バージョン以下のtrainフォルダの中身を手動で削除させるか退避させるべきことです。というのは一度作ってしまったフォルダを削除して作り直す作業がこの拡張システム上苦手だからです。ファイルは削除しますがディレクトリまで削除しているように見えなかったことです。(初回は全く空でも作ってましたが。)
Kohya_ssを使う
Mac Appleシリコンチップのマシンではなぜか最新のバージョンほどmpsの選択肢がないのでできませんでした。
追加学習させたモデルで画像生成させる方法
作成されたモデルをダウンロードしてきたLORAモデルと同じ場所に格納
得られたモデルは
stable-diffusion-webui/models/Lora以下にドラッグ&ドロップでディレクトリ移動して格納します。
もちろんネット上ダウンロードしてきたモデルも同じように格納します。
そしてLoraタブでカード上にモデルが出てくるのでそれをクリックするとプロンプトにコードが出力されるので、通常のコマンドと並べて画像を生成するだけです。
アジア人美女のモデルに日本人Loraを組み合わせることで日本人っぽい写真が得られるイメージです。
応用としては個人もしくは自社開発のカードゲーム用に描いたゲームキャラを学習させてそのキャラの絵を出力することができます。