LoRAで脳内キャラクターを学習する、たったひとつの冴えたやりかた
全然ひとつじゃないんですけどね。
突如ひらめいたキャラクターLoRAの作成手順が有効そうなのでまとめます。
LoRA作成の基本的な手順は理解しているものとして話を進めます。
また、3Dモデルが作れるツール(ここではHoney Select2)を使用して脳内キャラクターを学習する場合の話なので、既存のキャラクターであるとか、そもそもキャラクター以外を学ばせる場合はあまり役に立たないと思われます。
ただ、特定の画風しか出ないモデルに学習させることで、画風の影響を抑えたLoRAが作れるという点は汎用性がありそうです。
全体のフロー
Honey Select2の画風(3Dっぽさ)を学習したLoRAを作成する
上記のLoRAをマージしたモデルを作成する
上記のモデルを使用して学習したLoRAを作成する
この手法の狙い
Honey Select2で作成したキャラクターは3Dっぽさが強く、既存のモデルで学習した場合、3Dっぽさも差分として学習してしまう。
そこで、Honey Select2っぽい絵柄しか出ないモデルに学習させれば、3Dっぽさが差分として発生しないのでは?というアプローチを行う。
手順1
画風の学習素材を用意する。
ここで作成するキャラクターはあまり凝る必要はないが、脳内キャラクター(=学習させたいキャラクター)と差異のあるキャラクターの方が、必要な要素を差分として認識し易いと思われる。
キャラクターが完成したらスクリーンショットを撮る。MOD環境が整っていればF11キーで透過背景のスクリーンショットが撮れる。
筆者の用意した画像は下記の通り。なお全て全裸。複数枚あるのは画角を変えているため(顔が見えるように正面を中心に適宜回転させて全方位撮る)
「顔のみ(close-up):1枚」
「肩から上(potrait):11枚」
「バストアップ(upper body):18枚」
「股から上(cowboy shot):8枚」
※()内は画角に該当するタグ、ただしここではキャプションは付けない
※ここで用意した画像は後に正則化画像としても使用する
※画像は正方形(1024^2)に切り出し、透明部分を不透明の白に加工している、白がよいかは諸説ある。
上述の素材を使用して「DreamBooth、class+identifier方式」で学習を行う。
他の方式でも問題は無いと思うが、キャプションを付ける必要性は感じないので適当にフォルダ名を付けて終わる。
学習設定について特殊な設定は行っていない。通常のLoRA。
resolution=512、num_repeats=10、epoch=10、dim=64、alpha=32、lr=1e-4、text encoder lr=2e-5
以上で、Honey Select2の画風を学習したLoRAが完成する。
同じキャラクターを白背景で生成することしかできないLoRAになっているはずなので、次に進む前にチェックすることをオススメする。
手順2
好きなモデルに上記のモデルを強度1.0でマージする。sd-scriptsにもマージ機能は用意されているが、WEB UIの拡張機能などを使ってもよい。
モデルの選び方について細かい検証はしていないが、マージモデルを使用しているなら祖のモデル(モデルAにモデルBをsumしているモデルXを使用している場合はモデルA)を選ぶとよい気がする。具体的なモデル名を挙げる気はない。好きにしろ。
これで同じキャラクターを白背景で生成することしかできないモデルになったはずなので、ここでもチェックすることをオススメする。
手順3
学習させたい脳内キャラクターを作成する。ここが一番大事。お前の情熱をHoney Select2に全力でぶつけろ。
なお、学習のために少しオーバーに表現するくらいがよい(ゲーム内で多少バランスが悪くてもよい)
キャラクターが完成したらスクリーンショットを撮り、手順1と同様の加工を行う。画角などは手順1と合わせること(余計な差異を発生させない)
画像を用意したらキャプションを付ける。方法は問わない。
筆者はWEB UIのTaggerでswin-v2を使用、Threshold=0.5、Escape bracketsにチェック入れてtextファイルを作成している。
その後、キャプションの整理を行う。手順は以下の通り。
”覚えさせたい要素”のタグを削除(髪型や目の色など)
不要なタグを削除(金髪赤眼だとすぐflandre scarlet付けてくるのやめろ)
画角情報の整理(全ての画像にpotraitなどの画角情報を正しく付ける)
全ての画像にrealisticを付ける(3Dっぽさを吸ってくれると信じている)
noseとlipsを該当する画像に付ける(3Dっぽさを以下略)
全ての画像の先頭に呼び出し用のタグを付ける
筆者はWEB UIのDataset Tag Editorと外部ツールのBooruDatasetTagManagerを併用している。参考までに。
キャプション付けが終わったら縮小版のデータを用意する。クオリティが上がると思っているが、諸説あるので好きにしろ。
筆者は元データを384^2に縮小したものを用意した。キャプションファイルは元データのものを流用する。
元データのnum_repeats=10、縮小版のnum_repeats=2とした。
いよいよ本番の学習である。設定は手順1からdimとalphaだけ変更している。num_repeatsは上述の通り、画像サイズ別に設定。
resolution=512、epoch=10、dim=32、alpha=16、lr=1e-4、text encoder lr=2e-5
そしてここが大事なポイントなのだが、手順1で使用した画風の学習素材を正則化画像として使用する。num_repeatsは1でよい。
モデルに対して強く学習させた画像群なので、正則化画像として非常に適しており、この正則化画像を使用することでLoRA使用時の不要な画風への影響を大きく抑えられる。
終わりに
以上で全ての手順が完了した。後は完成したLoRAを確認してほしい。
感覚的にepoch8~10あたりがよい塩梅になっていると思う。この先はキミの目で確かめてくれ!
と言いたいところだが、さすがに画像も無しに解説を終わるわけにもいかないので、この手法で作成したLoRAを使用した画像を出して終わろうと思う。
t2iで生成した現物、512*768、hires 1.5倍、noteの仕様によりjpegでお送りします。やっぱり金髪エルフは最高だぜ!
2023年6月1日の追記
いくらか理解度が上がったので新しい記事を書いています。
関連記事へのリンクも設けているのでこちらからご覧ください。