阿里巴巴通义千问发布视觉语言模型 Qwen2-VL,开源 2B 与 7B 版本
Qwen2-VL: To See the World More Clearly
- 1阿里巴巴通义千问发布 Qwen2-VL 视觉语言模型,开源 2B 与 7B 版本,72B 经 API 提供
- 2官方称 72B 在多数视觉基准领先,部分指标超越 GPT-4o 与 Claude 3.5-Sonnet
- 3模型支持理解 20 分钟以上视频与任意分辨率图像,可作视觉智能体操作手机和机器人
- 4开源版本采用 Apache 2.0 许可证,已集成到 Transformers 与 vLLM 等框架
视觉理解能力进入开源可自持阶段,企业做文档、视频类多模态应用有了从 2B 端侧到 72B API 的成本梯度。
- 影响:文档识别与视频问答类需求可用 7B 自部署压低单位成本,Apache 2.0 允许商用;视觉操作手机 UI 的智能体能力尚处演示阶段,接入业务流程前需按自有场景验证。
- 参考:可考虑先选一个文档问答或票据识别场景,用 7B 与现有方案比对识别错误率再定试点;移动或边缘侧需求可评估 2B 版本;走 API 前先确认 DashScope 计费。
- 依据:性能数据为官方在 MathVista、DocVQA、MTVQA 等基准上的口径,暂无独立验证;许可证、参数规模与知识截止时间为官方博客明示。

演示 GITHUB HUGGING FACE MODELSCOPE API DISCORD
经过一年的不懈努力,今天我们非常高兴地发布 Qwen2-VL!Qwen2-VL 是 Qwen 模型家族中基于 Qwen2 的视觉语言模型的最新版本。与 Qwen-VL 相比,Qwen2-VL 具备以下能力:
对各种分辨率与比例图像的 SoTA 级理解:Qwen2-VL 在视觉理解基准测试中取得了最先进的性能,包括 MathVista、DocVQA、RealWorldQA、MTVQA 等。
理解 20 分钟以上的视频:Qwen2-VL 能够理解超过 20 分钟的视频,用于高质量的视频问答、对话、内容创作等。
能够操作手机、机器人等的 Agent:凭借复杂推理与决策能力,Qwen2-VL 可以与手机、机器人等设备集成,基于视觉环境和文本指令进行自动操作。
多语言支持:为了服务全球用户,除了英语和中文之外,Qwen2-VL 现在还支持理解图像中不同语言的文本,包括大多数欧洲语言、日语、韩语、阿拉伯语、越南语等。
我们以 Apache 2.0 许可证开源了 Qwen2-VL-2B 和 Qwen2-VL-7B,并发布了 Qwen2-VL-72B 的 API!开源版本已集成到 Hugging Face Transformers、vLLM 及其他第三方框架中。希望你们喜欢!
性能
我们在六个关键维度上评估了模型的视觉能力:复杂的大学水平问题求解、数学能力、文档与表格理解、多语言图文理解、通用场景问答、视频理解,以及基于 Agent 的交互。总体而言,我们的 72B 模型在大多数指标上展现出顶尖性能,甚至经常超越 GPT-4o 和 Claude 3.5-Sonnet 等闭源模型。值得注意的是,它在文档理解方面展现出显著优势。

在 7B 规模上,我们保留了对图像、多图像和视频输入的支持,在更具成本效益的模型规模下提供了有竞争力的性能。具体而言,我们的模型在 DocVQA 等文档理解任务以及由 MTVQA 评估的图像多语言文本理解方面表现出色,达到了最先进的水平。

此外,我们很高兴推出一个更小的 2B 模型,针对潜在的移动端部署进行了优化。尽管体积紧凑,该模型在图像、视频和多语言理解方面表现出色。与同规模的其他模型相比,它在视频相关任务、文档理解和通用场景问答方面尤为突出。

模型能力
1. 增强的识别能力
Qwen2-VL 现在拥有更出色的物体识别能力,不仅限于植物和地标,还能理解场景中多个物体之间的复杂关系。我们还显著提升了模型识别图像中手写文本和多种语言的能力,使其更便于全球用户使用。
示例:多物体识别 下一个
用户
输出每个盒子的颜色和数字。

