❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
🚀 快速阅读
- 模型介绍:Qwen2.5-VL 是阿里通义千问团队开源的旗舰视觉语言模型,具有3B、7B和72B三种不同规模。
- 主要功能:支持视觉理解、长视频处理、结构化输出和设备操作。
- 技术原理:采用 ViT 加 Qwen2 的串联结构,支持多模态旋转位置编码(M-ROPE)和任意分辨率图像识别。
正文(附运行示例)
Qwen2.5-VL 是什么
Qwen2.5-VL 是阿里通义千问团队开源的旗舰视觉语言模型,具有3B、7B和72B三种不同规模。该模型在视觉理解方面表现出色,能够识别常见物体,分析图像中的文本、图表等元素。
Qwen2.5-VL 具备作为视觉Agent的能力,可以推理并动态使用工具,初步操作电脑和手机。在视频处理上,Qwen2.5-VL 能够理解超过1小时的长视频,精准定位相关片段捕捉事件。模型还支持发票、表单等数据的结构化输出。
Qwen2.5-VL 在多个性能测试中表现优异,在文档和图表理解方面优势明显,7B模型在多项任务中超越了GPT-4o-mini。模型的推出为开发者提供了强大的工具,能够在多种应用场景中发挥重要作用。
Qwen2.5-VL 的主要功能
- 视觉理解:能识别常见物体,如花、鸟、鱼和昆虫,能分析图像中的文本、图表、图标、图形和布局。
- 视觉Agent能力:可以直接作为一个视觉Agent,推理并动态地使用工具,初步具备使用电脑和使用手机的能力。
- 理解长视频和捕捉事件:能理解超过1小时的视频,精准定位相关视频片段来捕捉事件。
- 视觉定位:可以通过生成bounding boxes或者points来准确定位图像中的物体,能为坐标和属性提供稳定的JSON输出。
- 结构化输出:对于发票、表单、表格等数据,支持其内容的结构化输出。
Qwen2.5-VL 的技术原理
- 模型结构:Qwen2.5-VL 延续了上一代 Qwen-VL 中 ViT 加 Qwen2 的串联结构,三个不同规模的模型都采用了 600M 规模大小的 ViT,支持图像和视频统一输入。使模型能更好地融合视觉和语言信息,提高对多模态数据的理解能力。
- 多模态旋转位置编码(M-ROPE):Qwen2.5-VL 采用的 M-ROPE 将旋转位置编码分解成时间、空间(高度和宽度)三部分,使大规模语言模型能同时捕捉和整合一维文本、二维视觉和三维视频的位置信息,赋予了模型强大的多模态处理和推理能力。
- 任意分辨率图像识别:Qwen2.5-VL 可以读懂不同分辨率和不同长宽比的图片,对图像的清晰度或大小能轻松识别。基于 naive dynamic resolution 支持,能将任意分辨率的图像映射成动态数量的视觉 token,保证了模型输入和图像信息的一致性。
- 网络结构简化:与 Qwen2-VL 相比,Qwen2.5-VL 增强了模型对时间和空间尺度的感知能力,进一步简化了网络结构以提高模型效率。
如何运行 Qwen2.5-VL
1. 安装依赖
首先,确保安装了必要的依赖库:
pip install git+https://github.com/huggingface/transformers accelerate
如果你不使用 Linux,可能无法安装 decord
,可以使用 pip install qwen-vl-utils
来回退到使用 torchvision 进行视频处理。但你可以通过 安装 decord from source 来使用 decord。
2. 加载模型
加载模型并准备进行推理:
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-7B-Instruct", torch_dtype="auto", device_map="auto"
)
# 加载处理器
processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-VL-7B-Instruct")
# 准备消息
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."},
],
}
]
# 准备推理
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)
资源
- 项目官网:https://qwenlm.github.io/blog/qwen2.5-vl
- GitHub 仓库:https://github.com/QwenLM/Qwen2.5-VL
- 千问模型在线体验:https://chat.qwenlm.ai/
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