Stable Diffusionで16:9の画像を生成する

Stable Diffusionで16:9の画像を生成する

Stable Diffusionを試していて、生成される画像が512x512だと使いづらいなと感じていました。

16:9で出力しようと試みたんですが、意外と大変だったのでその方法を残しておきます。

まず結論から

--Wで幅を896に指定。--Hで高さを512に指定する。

$ python scripts/txt2img.py --W 896 --H 512 --prompt "a photograph of an astronaut riding a horse" --plms --ckpt models/ldm/stable-diffusion-v1/sd-v1-4.ckpt

厳密に言えば、16:9ではなく、16:9.143ぐらいです。

896x504にすると16:9になるので、厳密に16:9の画像を使いたい場合は、生成した画像をPhotoshop等で加工する必要があります。

実際に生成したもの

a photograph of an astronaut riding a horse

本当は、1920x1080を出力したい

--Wで幅を1920に指定。--Hで高さを1080に指定すればいけそうですが。

$ python scripts/txt2img.py --W 1920 --H 1080 --prompt "a photograph of an astronaut riding a horse" --plms --ckpt models/ldm/stable-diffusion-v1/sd-v1-4.ckpt

これだと、2つ問題があります。

1つ目、--W--H64の倍数しか受け付けない。
2つ目、スペックが足りない。

--W--H64の倍数しか受け付けない

試しに、--W 896 --H 504を指定してみます。

$ python scripts/txt2img.py --W 896 --H 504 --prompt "a photograph of an astronaut riding a horse" --plms --ckpt models/ldm/stable-diffusion-v1/sd-v1-4.ckpt
# 中略
RuntimeError: Sizes of tensors must match except in dimension 1. Expected size 64 but got size 63 for tensor number 1 in the list.

この場合、先の例のように、--H512にすれば生成されます。

スペックが足りない

試しに、--W 1920 --H 1080を指定してみます。

$ python scripts/txt2img.py --W 1920 --H 1080 --prompt "a photograph of an astronaut riding a horse" --plms --ckpt models/ldm/stable-diffusion-v1/sd-v1-4.ckpt
# 中略
RuntimeError: Invalid buffer size: 62.57 GB

M1MaxMBPのメモリ64GBなんですが、これでは足りないらしいです。

ということで、1920x1080(1080p)の画像を生成したい場合は以下のようにします。

  1. 896x512で生成する
  2. アップスケールする
  3. 1920x1080にリサイズする

アップスケールがはじめて出てきましたが、超解像とも呼ばれる低解像度の画像を高解像度に上げるAIを使った技術です。
これもAIですね。AIすごいなぁ

ということで冒頭の画像をUpscaylという超解像技術を使ったツールで解像度を4倍の3584x2048にします。

a photograph of an astronaut riding a horse

Upscaylの使い方はかんたんで、対象の画像を選択して、ボタンを押すだけです。

Upscayl

結果を左右で比較したりできます。もしよかったら使ってみてください。

そしてようやく出力したかった1920x1080の画像をPhotoshopで作ります。

a photograph of an astronaut riding a horse

さいごに

まとめます。

16:9の画像を作る場合は、--W 896 --H 512を指定して、生成後に896x504に加工する

1920x1080の画像を作る場合は、--W 896 --H 512を指定して、生成後にアップスケールして、1920x1080に加工する

でした。

アップスケールツールが対応していれば4Kのイラストとかも作れると思います。

それでは、良い画像生成ライフを!