SuperAPI AI 工具集

blip-2-vision-language

智能体与模型

查看项目

更新于 10-21 16:18

技能介绍

用途

BLIP-2 是 Salesforce 提出的视觉-语言预训练模型,适用于以下场景:

  • 需要高质量、自然语言的图像描述(image captioning)
  • 构建视觉问答(VQA)系统
  • 需要无需任务特定训练的零样本图文理解
  • 希望借助大语言模型的推理能力处理视觉任务
  • 构建多模态对话 AI
  • 需要图文检索或匹配

文档同时指出可考虑的替代方案:LLaVA(指令跟随多模态对话)、InstructBLIP(BLIP-2 的改进后继版本,指令跟随更强)、GPT-4V/Claude 3(生产级多模态对话,专有)、CLIP(无需生成的简单图文相似度)、Flamingo(少样本视觉学习)。

主要能力

  • Q-Former 架构:轻量级查询 Transformer 桥接视觉与语言
  • 冻结主干效率:无需微调大型视觉/语言模型
  • 多种 LLM 后端:OPT(2.7B、6.7B)与 FlanT5(XL、XXL)
  • 零样本能力:无需任务特定训练即有较强表现
  • 高效训练:仅训练 Q-Former(约 1.88 亿参数)
  • 先进结果:在 VQA 基准上超过更大的模型

模型变体与用途:

模型 LLM 后端 大小 用途
blip2-opt-2.7b OPT-2.7B ~4GB 通用描述、VQA
blip2-opt-6.7b OPT-6.7B ~8GB 更强推理
blip2-flan-t5-xl FlanT5-XL ~5GB 指令跟随
blip2-flan-t5-xxl FlanT5-XXL ~13GB 最佳质量

Q-Former 组件:学习查询(32 × 768 的可学习嵌入)、图像 Transformer(对视觉特征做交叉注意力,约 1.08 亿参数)、文本 Transformer(文本自注意力,约 1.08 亿参数)、线性投影(映射到 LLM 维度,视情况而定)。

使用方式

安装

HuggingFace Transformers(推荐):

pip install transformers accelerate torch Pillow

或 LAVIS 库(Salesforce 官方):

pip install salesforce-lavis

基础图像描述(HuggingFace)

import torch
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"
)

image = Image.open("photo.jpg").convert("RGB")

inputs = processor(images=image, return_tensors="pt").to("cuda", torch.float16)
generated_ids = model.generate(**inputs, max_new_tokens=50)
caption = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(caption)

视觉问答(VQA)

question = "What color is the car in this image?"

inputs = processor(images=image, text=question, return_tensors="pt").to("cuda", torch.float16)
generated_ids = model.generate(**inputs, max_new_tokens=50)
answer = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(answer)

使用 LAVIS 库

import torch
from lavis.models import load_model_and_preprocess
from PIL import Image

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model, vis_processors, txt_processors = load_model_and_preprocess(
    name="blip2_opt",
    model_type="pretrain_opt2.7b",
    is_eval=True,
    device=device
)

image = Image.open("photo.jpg").convert("RGB")
image = vis_processors["eval"](image).unsqueeze(0).to(device)

caption = model.generate({"image": image})
print(caption)

question = txt_processors["eval"]("What is in this image?")
answer = model.generate({"image": image, "prompt": question})
print(answer)

常见工作流

文档给出三类工作流示例:

  1. 图像描述流水线:封装 ImageCaptioner 类,支持单图描述、带提示词的风格化描述以及批量处理(使用 padding)。
  2. 视觉问答系统:封装 VisualQA 类,先 set_image 加载图像,再多次 ask 提问;对 FlanT5 使用 Question: {question} Answer: 提示格式;支持 ask_multiple 批量提问。
  3. 图像搜索/检索:使用 blip2_feature_extractor 模型,通过 extract_features 提取图像与文本特征,计算相似度并返回 top_k 结果。

输出格式

生成输出为 token ID,形状 [batch_size, sequence_length],经 batch_decode 转为字符串列表。特征提取输出包括:image_embeds([B, 32, 768])、image_embeds_proj([B, 32, 256])、text_embeds([B, seq_len, 768])、text_embeds_proj([B, 256])。

性能优化

显存需求(FP16 / INT8 / INT4):

模型 FP16 INT8 INT4
blip2-opt-2.7b ~8GB ~5GB ~3GB
blip2-opt-6.7b ~16GB ~9GB ~5GB
blip2-flan-t5-xl ~10GB ~6GB ~4GB
blip2-flan-t5-xxl ~26GB ~14GB ~8GB

速度优化:可使用 Flash Attention(attn_implementation="flash_attention_2",需安装 flash-attn)、torch.compile(PyTorch 2.0+),默认 224x224 图像尺寸已是最优。

适用场景与限制

适用场景包括图像描述、VQA、零样本图文理解、多模态对话、图文检索。文档也列出常见问题与解决方式:CUDA OOM(使用 INT8/INT4 量化或更小模型)、生成缓慢(贪心解码、减少 max_new_tokens)、描述质量差(尝试 FlanT5 变体、使用提示词)、幻觉(降低温度、使用束搜索)、答案错误(改写问题、提供上下文)。

操作流程建议:先检查环境(GPU 显存、模型检查点与许可、框架版本、输入格式),确认输入格式与参数,先在小样本上低分辨率或短长度试运行,再执行完整任务,最后验证结果并报告运行情况。文档强调不得编造结果、参数、标识符、引用或统计;商业或发布使用前需检查模型与数据集许可;版本相关细节可能过时,应以已安装版本的官方文档为准;涉及费用、共享 GPU、云配额、个人或患者数据以及不可撤销操作时,需先征得同意。

资源

  • 论文:https://arxiv.org/abs/2301.12597
  • GitHub(LAVIS):https://github.com/salesforce/LAVIS
  • HuggingFace:https://huggingface.co/Salesforce/blip2-opt-2.7b
  • Demo:https://huggingface.co/spaces/Salesforce/BLIP2
  • InstructBLIP(后继版本):https://arxiv.org/abs/2305.06500

相关技能:clip、llava、quantizing-models-bitsandbytes。