こんにちは、スタジオ真榊です。今回はコピー機LoRA法を使って、ADetailer専用の画風LoRAを作る方法についての記事をお届けします。

ADetailerは皆さまご存じの通り、キャンバス内の顔面や手の部分をAIで自動検出して、範囲内をプロンプト指示通りにimage2imageして詳細化できる拡張機能。普通、画像生成では描写するもののサイズが小さいほど細部が潰れがちになるので、この機能によってより高精細なイラスト作りを目指すわけですが、ここで専用の画風調整LoRAを適用することで、瞳のデザインや顔立ち、手の細部などを任意のものに調整できるのではないか?というのが今回の試みです。

こちらが賢木瞳LoRAをADetailer適用した例。

左のお手本画像の瞳デザインが、ピンポイントで金髪キャラクターの瞳に適用できており、瞳以外のデザインを侵していないのが分かるかと思います。

専用LoRAを作るメリットは、キャラクターの印象を決める瞳をピンポイントで、かつ高強度で修正できることです。画風LoRAをキャンバス全体に高強度で効かせた場合、キャラクターを思い通りのデザインに寄せられたとしても、その分構図がおかしくなったり、背景がきれいに生成できなくなったりするもの。それを避けつつ、一貫した顔立ちや瞳を再現できるやり方ではないかと期待しています。

記事の前半ではADetailer用「瞳LoRA」の作り方と使い方を、後半ではより難しい、顔全体に統一感を与える「顔LoRA」についての研究結果をまとめています。

コピー機LoRA学習には、今回も「CoppyLoRA webUI v2」を使用します。導入法や基本的な使い方についてはこちらの記事を参照のこと。

1.ADetailer専用「瞳LoRA」 - 作り方 -

まずは、さきほどのツイートの瞳LoRAの作り方をざっくり振り返ります。

こちらのお手本画像を最初に作りました。プロンプトは「1girl,close-up,detailed eyes,(ringed eyes:0.8),lens_eye,detailed eyelashes, masterpiece, best quality, newest, absurdres, highres, safe,, white pupils,general,detailed pupils,blue eyes」。生成したそのままではなく、破綻部分を手書きでレタッチしています。

1.ADetailer専用「瞳LoRA」 - 作り方 -:図版1

上のお手本をimage2imageで「破壊」したのがこちら。描かれているものの位置はできるだけそのままにしておいて、画風を遠く引き離すことで、上の画風をしっかり覚えてもらいます。プロンプトは「1girl,close-up, masterpiece, best quality, newest, absurdres, highres, safe,, white pupils,general,detailed pupils,blue eyes,<lora:sdxl-flat:2><lora:sdxl-boldline:2> 」。過剰適用した二つの月須和LoRAによって、もとの繊細な塗り方をしっかり壊しています。(目の位置はそのままなため、変更されるのは塗りのみです)

1.ADetailer専用「瞳LoRA」 - 作り方 -:図版2

あとは簡単ですね。CoppyLoRA v2を起動し、普段使いのモデルをベースモデルに選んだら、このように画像とキャプションをセットします。

1.ADetailer専用「瞳LoRA」 - 作り方 -:図版3

「detaileyes_v1」と名付けたこのLoRAで普通に1girl生成すると、このように瞳に影響するLoRAになっています。しかし、アップで学習させただけに、目のバランスがおかしくなっていますし、close-upの効果で出た鼻の上の影なども影響してしまっていることがわかります。

1.ADetailer専用「瞳LoRA」 - 作り方 -:図版4

2.ADetailer専用「瞳LoRA」 - 使い方 -

では、さっそくADetailerを使って、このLoRAを目だけに効かせてみましょう。Adetailerの導入法や基本的な使い方はこちらの記事を参照のこと。

デフォルトでは、顔を検出するモデルや手を検出するモデルしかありませんので、Civitaiから「瞳の位置を検出するモデル」をDLしてくる必要があります。記事執筆時点では、片目ずつ検出できるモデルと、両目をいっぺんに検出するモデルの二つがあるようです。

<片目ずつ>

<両目同時>

導入はごく簡単。DLしてきたzipファイルを解凍して、出てきたptファイル(下図)をStableDiffusionの「Models\AfterDetailer」フォルダに保存するだけです。