Qwen2-VL
图片显示了一堆带有数字的彩色积木。以下是从上到下每个积木的颜色和数字:
- 顶行(单个积木):蓝色,数字 9
- 第二行(两个方块):带数字 7 的浅蓝色方块,以及带数字 8 的绿色方块
- 第三行(三个方块):带数字 4 的紫色方块、带数字 5 的粉色方块,以及带数字 6 的浅绿色方块
- 底行(四个方块):带数字 0 的红色方块、带数字 1 的橙色方块、带数字 2 的黄色方块,以及带数字 3 的浅绿色方块
2. 视觉推理:解决现实世界的问题
在此次迭代中,我们显著增强了 Qwen2-VL 的数学与编程能力。该模型不仅能通过分析图片来解决问题,还能通过图表分析来解读并求解复杂的数学问题。即使纵横比严重失真的图像也能被正确解读。此外,我们还强化了模型从真实世界图像和图表中提取信息的能力,并提升了其指令遵循能力。这种视觉感知与逻辑推理的融合,使模型能够应对实际问题,弥合抽象概念与切实解决方案之间的鸿沟。
示例:代码 下一步
用户
解决网页中的算法问题。

Qwen2-VL
为了解决“矩阵中的蛇”问题,我们需要实现一个函数,该函数接受矩阵的大小 n 和一个命令列表,并返回执行所有命令后蛇的最终位置。以下是解决该问题的分步方法:
初始化变量:
- 将蛇的当前位置初始化为
0。 - 将蛇的方向初始化为“RIGHT”(初始时,蛇向右移动)。
- 将蛇的当前位置初始化为
定义移动函数:
- 创建一个函数,根据当前方向和矩阵的大小
n来移动蛇。 - 相应地更新蛇的位置。
- 创建一个函数,根据当前方向和矩阵的大小
处理命令:
- 遍历命令列表中的每个命令。
- 对于每个命令,更新蛇的方向和位置。
返回最终位置:
- 处理完所有命令后,返回蛇的最终位置。
以下是实现该解决方案的 Python 代码:
class Solution:
def finalPositionOfSnake(self, n: int, commands: List[str]) -> int:
# Initialize variables
position = 0
direction = "RIGHT"
# Define movement functions
def move_right():
nonlocal position
position += 1
def move_down():
nonlocal position
position += n
def move_left():
nonlocal position
position -= 1
def move_up():
nonlocal position
position -= n
# Process commands
for command in commands:
if command == "RIGHT":
move_right()
elif command == "DOWN":
move_down()
elif command == "LEFT":
move_left()
elif command == "UP":
move_up()
# Return final position
return position
这段代码定义了一个类 Solution,其中包含一个方法 finalPositionOfSnake,该方法接受矩阵的大小 n 和一个命令列表,并返回执行所有命令后蛇的最终位置。移动函数(move_right、move_down、move_left、move_up)用于根据当前方向更新蛇的位置。
3. 视频理解与实时对话
除了静态图像之外,Qwen2-VL 还将其能力扩展到视频内容分析。它可以总结视频内容、回答与视频相关的问题,并实时保持连贯的对话流,提供实时聊天支持。这一功能使其能够充当个人助理,通过直接从视频内容中提取的见解和信息来帮助用户。
示例:视频理解 下一步
用户
请详细描述这个视频。
Qwen2-VL
视频开始时,一名男子对着镜头讲话,随后画面切换到一群人坐在控制室里。接着镜头切到两名男子漂浮在空间站内,可以看到他们对着镜头讲话。这两名男子似乎是宇航员,穿着航天服。空间站里摆满了各种设备和机械,镜头环视四周,展示了空间站的不同区域。两人继续对着镜头讲话,似乎在讨论他们的任务以及正在执行的各项工作。总体而言,这段视频让人们得以一窥太空探索的世界以及宇航员的日常生活,十分引人入胜。
用户
这两名宇航员穿的衣服是什么颜色?
Qwen2-VL
这两名宇航员穿着蓝色和黑色的衣服。
示例:实时聊天 下一个
实时聊天
4. 视觉智能体能力:函数调用与视觉交互。
Qwen2-VL 展现出作为视觉智能体的强大潜力,能够实现与人类感知世界方式类似的交互。
- 该模型支持函数调用(Function Calling),通过解读视觉线索借助外部工具实时获取数据——无论是航班动态、天气预报还是包裹物流。这种视觉理解与功能执行的结合提升了模型的实用性,使其成为信息管理与决策制定的强大工具。
示例:函数调用(Function Calling) 下一个
询问天气
- 视觉交互是向模拟人类感知迈出的重要一步。通过让模型以类似人类感官的方式与视觉刺激进行交互,我们正在突破 AI 感知并响应其所处环境的能力边界。这一能力为更加直观、更具沉浸感的交互铺平了道路,在这样的交互中,Qwen2-VL 不仅是观察者,更是我们视觉体验的积极参与者。
示例:UI 交互 下一个
操作手机
当然,该模型并不完美,存在一些局限性,希望大家能够理解。例如,该模型无法从视频中提取音频,其知识也仅更新至 2023 年 6 月。此外,模型在处理复杂指令或场景时无法保证完全准确,在涉及计数、文字识别和 3D 空间感知的任务上也相对较弱。
模型架构
总体而言,我们延续了 Qwen-VL 架构,该架构采用 Vision Transformer(ViT)模型和 Qwen2 语言模型。对于所有这些变体,我们都使用了约 600M 参数的 ViT,旨在无缝处理图像和视频输入。为了进一步增强模型有效感知和理解视频中视觉信息的能力,我们引入了几项关键升级:
- Qwen2-VL 的一项关键架构改进是实现了原生动态分辨率支持。与上一代模型不同,Qwen2-VL 能够处理任意分辨率的图像,并将其映射为数量动态变化的视觉 token,从而确保模型输入与图像内在信息之间的一致性。这种方法更贴近人类视觉感知,使模型能够处理任何清晰度或尺寸的图像。

