stable diffusion でLoRAを使用した時に画像が崩れる場合の対処法
stable diffusionにおいてLoRAを導入することは多いと思いますが、うまく生成されないことがあると思います。
その時の対処法を覚書としてここに示します。
ポニーテイルのLoRAを導入したのですが、以下のような画像になってしまいました。
確かにポニーテイルの女の子ではありますが、なんというか塗りとか線がガビガビ、グダグダな汚いクオリティの低い絵になっています。
これをプロンプトの一文字だけを変えることで以下のように激変します。
塗りや線が大分ましになったのではないでしょうか。
例として、短い構文でパっと出しただけなので細かい部分で調整する箇所はありますが、とてもほぼ同じプロンプトだとは思えないのではないでしょうか。
一体どうすると改善できるのかは以下で説明します。
やったことは極々簡単で、プロンプトの『ウエイト』を弄りました。
今回使用したLoRAは、Civitaiで配布されているポニーテイルのLoRAになります。
このLoRAを使用すると以下のプロンプトが挿入されます。
<lora:long_ponytail_hairstyle:1>
これに、絵に必要なプロンプトを加えたものが以下になります。
(表示の一部が隠れていますので、スライダーを動かして確認してください。)
masterpiece, best quality, highres, 1 girl, black hair,black dress, ribs, long_ponytail_hairstyle, <lora:long_ponytail_hairstyle:1>
この状態で出力したものが、前述の『失敗例』です。
このLoRAのプロンプトを改善したものが以下になります。
<lora:long_ponytail_hairstyle:0.5>
お分かりいただけますでしょうか?
LoARのプロンプトの最後の数字を、『1』から『0.5』に変えています。
こうすることで、LoRAの影響力を下げることができるのです。
この影響力のことを「ウエイト(強調)」といいます。
このウエイトを調整し下げた状態で出したものが改善例です。
ちなみにここで設定できるのは、通常は『0~1』までの間です。
『0』は全く影響を与えず、『1』はLoRA本来の強さとなります。
どのように変化があるのかを知るために、同じ構成でLoRAのウエイトを「0.1~1」まで5段階に変化させたものが以下の画像になります。
上記の通り数値が『1』に上がるほどプロンプトの影響を受けて絵柄が変わっているのが分かっていただけるかと思います。
それに合わせてモデルが得意な構図のバストアップから、LoRAが得意な構図のカウボーイショット(膝から頭まで)の構図に変わっています。
特に見るべきは『0.5』と『0.75』の間で、この辺りに構図としての境目があるのがよくわかると思います。
モデルとLoRAの影響力の関係がよくわかるのではないでしょうか。
『0.5』と『0.75』の間では、構図の変更と同じくして、余分なディティールが服装を中心に入っているのがお分かりいただけますでしょうか。
なぜこのようになるかといいますと、AIは何回も繰り返し画像を理想に近づけ出力するにあたり、プロンプトの中で影響力が大きい場合、その部分を強調しすぎてしまうことになります。
つまり要素が過剰な状態になり、上書きに上書きされて他の要素を塗りつぶしていきます。
人間が絵を描くなら違和感を感じたらやめますが、AIは愚直に言われたことをやり続けるためにこういった事態になります。
このLoRAの場合は、服装にも影響を与えるLoRAなので、それが悪さしているように見えます。
この影響力を調整して抑制した状態が今回の例になります。
また先ほどウエイトは『0 ~ 1』といいましたが、実はそれ以外も実質的には入ります。
マイナス表記にすればLoRAの影響を引くことができますし、大体破綻しますが倍掛けにすることもできます。
上記のように数値を変えただけですが、出力されるものは全く別のものになります。
プロンプトにLoRAトリガーワードで『long_ponytail_hairstyle』が入っていますので、それに反応してウエイト『0』が割合マシというのは何とも言えない結果ですが。
ウエイトの『2』は完全に重複に重複を重ねてもはや形がなくなってしまっています。
マイナスのものは、今回のLoRAでは破綻してしまいました。
この辺りは出力されたものを見て上手に調整する必要があるかと思います。
またLoRAのウエイト調整は複数のLoRAを使用する上でも役に立ちます。
例えば今使ったポニーテールLoRAに、このままアニメ塗りとディティールを増やすLoRAの2つを追加しますと、出力される絵が破綻してしまいます。
これをLoRAのウエイトを調整することで破綻しないように調整できます。
以下最適な調整度合いを見つけるために、『X/Y/Z plot』でウエイトの組み合わせをしたものになります。
(各LoRAを単体でウエイトを確認し、破綻しないライン以下で組み合わせると簡単に見つかります。この辺りは適応させるLoRAのどれが優先か、にもよりますのであくまでも一例になります。またわかりやすい失敗例としてウエイト『1』を入れていますが、本来は必要ではありません。)
何となくですが、ディティールが「0.2」のポニテが「0.4」、アニメ塗りが「0.2」がよかったのでこれをプロンプトに反映させます。
反映させたものに、ポーズを追加したものが上の画像になります。
破綻せずに好みの絵柄で画像が出力されました。
こうなれば後はまたプロンプトを調整していって、背景などを仕上げたりしていくことになります。
いかがだったでしょうか。
LoRAを入れることで絵柄を無視して絵が破綻する理由は至極簡単で、LoRA自体のプロンプトの強調が強いからです。
最適なウエイトはLoRAの学習状況や、一緒に使うLoRA、モデルなど様々な要因で変わってくるため、今のところウエイトの調整はAIを使う側の腕の見せ所です。
本稿ではLoRAに主眼を置いて解説しましたが、通常の文字プロンプトでもウエイト強調しすぎると破綻の原因になりますので、そのあたりも見ていただけたらと思います。
ちなみに今回はたまたまモデルとの相性が悪く失敗例のようになりましたが、LoRAの推奨モデルであれば調整不要な場合もあります。