画像生成AI「Stable Diffusion」をGoogle Colabで動かしたメモ

AIが画像を自動生成してくれる「Stable Diffusion」がすごい。これを使ったサービス「DreamStudio」は1枚6秒ほどで画像を生成してくれて早いが、無料枠を超えて使うには課金が必要になる。

Google Colabという、Pythonの実行環境を提供してくれるサービス上でStable Diffusionを動かせるそうだ。お金はかからない。1枚の画像生成にかかるのは30秒ほど。その方法は以下で解説されている。

自分でもやってみて、今は無事にStable Diffusionを使えるようになっている。しかしGoogle Colabを使うのも初めてだったので上の記事だけだと詰まるところもあった。ここではそれを解説したいと思う。

追記

このエントリの投稿後、より詳しく解説したページが出ていたことを知りました。

こちらはHugging Faceのアカウント取得なども含めてステップバイステップで説明されています。

自分のエントリを書く動機になった「「ランタイムの切断」に注意」の節は上の記事にはないので、そこはぜひ読んでください。

ライセンスの確認

Hugging Faceにアカウントを作るとウェルカムページへ移動する。「CompVis/stable-diffusion-v1-4 · Hugging Face」へ行くとライセンスが表示される。下の方に「I have read the License and agree with its terms」のチェックボックスと「Access Repository」のボタンがあるのを見逃さないように。


Hugging Faceのトークンを取得

アカウントを新規登録した際に届くメールには確認用のリンクがある。これをクリックするとHugging Faceを正式に使えるようになり、トークンも取得できるようになる。

Google Colabでの実行

ここの解説は元記事ではあっさりめなので、ちょっと詳しく。といっても自分も初めて使ったものなので間違いなどあったらTwitterブコメ優しくご指摘ください。

Google Colabへ行くとノートブックの一覧が表示される。Google Colabを初めて使うときは「Colaboratoryへようこそ」だけがあるはず。ここで「ノートブックを新規作成」をクリックする。

新規のノートブックが開く。ここで「ハードウェアアクセラレータ」に「GPU」を指定する。

ノートブックではカーソルが点滅しているところにコマンドを入力していく。入力したコマンドの実行は[Ctrl]+[Enter]、または左の(▶)をクリックする。

コマンドが終了したらその上の「+コード」をクリックして新しいコードセルを出し、そこに次のコマンドを入れていく。終了したコマンドを消して次のコマンドを入れてもよい。

下のように、3つに分かれているコマンドをまとめて実行してもよい。その次は画像生成のコマンドを入れるコードセルを出せばすむようになる。ノートブックを開き直してもコードセルはそのまま残っているから、下の「自分で取得したHugging Face Hubのトークン」の部分を自分のトークンに置き換えて一度実行しておけば、次に開いたときにこのコードセルを実行するだけでよい。

!pip install diffusers==0.2.4 transformers scipy ftfy

YOUR_TOKEN="自分で取得したHugging Face Hubのトークン"

from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN)
pipe.to("cuda")

そのほかは元記事の手順通りに進めていけばStable Diffusionを使えるようになるはず。上のまとめたコードだと、すべてのコマンドが終わるまで3分くらいかかる。またインストール中にエラーが出て、再実行しても変わらないときは最初のコマンドからやり直すとよい。

上の初期化コマンドに続けて画像生成のコマンドを実行したければ、上のコードセルを実行させてから画像生成のコードセルも実行させておくと、順番に処理してくれる。

画像生成のコマンドが終了してもコードセルの左に「✔」が出るだけで、画像が表示されたりはしない。画像はノートブック内の「ファイル」に保存される。左サイドバーの「ファイル」をクリックする。

表示される「ファイル」ペイン内、画像のファイル名をダブルクリックすると画像が表示される。画像は「ファイル」ペインのファイル名にマウスポインタを置いたときに表示される「⁝」からローカルに保存できる。


「ランタイムの切断」に注意

ノートブック内に作られた画像ファイルは一時的なものなので、すぐにローカルに保存するのがよい。

Google Colabをしばらく放置したり、長時間使ったりしていると「ランタイムの切断」というダイアログボックスが表示される。ここで「再接続」しても、先ほどの画像ファイルはもう消えているからだ。

(このことを書きたかった。ランタイムが切断されても画像ファイルが残るようにする方法はあるのだろうか)

追記:Googleドライブを接続して画像をクラウドに保存する方法

画像ファイルの保存先をGoogleドライブに変更できるとブコメで指摘をいただいた。id:zkqさんありがとうございます。以下は自分で調べた結果です。

ノートブックを開いたらファイルアイコンに続いて「ドライブをマウント」アイコンをクリックする。

Googleドライブに接続」をクリック。

ドライブがマウントされる。

初期化コマンドの末尾に以下の2行を追加する。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')

追加後の全コマンドは以下。

!pip install diffusers==0.2.4 transformers scipy ftfy

YOUR_TOKEN="自分で取得したHugging Face Hubのトークン"

from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN)
pipe.to("cuda")

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')

これを実行してから画像生成のコマンドを実行すると、画像は「sample_data」と同じ階層ではなく、「drive」-「MyDrive」-「Colab Notebooks」に保存される。

画像はGoogleドライブ側からも見ることができる。Googleドライブに保存された画像は、ランタイムが切断されても消えることはない。


呪文探しの旅が始まる

これで無事にStable Diffusionを使えるようになったら、次はいい感じの画像を出してもらうためのコマンド探しが始まる。

下はいろいろ試してみた結果。しかし、うまくできなくてここに上げていない画像はこの何倍もある。

追記:呪文の参考にしたページ

ほかにもたくさんあるが、自分が見たのはこのあたり。あとユーザー登録すると招待されるStable DiffusionのDiscordには、作品といっしょにコマンドを公開してくれている人もいる。

さらに追記

Stable Diffusionで作った画像を検索して、それを生成した呪文を見られるサイトができたとのこと。

求める画像の特徴を日本語で入力すると呪文に変換してくれるサービスも登場した。

〔おまけ〕Google Colab以外でStable Diffusionを使う

Stable Diffusionをローカルで実行することもできるそうだ。

ただし現在のところNVIDIAGPUが必要なので、誰でも使えるというわけではない。

Stable Diffusionのサイトにはデモページがあって、ここなら誰でもいくらでも画像を生成できる。

しかしここは4枚セットを出すのに数分から10分程度かかる。画像枠の右上の数字は経過時間と所要時間を示している。複雑なコマンドだとより時間がかかるようだ。またシード値が固定されているのか、同じコマンドで生成される画像はいつも同じになる。


追記:シード値などはAdvanced optionsで変更

Advanced optionsでシード値を変更できるとブコメで教えてもらった。id:oichさんありがとうございます。そしてページを読み込み直すたびにシード値はランダムに設定されるので、同じコマンドで同じ画像を出すにはシード値を同じにすればいい(=しないとだめ)。