Stable Diffusion メモ: Inpaint
Inpaintはすでにある画像をもとに不要な部分を消したり指定した範囲を描き直しさせたりする方法。
以下はAUTOMATIC1111版 WebUIで使用する前提で説明する。
txt2imgで生成した画像を使う方法
Inpaintのもとになる画像は既存画像でも可能だがtext2Imgで生成した画像であるほうが有利である。なぜならその画像を生成に使用したpromptがそのまま活かせるからだ。
text2Imageで出力した画像を使う場合、出力した直後にSend to Inpaintボタンを押せば良い。
img2imgタブへ移動する。既存画像を使うならここに画像をドロップする。
Inpaintタブを開く。
promptは、一旦生成時のpromptをそのままコピペする。必要であればあとで微調整できる。
自分が生成したものでなくても、最近は画像自体にpromptが埋め込まれていることが多い。PNG Infoタブに移動し画像をD&Dすると画像情報が表示されるので、そこにpromptが埋め込まれていないかチェックできる。
メタタグがない画像でもWebUIに標準で搭載されているDeep Danbooruを使えば画像を再現するのに必要なpromptをdanbooruタグ形式である程度推定できる(後述)。
描き直したい箇所をペンで黒く塗りつぶす。
Mask blurを調整する。
いま黒く塗ったエリアにこれから書き直しを命じるわけだが、より自然に合成するにはいくらかの幅の「のりしろ」が必要になる。これはその幅を指定する。小さくした場合、良く言えばエッジが立ち、悪く言えば不自然になる。大きくすれば自然にはなるが周りに影響を与えすぎて意図しない余計な範囲まで書き換えられることになる。2~4くらいが妥当か。
その下のボタンは「Draw Mask」「Inpaint masked」を指定する。
「Upload Mask」とあるように、他のエディタで作成したマスク画像も適用できる。
「Inpaint not masked」を指定した場合、黒く塗ったエリアを残してその他を書き換えるようになる。
Masked contentはinpaintを使用する目的によって異なる。
「fill」を指定すると、塗りつぶす。背景や肌に浮いた余計なオブジェクトやゴミなどを消すのに使う。要するに消しゴム。塗りつぶす色は周囲の色に依る。白一色やシンプルなグラデーションなど単純な模様であればきれいに消せるが、複雑な模様だと難しい。
「original」は上の「Impaint not masked」といっしょに使う。マスクを指定したエリアを「残す」指定となる。後述の「微調整」の用途にも使用できる。
「latent noise」は「このエリアをイチから書き換えろ」の指定となる。やってることは、このエリアに一旦でたらめなノイズ画像を置くことである。後述の「Denoising strength」の値に従ってこのエリアは書き換えられる。
「latent nothing」なにもしない。
描き直したい対象物が細かい模様である場合は「Inpaint at full resolution」を指定する
仕組みとしてはマスクされたエリアを一旦拡大し、画像生成してから縮小してもとのサイズに戻すというもの。マスクしたエリアが小さいほど詳細な生成ができることになる。
この機能を最大限活かすには、画像全体に対してできるだけ小さい矩形に収まるマスクエリアであったほうが良い。たとえば画像の上端と下端を一度に塗ってしまうと、真ん中が無駄になってしまうので、上部と下部で2回に分けて生成したほうが良い。
ただ肌の汚れを消したいとかの単純な修正であるならチェックする意味はない。
「Inpaint at full resolution padding, pixels」はよくわからん、どれだけ周囲の空気を読むかみたいなものかもしれない
「Just resize」「Crop and resize」「Resize and fill」は対象画像が512x512の正方形でなかった場合、サイズあわせをどうするのかの指定。
「Sampling method」「CFG Scale」「Seed」はこの画像を生成したパラメータと全く同じものの指定を推奨。これらを変えてしまうと大きく内容が変わってしまうおそれがある。Seedは隣にあるリサイクルボタンを押すと画像に含まれている値を取得して指定してくれる。メタタグがうめこまれてない場合は運を天に任せてランダム(-1)にするしかない
「Width」「Height」を使用してアスペクト比を変更すると画像の一部を切り抜ける。ただAUTOMATIC1111版では横にずらすことができないため構図の変更手段としては使いにくい。
「Denoising strength」の設定は目的によって異なる。
先述のMasked contentに「latent noise」を指定して「イチから書き直せ」としたい場合。Denoising strengthの値は標準で0.75だが、これは結構下限なのでもっと上げて1でも良い。標準以下に下げてしまうと、書き換えきれずにノイズが残ってしまう。0にすると幾何学模様が描かれる。
自分でコラージュした画像の違和感をなくす仕事をAIに任せたい場合、Masked contentに「original」を指定したうえでDenoising strengthはかなり低めに設定する。微調整の範囲に押さえてくれる。
既存画像(promptがわからない画像)の場合
大体の場合において画像サイズは512pixよりも大きいと思うので、そのまま使わずにまずは一旦長辺512pix以下にリサイズしてからアップロードする。512の部分はメモリと相談。
promptは自分で判断して書いてもいいが、標準搭載されているDeep Danbooruを使用すると、画像の内容からpromptの内容を自動で推測してくれる。AI画像でないイラストや写真からですらもpromptを作れるので便利。「Interrogate DeepBooru」ボタンから利用できる。
あとは上記セクションとほぼ同じ流れ。
Img2Imgをアップスケーラー目的で使う場合
といっても単純なアップスケーラーであればExtraでできるので、img2imgを使うということはディティールを足したい用途になる。
Just Resize(LatentUpscale)にし、
Denoise Strength を0.4にする
0.5付近だと結構「書き換え」が生じてしまう
0.3付近だとノイズが取り切れない
プラグインを使えば拡大アルゴリズムを指定できる