「画像からStable Diffusion用のプロンプトを生成したい」
「長いプロンプトを短くしたい」
このような場合には、PEZ Dispenserをオススメします。
この記事では、PEZ Dispenserについて解説しています。
本記事の内容
- PEZ Dispenserとは?
- PEZ Dispenserのシステム要件
- PEZ Dispenserのインストール
- PEZ Dispenserの動作確認
それでは、上記に沿って解説していきます。
PEZ Dispenserとは?
PEZ Dispenserとは、PEZのデモのことです。
Pez Dispenser – a Hugging Face Space by tomg-group-umd
https://huggingface.co/spaces/tomg-group-umd/pez-dispenser
PEZはHard Prompts Made Easyの略称になります。
(hard Prompts made EaZy)
YuxinWenRick/hard-prompts-made-easy
https://github.com/YuxinWenRick/hard-prompts-made-easy
最近は、この形式を良く見るようになりました。
GitHubとHugging Faceの併用ですね。
この場合、Hugging Face上のデモが圧倒的に便利なツールになります。
PEZに関しても、それは当てはまります。
PEZの機能は、PEZ Dispenserにあるように以下がメインです。
- Image to Prompt
- Long Prompt to Short Prompt
一つは、画像からプロンプトを生成する機能です。
そして、もう一つはプロンプトを短縮する機能になります。
画像からプロンプトを生成する例として、公式では次の画像が用いられています。
これを見て、「本当かよ!」と思う人がいるかもしれません。
でも、これに近いことは可能です。
詳細は、「PEZ Dispenserの動作確認」をご覧ください。
以上、PEZ Dispenserについて説明しました。
次は、PEZ Dispenserのシステム要件を説明します。
PEZ Dispenserのシステム要件
公式ページで公開されている要件は、以下となります。
- PyTorch => 1.13.0
- transformers >= 4.23.1
- diffusers >= 0.11.1
- sentence-transformers >= 2.2.2
- ftfy >= 6.1.1
- mediapy >= 1.1.2
OSやPythonバージョンについては、明記はされていません。
上記の要件が満たされれば、何でも良いということでしょう。
ただ、PyTorchはGPU版の利用をオススメします。
PEZ Dispenserの処理自体は、そこそこ重いです。
そのため、GPU版のPyTorchでないと厳しいでしょう。
公式では、次のような但し書きがあるぐらいです。
Generation with 1000 steps takes ~60 seconds with a T4
T4と言えば、GPUメモリが16GBになります。
その性能でも、1分程度はかかるかもという状況ですからね。
GPU版PyTorchのインストールは、次の記事で説明しています。
ただし、「PyTorch => 1.13.0」に注意しましょう。
以上、PEZ Dispenserのシステム要件を説明しました。
次は、PEZ Dispenserのインストールを説明します。
PEZ Dispenserのインストール
PEZ Dispenserのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
そして、システム要件であるGPU版PyTorchをインストール済という状況です。
このような状況において、次の手順でPEZ Dispenserのインストールを進めます。
- PEZ Dispenserの取得(Hugging Faceから)
- requirements.txtを使った一括インストール
それぞれを下記で説明します。
PEZ Dispenserの取得(Hugging Faceから)
PEZ Dispenserのファイル
https://huggingface.co/spaces/tomg-group-umd/pez-dispenser/tree/main
上記ページでファイルを確認できます。
これらをダウンロードするのに、huggingface_hubを利用します。
huggingface_hubを利用すると、自動的にファイルをダウンロードしてくれます。
huggingface_hubをインストールできたら、次のコードを実行します。
from huggingface_hub import snapshot_download snapshot_download( repo_id="tomg-group-umd/pez-dispenser", repo_type="space", revision="main", cache_dir="./")
上記コードを実行すると、ダウンロード処理が開始されます。
ダウンロードは、すぐに終わります。
処理が完了すると、ディレクトリ上に「spaces–tomg-group-umd–pez-dispenser」を確認できます。
そして、「snapshots」以下にあるファイル・ディレクトリをコピーします。
「3fef0ca1e185a07bf836d9ab4f3d20d134c867f7」は、リポジトリのバージョンです。
バージョンが更新されれば、この値も変わってきます。
この長たらしいディレクトリより下のモノをコピーしましょう。
コピーしたファイルは、コンテンツルートに保存します。
requirements.txtを使った一括インストール
コンテンツルートには、コピーしたrequirements.txtが存在しています。
requirements.txt
torch==1.13.0 transformers==4.23.1 sentence-transformers==2.2.2 ftfy==6.1.1 mediapy==1.1.2 diffusers==0.11.1 tqdm
PyTorchはインストール済みのため、関連パッケージをコメントにしておきます。
そして、Gradioを追加します。
#torch==1.13.0 gradio
Gradioについては、次の記事で説明しています。
変更後のrequirements.txtを利用して、必要なモノを一気にインストールします。
実行するのは、次のコマンドです。
pip install -r requirements.txt
処理完了までは、少しだけ時間がかかります。
処理が完了したら、PEZ Dispenserのインストールは終了です。
以上、PEZ Dispenserのインストールを説明しました。
次は、PEZ Dispenserの動作確認を説明します。
PEZ Dispenserの動作確認
PEZ Dispenserの動作確認を行います。
コンテンツルートに配置したapp.pyを実行すれば、PEZ Dispenserを起動できます。
起動する前に、app.pyを変更します。
説明文を非表示にしておきます。
では、app.pyを実行してPEZ Dispenserを起動しましょう。
処理が完了したら、コンソールに以下のように表示されます。
Running on local URL: http://127.0.0.1:7860 To create a public link, set `share=True` in `launch()`.
Chromeなどのブラウザで「http://127.0.0.1:7860」にアクセスします。
Hugging Face上のデモと同じような画面を確認できます。
ただし、説明はカット済みになります。
やはり、説明文を非表示にした方が見やすいですね。
この画面では、次の二つの機能を利用できます。
- Image to Prompt
- Long Prompt to Short Prompt
それぞれを以下で説明します。
この際、設定値に関してはデフォルトを用います。
Image to Prompt
画像からのプロンプトを生成する機能です。
今回は、次の画像を用意しました。
この画像は、次のプロンプトにより生成した画像です。
A peaceful Japanese city street, dreamy, soft colors, studio ghibli style
モデルは、Stable Diffusion v2-baseを利用しています。
この画像をアップロードして、「Generate Prompt」をクリックします。
ここでの処理は、少し待たされます。
私の環境(GeForce RTX 3090)では、30秒ほどかかります。
処理完了後、「Learned Prompt」にプロンプトが表示されます。
(※結果として生成されるプロンプトは固定ではない)
freelance orphan fictional anime hometown aisle aaaa
この生成されたプロンプトを用いて生成した画像は、以下。
これは、元画像を再現できていると言えるのではないでしょうか?
Long Prompt to Short Prompt
長いプロンプトを短くする機能です。
まず、次のようなプロンプトを用意します。
Kodak portra 4 0 0, wetplate, fisheye, award - winning portrait by britt marling, 1 8 8 0 s kitchen, ghost, picture frames, shining lamps, dust, smoke, 1 8 8 0 s furniture, wallpaper, carpet, books, muted colours, wood, fog, plants, flowers
このプロンプトで生成される画像は、次のような画像です。
「Target Prompt」にプロンプトを入力して、「Distill Prompt」ボタンをクリック。
処理(同じく30秒程度)完了後、「Learned Prompt」にプロンプトが表示されます。
(※結果として生成されるプロンプトは固定ではない)
fujifilm polaroid gmo victorian kitchen alexa moody foggy
この短縮されたプロンプトを用いて生成した画像は、以下。
プロンプトの短縮率を考えると、かなり頑張っている方だと思います。
以上、PEZ Dispenserの動作確認を説明しました。