「SDXLで生成した画像の一部を綺麗に変換したい」
「SDXLでOutPaintingを行いたい」
このような場合には、この記事の内容が参考になります。
この記事では、FooocusのInpaint・Outpaint機能について解説しています。
本記事の内容
- FooocusのInpaint・Outpaint機能
- FooocusにおけるInpaintingの動作確認
- FooocusにおけるOutPaintingの動作確認
それでは、上記に沿って解説していきます。
FooocusのInpaint・Outpaint機能
「Fooocusとは?」という方は、次の記事をご覧ください。
簡単に言うと、凄いエンジニアが作成した画像生成ツールです。
どう凄いのかと言うと、そのエンジニアの論文がICCV 2023で最も優れた論文として表彰されるぐらいです。
Marr Prize(またはDavid Marr Prize)という、最も権威ある賞を授与されています。

その論文の内容は、皆さんにも非常に馴染みがあるモノです。
それは、ControlNetになります。
確かに、ControlNetは画像生成AIを一気に飛躍させましたからね。
そんな凄いエンジニアが、Fooocusを開発しています。
そして、そのFooocusにInpaint・Outpaint機能が追加されています。
現時点での最新バージョンは、以下となっています。

このバージョンにおいては、まだInpaint・Outpaint機能はbeta扱いです。

しかし、現時点でも十分に使えます。
さらに、これらの機能は他のツールよりも良い結果を出すようです。
Fooocusでは、独自のアルゴリズムDPMPP Fooocus inpaintを使用すると説明されています。
DPMPP Fooocus inpaintは、「DPMPP Fooocus Seamless 2M SDE Karras Inpaint Sampler」の略称です。
ControlNetの開発者なら、本当にそのようなことができると思ってしまいますね。
それに加えて、Marr Prizeという権威も加わっています。
とにかく、FooocusのInpaint・Outpaint機能はスゴイということです。
FooocusをInpaint・Outpaint専用ツールとして利用するのは、全然ありでしょうね。
以上、FooocusのInpaint・Outpaint機能を説明しました。
次は、FooocusにおけるInpaintingの動作確認を説明します。
FooocusにおけるInpaintingの動作確認
SDXLベースの場合、InpaintingはDiffusersで行うのがベストでした。
そもそも、Diffusers以外にはInpaintingモデルが存在していません。
Fooocusの開発者もそのようなことを解説しています。

しかし、FooocusのInpaintingは別格だよということのようです。
Fooocusの場合は、モデルではなくアルゴリズムで対応します。
実際にその動作を確認してみましょう。
Fooocusは、最新のモノをインストールします。
すでに紹介した次の記事内にインストール方法を説明しています。
インストール方法は何でも良いので、とりあえず最新のFooocusを起動させます。
起動した画面の最下部に次のようなチェックボックスがあることを確認できます。

これをチェックすると、次のような画面が表示されます。

「Inpaint or Outpaint (beta)」タブを開いて、処理対象の画像をアップロードします。

あとは、よくあるInpaintingツールと同じ要領で処理できます。

変更した箇所を塗りつぶし、プロンプトを入力して「Generate」ボタンをクリックするだけです。
プロンプト「a dog」とした場合の結果は、以下。

確かに、出力される犬の質が高いような気がします。
Diffusersの場合は、「あー、質が落ちるなー」という感じでした。
まあ、これはFooocus自体で画質の良い画像を生成できるというのもあるでしょうね。
以上、FooocusにおけるInpaintingの動作確認を説明しました。
次は、FooocusにおけるOutPaintingの動作確認を説明します。
FooocusにおけるOutPaintingの動作確認
SDXLベースでOutPaintingが可能なツールは、まだメジャーどころでは存在していません。
FooocusにおけるOutPaintingは、Midjourneyを参考にしているようです。

画像を展開したい方向にチェックを入れる形式となっています。
例えば、次のような画像を下部分に展開したいとします。
[実サイズ 1152 x 896]

その場合は、「Bottom」にチェックいれて「Generate」ボタンをクリック。

そうすると、次のような画像が生成されます。
[実サイズ 1152 x 1164]

今回は、プロンプトには何も入力していません。
AIにお任せです。
拡張されるサイズは、元画像の約0.3割のようです。
「Top」と「Bottom」の両方にチェックを入れた場合は、約0.6割増しになります。
ちなみに、あと4回ほど同じ処理を繰り返した結果は以下となります。
画像のサイズが都度大きくなるので、そこは注意が必要です。

大きいサイズは、以下で確認できます。
なお、InpaintingとOutPaintingは平行して処理することが可能です。
以上、FooocusにおけるOutPaintingの動作確認を説明しました。