Qwen-VL:通义千问多模态视觉语言模型
FreeGuideOnline
最新
2026-06-22
bash pip install transformers>=4.37.0 accelerate tiktoken pillow torchvision
建议同时安装 `modelscope` 或通过 Hugging Face 下载模型,这里以 ModelScope 为例:
```bash
pip install modelscope
加载模型与处理器
from modelscope import snapshot_download, AutoModelForCausalLM, AutoTokenizer
from transformers import AutoProcessor
import torch
model_dir = snapshot_download("Qwen/Qwen-VL-Chat")
# 如果下载 Qwen2-VL,将路径替换为 Qwen/Qwen2-VL-7B-Instruct 等
model = AutoModelForCausalLM.from_pretrained(
model_dir,
device_map="auto",
trust_remote_code=True,
torch_dtype=torch.float16
).eval()
tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
processor = AutoProcessor.from_pretrained(model_dir, trust_remote_code=True)
单图对话示例
下面代码演示上传一张本地图片,并询问图片内容。
from PIL import Image
import requests
# 准备图片(可以是本地路径或 URL)
image_path = "demo.jpg" # 请替换为实际图片路径
image = Image.open(image_path)
# 构造对话(Qwen-VL 使用特殊 tokens 标记图片)
messages = [
{
"role": "user",
"content": [
{"image": image_path}, # 也可传入 PIL 对象
{"text": "描述这张图片的内容,并提取图中所有文字。"},
],
}
]
# 准备输入
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=[text], images=[image], padding=True, return_tensors="pt")
inputs = inputs.to(model.device)
# 生成回复
with torch.no_grad():
generated_ids = model.generate(**inputs, max_new_tokens=512)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)
如果使用 Qwen2-VL,图像输入支持直接传入 PIL.Image 对象列表,且模板略有不同,建议查阅对应模型的 README 文档。
多轮多图对话
只需在 messages 列表中追加新的用户消息,并传入不同图片即可:
messages = [
{
"role": "user",
"content": [
{"image": "photo1.jpg"},
{"text": "第一张图里有什么动物?"}
]
},
{
"role": "assistant",
"content": [
{"text": "第一张图是一只橘猫在窗台上。"}
]
},
{
"role": "user",
"content": [
{"image": "photo2.jpg"},
{"text": "第二张图和第一张是同一只猫吗?"}
]
}
]