【Stable Diffusion】画像からプロンプトを出力する

【Stable Diffusion】画像からプロンプトを出力する 機械学習

「画像からテキストを出力したい」
「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の動作確認を説明しました。

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