テキストから画像を生成してしまう画像生成AI「Stable Diffusion」
いろんな画像をテキスト入力するだけで作成してくるのでとても便利です。
動作環境
- Google Colab
- stable-diffusion-v1-4
ローカルにインストールは諦めた
最初はローカルにインストールして使用する予定だったのです。
しかし、「Stable Diffusion」はNVIDIAのGPUが必要です。
IntelのオンボードGPUしかない私にはローカルの構築では無理でした。
余談ですが、VirtualBoxでは無理そうですね、NVIDIAのGPUがあってもゲストOSから使用できないみたい。
設定とかあるんだろうか、バーチャルGPUしか設定できないしな。
というわけで、NVIDIAのGPUが無い私の救世主になってくれたのは「Google Colab」
無料だし、GPU使用できるし、ブラウザで操作できるし、お手軽です。
前準備
「Stable Diffusion」をGoogle Colabで利用する前の準備です。
アクセスキーが必要になるので、下記の「Hugging Face」でアカウントを作成します。
https://huggingface.co/login
アカウント作成後にログインしてアクセストークンを作成します。
Settingから「Access Tokens」に進んで、「New token」を押下します。
Nameはなんでもいいです、わかりやすい名前を付けます。
Roleは「read」で「Generate a token」を押下します。
これでtokenの作成が完了です、showを押せばトークンを見ることができます。
Google Colab
Google Colabの利用はGoogleアカウントが必要です。
無ければ取得しましょう。
https://colab.research.google.com/?hl=ja
GPUの設定
画像生成にはGPUが必要なので上部の「ランタイム」から「ランタイムのタイプを変更」を選びます。
そこで、ハードウェア アクセレータをGPUに変更します。
コードにコマンドを入力してGPUが設定されていることを確認します。
!nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 49C P8 9W / 70W | 0MiB / 15109MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
ライブラリのインストール
必要なライブラリをインストールします。
!pip install diffusers==0.2.4 transformers scipy ftfy
最後の行にSuccessfullyが出れば成功です。
~
Successfully installed diffusers-0.2.4 ftfy-6.1.1 huggingface-hub-0.9.0 tokenizers-0.12.1 transformers-4.21.1
コーディング
pythonの処理を書いていきます。
今回はGPUの消費を抑えるためにstable-diffusion-v1-4のfp16を使用します。
Google ColabはGPUの利用に上限があるようなので、使用を抑えます。
{アクセストークン}には先ほど入手したトークンの文字列を入れてください。
import torch
from torch import autocast
from diffusers import StableDiffusionPipeline
YOUR_TOKEN="{アクセストークン}"
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", revision="fp16", torch_dtype=torch.float16, use_auth_token=YOUR_TOKEN)
pipe = pipe.to("cuda")
画像の生成
画像を生成します。
prompt = “”が生成したい画像を指定する文字列です。
今回は「かわいい子猫のパンチ」を英語にして入れています。
prompt = "cute a kitten punch"
with autocast("cuda"):
image = pipe(prompt)["sample"][0]
image.save(f"sample.png")
作成成功すると、左のフォルダ内にsample.pngの画像が作成されます。
ダウンロードして確認しましょう。
かわいい子猫の猫パンチです。メロメロです。
画像生成の処理を再度実行すれば違う画像が生成されます。
納得がいくまで作成しましょう。
まとめ
文字を打ち込むだけで画像が作成できるすごいツールです。
なかなか意図した画像を作成するのは難しいですが、いろいろ試してみようと思います。
ちなみにエロはダメです、フィルターがあって真っ黒な画像になります。