MarkdownとBullet Journal

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

Stable Diffusion 1.5 をDreamStudioで使う

Stable Diffusionの新バージョン 1.5

モデル強化、inpainting、outpainting、maskingなどの機能を加えたStable Diffusion 1.5が登場したが、現時点ではweb版サービスであるDreamStudioで新バージョンが使える。

画像加工のインパク

SD1.5の機能には正直驚かされた。今回を含めAI画像生成でインパクトのあった事象を列記する。

  1. MidJourneyによる美しい画像の自動生成
  2. WaifuやERNIE-ViLGによる2次元画像の自動生成
  3. Stable Diffusion 1.5 による画像に対する自動加工

以下、DreamStudioの1.5版の使用方法を解説する。

※開発者がアナウンスするツイッターのURLは以下の通り。米国の9/25からGoogle colabやローカルPCで1.5が使える様だ(注:10月中旬に延期された)。

画像加工:inpainting, outpainting

アウトペインティングは、元の画像の周囲(何も無いエリア)にAIが連続性のある絵を描くことで、絵を外部拡張させる機能でありDALL-E2でも実装されている。

programmingforever.hatenablog.com

次にインペインティングは、元の画像の中で変更したい箇所を指定してAIで再描画させる機能である(同じくDALL-E2でも実装)。例えば全体の雰囲気はそのまま残したいが、描かれている人の顔だけ変更したい、といった加工が可能になる。

これらの作業を行うために、DreamStudioでは画像サイズ変更、マスキング、リストアの機能が用意されている。

DreamDtudioを使う

それでは早速DreamStudioで試してみる。DreamStudioのURLは以下の通り。

beta.dreamstudio.ai

URLをクリックすると下記の画面が現れる。

DreamStudioの起動画面

画面の左を見ると、Stable Diffusionのバージョン1.4(これまで使っていたバージョン)と新しい1.5が選択できる様になっている。

またその下にインペインティングなどを行うための「show editor」ボタンが追加されている。

バージョンは1.5を選び、show editorボタンを押すと下記の画面に切り替わる。

画像編集画面

upload imageのボタンを押して画像をUPする。

画像をアップロードした状態

レイアウト機能:絵を拡張する

select and move ボタンを使用(画像左部の一番上)

それではこの絵を変更していこう。まず横幅を広げるべく画面右の「Width」を768に変更する(1:1.5画像に変更)。その後、絵の左側にあるアイコンの一番上にある、矢印が上下左右に入ったアイコンを押す。するとマスクがかかった様な画面になるので、マウスで元の絵を真ん中あたりに配置する(下図参照)。

なおこの例では元の絵を尺度100%で扱うが、拡大縮小やフレームの一部カットなども問題なく行える。

横幅を広げ、真ん中に配置

リストア機能:元の絵を残す部分を指定

restore ボタンを使用(画像左部の上から3番目)

分かりやすさの観点からマスキングを飛ばして、先にリストアを説明する。

上から3番目にあるrestoreアイコンをクリックすると、リストアが使える。リストアは元の絵に対して変更の影響を与えず残したい部分を選択する機能だ。下の例では女性と女性に近い周囲をリストア選択している。

残したい部分を選択

次にリストア指定しなかった外側の世界を描くためのプロンプトを指定する。この例にふさわしい雰囲気として、A girl in a room like the sea with a large window を入力して、画像生成させるDreamをクリックする。するとリストア指定した箇所はそのまま残り、指定外の箇所はプロンプトに従った絵が作られた。

インペインティング&アウトペインティングの作例

  1. インペインティング;元の絵の中でリストア指定をしなかった箇所がAIで画像生成される
  2. アウトペインティング:元の絵の外側がAIで画像生成される

以上の二つの機能が、上の生成では同時に使用されている。もちろんどちらかだけの利用も可能だ。

マスキング機能

masking ボタンを使用(画像左部の上から2番目)

上から2番目のマスキング機能はよりユニークだ。リストア機能に近いが、リストアとは異なり、指定した箇所は元の絵に似たイメージで新たに描画される(元の絵は残らない)。

