鈴木です。プログラミング初心者の私ですが、最近AIで画像を作成できることが話題になり、自分も試してみました。
https://stablediffusionweb.com
こちらのページから話題のStable Diffusionが使用できます。
プロンプトと呼ばれる、どんな画像が欲しいかを箇条書きのように表していく文を使うことで、
自動的に画像が作成できるというものです。
これをローカルでできないかと考え、参考になる記事を見ながらローカルでもできるようにしました。
どうやらDiffuserというモジュールを使えばできるようです。
ローカルで実行するにあたって、
https://zenn.dev/michy/articles/102a0558096199
こちらの記事が非常に参考になりました。
なるべく初心者でもわかるように私も紹介したいと思います。
私の場合は、通常のPythonエディタからプログラムを起動させるように作ります。
なので、Jupyterは使わない前提で進めます。
まずhomebrewがインストールされていない場合、それを最初にインストールします。
https://brew.sh/index_ja
macのターミナルを開いて、サイトに書いてあるコードをそのままコピペしてEnterしてください。
インストールできたら、次はPythonをインストールします。
もし既にインストールしていたら必要ありません。
brew update && brew install python3
これをターミナルに打てばpythonがインストールされます。
今インストールされているのかわからない場合はpython --version
(-は2個必要です 表示で1個しか表示されてないかもしれませんが2個つけてください)
とターミナルに打ってください。もしあればversionが表示されます。
ただ多少pythonの基礎知識的なものは必要になるので、混乱しそうでしたら他の紹介ページ、
あるいはChatGPTに聞きましょう。
事前準備として、
Stable Diffusionをローカルで使うためには、「Diffuser」というモジュールを使うのですが、それには
「huggingFace」というサイトから発行されるトークンが必要になります。
https://huggingface.co/
こちらに登録して、
https://huggingface.co/settings/tokens
ここからトークンを発行できます。やっておきましょう。
トークンを発行したら、ローカルに認証する必要があります。
ターミナルで
git config --global credential.helper
と打ってください。おそらくすぐに操作が終わります。
次に
huggingface-cli login
と行きたいのですが、私の場合huggingface-cliがインストールされていませんでした。
もしエラーになる場合は、
brew search huggingface-cli
とターミナルで打つとありますよと表示されるので
brew install huggingface-cli
と打って、huggingface-cli をインストールしてください。
その後に
huggingface-cli login
と打つと、トークンを聞かれます。
ここでhttps://huggingface.co/settings/tokens
こちらのトークンをコピペすれば、huggingfaceのトークンが認証され、diffuserが使えるようになります。
次に仮想環境です。私はvenvを使用するのでそれの紹介です。
仮想環境を使う理由は割愛しますが、さまざまなサイトで取り上げられているので初めての方はご覧ください。
何かしらエディタを使っていて、プロジェクトをひらけば自動的に仮想環境が作られる場合は、この操作は必要ありません。
おそらくターミナルのディレクトリはhomeにいると思うので、適宜ディレクトリを作成するか、もしくはその場所でも良いので仮想環境を作成します。
python3 -m venv venv
と打てば、仮想環境が作成されます。
python3 -m venv の時点で仮想環境が作成され、その後のvenvは名前を示します。
「venv」という名前が紛らわしかったり、他とかぶる場合は、何か名前を変えてください。
仮想環境が作成されたら、
source venv/bin/activate
と打って、仮想環境を起動します。
このコマンドのvenvは、名前を示すので仮想環境の名前に合わせて適宜変更してください。
仮想環境を終了したい時は
deactivate
と打てば仮想環境が終了します。
ただし今はまだ終了しないでください笑 作業を終わりたい時に終了しましょう。
それでは、仮想環境を起動させた状態でライブラリをインストールします。
pip install torch
pip install transformers
pip install accelerate
pip install scipy
pip install diffusers
これらを順にインストールしてください。
※ これらをインストールしても、実際には何かしら足りないものが出てくるかもしれません。
コードを実行したときに no module 〇〇 と表示されたら、それをpip install 〇〇
として再度インストールしてください。
ちなみに、私の環境でrequirements.txtを pip freeze > requirements.txt で書かせるとこうなりました。
accelerate==0.16.0
anyio==3.6.2
appnope==0.1.3
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
arrow==1.2.3
asttokens==2.2.1
attrs==22.2.0
backcall==0.2.0
beautifulsoup4==4.11.2
bleach==6.0.0
certifi==2022.12.7
cffi==1.15.1
charset-normalizer==3.0.1
comm==0.1.2
debugpy==1.6.6
decorator==5.1.1
defusedxml==0.7.1
diffusers==0.13.1
executing==1.2.0
fastjsonschema==2.16.3
filelock==3.9.0
fqdn==1.5.1
huggingface-hub==0.12.1
idna==3.4
importlib-metadata==6.0.0
ipykernel==6.21.2
ipython==8.10.0
ipython-genutils==0.2.0
ipywidgets==8.0.4
isoduration==20.11.0
jedi==0.18.2
Jinja2==3.1.2
jsonpointer==2.3
jsonschema==4.17.3
jupyter==1.0.0
jupyter-console==6.6.1
jupyter-events==0.6.3
jupyter_client==8.0.3
jupyter_core==5.2.0
jupyter_server==2.3.0
jupyter_server_terminals==0.4.4
jupyterlab-pygments==0.2.2
jupyterlab-widgets==3.0.5
MarkupSafe==2.1.2
matplotlib-inline==0.1.6
mistune==2.0.5
nbclassic==0.5.2
nbclient==0.7.2
nbconvert==7.2.9
nbformat==5.7.3
nest-asyncio==1.5.6
notebook==6.5.2
notebook_shim==0.2.2
numpy==1.24.2
packaging==23.0
pandocfilters==1.5.0
parso==0.8.3
pexpect==4.8.0
pickleshare==0.7.5
Pillow==9.4.0
platformdirs==3.0.0
prometheus-client==0.16.0
prompt-toolkit==3.0.37
psutil==5.9.4
ptyprocess==0.7.0
pure-eval==0.2.2
pycparser==2.21
Pygments==2.14.0
pyrsistent==0.19.3
python-dateutil==2.8.2
python-json-logger==2.0.7
PyYAML==6.0
pyzmq==25.0.0
qtconsole==5.4.0
QtPy==2.3.0
regex==2022.10.31
requests==2.28.2
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
scipy==1.10.1
Send2Trash==1.8.0
six==1.16.0
sniffio==1.3.0
soupsieve==2.4
stack-data==0.6.2
terminado==0.17.1
tinycss2==1.2.1
tokenizers==0.13.2
torch==1.13.1
tornado==6.2
tqdm==4.64.1
traitlets==5.9.0
transformers==4.26.1
typing_extensions==4.5.0
uri-template==1.2.0
urllib3==1.26.14
wcwidth==0.2.6
webcolors==1.12
webencodings==0.5.1
websocket-client==1.5.1
widgetsnbextension==4.0.5
zipp==3.15.0
すごい量ですね。もし次の段階でStable Diffusionを動かす時に、
何か足りないとエラーが出る場合は、
requirements.txt というファイルを作り、それにに上記をコピペして
pip install -r requirements.txt
としてください。 また、ライブラリをインストールしたはずのものがないとエラーが出る場合は、
deactivate
で一旦仮想環境を終了し、再度
source venv/bin/activate
にて仮想環境を起動してください。
それでもダメな場合は1つ1つエラーが出るライブラリをインストールし直しましょう。
いよいよStable Diffusionの実行です。
pythonのコードを書いて、そのpyファイルを実行すれば、画像が生成されます。
便宜上 main.py というファイル名とします。
main.pyというファイルに、以下のコードをコピペして、実行してみてください。
# main.py
from diffusers import StableDiffusionPipeline
# モデルの指定
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
# デバイスの指定。mpsはM1/M2 Macを指す。
pipe = pipe.to("mps")
pipe.enable_attention_slicing()
prompt = "a dog"
n_prompt = "bad fingers"
# modelのウォームアップ。Macの場合は必要
_ = pipe(prompt, negative_prompt=n_prompt, num_inference_steps=1)
# 処理の実行
image = pipe(prompt, negative_prompt=n_prompt).images[0]
image.save("/output.jpg") # 任意のpath + ファイル名.jpg
いかがでしょうか。
最初はモデルのダウンロードがあるので、結構時間がかかるはずです。
1度モデルをダウンロードすれば、次回以降は生成の段階から始まります。
少し説明します
# モデルの指定
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
この、”runwayml/stable-diffusion-v1-5″ という部分がモデルを指定しています。
今回はstable diffusionのモデルですが、現在多くのモデルが公開されています。
絵の精度に関しては、モデルの選択が非常に重要な気がしています。
プロンプトでもある程度は修正できますが、0を1にすることはできないようです。
# デバイスの指定。mpsはM1/M2 Macを指す。
pipe = pipe.to("mps")
ここは、M1/M2 macでは “mps” と指定すると動くようです。
Intel Macでは、CPUしかないので ”cpu” とすると動くと思うのですが、実際に試してないので検証が必要です。
prompt = "a dog"
n_prompt = "bad fingers"
これはよくある呪文というものですね。
promptはそのままプロンプトで、作りたい絵の説明をします。
今回はa dogだけですが、実際にはもっと長く、細かく書くことが多くなるでしょう。
プロンプトについては私もあまり確信がないので、他の方の記事など参考にしてください。
n_promptはネガティブプロンプトで、作りたくないものの説明を書きます。
AIは基本的に手が苦手なので、人間の場合bad fingersは入れておいた方がいいような気がします。
今回は犬なので、正直なくてもいいです。
実際にコードを動かしてできた画像がこちらです。1枚目はn_promptあり、2枚目はn_promptなしです。
このような写真のような画像が合成で作れるなんてすごいですよね、びっくりしました。
ネガティブプロンプトをなしにしたいときは、コメントアウトは面倒なので、
n_prompt = “”
としてしまえば問題ありません。
一応、画像の権利などに関して
https://huggingface.co/spaces/CompVis/stable-diffusion-license
こちらのライセンスに同意することが必要になります。
特には「同意する」ボタンなどはないのですが、乱用するなという認識です。
このように、自動的にAIが画像を作ってくれるサービスは正直驚きです。
WebUIで作っても良いのですが、完全ローカルで作ることにより、他の処理(for文など)も行えるので、よりコンピューターの恩恵にあずかれます。
色々と話題になる予感のするAIです。何か画像を作成する際の参考になれば幸いです。