StableDiffusionで絵を書いていると、人を描くと微妙に服装が気にいらなかったり、
背景で一部だけおかしかったりということが良くあります。
それさえ無ければ良い絵なのに、という人のために今回は「Inpaint」と言う機能を使って、不要な部分の変更や削除を行う方法について説明します。
結果
・微修正したい絵のプロンプトは必要
・変更したい状況に合わせて設定値を決定する
・「Masked content」の設定で、大きく絵が変わる
この記事を読むと
Inpaintを使用した服装や背景だけの変更方法の詳細が分かります。
※記事内に広告が含まれています。
inpaintとは
『Inpaint』はimg2imgで使用する、元画像を原本に編集を行う機能です。
制作者が不要と判断した部分を白塗りして、元画像の中から白塗りした部分だけを改めて作成します。
また白塗りした部分以外の修正も可能です。
キャラの一部や背景に不要なオブジェクトがある場合は、白塗りした部分を変更、キャラの背景を変えたい場合は白塗り以外を変更すると良いでしょう。
inpaintのインストール
標準機能でついているため、追加インストールは不要です。
※ControlNetにも同機能がありますが、今回は通常機能の方を説明します。
inpaintのパラメータ
Resize mode
取り込んだ画像がRisize toで指定した縦横幅と違う場合の処理ですが、基本的に同じ縦横幅の画像を使用した方が良い結果が得られます。
名称 | 効果 |
Just resize | 指定した横縦幅に合わせてリサイズ |
Crop and resize | 一部カットしてリサイズ |
Resize and fill | リサイズしてできた余白は塗りつぶして出力 |
Just resize (latent upscale) | latent upscaleを使用後、Just resize同様の処理を実行 |
Mask Blur
範囲を指定した部分の境目に、どの程度ぼかしを加えるのか設定することができます。
Mask Blurの値を大きくするほど境界付近にぼかしが強くなっていますが、ただし大きすぎても違和感が大きくなってしまうので注意が必要です。
経験上0~15が一つの目安となりそうです。
Mask mode
範囲を指定した部分のみ変更するのか、それとも、範囲を指定した場所以外の全ての部分を変更するのか選択することができます。
名称 | 効果 | 用途 |
Inpaint masked | 白く塗りつぶした部分を変更します | キャラや気にいらない点を直接変更したい時 |
Inpaint not masked | 白く塗りつぶしていない部分を変更します | キャラなどは良いが背景など、を変更したい時 |
Masked content
この変更でinpaintで変更後の効果が大きく変わります。
個人的には、全く違うものにしたいorベースを変更したいことが多いため「latent noise」を良く使用します。
名称 | 効果 | 用途 |
fill | 白く塗りつぶした周囲の色をベースにして描き直します | 背景の中に異物が混じり、取り除きたい時に使用します。 |
original | 白く塗りつぶした画像(元画像)をベースにして描き直します | 指や口元など、ちょっとした形状の変化をさせたい時に使用します。 |
latent noise | ベース無しで1から描き直します | 違う服装や背景にするときに使用します。 |
Just resize (latent upscale) | 白く塗りつぶした画像の色をベースにして描き直します | 同色で違う形状の服にするときなどに使用します。 |
Inpaint area / Only masked padding, pixels
inpaintの処理を実施する範囲を設定します。
名称 | 効果 |
Whole picture | 画像全体で実施 |
Only masked | 白く塗りつぶした部分でのみ実施 |
「Only masked」を使用する場合、「Only masked padding, pixels」で余白を広げた(値を大きくすた)方が、違和感が少なくなります。
Sampling method / Sampling steps / Width / Height
元画像の生成パラメータに合わせます。
CFG Scale
プロンプトの影響力を決定するパラメータです。
設定したプロンプトが上手く反映されない場合は上げていきますが、上げすぎると絵が破綻するので注意が必要です。
Denoising strength
ノイズを除去する強さのパラメータです。
txt2imgで元画像を生成した場合は設定が必要ですが、img2imgで生成した時は同じ値で設定します。
上手くプロンプトは反映されない場合に数値を大きくします。
Masked contentを「latent noise」で使う場合
Denoising strengthが「0.3」程度でInpaintを行うと、下記のようにノイズだけが描かれてしまうことがあります。
そういった時は「Denoising strength」を0.45~0.75にしておくことで解消されます。
使うmethodによって、どの数値でノイズまみれになるかは変化します。
※画像に不快感を感じる方がいると思うのでモザイクでぼかしています。
Seed
元の画像のSeed値にしておきます。
変更したり-1にすると、予期せぬ変更が起こることがあります。
inpaintの使い方
使用するときの注意点は3つです。
1.元画像のプロンプトに追加で(不要なプロンプトの削除は必須)、変更したいプロンプトを書く。
変更したいプロンプトだけでは、絵が破綻します。
2.出来るだけ綺麗に不要部分を白く塗りつぶす
微妙に塗りつぶしが出来ていないところがあると、そこだけ上手く変更されずに異物が混じることがあります。
3.512×512以上の絵で実施する
絵のサイズが小さいと変更しても上手く反映されないことがあります。
実際に絵を取り込むときはドラッグアンドドロップで、Inpaintの画像部分に取り込みます。
白く塗りつぶした結果
【検証】実際に変更してみた
今回はこの画像の服装を白Tシャツから制服に変更したいと思います。
生成時のプロンプトでは「white t-shirts, short sleeve t-shirt」と書かれていたのを、
「school uniform」と変更します。
出力結果
変更前
変更後
見事に顔や白背景はそのままで、制服姿に変わりました。
反省点
成功した点
1.顔はほぼ変わらず服装だけ変化した
顔が変わらないのはキャラの差分を描く上では重要なので、良かったです。
失敗した点
1.立ち絵の構図が変わってしまった
正面からの画像というプロンプトしか命令していなかったので、変更後は右肩が前にくるような構図になってしまいました。
2.ぼかしが甘い
デフォルト値のままで行ったため、若干境目に違和感があります。
まとめ
今回はInpaintの機能を使って絵を微修正する方法について紹介しました。
改めて3行でまとめると…
・微修正したい絵のプロンプトは必要
・変更したい状況に合わせて設定値を決定する
・「Masked content」の設定で、大きく絵が変わる
Stable Diffusionで絵を微修正するのは至難の業ですよね。
今回はそんな人のために、服装や背景だけを変えられる方法について紹介しました。
是非Inpaintの機能をつかって素敵な絵をたくさん描いてみてください!
StableDiffusionにお勧めのグラボ
ここまでの記事を読んでStableDiffusionを始めてみたいと思ったけど、どれを買ったか良いか分からない人向けに私の使っているグラボを紹介します。
私が使用しているグラボはNVIDIA GeForce RTX3060 搭載 グラフィックボード GDDR6 12GBになります。
StableDiffusionで絵を生成するときは、PCのCPUやメモリよりもグラボの性能が重要です。
StableDiffusionではVRAMが12GB以上であることが推奨されていますが、普通のゲーム用のグラボでは8GBのものが多いです。
経験上、一回のプロンプトで一発で望みの絵が出ることは少なく、10枚ぐらい出力してそこから近づけていく作業をします。
しかしVRAMが低いと1枚を生成する時間が長くなってしまいます(完全にVRAM依存ではないですが)
1枚の生成する時間が長いと、最終的なゴールまでの時間も多くかかってしまうので、推奨要領である12GBのグラボを買うことをお勧めします。
VRAMが低い=一度に計算できる数が少ない=生成速度が遅い
そのため解像度の高い絵を生成するのに時間がかかるだけでなく、生成できない可能性もあります(2GBや4GBなど)
Controlnet等、拡張機能を複数使用する場合やLora等の学習を行う場合は、より顕著にVRAMの差が出ます。
そのため単純にAIで出力してみたい。というだけでなく、その一歩先で色々やってみたい方は是非12GB以上を購入してみてください。
ちょっと試すだけなら、下記のような無料AI画像生成サービスを使うのも良いです。
コメント
Pretty! This has been a really wonderful post. Many thanks for providing these details.