🚀 BLIP-2, OPT-2.7b, 事前学習のみ
SalesforceのBLIP-2モデルで、OPT-2.7b(27億のパラメータを持つ大規模言語モデル)を活用しています。画像キャプショニングや視覚的質問応答などのタスクに使用できます。
🚀 クイックスタート
既存のSalesforceモデルカードの更新です。
Hugging Face推論パイプラインでモデルを実行するためのハンドラを追加しました。
入力:
{
"inputs": "<Base64 Image>",
"prompts": "<Prompt Text here>"
}
出力:
{
"captions":"<Generated Image caption>"
}
✨ 主な機能
このモデルは、画像キャプショニング、視覚的質問応答(VQA)、チャットのような会話などのタスクに使用できます。画像と前の会話をプロンプトとしてモデルに入力することで、次のテキストトークンを予測します。
📚 ドキュメント
モデルの説明
BLIP-2は、3つのモデルで構成されています:CLIPのような画像エンコーダ、Querying Transformer(Q-Former)、および大規模言語モデル。
著者らは、画像エンコーダと大規模言語モデルの重みを事前学習されたチェックポイントから初期化し、それらを凍結したままQuerying Transformerをトレーニングします。Querying Transformerは、BERTのようなTransformerエンコーダで、一連の「クエリトークン」をクエリ埋め込みにマッピングし、画像エンコーダの埋め込み空間と大規模言語モデルの間のギャップを埋めます。
モデルの目標は、クエリ埋め込みと前のテキストを与えられたときに、次のテキストトークンを予測することです。

これにより、モデルは以下のようなタスクに使用できます:
- 画像キャプショニング
- 視覚的質問応答(VQA)
- 画像と前の会話をプロンプトとしてモデルに入力することによるチャットのような会話
直接利用と下流利用
画像とオプションのテキストを与えて条件付きテキスト生成に生モデルを使用することができます。興味のあるタスクに関する微調整されたバージョンを探すには、モデルハブを参照してください。
バイアス、リスク、制限、および倫理的考慮事項
BLIP2-OPTは、既成のOPTを言語モデルとして使用しています。Metaのモデルカードに記載されているのと同じリスクと制限を引き継いでいます。
訓練データの多様性(またはその欠如)がモデルの品質に下流的な影響を与える他の大規模言語モデルと同様に、OPT-175Bはバイアスと安全性の面で制限があります。OPT-175Bはまた、生成の多様性と幻覚の面で品質問題を抱えることもあります。一般的に、OPT-175Bは現代の大規模言語モデルを悩ます数多くの問題から免れることはできません。
BLIP2は、インターネットから収集された画像テキストデータセット(例:LAION)で微調整されています。その結果、モデル自体は不適切なコンテンツを生成したり、基礎となるデータに内在するバイアスを再現したりする潜在的な脆弱性があります。
BLIP2は実世界のアプリケーションでテストされていません。いかなるアプリケーションにも直接展開すべきではありません。研究者は、まずモデルを展開する特定のコンテキストに関して、モデルの安全性と公平性を慎重に評価する必要があります。
💻 使用例
コード例については、ドキュメントを参照してください。
基本的な使用法
CPUでモデルを実行する
展開するにはクリック
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b")
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')
question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt")
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
高度な使用法
GPUでモデルを実行する
完全精度で
展開するにはクリック
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", device_map="auto")
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')
question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt").to("cuda")
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
半精度(float16
)で
展開するにはクリック
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", torch_dtype=torch.float16, device_map="auto")
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')
question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt").to("cuda", torch.float16)
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
8ビット精度(int8
)で
展開するにはクリック
import torch
import requests
from PIL import Image
from transformers import Blip2Processor, Blip2ForConditionalGeneration
processor = Blip2Processor.from_pretrained("Salesforce/blip2-opt-2.7b")
model = Blip2ForConditionalGeneration.from_pretrained("Salesforce/blip2-opt-2.7b", load_in_8bit=True, device_map="auto")
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')
question = "how many dogs are in the picture?"
inputs = processor(raw_image, question, return_tensors="pt").to("cuda", torch.float16)
out = model.generate(**inputs)
print(processor.decode(out[0], skip_special_tokens=True))
📄 ライセンス
このモデルはMITライセンスの下で提供されています。