Stable Diffusionで遊ぶ
Stable Difussionはテキストから画像を生成するAIのOSS版である。このツールを使うためには強めのGPUが必要なのだけど手元にそんな環境はないのでGoogle Colaboratoryを使う。Google Colaboratoryを使えば制限はあるが無料でGPU環境を使うことができる。つまり無料でテキストから画像を生成する遊びができる。
動かすまでの流れとしては下記。
- Google Colaboratoryのセットアップ
- HuggingFaceの登録
- 環境構築 & 実行
1. Google Colaboratoryのセットアップ
GoogleのアカウントがあればOK。あとは下記にアクセスできれば問題ない。
GPUを使いたいので[編集] -> [ノートブックの設定] -> [ハードウェア アクセラレータ]からGPUを選択して保存する。
これでColab側の設定は終わり。
2. HuggingFaceの登録
AI用のモデルを使用するのだけど、これにはHuggingFaceというコミュニティサイトへの登録が必要になる。あとで認証を行うときに使うのでアカウントを作成しておく。
3. 環境構築
Colabの方で適当に新規ノートブックを作成する。ここでツールの実行や画像の保存など全ての作業を行うことになる。
ライブラリのインストール
まずはpipを使ってライブラリをインストールする。diffusersは公式のものを使うべきだが、自分は色々とゴニョゴニョしてみたかったのでforkした改変版を使っている。
!pip install git+https://github.com/YuheiNakasaka/diffusers
!pip install transformers scipy ftfy
!pip install "ipywidgets>=7,<8"
HuggingFaceの認証
外部サイトでの認証を行う。
from google.colab import output
output.enable_custom_widget_manager()
下記を実行するとHuggingFaceへ飛ぶリンクが表示される。そこでトークンを作成してColab側のフォームに入力する。
from huggingface_hub import notebook_login
notebook_login()
画像用のディレクトリを作成
!mkdir outputs
パイプラインのセットアップ
from diffusers import StableDiffusionPipeline
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=True)
pipe.to("cuda")
実行
prompt="~~~"
に生成したい画像のテキストを入力する。すると3,40秒でoutputs/
配下に画像が生成されるはず。あとは好きにやっていけばOK。
import hashlib
prompt = "A photography of the cat flying in the sky"
results = pipe(prompt)["sample"]
filename = hashlib.md5(prompt.encode()).hexdigest()
print(filename)
for i, elm in enumerate(results):
image = results[i]
filename = "outputs/{}.png".format(filename)
image.save(filename)
注意
何かあるかもしれないのでヤバめの画像が生成されたらすぐディレクトリから削除した方が良い。もしかすると生成された画像によってはGoogle Driveの検閲をくらってアカウントがBanされるかもしれないし。
あとR18の画像を生成して喧伝してると規約違反になるからそれはそれでまずそう。
403エラーが出る場合
HuggingFace側でモデルの規約への同意が抜けてる。下記にアクセスして規約を読んで同意する。
GPUが使えない
無料ユーザーはすぐGPUが使えなくなる。1日で使える割当量を使い切るとその日はもうCPUしか使えない。課金するかGPUを購入するか次の日まで我慢するしかない。そんなに甘くない。