こんにちは、スタジオ真榊です。前回に引き続き、illustrious系モデルを使ったCoppy画風LoRAの実験と考察記事をお届けします。今回の実験テーマは、瞳の大きさや黒目の描写などを、適用強度に応じて調整できるLoRAについてです。
前回はこちらの左上の「お手本1girlちゃん」を作ってillustrious用の画風LoRAを学習しましたが、今度はこれを「ベース1girlちゃん」として、「瞳の大きさ調整LoRA」「黒目の大きさ調整LoRA」「黒目の太さ調整LoRA」の三つを作ってみました。
普段使いしているモデルに自分の画風LoRAをマージして「自分モデル」を作るときに、こうした調整LoRAを強弱をつけてマージすることで、より理想の画風にファインチューンするのが狙い。…だったのですが、こうした実験をやっていたところ、調整LoRAには部位によって学習が難しい部位があることが分かり、その原因についてあれこれ実験して考察したのが今回の記事です。
基本的なCoppyLoRAの使い方やコピー機LoRA法の考え方については前回の記事を参照のこと。こちらの記事で触れた部分は再度説明せず、どんどん進めていきます。

こんにちは、スタジオ真榊です。今回は、NoobAIなど生成するたびに顔立ちや画風が変わりやすいIllustrious系モデルに、CoppyLoRAv2を使って「マスピ顔」を作る実験を行いました。うまくいくまでに起きた各種失敗と、そこから分かってきた知見をまとめてレポートしたいと思います。 Illustrious系モデルはNovelAIのように...
まずは一番重要な瞳の大きさを調整するLoRAを作ります。瞳縮小LoRAを作れば、マイナス適用することで瞳拡大LoRAになるわけですから、縮小LoRAと拡大LoRAを両方作る必要はありません。どちらか片方をベース1girlちゃんを加工して作ればOK。
このベース1girlちゃんはすごく目が大きい画風ですので、これを小さくして「お手本画像」としましょう。
やり方は簡単。ClipStudioの「ゆがみツール」の縮小モードを使って、このように目の大きさを縮めるだけです。ツールの範囲はできるだけ下図のように、瞳の大きさとほぼ同じにするのがコツ。
クリックボタンを押している間、このようにきゅーっと小さくなっていきます。ついでに周囲も巻き込んで小さくなるため、ほほや髪の毛のラインが歪んだように見えないよう注意してください。
このように、眉毛や髪の毛にはできるだけ触らず、目の大きさだけを変化させることを心掛けましょう。
あとはCoppyLoRAの「DetailTrainモード」でこのように読み込みます。キャプションは右側のアナライズボタンを押して出てきたものを使用しますが、検出されたタグのうち「bright pupils, white pupils」は画風固有の要素なので削除しておきます。
使用キャプションは上下とも「1girl, solo, breasts, looking at viewer, blush, short hair, simple background, shirt, brown hair, white background, closed mouth, brown eyes, collarbone, upper body, black shirt」ということになります。
RTX4080環境では約40~50分ほどで「shrinkeyes_ill_v1.safetensors」が学習できました。(ベースモデルと何個目のLoRAかを書いておくと便利です)
さっそくXYZ plotでテスト生成してみましょう。-1~+1の範囲で5段階に分けてLoRA適用しました。うまくいっていれば適用度を高めるほどに瞳は小さくなり、マイナス適用するほどに瞳は大きくなるはずです。
こちらが生成結果。
思った通りのものができたようです。もともと瞳が大きい画風なので、ちょっとマイナス適用は怖い感じになってしまいましたね。この調子でどんどん学習していきましょう。
<ちょっと脱線:外出中にCoppyLoRAを学習するには?>
お手本画像をたくさん作っても、一つ一つCoppy学習するのに手間が掛かってしまいますし、学習中はグラボを使う作業ができずやきもきします。外出中にスマホやノートPCから自宅PCのCoppyLoRAを操作して、作っておいたお手本画像で順次LoRAを作ることが可能ですので、需要がある方はささっとリモート環境を作っておきましょう。
やり方はいくつかあろうかと思いますが、こちらの記事の「⑬外出中に母艦PCにアクセスしよう」で紹介しているChromeのリモートデスクトップ機能を使う方法が一番簡単かなと思います。母艦で設定したら、あとは出先の端末からアクセスするだけです。

