Stable Diffusion用のプロンプト生成ツール【PEZ】

Stable Diffusion用のプロンプト生成ツール【PEZ】 ツール

「画像から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の動作確認を説明しました。

タイトルとURLをコピーしました