MarkdownとBullet Journal

いわゆるプログラマーのつぶやき

Stable Diffusion 1.5 inpainting版を試す

inpainting用StableDiffusion 1.5 モデル

先日突然Stable Diffusion1.5を公開したRunwayMLが、続いてStable Diffusion1.5のinpainting用モデルを公開した。

github.com

モデルの違いの説明

現在、次のチェックポイントを提供している。

  • sd-v1-1.ckpt: laion2B-en の解像度で 237k ステップ。レオン高解像度の解像度で194kステップ(解像度付きLAION-5Bの170Mの例)。256x256512x512>= 1024x1024
  • sd-v1-2.ckpt: 前記の継続学習。laion-aesthetics v2 5 +(推定美学スコアを持つlaion2B-enのサブセット)の解像度で515kステップ、さらに元のサイズの画像にフィルタリングされ、推定透かし確率。ウォーターマーク推定値はLAION-5Bメタデータからであり、美学スコアはLAION-美学予測変数V2)を用いて推定される。sd-v1-1.ckpt512x512> 5.0>= 512x512< 0.5
  • sd-v1-3.ckpt: 前記の継続学習。「laion-aesthetics v2 5+」の解像度で195kステップを踏み出し、テキストコンディショニングを10%削減して、分類子のないガイダンスサンプリングを改善します。sd-v1-2.ckpt512x512
  • sd-v1-4.ckpt: 前記の継続学習。「laion-aesthetics v2 5+」の解像度で225kステップ、テキストコンディショニングを10%ドロップして、分類子のないガイダンスサンプリングを改善します。sd-v1-2.ckpt512x512
  • sd-v1-5.ckpt: 前記の継続学習。「laion-aesthetics v2 5+」の解像度で595kステップ、テキストコンディショニングを10%ドロップして、分類子のないガイダンスサンプリングを改善します。sd-v1-2.ckpt512x512
  • sd-v1-5-inpainting.ckpt: 前記の継続学習。「laion-aesthetics v2 5+」の解像度でのインペイントトレーニングの440kステップと、分類子のないガイダンスサンプリングを改善するためのテキストコンディショニングの10%ドロップ。インペイントの場合、UNet には 5 つの追加入力チャンネル (エンコードされたマスク画像用に 4 つ、マスク自体に 1 つ) があり、その重みは非ペイントチェックポイントを復元した後にゼロに初期化されました。トレーニング中は、合成マスクを生成し、25%ですべてをマスクします。sd-v1-5.ckpt512x512

異なる分類子なしのガイダンス スケール (1.5、2.0、3.0、4.0、5.0、6.0、7.0、8.0) および 50 PLMS サンプリング ステップによる評価では、チェックポイントの相対的な改善が示されているとのこと(図)。但しこれを見る限り1.4と1.5の差はわずか。

モデルの改善グラフ

colabで実行

マスクを用意する必要があるがcolabで実行出来る。下記URL先に移動してモデル利用の承認を行なってから「Open in colab」をクリックしてノートブックを起動する。

huggingface.co

承認済みの場合は直接下記をクリック

Google Colab

実行してみる

やや手間がかかる。近い内にAUTOMATIC1111やPhotoshopアドインツールなどが対応すると思うが、試してみたい方はcolabを下記の手順で実行する。

①元絵を用意する

海に浮かぶヨットの写真を用意した。

ヨットの写真

②マスクを用意する

画像編集ソフトで変更したい箇所を白色、他を黒色にしたマスクを用意する。

マスクを用意

③それぞれURLでアクセスできる様にセット

Gyazoなどを用いて写真とマスクをURLでアクセス出来る場所にUPする。

gyazo.com

④colabを実行
  • 順に編集しながら実行する
  • 2番のコードセル実行時にHuggingFaceのアクセストークンを入力する
  • 5番のコードセルのURLに③でセットしたURLを入力する。Gyazoの場合、URLの最後にUPした画像の拡張子(.jpg, .pngなど)を忘れないこと。
  • 6番の実行でUPした絵が、7番の実行でマスクが表示されることを確認
  • 8番のプロンプトをイルカのジャンプ:a dolphin air jumpに変更
  • 同じく8番のmanual_seed(0)を(-1)に変更(シード固定なし)
  • 変更したら8〜10を順に実行すると下記のように生成される

生成された映像

マスク領域が狭かったのでイルカのジャンプが十分に描けなかったが、見えなかった背景(遠くの島)が違和感なく作成されていることがわかる。

そこでイルカが描ける様にマスクを広げた。

左のマスクをイルカが描ける様に広げた(右)

このマスクでもう一度生成するとイルカが十分に描かれる様になった。

イルカが描ける様になった

所感としては満足しているが、従前のinpaintingも高いレベルだったのでそれ程のインパクトは感じられなかった。