みなさん、こんにちは。
パノメゴン(@panomegon)です。
以前、こちらの記事でStable Diffusionをご紹介しました。
最初はローカルの仮想環境上で動かそうとしたものの、結局はGoogle Colaboratoryを使った方法に落ち着いたという話でした。
ただ、最近しばらくStable Diffusionで遊んでいなくて、久しぶりに実行したところエラーが出てしまったので、これについて書こうと思います。
エラーと解決方法
ライブラリのインストール、モデルの読み込みなどは今まで通りうまく実行できました。
しかし、実際に画像を生成する段階で下記のようなエラーが出てしまいました。
keyerror: ‘sample’
アップデートによって仕様が少し変更されてしまったようです。
とは言え、直し方は簡単です。
image = pipe(prompt)["sample"][0]
となっていた部分を次のように変えるだけです。
image = pipe(prompt).images[0]
こうすることで、今までのように画像生成することができます。
最新バージョンを利用する
Stable Diffusion自体、アップデートされ新しくなっていますので、以前紹介した時と比べ、少々仕様が異なっています。
例えば、高解像度化されていたり、アクセストークンが不要になっている点などが挙げられます。
ということで、Google ColaboratoryでStable Diffusionを使用する方法を改めて書いておこうと思います。
基本的な流れは前回と同じですので、適宜参照してください。
Google Colaboratoryでノートブックを作成したら、GPUを使用できるようにしておきましょう。
「編集」から「ノートブックの設定」を開き、「ハードウェアアクセラレータ」という項目からGPUに変更できます。
まずは、必要なライブラリのインストールです。
!pip install --upgrade diffusers[torch] transformers accelerate
accelerateは、以前は入れてませんでしたが、インストールするよう警告が出ていたので入れました。一応無くても動きます。
続いて、モデルの読み込み等を行います。
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
from IPython.display import Image,display
model_id = "stabilityai/stable-diffusion-2-1"
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler,torch_dtype=torch.float16)
pipe.to("cuda")
#pipe.enable_attention_slicing()
!mkdir outputs
model_idのところに最新版のモデルを指定しています。
ここを変えることで、以前のモデルを使用したり、その他さまざまなモデルを使うことができます。
今回は生成した画像をその場で表示して確認できるよう、そのためのライブラリも読み込んでいます。
もし、次のステップで「CUDA out of memory.」のようなエラーが発生するようであれば、以下のコメントアウトを外してください。速度を犠牲にする代わりに、メモリ不足を解消できるようです。
#pipe.enable_attention_slicing()
それでは、実際に画像を生成してみましょう。
prompt = "a cat"
for i in range(5):
image = pipe(prompt, height=768, width=768).images[0]
image.save(f"outputs/stable-diffusion-image{i:03}.png")
display(Image(f"outputs/stable-diffusion-image{i:03}.png"))
print(f"stable-diffusion-image{i:03}")
promptの部分に呪文を入れます。
一度に複数枚生成したいので、forループで5回繰り返し処理しています。
ここの数字を変更することで、一度に生成できる画像の枚数を変えられます。
最後に
ということで、Stable Diffusionのエラーを修正するとともに、最新バージョンにも触れてみました。
より高解像度で出力でき、楽しかったです。
アクセストークンがなくても動作するようになり、気軽に試せるようになったので、皆さんも挑戦してみてください。
最後までありがとうございました。