画像キャプションの自動生成ができるBLIP-2のインストール

画像キャプションの自動生成ができるBLIP-2のインストール 機械学習

「画像キャプションを自動で生成したい」
「画像の内容をシステムに認識させたい」

このような場合には、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

RankModelCIDErSPICEPre-train (#images)Year
1BLIP-2 ViT-G FlanT5 XL(zero-shot)123.716.31.1B2023
2BLIP-2 ViT-G OPT 6.7B(zero-shot)123.715.81.1B2023
3BLIP-2 ViT-G OPT 2.7B(zero-shot)12315.81.1B2023
4LEMON_large116.915.8200M2021
5BLIP_ViT-L114.915.2129M2022
6SimVLM113.71.8B2021
7BLIP_CapFilt-L111.814.9129M2022

「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.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月
3.112022年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の動作確認を説明しました。

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