- 另一项关键的架构增强是 多模态旋转位置嵌入(Multimodal Rotary Position Embedding,M-ROPE)的创新。通过将原始旋转嵌入解构为表示时间与空间(高度和宽度)信息的三个部分,M-ROPE 使 LLM 能够并发地捕获并整合一维文本、二维视觉和三维视频的位置信息。

使用 Qwen2-VL 进行开发
要使用最大的 Qwen2-VL 模型 Qwen2-VL-72B,你可以暂时通过我们的官方 API 访问它(注册账号并通过 DashScope 获取 API 密钥),如下所示:
from openai import OpenAI
import os
import base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
# Path to your image
image_path = "dog_and_girl.jpeg"
# Getting the base64 string
base64_image = encode_image(image_path)
def get_response():
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-vl-max-0809",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What is this?"},
{
"type": "image_url",
"image_url": {
"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"
},
},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{base64_image}"},
},
],
}
],
top_p=0.8,
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
print(chunk.model_dump_json())
if __name__ == "__main__":
get_response()
Qwen2-VL 系列的 2B 和 7B 模型已开源,可在 Hugging Face 和 ModelScope 上获取。你可以查看模型卡片了解详细的使用说明、特性和性能指标。下面我们提供一个使用 HF Transformers 的最简单用法示例。
由于 Qwen2-VL 的代码刚刚合入主分支,请确保通过 pip install git+https://github.com/huggingface/transformers 从源码安装 transformers。如果不是从源码安装,你可能会遇到以下错误:
KeyError: 'qwen2_vl'
我们提供了一个工具包,帮助你更方便地处理各种类型的视觉输入。它支持包括 base64、URL 以及交错的图像和视频在内的输入。你可以使用以下命令安装:
pip install qwen-vl-utils
下面是用于演示的代码片段。特别地,为了加速和节省内存,我们建议在可能的情况下使用 flash attention 2。
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
# default: Load the model on the available device(s)
model = Qwen2VLForConditionalGeneration.from_pretrained(
"Qwen/Qwen2-VL-7B-Instruct", device_map="auto"
)
# We recommend enabling flash_attention_2 for better acceleration and memory saving, especially in multi-image and video scenarios.
# model = Qwen2VLForConditionalGeneration.from_pretrained(
# "Qwen/Qwen2-VL-7B-Instruct",
# torch_dtype=torch.bfloat16,
# attn_implementation="flash_attention_2",
# device_map="auto",
# )
# default processer
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct")
# The default range for the number of visual tokens per image in the model is 4-16384. You can set min_pixels and max_pixels according to your needs, such as a token count range of 256-1280, to balance speed and memory usage.
# min_pixels = 256*28*28
# max_pixels = 1280*28*28
# processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-7B-Instruct", min_pixels=min_pixels, max_pixels=max_pixels)
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg",
},
{"type": "text", "text": "Describe this image."},
],
}
]
# Preparation for inference
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",
)
# Inference: Generation of the output
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)
为了便于无缝集成和使用我们的最新模型,我们在开源生态中支持一系列工具和框架,包括量化(AutoGPTQ、AutoAWQ)、部署(vLLM)、微调(Llama-Factory)等。
许可证
开源的 Qwen2-VL-2B 和 Qwen2-VL-7B 均采用 Apache 2.0 许可证。
下一步计划
我们期待你的反馈,以及你将基于 Qwen2-VL 构建的创新应用。在不久的将来,我们将基于下一版本的语言模型构建更强大的视觉语言模型,并努力整合更多模态,朝着全模态模型迈进!
来源:通义千问 Qwen:Blog · qwenlm.github.io