Coggle数据科学 | 小白学大模型:多模态 Qwen2.5-VL

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。

原文链接:小白学大模型:多模态 Qwen2.5-VL

Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model, LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL 系列模型性能强大,具备多语言对话、多图交错对话等能力,并支持中文开放域定位和细粒度图像识别与理解。

https://github.com/QwenLM/Qwen2.5-VL

安装方法

pip install git+https://github.com/huggingface/transformers accelerate
pip install qwen-vl-utils[decord]

模型硬件要求:

Precision

Qwen2.5-VL-3B

Qwen2.5-VL-7B

Qwen2.5-VL-72B

FP32

11.5 GB

26.34 GB

266.21 GB

BF16

5.75 GB

13.17 GB

133.11 GB

INT8

2.87 GB

6.59 GB

66.5 GB

INT4

1.44 GB

3.29 GB

33.28 GB

模型特性

  • 强大的文档解析能力:将文本识别升级为全文档解析,擅长处理多场景、多语言以及包含各种内置元素(手写文字、表格、图表、化学公式和乐谱)的文档。

  • 精准的对象定位跨格式支持:提升了检测、指向和计数对象的准确性,支持绝对坐标和JSON格式,以实现高级空间推理。

  • 超长视频理解和细粒度视频定位:将原生动态分辨率扩展到时间维度,增强对时长数小时的视频的理解能力,同时能够在秒级提取事件片段。

  • 增强的计算机和移动设备代理功能:借助先进的定位、推理和决策能力,为模型赋予智能手机和计算机上更出色的代理功能。

使用案例

基础图文问答

from transformers import Qwen2_5_VLForConditionalGeneration, 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"
)

# 传入文本、图像或视频
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",
)
inputs = inputs.to(model.device)

# 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)

多图输入

messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "image": "file:///path/to/image1.jpg"},
            {"type": "image", "image": "file:///path/to/image2.jpg"},
            {"type": "text", "text": "Identify the similarities between these images."},
        ],
    }
]

视频理解

  • Messages containing a images list as a video and a text query

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "video",
                "video": [
                    "file:///path/to/frame1.jpg",
                    "file:///path/to/frame2.jpg",
                    "file:///path/to/frame3.jpg",
                    "file:///path/to/frame4.jpg",
                ],
            },
            {"type": "text", "text": "Describe this video."},
        ],
    }
]
  • Messages containing a local video path and a text query

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "video",
                "video": "file:///path/to/video1.mp4",
                "max_pixels": 360 * 420,
                "fps": 1.0,
            },
            {"type": "text", "text": "Describe this video."},
        ],
    }
]
  • Messages containing a video url and a text query

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "video",
                "video": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-VL/space_woaudio.mp4",
                "min_pixels": 4 * 28 * 28,
                "max_pixels": 256 * 28 * 28,
                "total_pixels": 20480 * 28 * 28,
            },
            {"type": "text", "text": "Describe this video."},
        ],
    }
]

物体检测

  • 定位最右上角的棕色蛋糕,以JSON格式输出其bbox坐标

图片

  • 请以JSON格式输出图中所有物体bbox的坐标以及它们的名字,然后基于检测结果回答以下问题:图中物体的数目是多少?

图片

图文解析OCR

  • 请识别出图中所有的文字

图片

  • Spotting all the text in the image with line-level, and output in JSON format.

图片

  • 提取图中的:['发票代码','发票号码','到站','燃油费','票价','乘车日期','开车时间','车次','座号'],并且按照json格式输出。

图片

Agent & Computer Use

The user query:在盒马中,打开购物车,结算(到付款页面即可) (You have done the following operation on the current device):

图片

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

