画像から文章(テキスト)を自動生成できるBLIPのインストール

画像から文章を自動生成できるBLIPのインストール 機械学習

「画像の内容をテキストに変換したい」
「画像のaltやキャプションをシステムで自動的に表示したい」

このような場合には、BLIPがオススメです。
この記事では、BLIPのインストールを中心に解説しています。

本記事の内容

  • BLIPとは?
  • BLIPのシステム要件
  • BLIPのインストール
  • BLIPの動作確認

それでは、上記に沿って解説していきます。

BLIPとは?

BLIPは、Bootstrapping Language-Image Pre-trainingの略称です。
直訳すると「ブートストラップ言語画像事前学習」になります。

正直、意味不明です。
BLIPでできることは、画像からテキストを抽出することになります。

つまり、AIが画像を認識して文字にしてくれるのです。
デモを触れば、BLIPについて理解できるでしょう。

BLIP – a Hugging Face Space by Salesforce
https://huggingface.co/spaces/Salesforce/BLIP

BLIPで意外だったのが、Salesforceが開発しているということです。
Salesforce製のAIなんて、初めて触ったかもしれません。

以上、BLIPについて説明しました。
次は、BLIPのシステム要件を説明します。

BLIPのシステム要件

BLIPは、バージョン管理されていません。
そのため、現状でGitHubにあるのが最初で最後のバージョンになっています。

BLIPのシステムは、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

基本的には、OSを問わずに動きます。
そして、Pythonのバージョンは特に記載がありません。

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

オススメは、Python 3.10です。
Python 3.11は、さすがにまだ早すぎますからね。

なんだかんだ言って、結局はPyTorchがBLIPでの最も重要なシステム要件になります。
そして、BLIPでは画像を扱う機械学習の処理が実行されます。

そのため、CPUではなくGPUで動くPyTorchが推奨になります。
CPUとGPUでは、処理速度が別次元レベルですからね。

GPU版PyTorchのインストールについては、次の記事で解説しています。

現時点(2022年11月)では、PyTorch 1.13系が最新バージョンになります。
インストールするPyTorchは、なるべく新しいモノにしましょう。

検証では、最新のPyTorch 1.13をインストール済みです。
なお、BLIPではPyTorch 1.10でのテストは行ったことが記載されています。

以上、BLIPのシステム要件を説明しました。
次は、BLIPのインストールを説明します。

BLIPのインストール

BLIPのインストールは、Python仮想環境の利用をオススメします。
Python仮想環境は、次の記事で解説しています。

検証は、次のバージョンのPythonで行います。

> python -V 
Python 3.10.4

そして、システム要件としてはPyTorchがインストール済という状況です。
このような状況において、BLIPのインストールを次の手順で進めます。

  • BLIPの取得(GitHubから)
  • requirements.txtを使った一括インストール

それぞれを下記で説明します

BLIPの取得(GitHubから)

gitコマンドでクローンします。

git clone https://github.com/salesforce/BLIP.git

Windowsでgitコマンドを利用する場合は、次の記事が参考になります。

ダウンロードできたら、リポジトリルートに移動しておきます。

cd BLIP

requirements.txtを使った一括インストール

リポジトリルートでは、次のファイルを確認できます。

requirements.txt

timm==0.4.12 
transformers==4.15.0 
fairscale==0.4.4 
pycocoevalcap

Transformersのバージョンを変更します。
4.15.0のままだとPython 3.10では、インストールに失敗します。

また、4.22以降だとBLIPが実行時にエラーで動きません。
そのため、できる限り新しくてセーフなバージョンに変更します。

timm==0.4.12 
transformers==4.21.3 
fairscale==0.4.4 
pycocoevalcap

requirements.txtを変更したら、次のコマンドを実行しましょう。

pip install -r requirements.txt

なお、Transformersについては次の記事で説明しています。

以上、BLIPのシステム要件を説明しました。
次は、BLIPのインストールを説明します。

BLIPの動作確認

リポジトリルートには、「demo.ipynb」が用意されています。
Google ColabやJupyterLabなら、そのまま利用できます。

ここでは、そうじゃない場合のコードを動作確認用として載せておきます。
そうじゃないと言っても、こちらの方が一般的なコードなんですけどね。

実行する前に、モデルファイルを事前にダウンロードしておきましょう。
まず、保存先を作成。

mkdir checkpoint

そして、次のURLからモデル(約2GB)をダウンロード。

 https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_capfilt_large.pth

モデルの保存先は、以下となるようにします。

ここまで準備できたら、次のコードを実行します。
なお、入力する画像は次の画像になります。

では、プログラムを実行します。

from PIL import Image
import requests
import torch
from torchvision import transforms
from torchvision.transforms.functional import InterpolationMode
from models.blip import blip_decoder

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')


def load_demo_image(image_size, device):
    img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg'
    raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')

    w, h = raw_image.size

    transform = transforms.Compose([
        transforms.Resize((image_size, image_size), interpolation=InterpolationMode.BICUBIC),
        transforms.ToTensor(),
        transforms.Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711))
    ])
    image = transform(raw_image).unsqueeze(0).to(device)
    return image


if __name__ == '__main__':

    image_size = 384
    image = load_demo_image(image_size=image_size, device=device)

    model_path = "checkpoint/model_base_capfilt_large.pth"

    model = blip_decoder(pretrained=model_path, image_size=image_size, vit='base')
    model.eval()
    model = model.to(device)

    with torch.no_grad():
        # beam search
        caption = model.generate(image, sample=False, num_beams=3, max_length=20, min_length=5)
        # nucleus sampling
        # caption = model.generate(image, sample=True, top_p=0.9, max_length=20, min_length=5)
        print('caption: ' + caption[0])

BLIPのインストールが成功していれば、上記コードは問題なく動くはずです。
処理が完了したら、コンソールに以下のように表示されています。

caption: a woman and her dog on the beach

確かに、入力した画像の内容を表示していますね。

なお、画像を変更したい場合は以下を変更しましょう。
URL指定でもローカルのパス指定でも、自由に設定してください。

    img_url = 'https://storage.googleapis.com/sfr-vision-language-research/BLIP/demo.jpg' 
    raw_image = Image.open(requests.get(img_url, stream=True).raw).convert('RGB')

以上、BLIPの動作確認を説明しました。

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