LORA学習キャプション方式におけるタグ付けの考え方

前回の記事で書こうと思ったけど長くなりそうなので別にする事にしました。

アイちゃんは全裸

僕はタグ付けをする度にこの言葉を思い出します。良い言葉だ。この言葉を軸にU-NETとテキストエンコーダ(以下TE)の関係をざっくりとでも理解していればOK牧場。

教師画像をそのまま覚えるU-NET

U-NETは学習の核の部分です。1枚の画像を完全なノイズになるまで段階的にボカしてその都度プロセス前後の差分データを記録するインプットフェーズ、ノイズに差分データを掛けて元の画像を目指すアウトプットフェーズ、そしてインプットとアウトプットの狭間にある次元数(Rank,dim等の事)の3要素があると把握しておけばとりあえずは良いです。

テキストで助言するTE

ただ画像をボカして戻すだけでは深界6層を行き来する様なもので何の祝福も得られません。UNETはフェーズ毎に顔だったり身体だったり服飾だったりを大まかに理解し学習をする事が出来ますがTEが各プロセスに介入し、「実は腕だよ。それはなんと足だよ。この模様はモフモフだよ」と耳打ちをします。これがタグの役割です。TEはgoogleが持ってる言語情報と画像データを基に作られたもので割ととんでもない情報量があるので特に少ない枚数の場合や要素にバラつきのある教師画像でLORAを作る場合に積極的に利用したいものです。例えばよくあるタグ付けルールに従って「ランダムな文字列, 1girl, キャラネーム, simple background」のみを残したキャプションを作成する事になった場合、TEの助言を全く受けられないばかりか教師画像のほぼ全ての要素がこのたった4つのタグに集約される事になり非常に汎用性の低い学習をしてしまいます。これが多くの解説でも言われる「1girlの意味が変わってしまう」と言う部分です。

アイちゃんは全裸

つまり「アイちゃん」のみが残ったキャプションで学習したLORAはどう見ても全裸です本当にありがとうございました(全裸とは言っていない)。教師画像の絵柄でアイちゃんがとりあえず出力出来ればいいなら確かにこれで十分です。逆に言えばタグを消し過ぎてしまった事で本来なら存在していた「shirt, shorts, long hair」その他背景の要素などまで含めて概念が歪んでいると見る事も出来ます。こうなると余計な要素を含んでごちゃまぜになった歪な出力が出る可能性がかなり高くSAN値ピンチです。

教師画像の前処理

教師画像の前処理として背景から切り抜いて白背景にしておくか元の画像のままにしておくかで意見が割れると思います。私見ですがキャラクターLORAを作る分にはこれはほぼ不要であると思います。経験的に教師画像はsimple backgroundであるか、背景が描かれている場合はキャラクターの世界観をしっかり反映している場合が多くこの2パターンならば敢えて白に変えてしまうよりはそのまま学習させた方が楽です。何より白抜きが多いと適当に生成した時不自然な背景になったり全体的にハイキーな絵が出るLORAになり扱いづらいです。オリジナルキャラクターを学習させる等の仕事用途ならば白背景の方が良いでしょう。ただzoom layerの様に見えて別アングルだったり複数キャラがいる場合は生成画像にそのまま現れてしまうのでこれは切り抜き推奨。reference sheet、turn around等タグ付けが可能な場合はその限りではない。また教師画像サイズは大きすぎるとメモリーの無駄遣い♠になるので目的の解像度に合わせて適宜調整。逆にLORAの指定解像度を下回ってしまう解像度の教師画像が含まれていると出力のクオリティに大きな影響が出てしまうので残念ながら取り除いた方が良い事が多いです。同様の理由で解像度が高くてもラフに近い絵であったりシンプルな引き延ばしなんかだと1枚でも影響が出てしまうので剪定をします。悲しい。あくまで教師画像としての役割ではなかっただけなのです。ラフでも雰囲気良い絵だったりすると尚更。

まずはたくさん付けよう

何はともあれまずは沢山タグを付けます。1111でTaggerを使ってタグを付けるのですがタグ付けにもModelがあり、最近のアプデで古いtaggerが使えなくなった事でこの辺りもいくつか試用を強いられたのですが私はWD14 moat tagger v2の精度がよさそうに感じます。特にポーズや表情などはほぼ間違わないのでタグ修正が非常に楽です。この時にweight thresholdとMin tag fractionを低めにしておくと細かい要素までタグを拾おうとしてくれるのでオススメです。私は左から0.1、0.01に設定しています。こうする事でポーズや細かな装飾、数ドットの前から見えるおしりまでしっかりタグ付けてしてくれます。

デフォルトでは0.35、0.05になっているが足りない

とは言え多すぎるのも良くない

タグを付けすぎると画像生成時にタグを付けるのが面倒です。キャラクターの特徴は消す。と言うのはこの部分で、絶対に変更を加えないそのキャラクター足り得る要素(髪や目の色)は積極的に消す事でトークンの節約をします。こう言った要素は教師画像に満遍なく含まれているのでタグを付けずともUNETがしっかり学習してくれます。ただ特定の作品群(グラブルやら艦これやら)を示すタグはTEの影響が強すぎて過学習になる事もあるのでこれは消す事もあります。またLORA学習は75トークンが上限なのでタグが多すぎると1単語毎の重みが減ってしまいます。私はキャラクター学習であってもshuffle captionsする派ですが理由はトークンの勾配が面倒だからです。タグが先頭にある程重みが付くのですが75トークン制限の中で1ファイル毎にタグの順番まで気にするのはかなり骨が折れますしshuffleしておけば過学習の防止にもなります。

タグ付けは教師画像の要素整理

UNETは特に顔や髪型をよく覚えるので何はなくともタグから消してしまっても良いですが、特にfrom behind, from side等のカメラアングルは間違えると身体が捻じれた絵が出る原因になりやすく注意が必要ですし自動タグ付けで誤認されやすいタグでもあります。またポーズ系のタグはデフォルトの閾値では省略されがちなのでこれにもしっかりタグを付ける事でポーズ固定化を防ぐことが出来ると思います。この事から更に言えるのはLORAとして学習させたくないタグは消してはいけないと言う事です。理由はもちろんお分かりですね?不要な要素が他のタグに集約され、他の概念を破壊するからです!教師画像の段階で選別しきれなかった要素は不要だからと言って消してしまうと別の意味のタグとしてまとめられ学習してしまうんですね。学習時タグ付けしておけば出力時には呼び出さない限り現れない訳です。個人的にはこのタグ整理がLORA作成の楽しい部分でもあります。

と言う訳でタグ付けの話でした。

与太話

前回の記事であたかもLoHAのおかげで過学習が防げているかの様な事を言ったな…あれは嘘だ。
嘘とまでは言えないかも知れないですが、LOHAの固定力高めだなーって言う話も聞くし自分の作るLOHAも少し硬い絵になる印象があったので一旦standardLORAに戻して色々学習させているんですけど、場合によってはdim1でも学習がちゃんと収束するのでTEが優秀でしっかりタグ付けする事が有効なのかprodigyパワーなのかちょっとまだ良く分かっていません。ただ高dimで学習する時と比べて低dimではキャラクターのアウトラインが太目で出力される傾向にあって解決方法を模索中です。今の所は教師画像、alphaを1に固定してる、学習不足、等を考えています。

この記事が気に入ったらサポートをしてみませんか?