license: other
license_name: qwen
license_link: https://huggingface.co/Qwen/Qwen2.5-VL-72B-Instruct/blob/main/LICENSE
language:
- en
pipeline_tag: image-text-to-text
tags:
- multimodal
library_name: transformers
base_model:
- Qwen/Qwen2.5-VL-72B-Instruct
使用vLLM进行多GPU推理
docker run -it --name iddt-ben-qwen25vl72 --gpus '"device=0,1"' -v huggingface:/root/.cache/huggingface --shm-size=32g -p 30000:8000 --ipc=host benasd/vllm:latest --model Benasd/Qwen2.5-VL-72B-Instruct-AWQ --dtype float16 --quantization awq -tp 2
Qwen2.5-VL-72B-Instruct
简介
自Qwen2-VL发布以来的五个月里,众多开发者在Qwen2-VL视觉语言模型基础上构建了新模型,为我们提供了宝贵反馈。在此期间,我们专注于打造更具实用性的视觉语言模型。今天,我们很高兴推出Qwen家族的最新成员:Qwen2.5-VL。
核心增强功能:
-
视觉理解能力:Qwen2.5-VL不仅擅长识别常见物体如花鸟鱼虫,更能精准分析图像中的文本、图表、图标、图形和布局。
-
智能代理能力:Qwen2.5-VL可直接作为视觉代理进行推理并动态调用工具,具备计算机和手机操作能力。
-
长视频理解与事件捕捉:可理解超过1小时的视频内容,新增精准定位相关视频片段的事件捕捉能力。
-
多格式视觉定位:能通过生成边界框或点坐标精确定位图像中的物体,并稳定输出JSON格式的坐标和属性数据。
-
结构化输出生成:支持发票扫描件、表格等数据的结构化内容输出,适用于金融、商业等领域。
模型架构更新:
- 视频理解的动态分辨率与帧率训练:
通过动态FPS采样将动态分辨率扩展至时间维度,使模型能适应不同采样率的视频理解。同时更新了时间维度的mRoPE,通过ID和绝对时间对齐使模型学习时间序列和速度,最终获得精确定位特定时刻的能力。
- 精简高效的视觉编码器:
在ViT中策略性实现窗口注意力机制,提升训练和推理速度。采用SwiGLU和RMSNorm进一步优化ViT架构,使其与Qwen2.5 LLM结构保持一致。
我们提供30亿、70亿和720亿参数的三款模型。本仓库包含720亿参数的Qwen2.5-VL指令调优模型。更多信息请访问我们的博客和GitHub。
评估
图像基准测试
基准测试 |
GPT4o |
Claude3.5 Sonnet |
Gemini-2-flash |
InternVL2.5-78B |
Qwen2-VL-72B |
Qwen2.5-VL-72B |
MMMUval |
70.3 |
70.4 |
70.7 |
70.1 |
64.5 |
70.2 |
MMMU_Pro |
54.5 |
54.7 |
57.0 |
48.6 |
46.2 |
51.1 |
MathVista_MINI |
63.8 |
65.4 |
73.1 |
76.6 |
70.5 |
74.8 |
MathVision_FULL |
30.4 |
38.3 |
41.3 |
32.2 |
25.9 |
38.1 |
Hallusion Bench |
55.0 |
55.16 |
|
57.4 |
58.1 |
55.16 |
MMBench_DEV_EN_V11 |
82.1 |
83.4 |
83.0 |
88.5 |
86.6 |
88 |
AI2D_TEST |
84.6 |
81.2 |
|
89.1 |
88.1 |
88.4 |
ChartQA_TEST |
86.7 |
90.8 |
85.2 |
88.3 |
88.3 |
89.5 |
DocVQA_VAL |
91.1 |
95.2 |
92.1 |
96.5 |
96.1 |
96.4 |
MMStar |
64.7 |
65.1 |
69.4 |
69.5 |
68.3 |
70.8 |
MMVet_turbo |
69.1 |
70.1 |
|
72.3 |
74.0 |
76.19 |
OCRBench |
736 |
788 |
|
854 |
877 |
885 |
OCRBench-V2(en/zh) |
46.5/32.3 |
45.2/39.6 |
51.9/43.1 |
45/46.2 |
47.8/46.1 |
61.5/63.7 |
CC-OCR |
66.6 |
62.7 |
73.0 |
64.7 |
68.7 |
79.8 |
视频基准测试
基准测试 |
GPT4o |
Gemini-1.5-Pro |
InternVL2.5-78B |
Qwen2VL-72B |
Qwen2.5VL-72B |
VideoMME无字幕 |
71.9 |
75.0 |
72.1 |
71.2 |
73.3 |
VideoMME带字幕 |
77.2 |
81.3 |
74.0 |
77.8 |
79.1 |
MVBench |
64.6 |
60.5 |
76.4 |
73.6 |
70.4 |
MMBench-Video |
1.63 |
1.30 |
1.97 |
1.70 |
2.02 |
LVBench |
30.8 |
33.1 |
- |
41.3 |
47.3 |
EgoSchema |
72.2 |
71.2 |
- |
77.9 |
76.2 |
PerceptionTest_test |
- |
- |
- |
68.0 |
73.2 |
MLVU_M-Avg_dev |
64.6 |
- |
75.7 |
|
74.6 |
TempCompass_overall |
73.8 |
- |
- |
|
74.8 |
智能代理基准测试
基准测试 |
GPT4o |
Gemini 2.0 |
Claude |
Aguvis-72B |
Qwen2VL-72B |
Qwen2.5VL-72B |
ScreenSpot |
18.1 |
84.0 |
83.0 |
|
|
87.1 |
ScreenSpot Pro |
|
|
17.1 |
|
1.6 |
43.6 |
AITZ_EM |
35.3 |
|
|
|
72.8 |
83.2 |
Android Control High_EM |
|
|
|
66.4 |
59.1 |
67.36 |
Android Control Low_EM |
|
|
|
84.4 |
59.2 |
93.7 |
AndroidWorld_SR |
34.5% (SoM) |
|
27.9% |
26.1% |
|
35% |
MobileMiniWob++_SR |
|
|
|
66% |
|
68% |
OSWorld |
|
|
14.90 |
10.26 |
|
8.83 |
环境要求
Qwen2.5-VL的代码已集成至最新版Hugging Face transformers,建议通过以下命令从源码安装:
pip install git+https://github.com/huggingface/transformers accelerate
否则可能遇到以下错误:
KeyError: 'qwen2_5_vl'
快速开始
以下示例展示如何使用🤖 ModelScope和🤗 Transformers运行Qwen2.5-VL。
我们提供工具包方便处理多种视觉输入格式(如base64、URL及交错排列的图像视频),安装命令:
pip install qwen-vl-utils[decord]==0.0.8
非Linux系统用户若无法通过PyPI安装decord,可使用pip install qwen-vl-utils
回退到torchvision处理视频,但仍可从源码安装decord获得更佳性能。
使用🤗 Transformers对话
以下代码片段展示如何结合transformers
和qwen_vl_utils
使用聊天模型:
from transformers import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
"Qwen/Qwen2.5-VL-72B-Instruct", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-72B-Instruct")
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
},
{"type": "text", "text": "描述这张图片。"},
],
}
]
text = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(
text=[text],
images=image_inputs,
videos=video_inputs,
padding=True,
return_tensors="pt",
)
inputs = inputs.to("cuda")
generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [
out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
多图像推理