「画像の内容をテキストに変換したい」
「画像の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.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月 |
オススメは、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の動作確認を説明しました。