まずリストアの事例同様に元の絵をUPする。

元の絵

上から2番目のマスキングをクリックして、絵で元のイメージを残したい箇所を指定する。

マスキングで元のイメージを残したい所を指定する

残さない場所(今回の場合は人の周囲全て)は、プロンプトで海辺(seaside)を指定して生成させる。すると次の様な絵が生成される。何やら女性の映像含め雰囲気が一新しているのがわかる。

マスキング例

生成された画像例

マスキングを用いた生成例

マスキングを用いた生成例

お分かりになるだろうか。マスキングした箇所は元のイメージを生かした形で別の絵(別の女性の絵)が自動生成されており、マスキングしない箇所はプロンプトで与えた画像を自動生成している。

特筆すべきポイントとして、マスキングを用いて生成された絵は、マスキングされた部分とプロンプト生成部分のイメージやタッチが統合されることだ。背景が写真風になるとマスキングされた女性も写真風、同様に背景がイラスト風の場合は女性もイラスト風になる。

これはマスキングを利用すると破綻しにくい画像への加工が行えることを意味する。

マスキングとリストアの違い

マスキングとリストアの違いを整理する。

  • マスキング:マスキングした箇所は元の絵に似た様な絵を生成、マスキング以外はプロンプト指定の絵を生成
  • リストア:リストアした箇所は元の絵をそのまま残し、リストア以外はプロンプト指定の絵を生成

なお、元絵に対して、マスキングとリストアをそれぞれ指定することもできる。

例えば、女性の顔はそのまま残したいのでリストア、女性の体は似た雰囲気で書き換えたいのでマスキング、周囲はプロンプトで全く別の世界を生成、ということもできる。

以下にこの機能の応用例を示す。

実例①:不用なものを消す

よくありがちだが、風景写真を撮影した際に邪魔な人が入る時がある。これを一撃で消してみたい。

まず元の写真をアップロード。奥に不要な人物が見える。

元の写真:不要な人物が写っている

  1. 削除したい箇所以外をリストアで指定する(この例では不要な人物以外の殆どを指定)
  2. 削除したい箇所(不要な人物)だけをマスキング(*マスキング無しでもOK)
  3. プロンプトには「どこまでも続く鳥居と階段」→「Torii and stairs that go on forever」を入力

※マスキングは基本不要だが、マスキングを追加すると元の絵に忠実になりやすい。

※作業時のリストア指示部とマスキング指示部は区別しにくいので注意。リストア指示部は画像がクリアで、マスキング指示部は少しグレーのハッチングがかかるので区別できる(だが見にくい)。

以上の作業を行なって画像生成すると、指定箇所の不用な物が消えさる。

不用なものが消えた

比較写真。不要な人物が消えたのがわかる。

比較写真

実例②:希望するものを追加する

先ほどの自動消去機能はPhotoshopにも実装されているが、次に存在しないものを新たに画像に追加してみよう。

まず追加生成したい部分以外をリストアする。

追加生成以外の部分をリストア(保存)

チップス:マスキングの追加(基本不要)

普通はこのままプロンプトを与えて、リストアしなかった部分を生成させるが、元の画像をなるべく維持したい場合は、追加生成したい部分(リストア指示しなかった箇所)をマスキングしてもよい。本来マスキングをした場所にはプロンプトの影響を与えないことになっているが、画像生成される際にマスキング部にもプロンプトの内容が少し反映されるため、結果として希望に近い絵を生成する場合もある。

追加生成部分をマスク

指示が完了したらプロンプトに「舞妓」「Maiko standing」などを入力して生成。すると画像に着物の女性が追加された。

マスキングを追加した生成例

マスキング追加例

マスキングを追加しない生成例

マスキングなしの例

マスキング無しの方が意図したイメージの絵になる反面、元の絵の再現度が低くなる。マスキングを行うと元の絵に忠実になる反面、意図したイメージの絵になる確率が低くなる。用途に応じて使い分けられると思う。