TrainTrainでコピー機Loraで差分Loraを作った話
差分Loraってなに??
コピー機Lora、差分Loraと言うのをご存じの方も多いと思いますので、詳しいことは割愛しますが、上記画像のLoraは顔と首の境線を消す謎Loraです。
こういうのを作れます。
作り方
Kohya_ss GUIでも作れますが、TrainTrainというSD web uiの拡張を使った方が楽なので、TrainTrainで説明します。
※Web-UI 1.7.で動作します。最新の1.9でも動作しますが、私の環境では怪しい動作(主に起動時)が起こりますので、1.7を推奨
使い方
①でDifferenceを選択
③Difference_Use2ndPassを選択後、④でプリセットを適用
⑤作成するLoraの名前を入力
⑥チェックを入れるとVRAMの削減になるのでいれる。
⑦Loraを作るベースのモデルを選択。
下部に2nd passがありますので、展開後に【use gradient checkpointing】にチェックを入れる。 他はプリセットのままでOK
2024年6月16日 追記
~ここから~
公式にあるように、2nd passはdim(network rank)を下げた方が良さそうです。(公式を見てたのに忘れてた)
dimを4にしてalpha(network alpha)を2にした方が良さそうですね。
(dimを下げると単体では効きが弱くなりそうな気がするので、上手くいかないときはdimとalphaを初期値16と8?戻してみてください。)
~ここまで~
最下部に画像を入れます。
左に変化前の画像を、右に変化後(Loraの適用時になって欲しい画像)を入れます。
これで、OK。
あとは、【Start Training】を押せば、学習が始まります。
出来上がったLoraはLoraのフォルダに入ります。
マージした方がよい話
この方法で作ったLoraは強度を4など強くしないと、良い結果にならない。
正面を向いた画像で作ったLoraは横顔に弱い。
そもそも思ったほどの効果が無い。
などの事がしばしば起こります。
そこで教師画像だけを変えた同じ効果のLoraを複数作り、Loraどうしをマージするとより良いものに仕上がります。
マージに使う拡張はみんな大好き、supermergerです。
おおざっぱな使い方
①supermergerのLoraタブに入る。
②適当なfilename(option)を付ける。(Loraの名前)
③LoRAs on diskからマージしたいLoraを全部選択
④【Merge LoRAs】でマージスタート、完成したLoraはLoraフォルダに。
その他
タグ付け
タグは必要ありません。
教師画像
変化前の画像と変化後の画像は、極端に表現した方が学習しやすいです。
例えば、線を太くするLoraを作る場合は、変化後の画像を欲しい線の太さに描き変えるのではなく、必要以上に太くしたほうが効果的です。
変化前画像と変化後画像の差異を学習しますので、線を太くしたいだけのLoraなのに、線の色まで変えるとそれまで学習してしまいます。
今回はfull bodyとcowboy shotと角度違いのportrait、合計5枚でしました。
背景は単色でもOKだけど、あった方が良い気がする。
単色背景は学習が収束するのが早いし、5枚とも単色背景だとなんだかな~って言う気持ちの問題。
Forge版 SD web uiについて
Forge版ではTrainTrainを入れると、立ち上がらなかったり、立ち上がっても動作がおかしかったりします。A1111を使いましょう。
必要に応じてBASEを学習しない
network blocks(BASE = TextEncoder)となってますので、TextEncoderを学習しない方が良い場合もあると思いますので、必要に応じてチェックをはずしましょう。
他力本願(プリセットの値について)
train learning rateをもう一桁上げてtrain lr schedulerをcosineじゃなく、constantで良いと思う。train iterationsを300ぐらいに下げて時短になったりしないかな?
だれか試してみて教えて。
データ配布
今回作ったLoraと学習に使った画像を入れたデータを配布します。
参考にしてみてください。ちなみにSDXLで作成してます
zipもrarも貼れなかったので、firestrageに貼り付けました。
7日間有効です。(2024/6/16現在 期限切れです。)
https://xfs.jp/eDHW08