🐈

Stable Diffusion と DALL·E 2 の Inpaint

2022/10/17に公開

negocia株式会社で機械学習エンジニアを担当している神谷です。
画像生成AIのInpaint(修復)機能を試してみたので紹介します。

要約

Stable DiffusionDALL·E 2の Inpaint (修復)機能を比較しました。
Stable Diffusion より DALL·E 2 の方が境界を滑らかに修復できました。

背景

画像生成AIとして Stable Diffusion と DALL·E 2 が有名です。2022年8月31日にDALL-EにOutpaint機能がリリースされ、Stable Diffusion と DALL·E 2 の Outpaint 機能を比較したいと考えました。しかし2022年10月14日の時点ではHugging Face の Stable Diffusionに Outpaint 機能は実装されていないようです。そこでOutpaint の代わりに Inpaint を比較することにしました。

補足: Inpaint と Outpaint

  • Inpaint:画像内に変更を加える
  • Outpaint:元の画像の外側に画風そのままに描き足す

補足: Stable Diffusion の Outpaint 機能

Huggin Face ではありませんが Stable Diffusion の Outpaint 機能の実装が公開されています。
https://github.com/lkwq007/stablediffusion-infinity

比較結果の表

モデル 実験1 実験2
Stable Diffusion 生成画像 Stable Diffusionの生成画像 生成画像 Stable Diffusionの生成画像
DALL·E 2 生成画像 DALL·E 2の生成画像 生成画像 DALL·E 2の生成画像

実験1(ベンチに座る犬を猫にする)

実験1.1(Stable Diffusion)

まずはStable Diffusion の Inpaint のサンプルを試しました。

入力

画像2枚とプロンプトを入力しました。

  • ベンチに犬が座っている画像
    入力画像
    元の画像
  • 犬をマスクする画像
    マスク画像 マスク画像
  • a cat sitting on a bench というプロンプト

出力

ベンチに猫が座っている画像が出力されました。

生成画像 生成画像

実験1.2(DALL·E 2)

次に実験1.1をDALL·E 2で再現しました。 実験1.1に比べて猫が小さくなりました。
猫が小さくなった分はベンチや背景で修復されています。

生成画像
DALL·E 2の生成画像

実験1.3(大きなマスクの Stable Diffusion)

実験1.1ではマスクした部分が猫で占められていたため、ベンチがどのように修復されるかわかりませんでした。
そこで Stable Diffusion でベンチがどのように修復されるかを知るため実験1.1のマスクを大きくしました。

生成画像 Stable Diffusionの生成画像

Stable Diffusion と DALL·E 2 の比較

「ベンチの網目」や「ベンチと背景の境界」の修復は Stable Diffusion より DALL·E 2 の方が優れていました。
Stable Diffusion より DALL·E 2 の方が境界を滑らかに修復しています。

実験1の結果の表

モデル マスク画像 生成画像 備考
Stable Diffusion マスク画像 Stable Diffusionのマスク画像 生成画像 Stable Diffusionの生成画像 生成画像 Stable Diffusionの生成画像 実験1.1:Stable Diffusion の inpaint のサンプル
DALL·E 2 マスク画像 DALL·E 2のマスク画像 生成画像 DALL·E 2の生成画像 生成画像 DALL·E 2の生成画像 実験1.2:実験1.1を DALL·E 2 で再現
Stable Diffusion マスク画像 Stable Diffusionのマスク画像 生成画像 Stable Diffusionの生成画像 生成画像 Stable Diffusionの生成画像 実験1.3:実験1.1のマスクを大きくした

実験2(富士山を赤くする)

冨嶽三十六景の甲州三坂水面の富士山を凱風快晴のように赤くしました。
プロンプトは red mount fuji です。
入力画像
入力画像:甲州三坂水面(正方形にリサイズ)

参考画像
参考画像:凱風快晴

実験1と同様に Stable Diffusion より DALL·E 2 の方が境界を滑らかに修復しています。

生成画像 Stable Diffusionの生成画像
生成画像 DALL·E 2の生成画像

実験2の結果の表

モデル マスク画像 生成画像
Stable Diffusion マスク画像 Stable Diffusionのマスク画像 生成画像 Stable Diffusionの生成画像
DALL·E 2 マスク画像 DALL·E 2のマスク画像 生成画像 DALL·E 2の生成画像

考察

Stable Diffusion より DALL·E 2 の方が境界を滑らかに修復できる理由について、DALL·E 2 は Stable Diffusion にはない Outpaint 機能があることから、元の画像との接続を滑らかにすることをより重視していると思われます。またStable Diffusion の Inpaint の実装は潜在変数を足し合わせる単純な実装になっています。今後 Stable Diffusion の Inpaint 機能がアップデートされ DALL·E 2 のように境界を滑らかに修復できるようになることが期待されます。

Discussion