
こんばんは、スタジオ真榊です。今回は、先日公開した差分LoRA学習アプリ「Copita」のv1.2開発中に徹底検証したスライダー系LoRAの実験記録をまとめてみようと思います。
今回作ったのはAnima向けのBold LoRA。単に線を太くしたり細くしたりするだけでなく、「絵の中身はできるだけ変えず、線の太さだけを変えるLoRA」の作り方を各種検証しました。こちらが完成したBold LoRA。(CivitaiでどなたでもDLできます)

最も有効だったのは、学習対象をセルフアテンションに絞り、複数のLoRAから副作用の少ないものを選んでフュージョンする方法でした。絵の内容が1ミリも変わらない完璧なLoRAまでは作れませんが、それに向けて精度を高めていくやり方はおおむね理論通りになったかと思います。
「試したけどダメだった失敗例」もできるだけ多く記録しておきますので、描きこみ量を操作するFlat LoRAや体型を操作するLoRAなど、別の調整系LoRAを作る参考としてお使いください。
【ダウンロード】
はじめに
Copitaはご存じの通り、以下のようなフローでペア画像の「差分」を学習するアプリです。
①学習させたい画像(例えば、線が太い絵)をユーザーが1枚用意する
②内容が同じで、その要素だけが違う画像(例えば、線が細い絵)を画像生成などで作る
③それぞれから「その画像しか描けないLoRA(コピー機LoRA)」をCopitaが学習
④片方からもう片方を引き算すると、狙った効果のLoRAになる

引き算をすると、2枚に共通している要素、つまり人物や服や構図が互いに打ち消し合うので、ペア間で違っている部分だけが残るーというのが基本的な仕組みです。ただし、実際には完全に打ち消し合うことはできず、「カス」のようなものが差分として残って予期せぬ副作用を生じさせることがままあります。そういうときは、「LoRAフュージョンモード」を使って同種のCopitaLoRAを複数融合することで純度を高めることができます。
詳しい使い方や学習例はこちらの記事をご覧ください。

旧バージョンで学習したBold LoRA
こちらは、アップデート前の「v1.11」を使って学習した3種類のBold LoRAです。中央の1枚から左(プラス方向)に行くほど線が太くなり、右(マイナス方向)に行くほど細くなりますが、御覧の通り指示していない肌色が生じたり、容姿が微妙に変化してしまったりといった「副作用」が生じています。

学習に使用したのはこちらの3ペアです。線画の太さだけを変更したつもりですが、例えば影のグレー部分の濃さに上下で差があるなどしており、こうした差分も「ごみ」としてLoRAに混入した可能性があります。

線画ではなく、カラーのひまわりイラストでも同じ3本の比較をしてみました。こちらも、帽子の質感や背景のひまわりの位置、少女の背の高さなどがまちまちに変わっているのが分かります。(手前にある腕の角度だけを見比べると分かりやすいです)

これでもBold LoRAとしては使えないことはありませんが、より精度の高いLoRAを作れる「v1.2」を作るにはどうしたらいいか探っていきました。まずは既にある「LoRAフュージョンモード」を使って3つのLoRAを融合してみます。
<LoRAフュージョンモード>
Copitaには、メインの「差分LoRA学習モード」のほかに「LoRAフュージョンモード」というタブがあり、できあがった同じ効果のLoRA同士を合成して、より精度を高めることができます。さきほど別々のペアで3本のBold LoRAを作ったわけですが、これらを混ぜて平均化すれば、肌色になったりポーズが変わったりする副作用が弱まり、線を太く(細く)する効果だけを残しやすくなります。

このように、先ほど作ったBold LoRAを三つ選び、2:1:1の割合でフュージョンします。(一つ目を他の倍の重みにしたのは、プラス方向で肌色が生じないなど効果が安定していたため)

こちらが比較図。さっきと同じ3段の下に、新しく4段目として、3本を混ぜたフュージョンLoRAの生成結果を並べました。

お分かりのように、上の3段では肌色になったり位置が変化したりする副作用があったのに、最下段のフュージョンLoRAではきれいに消えています。線画を太く(細く)する効果も上の3段と比べて弱体化していないようです。
線画でなく、カラーのひまわりイラストでも試してみます。

こちらはやや分かりにくいですが、右下のひまわりの葉(葉脈)に注目してみると、上の3段よりも最下段は変化が少なく、正確に描画できているように見えます。(ただ、右手が下がったり、リボンの形状が変化したりといった副作用が一部継承されてしまっています)
v1.11時点で一番よい結果だったのがこの合成版でした。以降このLoRAを「Champion」と呼ぶことにし、これを上回る精度のLoRAを作るやり方を探っていきます。

改良実験①:白帯加工をやめる
さて、先ほどのChampionをより精巧に学習できるよう、v1.2ではいろいろな改善策を試しました。まずトライしてみたのは、入力画像の前処理です。
v1.11までのCopitaは、入力された画像が縦長でも横長でも、いったん正方形になるよう白い「余白」を足してから学習していました。最後に「引き算」されるとはいえ、これだと余計な要素が混じってしまいますし、学習してほしいメイン要素がキャンバスに対して狭い範囲になってしまいます。そこで、Codexを使って元の縦横比のまま学習できるように改良しました。
ところが、この状態でBold LoRAを作ってみると、こうなりました。上段がさきほどフュージョンモードで作った「Champion」で、下段が「白帯加工をやめた版」の新しいLoRAです。

さきほど作ったフュージョン前のLoRAと同様に、目の形が変わったり肌色が出たりしていますね。理屈では学習効率が改善したはずですが、「フュージョン不要」と言えるほどの抜本的解決とはなりませんでした。






