[ PROMPT_NODE_22760 ]
llava
[ SKILL_DOCUMENTATION ]
# LLaVA - 大型语言与视觉助手
用于对话式图像理解的开源视觉语言模型。
## 何时使用 LLaVA
**适用场景:**
- 构建视觉语言聊天机器人
- 视觉问答 (VQA)
- 图像描述与标注
- 多轮图像对话
- 视觉指令遵循
- 基于图像的文档理解
**指标**:
- **23,000+ GitHub 星标**
- 目标对齐 GPT-4V 级别能力
- Apache 2.0 许可证
- 多种模型尺寸 (7B-34B 参数)
**替代方案**:
- **GPT-4V**: 最高质量,基于 API
- **CLIP**: 简单的零样本分类
- **BLIP-2**: 更适合纯图像描述
- **Flamingo**: 研究性质,非开源
## 快速开始
### 安装
bash
# 克隆仓库
git clone https://github.com/haotian-liu/LLaVA
cd LLaVA
# 安装
pip install -e .
### 基本用法
python
from llava.model.builder import load_pretrained_model
from llava.mm_utils import get_model_name_from_path, process_images, tokenizer_image_token
from llava.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN
from llava.conversation import conv_templates
from PIL import Image
import torch
# 加载模型
model_path = "liuhaotian/llava-v1.5-7b"
tokenizer, model, image_processor, context_len = load_pretrained_model(
model_path=model_path,
model_base=None,
model_name=get_model_name_from_path(model_path)
)
# 加载图像
image = Image.open("image.jpg")
image_tensor = process_images([image], image_processor, model.config)
image_tensor = image_tensor.to(model.device, dtype=torch.float16)
# 创建对话
conv = conv_templates["llava_v1"].copy()
conv.append_message(conv.roles[0], DEFAULT_IMAGE_TOKEN + "nWhat is in this image?")
conv.append_message(conv.roles[1], None)
prompt = conv.get_prompt()
# 生成回复
input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).to(model.device)
with torch.inference_mode():
output_ids = model.generate(
input_ids,
images=image_tensor,
do_sample=True,
temperature=0.2,
max_new_tokens=512
)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True).strip()
print(response)
## 可用模型
| 模型 | 参数量 | 显存占用 | 质量 |
|-------|------------|------|---------|
| LLaVA-v1.5-7B | 7B | ~14 GB | 好 |
| LLaVA-v1.5-13B | 13B | ~28 GB | 更好 |
| LLaVA-v1.6-34B | 34B | ~70 GB | 最好 |
python
# 加载不同模型
mode