2.ADetailer専用「瞳LoRA」 - 使い方 -:図版1

するとこのように、Adetailerのモデル一覧に同じptファイルが表示されるようになります。ちゃんと表示されない場合はwebUIを再起動しましょう。

2.ADetailer専用「瞳LoRA」 - 使い方 -:図版2

あとはこのように、片目か両目のどちらがいいかでモデルを決めて、先ほど作った「detaileyes_v1」を強度1で掛けるだけです。detailed eyesやdetailed eyelashesを盛り込むとよさそう。

2.ADetailer専用「瞳LoRA」 - 使い方 -:図版3

するとこのように、通常生成に引き続いて瞳が検出され…

2.ADetailer専用「瞳LoRA」 - 使い方 -:図版4

その範囲内のみにLoRAが適用されてアップスケールされます。

2.ADetailer専用「瞳LoRA」 - 使い方 -:図版5

こちらが生成結果。瞳だけがアップスケールされました。また、瞳以外には影響が出ておらず、もとのカラーリングや表情を維持しながら画風だけをコントロールできていますね。

2.ADetailer専用「瞳LoRA」 - 使い方 -:図版6

駆け足で見てきましたが、これがADetailer専用部位LoRAの基本的な作り方/使い方です。ADetailerの設定はデフォルトのままでも良いですが、場合によって次のように操作するとよいでしょう。

・角度によって片目が検出されないことがある

下の画像のように、片目しか検出されない場合、ADetailer設定の「Detection model confidence threshold」(検出閾値)を引き下げることで、検出ハードルを低くできます。

・角度によって片目が検出されないことがある:図版1

例えば、検出モデルはいま、向かって右の目を「85%の確率で目」と判断していますが、もし「Detection model confidence threshold」を0.86(86%)に設定していた場合、これは無視されることになります。デフォルトは0.3(30%)なので、「30%以上の確率で目」と判断されたら検出される設定。これを下げることで検出される場合があります。

ただし、どんなに下げても片目が目と判断されない場合はどうしてもあるようですので、そこは検出モデルのアプデに期待しましょう。ちなみに、下げすぎるとすべてが目として認識されてしまい、大混乱します…。

・角度によって片目が検出されないことがある:図版2

片目検出モデルの方は、画風にもよりますがけっこう両目検出に失敗することが多いです。頻繁に失敗するようなら、両目検出モデルを使いましょう。

・目ではないところが誤検出される

あまりないとは思いますが、目ではないところが誤検出されてしまう場合は「Detection model confidence threshold」を高めるか、最大検出数(Mask only the top k (0 to disable))を2にするのがよいでしょう。これで、左右の瞳以外にもし瞳に見えるエリアがあっても無視されます。

・画質をもっと上げたい

ADetailer設定の「Inpainting」項目を変更します。

「Inpaint denoising strength」でインペイント強度を強めればよりLoRAの影響を強めることができますが、中身はimg2imgですので0.5より強めると崩壊しがち。

「Use separate width/height」にチェックを入れ、縦横のサイズをより大きくするのも効果的ですが、これもInpaint denoising strengthが強すぎると崩壊を招くので、それぞれバランスを取りましょう。

※「Inpaint only masked(マスクした範囲のみをインペイント)」をOFFにしていた場合、アスペクト比がキャンバスと一致していることにご注意。

・画質をもっと上げたい:図版1

・ふちがくっきりしてしまった

ノイズ除去強度が強すぎたり、あまり無理な変更を掛けようとすると、このようにADetailerが掛かった正方形のふちがはっきり見えてしまうことがあります。Inpaint mask blurを20px~64pxくらいまで上げると、ふちがぼやけて隠せますが、あまりぼけすぎるとADetailer前の画像が透けて変になるので、バランスが重要。

「Inpaint only masked」を外すと、マスク外が変更される恐れがありますが、ふちがより自然になります。

・ふちがくっきりしてしまった:図版1

<実際の生成例>

こちらはInpaint denoising strength:0.5、ADetailerのサイズ:1024x1408(全体キャンバスサイズと同値)、Inpaint only masked:オフで生成したもの。範囲内外が切れずに、描写力が上がっていることが分かるかと思います。

実際の生成例:図版1