適正な解像度で描こうじゃないか!
最近、midjourneyがv6となり、その完成度の高さには目を見張るものがあります。しかし、Ai画像の魅力は何と言っても、プロンプトで指示した絵をAiが描いてくれるところにあります。midjourneyもDALLE-3もスタンドアロンのサービスではないので、大量に描くことは難しいし、NSFWな感じの絵はブロックされて描いてくれないという話も聞こえてきます。(少なくともMicrosoftのcopilotでは描けませんでした。)そこに行くと、我らがStable Deffusionはスタンドアロン環境で動かせるし、NSFWもOKなので、時間とマシンさえあれば画質はそこそこですが時々いい絵を描いてくれるのです。しかも、iOSかMacOSがあれば、DrawThingsを入れるだけで始められますから、お手軽度も抜群です!(高性能グラボ+Web-UIには敵いませんが)
さぁ今日も行ってみよう!
ちょっとNSFWな絵を描くぞ〜と、SD1.5のお気に入りのモデルを使って意気揚々と描いてみたけど、こんな感じで顔が変・・・。となった経験はありませんか?
モデルがおかしいわけでも、プロンプトがおかしいわけでも、マシンスペックが低いわけでもなく、普通に起こることなのです。
人の顔はとても情報量が多いので、プロンプト(テキスト)→イメージの段階で、単位面積あたりの情報がオーバーフローしているから起こる現象なのです。
従って、この後i2iで2倍程度にアップスケール(前回の記事参照)すればだいぶマシになります。
ただし、2倍にi2iアップスケールする場合は、イメージサイズを1024×1536にするので、iPhoneとかでメモリが小さいと描けない可能性があります。その場合は、イメージサイズを512×768のまま、キャンバスサイズだけ2倍にして、強度30%程度でi2iしてみましょう。
すると、こんな感じになって、顔の崩れはだいぶ軽減されます。
あ、これいいわ!となって、SAVEボタンをクリックすると、周囲の部分も含めて保存されてしまうので、右クリック(長押し?)して、Save visible regionで再作画した部分だけ保存しましょう。
どうせなので、キャンバスサイズを4倍(4倍ズーム)にして、強度30%でi2iしてみました。
写真のズームと違って、i2iなので毎回作画します。最初の顔から見たら、全くの別人になりますが、Aiとはそういうもの。面積が広くなれば顔のパーツを描く際にも面積に応じて色々細かく書き込んでくれるのです。
従って、描く際に気をつけなければならないのは、まずは適正な解像度で描くという事です。そしてそれは、SD1.5のモデルは、512×512の画像でトレーニングされているので、短い辺を512にして(SDXLなら短辺を1024に)描くと言うことが基本になります。顔を綺麗に描きたい場合は、ある程度の面積を顔に割く必要があるということがお分かり頂けたでしょうか?
より大きな画像サイズで描く場合は、Hi Resolution Fixを有効にして描くと言う作戦がありますが、時間がかかります。
時間がかかってもいいという人はいると思いますが、 Hi Resolution Fixは一旦短辺が512の画像を描いて、それを自動的にi2iするスキームです。
ユーザーは一旦描かれた画像をぼんやりとしか見ることが出来ないまま、自動的にi2iされてしまうのです。結果としてイマイチな場合は多いです。だから、短辺512の画像を数多く描いて、その中から顔が変でも構図が気に入ったのを手動i2iした方が時間効率が上がるのです。
Inpaintにおける解像度
さて、ある程度納得した絵が描け、i2iでアップスケールしたけど、右手の指が〜とか、襟が〜とか、ほんのちょっと直したいからInpaintで直そうとしてもなかなか思い通りにならないという経験は山ほどあります(よね?)
ここでも、解像度を合わせると言うことが重要になってきます。i2i前に修正すべきところは修正するのが基本ですが、i2i後に修正する場合はほぼうまくいきません。しかも、イメージサイズが大きくなっている場合は時間だけがかかり、更にうまくいきません。
そんな時は、
キャンバスサイズを512×512に戻します。
ControlNetにInpaintを100%でセットします。
必要に応じて、LoRAもセットします。
として、描きなおしたい部分を消しゴムで消してマスクします。(面積が広い場合は先に消しゴムの方がいいけど・・・。)
と、セッティングをこんだけ変えるのですが、毎回手動でセッティングするのは面倒なので、セッティングを保存しておくと、一発で呼び出せるので便利です。
例えば次のプロンプトで書いた絵です。
夕方の裏路地みたいになりました。例によって、顔はめちゃくちゃ変ですが、正面を向いていないのがちょっと面白いので、いじってみようと思います。まず、普通にキャンバスサイズを2倍にして、強度30%でi2iをしてみました。
まぁまぁ見れる顔になりましたが、まだちょっと崩れていますね。顔の面積をもうちょっと大きくするために、更にキャンバスサイズを拡大して、強度50%でi2iしてみました。
なんか少し表情が固くなってしまいました。そこで、Inpaintで表情を変えてみたいと思います。
さっき保存したInpaint用のセッティング(イメージサイズ512×512、ControlNetにInpaint100%)を呼び出し、顔の部分を消しゴムで消してマスキングします。
プロンプトを「Happy」のみに変えて、強度70%でi2iをかけて数枚描かせました。そして、一番気に入ったのがこれ。
と言うことで、キャンバスサイズを1024×1536に戻し、座標も戻し、REAL-ESRGAN 2+でアップスケールし、Save visible regionでi2iした部分だけ保存したのがこちら。
こんな作業で私は絵を描いています。
お正月早々日本では色んなことが起こってしまい、胸が痛いですが、少しのんびり出来るのがお正月。今年もどうぞよろしくお願いいたします。