こんにちは、スタジオ真榊です。この記事は、StableDiffusionのローカル生成環境をより便利にする「TIPSまとめ」です。例えば、通常は縦横2048pxまでしかないキャンバスサイズのスライダーを制限突破する方法や、無数のCheckpointやLoRAを見つけやすく整理する方法、最初にインストールしておくと捗る拡張機能、生成完了...
在宅時間中に学習用の画像ペアをいろいろと作っておいて、外出中に順次学習していくと、時間を有意義に使えるのではないかなと思います。
話を元に戻しましょう。今度は、黒目の大きさを調整するLoRAを作ってみます。さきほどは目全体の大きさを調整するものでしたが、今度は黒目だけですから、できるだけ黒目以外の大きさは変更しないことが重要になります。
さきほどと同様、ゆがみツールの縮小モードで黒目を小さくしようとしましたが、周りを巻き込んでしまってうまく小さくできませんでした。そこで、今度は選択ペンを使って黒目をこのように塗りつぶし、左右別々に切り取ります。
切り取った黒目を別レイヤーとして貼り付けたら、拡大・縮小ツールか自由変形ツールでこのように調整します。どうしてもがたつきは出るので、白目部分を塗りつぶしたりして体裁を整えましょう。
まつ毛の影などが影響してうまくレタッチできない場合は、NovelAIの力を借りてインペイントしてもらうのもいいでしょう。左上の「ペンサイズ:5」となっている数字をクリックすると、塗りつぶす大きさを1ドットまで小さくできる裏技があります。
このように不自然な部分を埋めてインペイント生成するとよいでしょう。
こちらが「三白眼」状態になった1girlちゃん。これで差分を抽出すれば、黒目の大きさを調整できるLoRAができるはずです。
CoppyLoRAの学習手順はさきほどと全く同じですし、キャプションも同様ですので説明は割愛。できたLoRAを使ってテスト生成してみます。
こちらが生成結果。
今度は妙な結果となりました。プラス適用の方は、言われてみればなんとなく黒目が小さくなっている気もしますが、正直「誤差」のレベル。もともと瞳全体に対して黒目の大きい画風でしたので、マイナス適用してもさほど変化が見られません。
前回の記事でわかったコピー機LoRA法のコツは、見た目が変でも構わないので、できるだけ2枚の画像ペアの概念的距離を突き放すことでした。つまり、強度1で適用しても効果が弱い場合は、画像ペア間の変化度合いを強めるとうまくいく可能性があります。「ちょうどいいレベル」をお手本画像にするのではなく「2倍くらいやりすぎたレベル」にすると、適用強度が弱めでも十分効果のあるLoRAが(理論上は)できるはず。
こちらが改善したお手本画像。見ての通り、ほぼ「点」のレベルまで大胆に縮小しました。
できたLoRAでもう一度同条件の生成テストをやってみます。ところが…
残念ながら、さきほどと効果は大差ありませんでした。瞳全体を小さくするLoRAはうまくいったのに、なぜ黒目だと失敗するのでしょうか。
仮説として立てられそうなのはいくつか思いつきますが、この時点では結論が出なかったので、とりあえずいったん次の「黒目の太さ調整LoRA」を作ってみることにしました。
3つめは黒目の「太さ」を調整するLoRA。どちらかと言えば「タテ目化するLoRA」と言ったほうが近いでしょうか。平成前期のサンデー系少年漫画のように(と言って通じるかわかりませんが)、黒目が縦に細長くなる効果のあるLoRAです。
やり方は簡単。先ほど作った三白眼の瞳をこのように下方向へ自由変形させるだけです。ゆがみツールや自由変形ツールを使うと瞳のふちはぼやけてしまうので、できる方はペンツールなどでレタッチしましょう。
これまでと同様、Illustriousをベースモデルにして学習します。
こちらがテスト生成結果。適用度1だとやや細くなった感がありますが、「タテ目」というには今回もちょっと効果が足りない気がします。
下に行くほどに黒目が正円に近づいていく(太っていく)ので学習自体はできているようなのですが、いかんせん細さがたりません。
そこで、今回も「2倍やりすぎる」くらいにお手本を細く作り直しました。さきほどは失敗してしまいましたが、今回はどうでしょうか。
こちらが生成結果。残念ながら、三白眼LoRAと同様に効果は大きく変わりませんでした。
こちらは、強度を「2」にして同じLoRAを適用した結果。画質が低劣化してしまいますが、少なくとも細目にする差分自体は抽出できているようです。ただ、効果が非常に弱い。
効果が弱かった二つのLoRAは、illustriousベースで黒目部分だけを変更して学習させたものです。なぜうまくいかなかったのか考え、いくつか仮説を立ててみました。
①テスト生成のプロンプトにwhite pupilsが入っているため?
illustriousベースで作ったLoRAですが、テスト生成はベースモデルではなく、私がマージしたillustrious系のモデルを使い、画風を出すために「white pupils(白い瞳孔)」入りのクォリティタグを使っていました。あまりに黒目を小さくすると「white pupils」のプロンプト指示が守れないため、瞳孔が確認できるレベルまでしか小さくならなかったのではないか?というのがまず思いついた仮説。
そこで「white pupils」なしで同じ実験をしてみたのがこちら。
瞳孔描写は変化しましたが、黒目が細くなる効果はあまり大きく変わっていないように見えます。よって、この仮説はいったん却下。
②学習が失敗した?
学習自体に何らかの支障があり、きちんと特徴量が抽出できなかった可能性も考えました。ただ、強度2で適用すると狙った要素が出てくるのは確かですし、キャプションにも不審な点はありませんでした。別画像のペアでも学習してみたので、手順や画像選びにミスがあったというのは余り考えづらいところです。
③ベースモデルや賢木画風LoRAの持つ画風と対立しているから?
このテストに使用したモデルは賢木画風(1girlちゃん画風)にファインチューン済のオリジナルモデルです。その画風再現のバイアスと目を細くするバイアスが対立した結果、ほどほどの効果に落ち着いてしまったのではないかーという仮説を立てました。確かに、「こういう丸い目の画風にするように」というLoRAと「細い目にするように」というLoRAが同時適用しているような状態ですから、互いに打ち消しあってしまったというのはありえそうに思えます。
そこで、普段使いしているiostrious(自分モデル)ではなく、学習ベースモデルに利用したillustriousXL0.1をそのまま使ってテスト生成してみました。画風に関するLoRAやタグは使用せずです。
たまたまseed値の引きが悪く右列は崩壊してしまいましたが、いずれにせよこれもタテ目に見えない感じになっています。この画像を見る限り、モデルやその画風が影響しているわけではなさそうです。
③illustrious画風でないから失敗した?
念のため、illustriousのマスピ顔でも学習してみました。
茶髪の1girlちゃん画像ペアが学習に適していないからかと思いましたが、結果は変わらずでした。ここまで派手に変えて差分を取っているはずなのに、ほとんど反応しないというのは不思議です。
③覚えさせようとしたのが、ベースモデルが「既習」の概念だったから?
次に、"ベースモデルがこのLoRAで取った差分を、「constricted pupils」や「sanpaku」といったタグで既に概念学習しているため、それらのタグがPPに使われていないと再現されないのではないか?"という仮説を考えました。伝わりづらいかもしれませんが、画像ペアを見たAI側からすると「ああ、黒目だけ小さくしてほしいのね。知ってるよ、sanpakuとかconstricted pupilsってやつね。はい学習OK。あ、生成するの?でもPPにそのプロンプト入ってないよね?じゃあ再現しなくていいか」となった…という仮説です。
「そんなことあるだろうか?」と思えてしまうのですが、キャラLoRAをはじめトリガーワードつきのLoRAは普通にそういった挙動をします。そこで試しに「sanpaku」をプロンプトに加えてみると、学習させた狙い通りの段階的な黒目縮小効果が出ました。
単に既習の「sanpaku」が効いただけだろう、と最初は思ったのですが、もしそうならマイナス適用だろうがプラス適用だろうが全体的に三白眼になりそうなものですし、-1から1に向かってこのように階段状に目が細くなる結果にはならないはずです。試しにLoRAを適用せず「sanpaku」プロンプトで生成してみましたが、ここまで小さくなりませんでしたので、事実上「sanpaku」がこのLoRAのトリガーワード化してしまったかのような状態です。
原因判明か?と思い「タテ目LoRA」のほうで同じ実験をしたところ、このような該当タグがなかったため、似たような現象は確認できませんでした。「constricted pupils」や「slit pupils」などを試しましたが、単にタグの効果が出るだけで、LoRAのトリガーになっている感じはしませんでした。
なぜ黒目だけなかなかうまくいかないのでしょうか。
④黒目独特の理由?
もう一つ考えられるのが、黒目の大きさは感情によって左右される部位であるという点。ベースモデルは無数のイラストから、黒目が小さくなるのはどういうときか感情表現のタグと紐づいて学習しているはずで、この目の小ささが画風ではなく「感情表現(例:surprised)」と受け止められてしまい、うまく潜在空間上のベクトルに影響を及ぼせなかった可能性に思い当たりました。
もしそうなら、「瞳全体の大きさは画風として理解されるので調整可能だけれど、黒目の大きさは感情表現なので特定の感情タグがないと再現されない」という理由で、効果が今一つうまくいかなかったのかもしれません。そうなると、黒目の操作を単独で画風としてコントロールするCopppyを作るのは難しいことになります。
「黒目の調整」だけが何らかの理由でうまくいかない可能性が出てきましたので、次はこのような髪の毛のハイライトLoRAを作ってみました。
AI絵でよくある輪っか状のハイライトを、小さなドットタイプのハイライトに変化させる調整LoRAです。特に工夫した点はなく、手元のモデルで上の画像を出したら、ハイライト部分を塗りつぶしてちょんちょんと描き直したのが下です。
できた画像をこちらの1girl画像に適用してみます。
こちらが強度0.6で適用した結果。無事ハイライトの形状を変えることができました。被写体への影響もほぼありませんね。
CoppyLoRAの仕組み上、任意の2枚でなんでも画風学習できると考えていましたが、ベースモデルの学習次第によってはうまくできない部位もあるようです。今回は「黒目の形状」に関わるものでしたが、他のユーザーさんのお話で、「頭の大きさを調整するLoRA」もうまくいかなかったと小耳にはさみました。
調整LoRAを使って目の大きさや形状、まつげの描写などをうまくファインチューンした自分モデルを作るためには、適用しただけで画風に影響するLoRAでないとあまり意味がありません。目の大きさ調整LoRA・髪のハイライト調整LoRAはうまくいきましたが、黒目に関するものはうまく学習できませんでしたので、こうした部位の画風を覚えさせたい場合は、前回やった「全く画風の違う1枚」との差分を抽出して全体的な画風のひとつとして覚えさせる方法がよいのかもしれません。
瞳のLoRAについては画風固定の重要な要素と考えていますので、引き続き、何か新しいことが分かったら記事にまとめていきたいと思います。
それでは今日はこのへんで。スタジオ真榊でした。
z-kumagon
2024-12-09 11:11:56 +0000 UTC