PonyXL用のキャラLora学習に関するメモ(1)
今回の目的
PonyXL単独では出せないキャラや、SD1.5、あるいは品質が低い(衣装の着脱ができない、構図が固定されがち)をコントロールしやすい形でPonyXLに移植する。
環境
GPU GeForce RTX4070ti(12GB)、メモリ32GB、学習用ソフト kohhya lora GUI
教師画像の用意
いわゆるマルゼン式を採用。キャラのそのものの属性と、コスチュームの描写を分けます。
具体的には、complete nude等を利用して髪型や顔色、猫耳や角を持つキャラであれば、それらの要素がよく描写された全裸画像と、顔のアップの全裸画像で構成される1_1girlフォルダ。特定の要素を強調したい場合は、フォルダを分けて3_tail等とします。
制御が効くのであればshort hair等を利用して首から下に衣服以外のキャラそのものの属性の描写を可能な限り排除して、画像加工して首から下だけを切り抜いた1_clothesフォルダをそれぞれ用意。衣装を細かく制御したいならフォルダ分けすることも。
また、1_1girlは複数のモデルやプロンプトを使って3~4種類の画風が混在するようにします。詳しくは後述。
今回のキャラLoraの対象のキャラは非常にパーツが細かく、それを自由に着脱させたいので、かなり細かく分類してこんな感じに。
教師画像はこんな感じ(一部抜粋、乳首とかは写らないようにしていますが本来しっかり写っています)。
画風を適度に混ぜることの意味
画風に対してノイズを混ぜることで、特定の教師画像の画風を学習しすぎないようにするのが目的。
私は基本的にキャラLoraに、ベースモデルに画風Loraをマージしたマージモデルで画風を調整して出力しあす。
教師画像の画風を学習させすぎると、画風Loraの効きが悪くなるので、特に画風の判別要素となりやすい顔は2次元系の絵の範囲で画風をバラけさせる目的です。
体感上は効果を感じていますが、数値化できるものでもないのでおまじないと言えばおまじない。
総画像数は100枚程度、フォルダによる繰り返し設定が適用されて200枚相当。あまり多いと調整がやりづらいです(後述)。
キャプションの作り方
特別変わったところはなし。基本に忠実に。
個人的な経験としていくつか。
white background , simple background
あってもなくても品質にはあまり影響がない(背景描写に影響があるかも知れないけど、元々PonyXLは背景は雑なので目視で確認できる程の差を感じません。一応消すようにはしているけど神経質にならなくていい気がする)。
キャプションを残すか消すか
学習させたい要素をキャプションファイルから消すことでトリガーワードに集約すると言うのが一般的な説明。
髪型、髪の色、瞳の色、猫耳や角と言ったそのキャラ固有の要素は、キャプションから消すのが教科書的回答(のはず)。
しかし実際は他のLoraや背景の色が髪色や瞳に干渉することも多いし、角や猫耳をキャプションから消してトリガーワードに集約しても、期待通りに出力されるかどうか割と運次第。
なので私は、そのようなキャラの特徴的な要素についてはキャプションを残します。
消すのは明らかに意味が重複しているもの。例えば、animal earとcat ear、shirtsとwhite shirtsみたいなもの。これはより範囲が狭い方を残します。
海外のフォーラムでは、アートスタイルもキャプションに含めるべきと言う議論があるが、個人的にはそのLora単体での適用に限っては懐疑的。
実際に、animeをキャプションに含めた場合と含めない場合で最後にサンプル画像を掲載しているけど目に見える違いは感じられません。
ただ可能性として、適用すると画風が実写方向に引っ張られるLoraで、その傾向を抑制できる可能性があるので、おまじないとして追加するようにしています。PonyXLはヨクワカラナイ挙動をすることも多いのでおまじないの数は多いにこしたことはない。
PonyXL用の学習パラメーターの設定
kohya lora guiの公式が配布しているテンプレートから以下の項目値を変更。
学習率:1e-04(0.0001)
オプティマイザ:Lion
ネットワーク次元数64
ネットワークアルファ32
URウォームアップステップ数 0.00
バッチ数4
重要な設定は太文字のところ。ここが変わると露骨に結果が変わります。
オプティマイザはより正確にキャラの特徴を再現したいのであれば、AdamWの方がいいとする主張もあります。
しかしこの設定でオプティマイザだけAdamWに変えると、うちの環境では学習速度がめちゃくちゃ下がります。学習ステップ数5000程度で4~5時間とか。さすがにきついのでLionにしています。
ネットワーク次元数や、バッチ数をこれ以上にあげるのもうちのパソコンのスペックでは非現実的な学習時間になるのでなし。
この記事を書いている時点でRedditが落ちているのか、記事に当たれないのですが、PonyXLはバッチ数が4じゃないと品質が露骨に落ちると言う主張があり、概ねこれに近い感想を持っています。
ステップ数の調整
教師画像は第一に品質で、品質が確保できたら量と言うのが定説ですが、ここまでの設定でやるなら、教師画像が多過ぎるとステップ数の調整がしづらい問題でてきます。
経験上、kohya lora param guiの画面でbatch1 相当(目安)が、1500~3000程度がキャラの再現性と画風Loraとの折り合いが一番いいです。
ステップ数を多めに回してTensorBoardで監視していると。谷が何回か現れますが、後半の一番低い谷の時点での学習結果を採用しても、キャラの再現度は大して変わってないのに、教師画像の画風だけを強く学習してしまって画風Loraの効きが悪くなるみたいなトラブルが割と起きます。
1番目か2番目の谷あたりがキャラの再現度と、画風Loraへの反応性へのバランスが取れていることが多いです。
これは教師画像次第なところもあるので、5000ステップ程度で回して谷の部分の学習結果をXYZプロットで比較して一番バランスがいいものを採用する必要があります。
ここで教師画像が多すぎると、1エポックあたりのステップ数の進捗が大きく、上手く谷の部分の学習結果を取得できないことがあります。
厳選した教師画像で細かくステップを刻む方が細かい調整がしやすいです。
結果の確認
左上から
ネットワーク次元数32、ネットワークアルファ16、バッチ数4
ネットワーク次元数64、ネットワークアルファ32、バッチ数1
ネットワーク次元数64、ネットワークアルファ32、バッチ数4
ネットワーク次元数64、ネットワークアルファ32、バッチ数4(アニメキャプションなし)
です。
教師画像の一部はこれですが、見比べてみると、角の形や色が一番近いのは
ネットワーク次元数64、ネットワークアルファ32、バッチ数4
の設定と言えそうです。それ以外は角の描写が少し怪しいです。ただ角は学習時の設定にかかわらず、描写がすぐに破綻するパーツです。
何回か試しているうちに結果が逆転したケースもあるのでキャラ単体を描写する分にはネットワーク次元数32でも十分実用的だと思います。
バッチ数1はネクタイの柄の再現に失敗しており、胸ベルトも描写されておらず、細部の再現性がかなり怪しいです。
バッチ数4は必須項目と言えそうです。
アニメキャプションの有無は品質に決定的な影響を与えないようです。
今回作成したキャラLora+画風Loraマージ済みPonyXLによる出力(ポン出し)。
バタ臭く、色味がくすみがちなPonyXLでここまで日本アニメ調の画像が出力できれば十分でしょう。
PonyXLでのキャラLora学習まとめ
マルゼン式安定。
スタイルを示すキャプションを入れるのはあまり効果が感じられない。
white background,simple backgroundは消しても消さなくてもあまり変わらない。
身体のフォルダには適当に画風を分散させた教師画像を混ぜることで画風の固定化を避ける(おまじない)。
バッチ数4。
ネットワーク次元数は32~64。
教師画像の数が多ければいい訳ではない。厳選した枚数に絞ってステップ数を細かく刻む方が最適の結果を得られることもある。
ステップ数はBatch1相当でMax5000程度。大抵は1000~3000ステップで実用性がある結果が得られる。
ステップ数を増やしても細部の再現性が上がるとは限らず、むしろ教師画像の画風等の不必要な要素を強く学ぶこともある。
今後のなにかの参考、あるいは他にもいい設定やノウハウがあればこっそり教えて下さい。
この記事が気に入ったらサポートをしてみませんか?