みなさん、こんにちは。
パノメゴン(@panomegon)です。
最近、AIで画像を自動生成する技術が熱いですね。
Midjourneyとかもすごいんですが、こちらはDiscordのアカウントが必要だったり、無料で生成できる画像の枚数に制限があったりなどして、なかなか手を出せずにいました。
そんなところに登場したのが、この「Stable Diffusion」です。
生成した画像に関しては、その画像の作成者自身が権利を持ち、商用利用もできるとのことです。
しかも、無料だからといって、枚数制限がありません。(ローカルPCに環境を用意して動かせば)
シンプルにすごすぎます。
ということで、このStable Diffusionを実際にローカルで触ってみようと思います。
Stable Diffusionを使う方法には2パターンあるんですが、今回は特に導入が楽な、「Diffusersを用いる導入方法」で進めていきます。
ただ普通にローカルPC上で動かしてもいいんですが、それだと失敗した際に戻すのが大変なので、以前用意したVirtualBoxによる仮想環境上で行いました。
この記事では、メモリ4GB、ストレージ20GBとしていますが、以下の理由により、それぞれ変更しました。
・モデルのダウンロードができない
→ストレージを40GBに
・コマンド実行中に固まり、強制終了される
→メモリ8GBに
ちなみにタイトルにもありますが、GPUなしで動かします。
というか、VirtualBox上でグラフィックボードを使うのは難しいようです。
僕のPC自体にはちゃんとグラボ積んでるんですけどね。せっかくあるのに、使えないのはもったいない。
基本的にはこちらのページの通りに進めていけば大丈夫です。
https://huggingface.co/blog/stable_diffusion
Stable Diffusionの導入方法
Stable Diffusionを導入していくわけですが、おおきく分けて2段階となっています。
- アクセストークンの取得
- ライブラリのインストール
これらが終われば、あとはPythonのコードを書いて、画像を生成するだけです。
Pythonと言ってもたった数行のコードですし、対話形式での実行なら手軽に行えますので安心してください。
では順に見ていきましょう。
アクセストークンの取得
AIによる画像生成にはモデルデータが必要です。
しかし直接手動でダウンロードするわけではありません。アクセストークンというのを発行して、それをプログラムに組み込むことで、実行時に自動でダウンロードしてくれます。
このアクセストークンを発行する際に、「Hugging Face」のアカウントが必要となりますので、まず、こちらのページでアカウントを作成してください。
https://huggingface.co/join
そうしましたら、こちらのモデルのページに移動します。
https://huggingface.co/CompVis/stable-diffusion-v1-4
利用規約が出ていると思います。読んで、同意ボタンを押してください。
おおまかに要約すると、
- このモデルを使用して、違法・有害なコンテンツを意図的に作成・共有してはいけないこと
- 生成した出力は生成者が自由に使用することができ、その使用について責任を負うこと
- モデルを商業的・サービスとして使用する場合、ライセンスにあるものと同じ使用制限を含め、CreativeML OpenRAIL-Mのコピーをすべてのユーザーに共有しなければならないこと
という感じです。
ここまで来るとアクセストークンが取得できるようになります。
次のページにアクセスしてください。
https://huggingface.co/settings/tokens
「New token」ボタンを押して、アクセストークンを作成してください。
名前は何でも良いです。
ライブラリのインストール
ライブラリのインストール等を行います。
とはいえ、非常に簡単です。
今回GPUは使用しませんので、グラボ関係のCUDAやらcuDNNやらは必要ありません。
コマンドラインで、以下を実行するだけです。
sudo apt install python3-pip
sudo pip install diffusers transformers scipy ftfy
一行目でpipを使えるようにします。
もとから使える場合は、このコマンドは不要です。
2行目で必要なライブラリをインストールします。管理者権限で実行していますが、これはパスの通った場所にインストールするためです。Ubuntu系の場合、pipの仕様が少し特殊なようです。
以上で下準備は終わりです。
それでは、実際に使っていきましょう。
Stable Diffusionの基本的な使い方
基本的には、Pythonで指示をしていきます。
まず、次のコマンドでPythonを対話形式で実行できるようにしましょう。
python3
そうしましたら、ライブラリを読み込みます。
from diffusers import StableDiffusionPipeline
次にアクセストークンを変数に入れておきましょう。
各自、取得したアクセストークンに置き換えてください。
YOUR_TOKEN="アクセストークン"
次のコマンドを実行すると、モデルが読み込まれます。
初回はダウンロードが行われますので時間がかかりますが、気長に待ちましょう。
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN)
いよいよ画像を生成してみます。
ドキュメントにあったコードのままですが、これを実行すると馬に乗った宇宙飛行士の画像が出力されると思います。
prompt = "a photograph of an astronaut riding a horse"
image = pipe(prompt)["sample"][0]
image.save(f"astronaut_rides_horse.png")
僕が試してみたものは、こちらになります。
なかなか面白いです。
ただ、ここで問題となったことは、処理速度が極端に遅いことです。
一枚出力するのに、40分くらいかかります。
まあ、GPUなしで、しかも、メモリ8GBの仮想環境上でやっているので無理はないかもしれませんが、他サイトの記事(GPUあり)だと数分って書いてあったので、それと比べると…
どうしたものか。
結局、Google Colaboratoryに落ち着いたという話
上で話したように、仮想環境上でStable Diffusionを動かすとなると、非常に重たいです。
かと言って、実環境にグラボ関連のソフトウェアをインストールして、Pythonライブラリを入れて…
みたいなことはあまりしたくありません。
ということで目をつけたのがこの「Google Colaboratory」です。
実際、Stable DiffusionをこのGoogle Colaboratory上で動かしてみるという記事はいくつか見つけていたので、導入は非常に簡単でした。
これを使うメリットとしては、
- 無料でGPUが簡単に使用できる(無料版は制限がありますが)
- 自分のPCの性能によらない処理ができる
- ローカル環境にいろいろ入れたりする必要がない
といった感じでしょうか。
ざっくりとGoogle ColaboratoryでStable Diffusionを使用する流れを書いておきます。
アクセストークンの取得までは、先程までと同じです。
まず、Google Colaboratoryと検索して、Google Colaboratoryを開き、ノートブックを作成します。
Google Driveにアプリをインストールすることで、そちらから使用することもできます。
次に、GPUを使用できるようにします。
「編集」から「ノートブックの設定」を開き、「ハードウェアアクセラレータ」をGPUに変更しましょう。
下記のコマンドを実行して、必要なライブラリをインストール。
!pip install diffusers transformers scipy ftfy
あとは同じように、下のプログラムを実行するだけです。
アクセストークンのところも同様に書き換えてください。
from diffusers import StableDiffusionPipeline
YOUR_TOKEN="アクセストークン"
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN)
pipe.to("cuda")
prompt = "a photograph of an astronaut riding a horse"
image = pipe(prompt)["sample"][0]
image.save(f"astronaut_rides_horse.png")
先程と異なるのは、pipe.to(“cuda”)として、GPUに接続している点です。
それで実際に生成してみたものが、こちらになります。
アニメ調の画像も作ってみました。
やっぱり楽しいです。
で、最も驚いたのは、一枚30秒ほどで生成できた点です。
さっきは、40分くらいかかってたので、非常に短く感じます。
Google Colaboratoryの無料版を使うことのデメリットは、整えた環境が、ある条件下で、すべてリセットされてしまう点です。12時間続けて使用したり、90分ほど放置したりなどすると、また再びライブラリのインストールを行う必要があったり、モデルのダウンロードが行われたりします。
まあ、それを考慮しても、画像生成がこんなに短時間で終わるというは、すごいことです。
最後に
話題になっていた、AIによる画像生成をようやく試すことができ、非常に満足です。
状況説明の文の書き方など、まだ把握しきれていないことは多いのですが、いろいろ試してベストな使い方を見つけていきたいと思います。
みなさんも遊んでみてください。
最後までありがとうございました。