img2imgのSoft inpainting を利用する手順を紹介します。
Inpaint 処理で画像の一部に生成した画像を追加して描画できます。明示的に領域を指定して描画する方法が一般的ですが、
状況によっては、追加したい領域を明確にせず、徐々に効果を適用してInpaintしたい場合があります。
この記事では、マスクに透過画像またはグラデーション画像を利用し、徐々にinpaintの効果を適用するSoft inpainting の利用手順を紹介します。
下図が入力画像です。この画像の右側を夕方にしたいですが、左側は現在のイメージの日中のイメージにして、
右側に向かうにしたがって徐々に夕方になるように表現したいです。
完成イメージは下図です。
下図のマスク画像を用意します。白黒のグラデーション画像、または、透明度が変化する画像を用意します。
今回は下図の白と黒のグラデーション画像を用意しました。
Stable Diffusion Web UIを起動してUI画面を表示します。
上部の[img2img]タブをクリックします。下図の画面に切り替わります。
左側のエリアの[Generation]内のタブの[Inpaint upload]のタブをクリックします。下図の画面に切り替わります。
左側の[ここに画像をドロップ]の2つの枠に、入力画像とマスクの画像を選択してアップロードします。
ページを下にスクロールします。
[Resize by]のタブをクリックして選択します。[Scale]の値を"1"に設定し入力画像と同じサイズで出力します。
[Soft inpainting]のパネルのチェックボックスをクリックしてチェックをつけます。チェックをつけて、パネルが展開された状態が下図です。
設定値はデフォルトのままの下記値とします。
Sampling methodを"Euler a" Schedule typeを"Automatic"に設定します。また、Denoising strengthを0.95まで上げます。
これは、ノイズの量を増やさないと元の青色の影響が強く、赤い夕焼けの空に変化しないためです。
プロンプトを設定します。下記プロンプトで実行します。モデルはAnimagine XL 3.1を利用します。
画像生成処理を実行します。
結果は下図です。画像に継ぎ目がない状態で、右側が夕暮れのシーンにできました。稀に継ぎ目ができてしまう画像もあります。
上記の手順で、目的の画像が生成できましたが、右側の生成部分の地形が元の画像から変化してしまっています。
できれば、地形は元の画像の形状を維持して、夕暮れのシーンに変化させたいです。
形状を固定するために、ControlNetと組み合わせてSoft inpaintの画像生成をします。
img2imgで先の設定から、ControlNetを追加します。
Inpaintの入力画像とマスクは変更なしです。
Soft inpaint の設定値を以下に変更します。Preservation strengthの値を上げて、生成した画像が有利になるよう設定します。
Sampling methodは "DPM++ 2M"を利用します。Denoising strengthは"0.9"とします。
ControlNetの [Enable]チェックボックスをクリックしてチェックをつけます。
Preprocessorは "softedge_pidlnet", Modelは "sargeztT2iSoftedge" (モデルハッシュ:b6f7415b)を利用します。
Control Weightは0.75に下げています。
プロンプトは以下を利用します。先のプロンプトから変更を加えています。
画像生成を実行します。生成結果は下図です。先の結果より夕暮れの度合いが弱めですが、地形は入力画像とおおむね同じ形状にできています。
Soft inpaintを利用した inpaint画像生成の手順を紹介しました。
Soft inpaintの設定パラメーターの意味を紹介します。
元のコンテンツのブレンド強度を指定します。
ブレンド強度は各ステップ (シグマ) のノイズ レベル値の減少に比例して調整されます。
ノイズ除去と元のコンテンツの保存の影響が各ステップでほぼバランスが保たれる動作になります。
Schedule biasによりこのバランス変更できます。前のステップと後のステップのどちらをより強力に保存するかを制御します。
小さな値にするほどinpaintで生成した結果が強く画像に反映されます。大きな値にすると、反映される面積や効果が小さくなります。
部分的にマスクされた画像領域が元のコンテンツを保持する強さを指定します。
元の画像を保持する可能性が高いか、それともペイントされたコンテンツを優先するを指定します。
個のパラメーターはスケジュール バイアス、CFG スケール、プロンプト、およびノイズ除去の強度に応じて調整する必要がある場合があります。
0に近づけるほど、生成されたコンテンツが画面に反映されます。0にするとマスクがほぼ無視された状態になります。大きな値にした場合でも、
マスクが強く設定されている領域では、生成されたコンテンツが画像に反映されます。
元の潜在ベクトルとノイズ除去された潜在ベクトルがどのように補間されるかを制御します。
値を大きくすると、結果として得られるブレンドされたベクトルの大きさは、2 つの内挿ベクトルの最大値に近づきます。
これにより、線形補間で発生するコントラストの損失を防ぐことができます。
高い値を設定すると、inpaintで生成した画像部分はぼかしのかかったイメージの結果になります。一方で色の変化は滑らかになります。
マスクは、ノイズ除去後に画像の一部がどの程度変化したかに基づいて生成されます。 これらのマスクは、元のイメージと最終イメージをブレンドするために使用されます。 差が小さい場合は、修復プロセスによって返されたピクセルの代わりに、元のピクセルが使用されます。
このパラメータは、マスクが差異に対する感度をどの程度バイアスするかを制御します。
値が大きいほどマスクに従ってInpaintします。値が小さいと生成結果の境界で急激に変化する場合があります。
この値は、元のピクセルの不透明度が 50% 未満になる差を表します。
値を小さくすると、生成結果が強く上書きされます。値が大きい場合、生成結果が元の画像に弱く追加されます。
この値は、元のコンテンツとペイントされたコンテンツの不透明度の間のコントラストを表します。
値が低いとinpaintの生成は画面にあまり反映されません。値が高いと、inpaintの結果が強く反映されますが、視点や構図の一貫性が崩れる場合があります。