<think>我们正在比较两个Hugging Face模型:Qwen/Qwen2.5-VL-7B-Instruct 和 Qwen/Qwen2.5-VL-7B。 主要区别在于模型的任务类型和训练目标。 1. **Qwen/Qwen2.5-VL-7B**:这是一个基础的多模态(Vision-Language)模型,通常用于通用的视觉语言任务,如图像描述、视觉问答等。它没有特别针对指令跟随进行微调。 2. **Qwen/Qwen2.5-VL-7B-Instruct**:这个模型是在基础模型上进行了指令微调(Instruction Tuning)的版本,使其更适合对话式交互和遵循人类指令。它能够更好地理解并执行用户给出的复杂指令。 因此,选择哪个模型取决于你的应用场景: - 如果你需要构建一个对话系统(如聊天机器人),能够根据用户的指令完成多模态任务(例如:根据图片回答问题,或者根据指令生成图像描述),那么Instruct版本更合适。 - 如果你只需要一个基础的多模态模型,用于非交互式的任务(例如:批量处理图像生成描述),那么基础版本可能就足够了。 示例代码(使用Instruct版本进行对话): ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_id = "Qwen/Qwen2.5-VL-7B-Instruct" tokenizer = AutoTokenizer.from_pretrained(model_id) model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", torch_dtype=torch.float16) # 假设我们有一张图片,将其处理为模型可接受的格式 # 这里用伪代码表示图像处理,实际中需要使用模型对应的图像处理器 image_path = "example.jpg" # 实际中,使用类似这样的方式处理图像:image = Image.open(image_path).convert("RGB") # 然后使用tokenizer的图像处理器处理:image_tensor = tokenizer.image_processor(image) # 构建对话 query = "这张图片里有什么?" messages = [ {"role": "user", "content": [ {"image": image_path}, # 实际中应使用处理后的图像tensor {"text": query} ]} ] text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) model_inputs = tokenizer([text], return_tensors="pt").to(model.device) # 生成回复 generated_ids = model.generate(**model_inputs, max_new_tokens=512) response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] print(response) ``` 注意:上述代码需要根据实际图像处理部分进行调整,因为VL模型需要同时处理图像和文本。 §§相关问题§§ 1. 如何为Qwen多模态模型准备图像输入? 2. 在Hugging Face中,如何正确使用`apply_chat_template`处理多模态输入? 3. 指令微调(Instruction Tuning)对多模态模型性能有哪些具体提升? 4. Qwen2.5-VL系列模型支持哪些视觉语言任务? 5. 在使用Qwen多模态模型时,如何处理大图像以避免内存溢出?</think>### Qwen/Qwen2.5-VL-7B-Instruct 与 Qwen/Qwen2.5-VL-7B 的区别 这两个模型都是通义千问(Qwen)团队开发的多模态大模型,核心区别在于**功能定位和训练目标**: #### 核心差异对比表 | 特性 | Qwen2.5-VL-7B | Qwen2.5-VL-7B-Instruct | |---------------------|----------------------------|--------------------------------| | **核心定位** | 基础视觉语言模型 | 指令优化对话模型 | | **最佳应用场景** | 多模态特征提取/图像理解 | 人机交互/指令执行 | | **训练目标** | 跨模态对齐(图-文匹配) | 遵循复杂指令生成响应 | | **输入处理能力** | 接受图像+文本 | 支持图像+文本+复杂指令 | | **输出特性** | 生成图像描述/标签 | 执行操作建议/分步推理 | | **对话优化** | 基础对话能力 | 针对聊天场景深度优化 | | **典型任务** | VQA/图像标注/跨模态检索 | 多轮对话/任务执行/推理决策 | --- #### 详细说明: 1. **Qwen2.5-VL-7B (基础版)** - 专注于**视觉-语言基础能力** - 擅长: ```python # 图像描述生成 model.generate("描述这张图片", image=img_tensor) # 视觉问答 model.generate("图中人物的动作是什么?", image=img_tensor) ``` - 适用场景:图像理解API、跨模态检索系统 2. **Qwen2.5-VL-7B-Instruct (指令优化版)** - 强化**复杂指令理解和执行能力** - 核心优势: ```python # 多模态指令响应 model.generate( "分析这张产品图,列出改进建议并生成营销文案", image=product_img ) # 多步骤推理 model.generate( "根据流程图解释注册流程,并用Markdown输出步骤", image=flowchart_img ) ``` - 适用场景:AI助手、智能客服、自动化工作流 --- ### 选择建议: - 选 **基础版** 如果: 需要图像特征提取、跨模态检索等基础能力 - 选 **Instruct版** 如果: 需要: 1. 执行复杂用户指令 2. 多轮对话交互 3. 结合图像的推理决策 4. 结构化输出(JSON/Markdown等)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值