今回は昨今話題になっているお絵描きAIについて
ローカルPCに実装について説明していきます。
今回はStable Diffusionと呼ばれるテキストから画像を生成するアルゴリズムについて書いていきます。
英Stability AIが、HuggingFaceで無償公開してかなり盛り上がってるようです。
このHuggingFaceってなんだ??と思ったのですが、主に自然言語処理に関連したライブラリ・アルゴリズムの開発・シェアを行なっているコミュニティらしい。
本来ならGPUを搭載したwindowsPCなどで使うのですが
そんなPCは持っていない&乗るしかないこのビッグウェーブにということで
MacBook Air(M1, 2020) メモリ8GBで実装していきます。
多分windowsでも使えると思うので、是非ご覧ください。
HuggingFaceのアクセストークンの取得
HuggingFaceで実装されているStable Diffusionを使うには以下の手順が必要です。
- HuggingFaceへ登録
- アクセストークンを取得する
とたった数手順で5分もあれば終わる内容です。
HuggingFaceへ登録
最初はまずアカウントの作成から始めます!!
このHuggingFaceのページからアクセスし、右上のSign Upから登録画面へ移動します。
移動したらメールアドレスとパスワードを設定します。
僕はこの手のメールアドレスは、あまり使わないものを使用してます。
次にプロフィールの記入。これもニックネームを記入していきます。
StableDiffusionモデルの利用規約に合意する
こちらにアクセスしてから記載内容を確認します。確認の上合意したら、チェックボックスにチェックを入れてからAcces repositoryを押します。
アクセストークンの取得
アカウントを作成したら、トークンを作成します。
まず画の右上にあるプロフィールからSettingsをクリックします。
するとプロフィールの設定の画面に移動するので
Access Tokens → New token を選択していきます。
そしたらNameの決定とRoleの選択をして、と書かれるので
とりあえず、Nameをtest,RoleをreadとしてGenerate a tokenをクリックするとトークンが発行されます。
(上の画像の●●●になっているのがトークンです)
Pythonによる実装
さっそく実装をします。
ここで解説するコードは基本的に公式ホームページ
まずライブラリをインストールします。
pip install diffusers==0.2.4 transformers scipy ftfy
そしたらあとは以下のコードを実行します。
コードはGitHubを参考にさせてもらいました。
# ライブラリーのインポート
from diffusers import StableDiffusionPipeline
import matplotlib.pyplot as plt
import torch
from torch import autocast
model_id = "CompVis/stable-diffusion-v1-4"
# アクセストークンの設定
access_tokens="XXXXXXXXXXXXXXXXXXXX" # @param {type:"string"}
#予測モデルの
pipe = StableDiffusionPipeline.from_pretrained(model_id, revision="fp16", use_auth_token=access_tokens)
prompt = "a cute comic girl"
image = pipe(prompt)["sample"][0]
image.save("test_cute_girl.png")
私のMacだとM1チップ搭載なので
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipe = pipe.to("mps")
と書けば実行速度が速くなるそう。
そのあたりもこちらのページにもしっかり、書いてありました。
実行結果
上のコードを実行すると、だいたい30秒ほどで実行画像を出力します。
こんな感じの結果が出力されました。
本当にa cute comic girlなのかはわからないのですが、
とりあえずそれっぽい感じに出力してくれました。
おわりに
ここまで読んでいただき、ありがとうございました。
私が学生時代のころはGANやDCGANみたいなもので、数字が書かれた画像を作成していたのですが
時代は進化しましたね。。。
どんどん勉強してこのあたりも勉強していきたいと思います。
それでは。