自作 LoRA を調べていて kohya-ss/sd-scripts の README から知った 自動キャプショニング の BLIP 。
そして、 BLIP を調べていたら BLIP-2 もあることを知りました。
今回は BLIP-2 を Google Colab で試してみます!
BLIP-2 がどういったものかは説明を読んでもよくわからない!
参考にしたページ
モデルについて
- Salesforce/blip2-opt-2.7b
- Salesforce/blip2-opt-6.7b
- Salesforce/blip2-opt-6.7b-coco
- Salesforce/blip2-flan-t5-xl
- Salesforce/blip2-flan-t5-xxl
opt-2.7bやflan-t5-xlというのはLLMらしい。
cocoはよくわからないけどファインチューニングに使った?らしい
cocoはよくわからないけどファインチューニングに使った?らしい
モデルがこなせるタスク
- image captioning
- visual question answering (VQA)
- chat-like conversations by feeding the image and the previous conversation as prompt to the model
日本語訳
- (画像キャプション)
- (視覚的な質問応答 (VQA))
- (画像と以前の会話をモデルにプロンプトとして入力することで、チャットのような会話ができます)
となっているようです。いわゆるマルチモーダルなやつですね
とりあえず使ってみる
必要なモジュールをインストールする
!pip install -U transformers
これだけで良いみたいです
モデルをロードする
from transformers import Blip2Processor, Blip2ForConditionalGeneration import torch device = "cuda" if torch.cuda.is_available() else "cpu" # モデル等をロードする processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b") model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", torch_dtype=torch.float16) model.to(device)
画像をロードする
from PIL import Image import requests image_url = "http://images.cocodataset.org/val2017/000000039769.jpg" image = Image.open(requests.get(image_url, stream=True).raw)
いつもは
diffusers.utils
のload_image
を使ってたのでrequests モジュール
は意識してなかったですね
Image Captioning 実行
inputs = processor(images=image, return_tensors="pt").to(device, torch.float16) generated_ids = model.generate(**inputs) generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0].strip() print(generated_text)
実行結果
two cats laying on a couch
日本語訳
- (ソファに寝そべる2匹の猫)
まとめ
とりあえず使えた!やったね!
ずんだもんもやらないとね!
ずんだもんもやらないとね!