目次
「Stable Diffusion」は、2022年8月にStability AI社が公開したオープンソースの描画AIであり、文章や画像をもとに画像を描画することができます。描画品質は、実行する環境に依存します。
本資料では、独立GPUを搭載していないパソコンで使うための「CPUオンリー環境」と、独立GPUを用いる「GPUあり環境」の2つについて動かし方を説明しています。
IBM Cloud Virtual Serverには仮想GPUがありますが、エラー対策の確認が取れていないので、IBM Cloud Virtual Serverは、CPUのみのスペックとしています。
GPUあり環境 x Web UIあり(GradioによるWebアプリとして公開)の場合 (IBM Cloud Pak for Data , Watson Studio, Google Colab)の例が、手軽です。Google Colab (Google Colaboratory)は、Webブラウザ上で動くPython実行環境で、無料でGPUを使うことができます。 |
ジブリ風やFinal Fantasy風など指定することができるあたり、日本のアニメやゲーム系の画像を学習していると考えられます。2019年1月1日に施行された「改正著作権法」では、営利・非営利問わず第三者の著作物をAI学習に使えるようになっていることが影響していると思われます。「改正著作権法」については、お近くの弁護士にご相談するとよろしいでしょう。 |
独立GPUなし、Intel製CPUオンリー環境向けは、Ubuntu + Docker 環境が必要であるため、サーバー構築になれている上級者向けです。
独立GPUなし、Intel製CPUオンリー環境向けは、Ubuntu + Docker 環境が必要であるため、サーバー構築になれている上級者向けです。
画像生成AIである、Stable Diffusion では、prompt(プロンプト)と呼ばれる、文章(文字列)を入力することで、画像を生成します。
日本ではこれを「呪文」と言うことがあります。たとえば、「Portrait of a Girl, Anime Character , pixiv , finalfantasy , cinematic lighting , high quality」のようなものです。プロンプトについて調べると、様々な情報が出てきますので、実際に試してみることをお勧めします。
https://strikingloo.github.io/stable-diffusion-vs-dalle-2
https://mpost.io/best-100-stable-diffusion-prompts-the-most-beautiful-ai-text-to-image-prompts/
https://github.com/joelparkerhenderson/stable-diffusion-image-prompt-gallery
https://www.google.com/search?q=stable+diffusion+%E5%91%AA%E6%96%87
Windowsパソコンで、Nvidia製GPUを搭載している場合、Python環境など用意しなくても簡単に使える「NKMD Stable Diffusion GUI」が公開されています。
次の手順でダウンロードし、起動します。
下記のURLにアクセスし、「Download Now」をクリックします。
https://nmkd.itch.io/t2i-gui
「Download 'NMKD Stable Diffusion GUI - AI Image Generator'」と表示されるので、「No thanks, just take me to the downloads」をクリックします。
2つ表示される「Download」ボタンのうち上の方の「Download」ボタンをクリックします。Stable Diffusion GUI 1.7.1 (Including model files) 3 GB と表示されいるはずです。3GBあるので、時間があるときにダウンロードしましょう。
「SD-GUI-1.7.1.7z」のダウンロードを始めます。2022年11月現在は、バージョン1.7.1でしたので、「SD-GUI-1.7.1.7z」がダウンロードになります。
7z形式のファイルが初めての場合は、「7-Zip」をインストールしましょう。https://forest.watch.impress.co.jp/library/software/7zip/
ダウンロードした「SD-GUI-1.7.1.7z」を解凍します。zipや7z、lzhのように圧縮形式のファイルを開くことを解凍といいます。「SD-GUI-1.7.1」フォルダが生成されます。
「SD-GUI-1.7.1」フォルダを開きます。
「StableDiffusionGui.exe」をダブルクリックします。
「Welcome」画面が表示されます。「OK」を押してWelcome画面を閉じます。
「Enter your prompt here」に、画像生成元になる文章を入力します。入力する文章は英語である必要があります。これは、Stable Diffusionが、英語のみに対応しているためです。英語のみなので日本語は使えません。文章を入力後、「Generate」をクリックします。
最初に「Generate」をクリックした場合は、オートエンコーダ「vae-ft-mse-840000-ema-pruned.ckpt」をダウンロードします。1.5GBほどあるので時間がかかります。これは最初のみです。その後画像が生成されます。
画面右下の「<」「>」をクリックすることで、生成された画像を切り替えることができます。「<」の左となりのフォルダアイコンをクリックし、生成された画像をまとめて参照しても良いでしょう。
https://github.com/n00mkrad/text2image-gui
Macの場合、「Diffusion Bee」というアプリを使用します。
Macは、intel社製CPUを使っている場合と、Macを製造販売するApple社製CPUを使っている場合に分かれます。高性能なGPUを搭載しているのは、Apple社製CPUの場合です。Intel社製CPUを搭載敷いてるMacでは、eGPUと呼ばれる外付けGPUを使いましょう。
eGPUは、Apple社製CPUでは対応していません。公式のサポートにも記載があります。
次の手順で、アプリのダウンロードとインストール、起動を行います。
下記のURLにアクセスし、お使いのMacに合わせた文字列をクリック。インストーラーのダウンロードが開始されます。
https://diffusionbee.com/download
例えば、上記URLで、「MacOS - Apple Silicon」をクリックした場合は、2022年11月現在は「DiffusionBee-1.5.1-arm64_MPS_SD1.5_FP16.dmg」がダウンロードとなります。
ダウンロードしたファイルをダブルクリックし、開きます。
「DiffusionBee」というアプリを、「Applications」フォルダに移動します。
「Applications」フォルダ内の「DiffusionBee」アプリをダブルクリックし、起動します。
初回起動時に警告が表示されます。「”DiffusionBee”はインターネットからダウンロードされたアプリケーションです。開いてもよろしいですか?」という画面です。「開く」をクリックします。
初回起動時にモデルのダウンロードが行われます。モデルは2つあり、それぞれ2.1GB、計4.2GBほどあり、モデルのダウンロードが終われば、使用可能になります。
「Enter your prompt here」に生成したい画像の元になる文章を入力し、「Generate」ボタンをクリックすることで、画像が生成されます。
例1. A digital Illustration of the Babel tower, 4k, detailed, trending in artstation, fantasy vivid colors
例2. a girl student studying in a school, perfect pupil, school uniform, positive, book on a desk, beautiful, anime key visual, dramatic lighting, perfect shadow, hyper detailed, digital illustration
https://github.com/divamgupta/diffusionbee-stable-diffusion-ui/blob/master/DOCUMENTATION.md
CPUオンリーの場合は、最低限必要な環境を満たせば、皆様がお持ちのパソコンで画像生成AIを動かすことができます。
ローカル(=パソコン)のスペック
4コア / 8スレッド 以上のIntel製CPU
16GB以上のメモリ
SSD
仮想マシンの最低条件
仮想プロセッサ数 4つ
メモリ 8GB 割り当て
IBM Cloudの仮想GPUについては、エラーが生じるため、2022年9月現在は、仮想GPUなしで使う。
ソフトウェア
Linux , Windows , MacOS
Python 3.8 以上
docker Engine
docker Compose
IBM Cloud を使用する場合は、仮想GPUなしを使う
IBM Cloud Virtual Server for VPC
IBM Cloud Virtual Server for Classic
ローカルで動かしたい場合
Oracle Virtual Box上で作成したUbuntu 20.04の仮想マシン
Ubuntu 20.04の仮想マシンを用いた場合について説明する。仮想マシンにSSH接続を行い、次のコマンドを実行する。
$ sudo su # apt update # apt upgrade # apt install python3-venv python3-pip git # apt install libgl1-mesa-dev # mkdir work && cd work # python3 -m venv mysdvenv # source mysdvenv/bin/activate # git clone https://github.com/bes-dev/stable_diffusion.openvino.git # cd stable_diffusion.openvino/ # pip install --upgrade pip # pip install -r requirements.txt # pip install streamlit-drawable-canvas |
次のコマンドを実行する。この時、SSH接続を行っているターミナルアプリは閉じないこと。
# streamlit run demo_web.py |
実行結果
You can now view your Streamlit app in your browser. Network URL: http://サーバーのIPアドレス:8501 External URL: http://サーバーのIPアドレス:8501 |
IBM Cloud や AWSの場合は、仮想マシンに紐づいているセキュリティグループで、ポート:8501 を解放する。
Webブラウザで、External URL にアクセスする。最初はモデルのダウンロードがあるため、10分近く「Running…」のまま表示される。しばらく待つ。下図のように表示される。
「Enter prompt」に、画像として生成した文章を英単語の組み合わせで入力する。
例 : a girl student studying in a school, perfect pupil, school uniform, positive, book on a desk, beautiful, anime key visual, dramatic lighting, perfect shadow, hyper detailed, digital illustration
入力後、画面下の「Generate」ボタンをクリックする。たとえば、GPUなしかつメモリ32GBの仮想マシン(IBM Cloud Virtual Server for Classic)の場合は、推論(inference_steps)をデフォルト値の32回行い、約7~10分で画像を生成する。なお、常に同じ画像が生成されるとは限らないので、気に入った画像が生成されたときは保存しておこう。
「Enter prompt」を別の文言に変更し、再び「Generate」ボタンをクリックすることで、別の画像を生成することもできる。例として次の文章を用いた。イラストコミュニケーションサービスの「pixiv」風の画像になるように、pixiv を含めた。
例 : a girl student studying at a cafe, perfect pupil, school uniform, positive, sunny , book on a table, beautiful, anime key visual, cinematic lighting, perfect shadow, hyper detailed, digital paint, pixiv
生成された画像は次のようになる。常に同じ画像が生成されるとは限らないので、気に入った画像が生成されたときは保存しておこう。
https://github.com/AbdBarho/stable-diffusion-webui-docker から公開されている、docker compose 定義ファイルを使用する。
Ubuntu 20.04の仮想マシンを用いた場合について説明する。仮想マシンにSSH接続を行い、次のコマンドを実行する。docker Engineとdocker Composeがインストール済みとする。
git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git cd stable-diffusion-webui-docker docker compose --profile download up --build docker compose --profile auto-cpu up --build |
実行結果
~~ 中略 ~~ webui-docker-automatic1111-cpu-1 | Loading weights [7460a6fa] from /cache/models/model.ckpt webui-docker-automatic1111-cpu-1 | Global Step: 470000 webui-docker-automatic1111-cpu-1 | Model loaded. webui-docker-automatic1111-cpu-1 | Running on local URL: http://0.0.0.0:7860 webui-docker-automatic1111-cpu-1 | webui-docker-automatic1111-cpu-1 | To create a public link, set `share=True` in `launch()`. |
上記のように表示されたら、Webブラウザで、http://コンテナ実行しているサーバーのIPアドレス:7860 (Windows環境の場合は、http://localhost:7860 )にアクセスする。この状態では、フォアグラウンドであるため、UbuntuではSSH接続しているターミナルを落とすと、Stable diffusion WebUI が使えなくなるので、
Ctrl + c キーを押して、docker compose --profile auto-cpu up --build
から抜け出す。その後、バックグラウンド実行となるように、下記コマンドを実行する。
先ずは、コンテナを停止。
docker compose --profile auto-cpu stop |
バックグラウンドのオプションをつけて、Stable diffusion WebUI が使えるコンテナを起動。
docker compose --profile auto-cpu up -d --build |
だいたい3~5分程度待ち、Webブラウザで、http://コンテナ実行しているサーバーのIPアドレス:7860 にアクセスする。Web UI を使えるようになる。「prompt」に単語や文章を入れ、「Generate」で画像を生成することができる。独立GPUなしなので、画像の生成に30-60分かかることもある。やはり、独立GPUを使えた方が早い。
Watson Studioを使用します。Watson Studioで、GPUを使いたいので、有料のProfessional プランを使用します。Watson Studio以外の手段としては、Google Colaboratoryを使う手段がよく知られています。
Stable Diffusionで使用する学習済みモデルを取得するため、Hugging Faceのアクセストークンが必要です。
Hugging Faceのアクセストークンが必要なので、以下の作業を行います。次の手順で進め、Hugging Faceにユーザー登録を行います。
https://huggingface.co/ にアクセスします。画面右上の「Sign Up」をクリックします。
連絡のつくメールアドレスと任意のパスワードを入力します。
「Next」をクリックします。
画面の求めに応じて、ユーザー名やフルネームを入力します。
「I have read and agree with the Terms of Service and the Code of Conduct」にチェックを入れます。
「Create Account」をクリックします。
入力したメールアドレス宛に英語の確認メールが届きますので、メール本文内のURLをクリックし、認証を済ませましょう。
利用するモデルのライセンスを確認し、規約に同意するため、次の手順を踏みます。
https://huggingface.co/CompVis/stable-diffusion-v1-4 にアクセスします。
「I have read the License and agree with its terms」にチェックを入れます。
「Access repository」をクリックします。
Hugging Face のユーザー設定画面から、アクセストークンを発行します。
https://huggingface.co/ にアクセスします。
画面右上のあなたのアバターをクリックし、「Settings」 >> 「Access Tokens」の順にアクセスします。URLを使って一気にアクセスしても良いです。https://huggingface.co/settings/tokens
「New token」をクリックします。
「Name」に英数字でアクセストークン名を入れ、「Role」は「read」の値です。「Generate a token」をクリックします。
アクセストークンが作成されます。「Show」をクリックすることで伏字になっている文字列が表示されます。これがアクセストークンです。文字列が表示されたらどこかにメモしておきましょう。後で使います。
IBM Cloud のカタログで、Watson Studioにアクセスし、Professional プランでWatson Studio環境を作成します。ロケーションは、ダラスを使いました。
Watson Studio環境を作成後、「Launch in IBM Cloud Pack for Data」をクリックします。その後、「プロジェクト +」をクリックし、Watson Studio上で動かすJupyter Notebookを作成する場所「プロジェクト」を作成します。
Watson Studio のプロジェクト管理画面で、「資産」の「新規作成」をクリックします。
「新規資産」画面で、「コード・エディター」の「Jupyter ノートブック・エディター」をクリックします。
「新規 Notebook」画面で、ノートブック名を入力し、「ランタイムの選択」では、GPUありのランタイムを選びます。「作成」をクリックします。
「Work with data your way」などのメッセージが表示された場合は、メッセージを閉じます。
Jupyter ノートブック・エディターが表示されます。これで環境構築は終わります。
この時点での完成形としては、次のようになれば良いです。すべてのコードを書き、上から順に「▶Run」をクリックします。Jupyterノートブックでは、1つ1つの枠を「セル」といいます。
IBM Cloudで使えるWatson Studio (IBM Cloud Pak for Data)のノートブックで書いたものですが、Google Colaboratoryでも同じコードでStable Diffusionを動かすことができます。 |
各箇所(セル)を見ていきましょう。
ライブラリのインストールに関するコードは次のようになっています。実行すると、transformersのバージョンによっては、watson-nlpのライブラリとの依存性に関する警告が出ますが、Stable Diffusionではwatson-nlpは使わないので、無視しても動きます。
#ライブラリのインストール !pip install --upgrade diffusers scipy ftfy transformers Pillow |
Hugging Face で取得したアクセストークンの値をセットします。
#アクセストークン YOUR_TOKEN="あなたのアクセストークンの値をセット" |
Stable Diffusionのパイプラインを準備するコードは下記です。
#パイプライン from diffusers import StableDiffusionPipeline pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", use_auth_token=YOUR_TOKEN) pipe.to("cuda") |
文章から画像を生成する仕組みについて、記述します。Stable Diffusionでは、promptに、文章を挿入し、画像を生成します。生成した画像は、「image.png」として一時的に保存します。
#文章から画像生成 prompt = "a girl studying in a school,perfect pupil,school uniform,anime key visual" image = pipe(prompt)["sample"][0] image.save("image.png") |
一時的に保存した「image.png」をノートブック内に表示します。保存といっても、どこかのストレージに保管されるわけではないので、表示された画像上で右クリックして画像を任意の場所に保存しておきましょう。
# pillowをインポート from PIL import Image #画像の表示 filename = "image.png" data = Image.open(filename) data |
上から順に「▶Run」をクリックします。特にパイプラインを準備するところで、モデルのダウンロードが行われますので、十数分ほど待つことがあります。
処理中は、In [ *]と表示されます。処理が完了すると、*(アスタリスク)の部分に数字が入りますので、数字が表示されているかどうかを目安にしましょう。
表示された画像の上で右クリックを行い、画像を任意の場所に保存します。
「#文章から画像生成」のセルに移動し、セル内の「prompt」の文章を変更します。
たとえば、a girl studying in a school とします。
変更後、「#文章から画像生成」のセルから順に「▶Run」をクリックします。
実行結果として、次のように表示されます。実行結果は毎回異なるので、気に入った画像はこまめに保存することが必要です。
生成された画像は上記のようになりました。よくみると手や腕の位置がおかしいので、画像生成に用いる文章は数回試して調整することが必要です。
画像生成に用いる文章を次のように変更し、某ゲーム風に仕上げてみました。またクリーチャーのようにならないように、人の顔で、鼻があってなど、明確に指示しました。
生成に用いた文章 : a girl studying , human face, nose, japanese anime , pixiv , finalfantasy , cinematic lighting , high quality
人の顔で、鼻があって、のように明確に指示することで、より品質の良い画像が表示されることがわかりました。同じ文章を実行すると、異なる結果になります。
画像生成に用いる単語や文章次第では、職場閲覧注意の警告が出ることがあります。警告が出た場合は文章を変更します。これは国によっては逮捕されたり、何とかハラスメントに該当する可能性のある画像が生成される可能性が高い場合に表示されます。
Potential NSFW content was detected in one or more images. A black image will be returned instead. Try again with a different prompt and/or seed. |
前述の「GPUあり環境 x WebUIなしの場合 (IBM Cloud Pak for Data , Watson Studio)」と手順は同じですので、省略します。
前述の「GPUあり環境 x WebUIなしの場合 (IBM Cloud Pak for Data , Watson Studio)」と手順は同じですので、省略します。
利用するモデルのライセンスを確認し、規約に同意するため、次の手順を踏みます。
https://huggingface.co/CompVis/stable-diffusion-v-1-4-original にアクセスします。
「I have read the License and agree with its terms」にチェックを入れます。
「Access repository」をクリックします。
前述の「GPUあり環境 x WebUIなしの場合 (IBM Cloud Pak for Data , Watson Studio)」と手順は同じですので、省略します。発行済みのアクセストークンを使いまわしても構いません。
前述の「GPUあり環境 x WebUIなしの場合 (IBM Cloud Pak for Data , Watson Studio)」と手順は同じですので、省略します。
この時点での完成形としては、次のようになれば良いです。すべてのコードを書き、上から順に「▶Run」をクリックします。Jupyterノートブックでは、1つ1つの枠を「セル」といいます。
Google Colab を使用する場合、ランタイム環境に「GPU」を指定する必要があります。
ここからは、各箇所(セル)を見ていきましょう。
WebUIが使用可能なStable Diffusionの使用に必要なファイルをGithub (.AUTOMATIC1111/stable-diffusion-webui ) から取得します。
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui %cd stable-diffusion-webui |
Hugging Face で取得したアクセストークンの値をセットします。また、モデルを取得します。「/home/wsuser/work
」は、Watson StudioのNotebookにおける、ユーザが操作するときに使われているディレクトリの様です。
user_token = "あなたのアクセストークン値をセット" user_header = f"\"Authorization: Bearer {user_token}\"" !wget --header={user_header} https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/resolve/main/sd-v1-4.ckpt -O /home/wsuser/work/stable-diffusion-webui/model.ckpt |
AUTOMATIC1111/stable-diffusion-webui のセットアップでは、ライブラリのインストールには、「!COMMANDLINE_ARGS="--exit" REQS_FILE="requirements.txt" python launch.py
」を実行するのですが、2022年10月1日現在、エラーになります。そこで直接各種ライブラリをインストールします。
!pip install --upgrade torch basicsr diffusers fairscale==0.4.4 fonts font-roboto gfpgan gradio==3.4b3 invisible-watermark numpy omegaconf piexif Pillow pytorch_lightning realesrgan scikit-image>=0.19 timm==0.4.12 transformers==4.19.2 einops jsonmerge clean-fid !pip install --upgrade git+https://github.com/TencentARC/GFPGAN.git@8d2447a2d918f8eba5a4a01463fd48e45126a379 !pip install --upgrade git+https://github.com/openai/CLIP@d50d76daa670286dd6cacf3bcd80b5e4823fc8e1 !pip install --upgrade resize-right torchdiffeq kornia |
Web UI ディレクトリに移動し、アップデートをダウンロードします。<< この箇所はなくても問題ありませんでした。(2022年11月、確認)
%cd /home/wsuser/work/stable-diffusion-webui !git pull |
Web UI として、Gradioを起動します。ログイン画面が求められた際のユーザー名は、meとし、パスワードは、qwerty とします。1~2時間くらいかかります。
!COMMANDLINE_ARGS="--share --gradio-debug --gradio-auth me:qwerty" REQS_FILE="requirements.txt" python launch.py |
しばらくすると、次の様に表示されます。「Running on public URL」に表示されているURLに、別のタブなどでアクセスしましょう。
ログインを求められます。先ほどのユーザー名とパスワードを入力し、ログインします。先ほど、ユーザー名はmeとし、パスワードはqwerty としました。
Running on local URL: http://127.0.0.1:7860 Running on public URL: https://xxxxxx.gradio.app This share link expires in 72 hours. For free permanent hosting, check out Spaces: https://huggingface.co/spaces |
「Gradio」は、機械学習モデルを使ったPythonアプリを手軽に作れるサービスです。Gradioを使うことで、72時間限定のWebアプリになります。
「Prompt」に、生成したい画像のもとになる文章を入力し、画面右側の「Generate」をクリックします。
例えば、Promptに「Portrait of a Girl, Anime Character , pixiv , finalfantasy , cinematic lighting , high quality」を入力し、「Generate」を実行すると、次ような結果になりました。
日本語に特化した画像生成モデル Japanese Stable Diffusionをノートブックで動かす手順 をご覧ください。