Stable Diffusion 2.0で追加された機能を試してみよう:Stable Diffusion入門(1/2 ページ)
Stable Diffusion 2.0で可能になった768×768ピクセルの画像生成、画像のアップスケール、画像の一部の書き換えとはどんなものかを見ていきます。
Stable Diffusion 2.0
その発表と共に画像生成AIの世界に大きな変化を巻き起こしたStable Diffusionのバージョン2.0が2022年11月にリリースされました。リリースによれば、このモデルは、Stability AIのサポートを受けて、LAIONが開発した新しいテキストエンコーダーを使用して一から訓練が行われたもので、バージョン1と比べると生成される画像の品質が大幅に向上したと述べられています。
そこで、本稿ではその新機能の幾つかをDiffusers(Stable Diffusionなどの拡散モデルをラップするライブラリ)を用いて実際に試してみることにします。
今回もサンプルコードはGoogle Colabのノートブックに記述しています。が、個別のコードはそれほど長いものではありません(というか、とても短いです。かわさき)。
リリースによれば、Stable Diffusion 2.0では以下のような点が強化されています。
- 生成される画像のデフォルトの解像度が512×512ピクセルとなるモデルと、768×768ピクセルとなるモデルを提供
- 画像を入力すると4倍の大きさにアップスケール可能なモデル
- 入力された画像の深度を推測し、深度とプロンプトから新たな画像を生成可能なモデル
- 画像(および変更したい部分を示すマスク画像)とプロンプトを入力すると、画像の一部だけをプロンプトに応じて書き換えるモデル
これらの強化点は以下のモデルによって提供されます。
- 512×512ピクセルの画像生成(text-to-image):stable-diffusion2-baseモデル
- 768×768ピクセルの画像生成:stable-diffusion-2モデル
- 画像を4倍のサイズにアップスケール:stable-diffusion-x4-upscalerモデル
- 画像の深度とプロンプトからの画像生成:stable-diffusion-2-depthモデル
- 画像の一部の書き換え:stable-diffusion-2-inpaintingモデル
最初の2つのモデルの違いはstable-diffusion-2-baseモデルは256×256ピクセルと512×512ピクセルの画像を使って訓練が行われているのに対して、stable-diffusion-2モデルはこれを基にさらに768×768ピクセルの画像を使って訓練が行われている点です。より解像度の高い画像を使って訓練されているので、stable-diffusion-2モデルはstable-diffusion-2-baseモデルよりも生成される画像がより高精細なものになることが期待できます。
本稿執筆時点(2022年11月29日)では、これらのモデルのうちstable-diffusion-2-depthモデルがDiffusersでまだサポートされていません。そのため、以下では768×768ピクセルの画像生成、アップスケール、画像の一部の書き換えの3つについて簡単なコードを書いて、その機能を体験してみましょう。
なお、上記のモデル名はDiffusersが提供するパイプラインクラスのインスタンスを生成する際にIDとして指定する際に使用します。また、本稿執筆時点ではモデルの使用に際してHugging Faceへの登録などは必要ありませんが、今後、変更される可能性はあります。
Google Colabノートブックで以下の例を試すには、最初に以下のコードでDiffusers(とその他のライブラリ)をインストールしておく必要があります。
!pip install --upgrade git+https://github.com/huggingface/diffusers.git transformers accelerate scipy
768×768ピクセルの画像生成
Stable Diffusionバージョン1では生成できる画像の最大サイズは512×512ピクセルでしたが、stable-diffusion-2-baseモデルを基としたstable-diffusion-2モデルでは768×768ピクセルの画像を生成できるようになっています。
以下はこれを試すコードの例です。
import torch
from diffusers import StableDiffusionPipeline
model_id = 'stabilityai/stable-diffusion-2'
pipe = StableDiffusionPipeline.from_pretrained(model_id, revision='fp16', torch_dtype=torch.float16)
pipe = pipe.to('cuda')
prompt = 'a photo of an astronaut riding a horse on mars'
image = pipe(prompt).images[0]
image
diffusersパッケージからStableDiffusionPipelineクラスをインポートするのはバージョン1と同様ですね。その後で変数model_idに指定しているのが、どのモデルを使用するかの指定です。ここでは「stabilityai/」に続けて上で紹介したモデル名を付加した「stabilityai/stable-diffusion-2」がモデルのIDとなっています。これをパイプラインクラスのfrom_pretrainedメソッドに渡すことでモデルを手に入れています。
後はプロンプトを設定して、モデルを呼び出すだけです。このようなモデルIDを指定してパイプラインクラスのインスタンスを生成して、それを関数のように呼び出すというのがStable Diffusion 2.0をDiffusersから使用する場合の定型パターンとなっているようです。
実行結果は次のようになりました(馬に乗っていないような……笑)。
では、stable-diffusion-2-baseモデルではどうなるでしょう。モデルIDを「stabilityai/stable-diffusion-2-base」に変更した以外は上と同じコードを実行した結果を以下に示します。
なお、stable-diffusion-2-baseモデルでも768×768ピクセルの画像は生成できます。 Google Colabノートブックには試した結果もあるので、興味のある方はご覧ください。筆者にはstable-diffusion-2モデルとどちらが高精細な画像かの区別は付きませんでした(笑)。
横幅768px(ピクセル)で作成できることで利用できる場面も増えそうですね。欲を言えば、横幅1280pxの画像が作成できると、もっとうれしいな。
Copyright© Digital Advantage Corp. All Rights Reserved.