「画像からテキストを出力したい」
「Stable Diffusionのプロンプトとなるテキストを画像から作成したい」
このような場合には、CLIP-Interrogatorがオススメです。
この記事では、CLIP-Interrogatorのインストールする方法を解説しています。
本記事の内容
- CLIP-Interrogatorとは?
- CLIP-Interrogatorのシステム要件
- CLIP-Interrogatorのインストール
- CLIP-Interrogatorの設定
- CLIP-Interrogatorの動作確認
それでは、上記に沿って解説していきます。
CLIP-Interrogatorとは?
CLIP-Interrogatorは、画像からテキストを生成するWebアプリです。
単なるテキストではなく、Stable Diffusionのプロンプトに用いるテキストになります。
百聞は一見にしかずです。
次のページで動作を確認しましょう。
CLIP Interrogator – a Hugging Face Space by pharma
https://huggingface.co/spaces/pharma/CLIP-Interrogator
どうでしたか?アプリは、動きましたか?
残念ながら、このようなエラーが出て使えないかもしれません。
人気のあるアプリであり、処理が集中しているのでしょう。
A10Gと言えば、24GBのメモリを備えたNVIDIAのVRAMです。
Hugging Face上のアプリの中でも、スペックの高いGPUで運用している部類になります。
NVIDIA A10 Tensor コア GPU
https://www.nvidia.com/ja-jp/data-center/products/a10-gpu/
そのA10Gをもってしても、デモアプリはなかなか動きません。
デモアプリがちゃんと動くと、次のようにテキストが出力されます。
以上、CLIP-Interrogatorについて説明しました。
次は、CLIP-Interrogatorのシステム要件を説明します。
CLIP-Interrogatorのシステム要件
CLIP-Interrogatorのシステム要件は、以下がポイントになります。
- PyTorch
- BLIP
それぞれを下記で説明しておきます。
PyTorch
PyTorchは、事前にインストールしておきましょう。
インストールするのは、GPU版のPyTorchです。
なるべく新しいPyTochをインストールすることをオススメします。
BLIP
BLIPを用いれば、画像からテキストを出力することができます。
GitHub – salesforce/BLIP
https://github.com/salesforce/BLIP
CLIP-Interrogatorは、技術的にはBLIPに依存していると思われます。
デモアプリを触ると、BLIPが何たるかを理解できるでしょう。
BLIPデモ
https://huggingface.co/spaces/Salesforce/BLIP
CLIP-Interrogatorでは、このBLIPを利用しています。
そのため、事前にインストールしておきます。
コンテンツルートを「CLIP-Interrogator」ディレクトリとして作業を実施します。
まずは、GitHubからリポジトリをクローンしましょう。
git clone https://github.com/salesforce/BLIP.git
クローンした後は、次のような状況になります。
CLIP-Interrogator └─BLIP
リポジトリルートに移動します。
cd BLIP
この場所でBLIPのrequirements.txtを確認できます。
requirements.txt
timm==0.4.12 transformers==4.15.0 fairscale==0.4.4 pycocoevalcap
このままでは、インストールできない可能性があります。
少なくともPython 3.10では、インストールに失敗します。
原因は、Transformersのバージョンです。
4.15.0では、少し古いということなのでしょう。
しかし、これを最新(4.23系)にするとBLIP自体が動かなくなります。
そのエラーについては、ここでは省略します。
とりあえず、Python 3.10にインストールできるTransformersが必要です。
同時に、BLIPでエラーにならないことも条件になります。
そのバージョンは、4.21.3が把握できています。
まだ、全然新しいです。
もしかしたら、4.22系でも大丈夫かもしれません。
ということで、今回はrequirements.txtを次のように書き換えます。
timm==0.4.12 transformers==4.21.3 fairscale==0.4.4 pycocoevalcap
変更したrequirements.txtをもとに、次のコマンドを実行します。
pip install -r requirements.txt
以上、CLIP-Interrogatorのシステム要件を説明しました。
次は、CLIP-Interrogatorのインストールを説明します。
CLIP-Interrogatorのインストール
CLIP-Interrogatorのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
そして、システム要件としてはGPU版PyTorchとBLIPをインストール済という状況です。
このような状況において、次の手順でCLIP-Interrogatorのインストールを進めます。
- CLIP-Interrogatorの取得(Hugging Faceから)
- requirements.txtを使った一括インストール
それぞれを下記で説明します。
CLIP-Interrogatorの取得(Hugging Faceから)
pharma/CLIP-Interrogator at main
https://huggingface.co/spaces/pharma/CLIP-Interrogator/tree/main
プログラム一式は、上記ページで確認できます。
これらを1ファイルづつダウンロードすることは、それほど面倒ではありません。
しかし、そんな無駄なことをする必要はありません。
このような場合には、huggingface_hubを利用しましょう。
huggingface_hubを利用すれば、一括でプログラム一式を取得可能です。
huggingface_hubをインストールしたら、次のコードを実行します。
from huggingface_hub import snapshot_download snapshot_download( repo_id="pharma/CLIP-Interrogator", repo_type="space", revision="main", cache_dir="./")
上記コードを実行すると、ダウンロード処理が始まります。
ダウンロード終了まで、少しだけ待ちます。
処理が完了すると、ディレクトリ上に「spaces–pharma–CLIP-Interrogator」を確認できます。
そして、「snapshots」以下にあるファイル・ディレクトリをコピーします。
「2ada53d98db808af916c8ca93a81e3a6dc84fb44」は、リポジトリのバージョンです。
正確には、この長たらしいディレクトリより下のモノをコピーします。
コピーしたファイルは、コンテンツルートに保存します。
requirements.txtを使った一括インストール
コンテンツルートは、次のような状況になっています。
ここで確認できるrequirements.txtは、CLIP-Interrogatorのrequirements.txtです。
このrequirements.txtの中身は、以下となります。
requirements.txt
--extra-index-url https://download.pytorch.org/whl/cu113 torch torchvision fairscale ftfy Pillow timm transformers==4.15.0 -e git+https://github.com/openai/CLIP.git@main#egg=clip -e git+https://github.com/pharmapsychotic/BLIP.git@main#egg=blip
このファイルから、PyTorch関連とBLIP関連を除外します。
また、Gradioのパッケージを追加します。
Gradioについては、次の記事で説明しています。
Webアプリを動かすために必要なライブラリになります。
結果的には、requirements.txtは下記のようになります。
ftfy Pillow -e git+https://github.com/openai/CLIP.git@main#egg=clip gradio
このrequirements.txtを利用して、必要なモノを一気にインストールします。
実行するのは、次のコマンドです。
pip install -r requirements.txt
処理完了までは、しばらく時間がかかります。
以上、CLIP-Interrogatorのインストールを説明しました。
次は、CLIP-Interrogatorの設定を説明します。
CLIP-Interrogatorの設定
CLIP-InterrogatorのWebアプリを起動させるための設定を行います。
必要な設定は、以下の作業となります。
必要なファイルやディレクトリが、Hugging Faceだけでは取得できません。
そのため、GitHubからクローンしたリポジトリを利用します。
コマンドで対応していきます。
実行場所は、コンテンツルートとします。
「models」の配置
mv BLIP/models .
「src/blip」の設置
mkdir src mkdir src/blip mv BLIP/configs src/blip
上記コマンドを実行した後のコンテンツルートは、次のような状況です。
以上、CLIP-Interrogatorの設定を説明しました。
次は、CLIP-Interrogatorの動作確認を説明します。
CLIP-Interrogatorの動作確認
CLIP-Interrogatorの起動は、app.pyを実行します。
正常に起動できると、コンソールには以下のように表示されます。
初回は、チェックポイントのダウンロードが実施されます。
Loading BLIP model... 100%|██████████| 1.66G/1.66G [00:42<00:00, 41.7MB/s] load checkpoint from https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_large_caption.pth Loading CLIP model... 100%|███████████████████████████████████████| 890M/890M [00:32<00:00, 28.5MiB/s] Preprocessing artists: 100%|██████████| 5/5 [00:05<00:00, 1.18s/it] Preprocessing flavors: 100%|██████████| 49/49 [00:41<00:00, 1.18it/s] Preprocessing mediums: 100%|██████████| 1/1 [00:00<00:00, 22.73it/s] Preprocessing movements: 100%|██████████| 1/1 [00:00<00:00, 11.69it/s] Preprocessing trendings: 100%|██████████| 1/1 [00:00<00:00, 30.76it/s] Running on local URL: http://127.0.0.1:7860
では、ブラウザで「http://127.0.0.1:7860」にアクセスします。
Hugging Face上のデモと同じ画面を確認できます。
このアプリは、ローカル環境で動かしています。
そのため、Hugging Face上のデモと異なり動作は安定しています。
では、今回はStable Diffusionで作成した画像をアップロードしてみましょう。
そうすればプロンプトを比較できますからね。
上記記事内で作成した画像をアップロードした結果は、以下。
出力されたテキストは、以下。
an astronaut riding on the back of a brown horse, a matte painting, inspired by Ancell Stronach, wearing a worn out brown suit, an scp anomalous object, full-cosplay, desert nomad, zoom photograph, standing on two legs, real life characters
ちなみに、画像作成の際に用いたプロンプトは以下です。
a photo of an astronaut riding a horse on mars
用いたプロンプトより、出力結果はずっと細かく表現されていますね。
では、この出力結果から画像を作成したらどうなるのでしょうか?
気になりますよね。
それでやってみた結果が、次の画像です。
火星を砂漠で上手く表現しているのではないでしょうか。
画像によりますが、全然使えるレベルだと思います。
以上、CLIP-Interrogatorの動作確認を説明しました。