「画像キャプションを自動で生成したい」
「画像の内容をシステムに認識させたい」
このような場合には、BLIP-2がオススメです。
この記事では、BLIP-2について解説していきます。
本記事の内容
- BLIP-2とは?
- BLIP-2のシステム要件
- BLIP-2のインストール
- BLIP-2の動作確認
それでは、上記に沿って解説していきます。
BLIP-2とは?
BLIP-2は、BLIPのバージョンアップしたモノです。
BLIPについては、次の記事で説明しています。
簡単に言うと、BLIPでは以下のことが可能です。
- 画像の認識
- 認識内容の言語化
言語化できるため、画像に関して質疑応答と言ったことも可能になります。
例えば、次の画像をBLIP-2で処理したとします。
そうすると、次のようなテキストが出力されます。
これは、画像キャプションとしてそのまま利用できるレベルです。
the merlion fountain in singapore
このテキストがあれば、次のような質問にも回答できます。
Which city is this? Where is this?
もちろん、答えは「singapore」です。
画像をテキストにさえ変換できれば、できることの幅は広がります。
では、BLIP-2は一体どれほどの実力(評価)なのでしょうか?
現状、ゼロショットキャプションにおいてはSOTA(State-of-the-Art)です。
つまり、No.1と言えます。
これを可能にしているのは、以下の大規模言語モデル (LLM)の存在です。
- FlanT5(Google)
- OPT(Meta)
FlanT5については、次の記事で説明しています。
BLIP-2であっても利用するモデルによって、どれほどの違いが出るのでしょうか?
Image Captioning on nocaps-val-in-domain
https://paperswithcode.com/sota/image-captioning-on-nocaps-val-in-domain
Rank | Model | CIDEr | SPICE | Pre-train (#images) | Year |
---|---|---|---|---|---|
1 | BLIP-2 ViT-G FlanT5 XL(zero-shot) | 123.7 | 16.3 | 1.1B | 2023 |
2 | BLIP-2 ViT-G OPT 6.7B(zero-shot) | 123.7 | 15.8 | 1.1B | 2023 |
3 | BLIP-2 ViT-G OPT 2.7B(zero-shot) | 123 | 15.8 | 1.1B | 2023 |
4 | LEMON_large | 116.9 | 15.8 | 200M | 2021 |
5 | BLIP_ViT-L | 114.9 | 15.2 | 129M | 2022 |
6 | SimVLM | 113.7 | – | 1.8B | 2021 |
7 | BLIP_CapFilt-L | 111.8 | 14.9 | 129M | 2022 |
「CIDEr」は高い方が、良いモデルとなります。
この評価においては、BLIP-2が上位独占です。
前バージョンとなるBLIPが、5位と7位にランキングされています。
BLIP-2が登場するランキングでは、大体同じような結果です。
BLIP-2の中で「pretrain_opt2.7b」は最弱扱いにされています。
(Colabデモよりモデル読み込み部分のコードを抜粋)
# we associate a model with its preprocessors to make it easier for inference. model, vis_processors, _ = load_model_and_preprocess( name="blip2_t5", model_type="pretrain_flant5xxl", is_eval=True, device=device ) # Other available models: # # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_opt", model_type="pretrain_opt2.7b", is_eval=True, device=device # ) # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_opt", model_type="pretrain_opt6.7b", is_eval=True, device=device # ) # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_opt", model_type="caption_coco_opt2.7b", is_eval=True, device=device # ) # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_opt", model_type="caption_coco_opt6.7b", is_eval=True, device=device # ) # # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_t5", model_type="pretrain_flant5xl", is_eval=True, device=device # ) # # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_t5", model_type="caption_coco_flant5xl", is_eval=True, device=device # )
しかし、評価の結果を見る限りでは他の上位モデルとそれほど差はなさそうです。
以上、BLIP-2について説明しました。
次は、BLIP-2のシステム要件を説明します。
BLIP-2のシステム要件
BLIP-2は、BLIPのように単体では存在していません。
LAVISの一機能として、BLIP-2を利用することが可能です。
salesforce/LAVIS: LAVIS – A One-stop Library for Language-Vision Intelligence
https://github.com/salesforce/LAVIS
LAVISは、ディープラーニング用Pythonライブラリになります。
そのため、BLIP-2を利用するにはLAVISをインストールする必要があります。
現時点(2023年1月末)でのLAVISの最新バージョンは、1.0.0となります。
この最新バージョンであるLAVIS 1.0.0.は、2023年2月1日にリリースされています。
そして、1.0.0からBLIP-2の機能が公開となっています。
LAVISのシステム要件は、シンプルです。
PyTorchが動けば、OSは問わないように見えます。
ただ、Pythonのバージョンは3.7以降と指定されています。
これは、次のPython公式開発サイクルに従ったモノでしょう。
バージョン | リリース日 | サポート期限 |
3.7 | 2018年6月27日 | 2023年6月27日 |
3.8 | 2019年10月14日 | 2024年10月 |
3.9 | 2020年10月5日 | 2025年10月 |
3.10 | 2021年10月4日 | 2026年10月 |
3.11 | 2022年10月25日 | 2027年10月 |
PyTorchは、GPU搭載マシンであればGPU版をインストールしましょう。
GPU版PyTorchのインストールについては、次の記事で説明しています。
GPUがなくても、BLIP-2の機能はCPUでも動くとは思います。
CPUだけの場合は、次の記事をご覧ください。
以上、BLIP-2のシステム要件を説明しました。
次は、BLIP-2のインストールを説明します。
BLIP-2のインストール
BLIP-2(LAVIS)のインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。
検証は、次のバージョンのPythonで行います。
> python -V Python 3.10.4
そして、システム要件としてPyTorchをインストール済みという状況です。
では、まずはpipとsetuptoolsの更新しておきましょう。
python -m pip install --upgrade pip setuptools
では、LAVISのインストールです。
LAVISのインストールは、以下のコマンドとなります。
pip install salesforce-lavis
インストールは、そこそこ時間がかかります。
処理が終わったら、LAVISのインストールは完了です。
でも、インストールはコマンド一撃で終わりですからね。
前バージョンのBLIPなんて、インストールするのに手間がかかりました。
そう考えると、BLIP-2はインストールの手間がなくなった分だけでも価値があります。
精度が向上したことも重要ですが、導入コストが下がったのことも大きいです。
以上、BLIP-2のインストールを説明しました。
次は、BLIP-2の動作確認を説明します。
BLIP-2の動作確認
BLIP-2の動作確認を行います。
動作確認は、次のコードで行います。
import torch from PIL import Image import requests from lavis.models import load_model_and_preprocess img_url = 'https://storage.googleapis.com/sfr-vision-language-research/LAVIS/assets/merlion.png' raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB') # setup device to use device = torch.device("cuda") if torch.cuda.is_available() else "cpu" # we associate a model with its preprocessors to make it easier for inference. # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_t5", model_type="pretrain_flant5xxl", is_eval=True, device=device # ) # Other available models: # model, vis_processors, _ = load_model_and_preprocess( name="blip2_opt", model_type="pretrain_opt2.7b", is_eval=True, device=device ) # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_opt", model_type="pretrain_opt6.7b", is_eval=True, device=device # ) # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_opt", model_type="caption_coco_opt2.7b", is_eval=True, device=device # ) # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_opt", model_type="caption_coco_opt6.7b", is_eval=True, device=device # ) # # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_t5", model_type="pretrain_flant5xl", is_eval=True, device=device # ) # # model, vis_processors, _ = load_model_and_preprocess( # name="blip2_t5", model_type="caption_coco_flant5xl", is_eval=True, device=device # ) vis_processors.keys() # prepare the image as model input using the associated processors image = vis_processors["eval"](raw_image).unsqueeze(0).to(device) # generate caption using beam search result = model.generate({"image": image}) print(result)
マーライオンの画像をダウンロードして、その画像をビームサーチ(Beam Search)します。
ビームサーチは、探索アルゴリズムの一種です。
上記コードを実行した結果は、以下がコンソールに表示されます。
['the merlion fountain at marina bay, singapore']
なお、モデルは「pretrain_opt2.7b」を利用するようにしています。
最弱モデルとは言いましたが、約4.9GBのサイズがあります。
そのため、初回実行時にはモデルのダウンロードに時間がかかるはずです。
以上、BLIP-2の動作確認を説明しました。