Qwen 2.5 VL多模态模型的应用

阿里巴巴的Qwen 2.5 VL大模型是通义千问团队推出的开源多模态视觉语言模型,以强大的视觉理解、视频解析和跨模态推理能力为核心突破,被业界认为是目前最先进的开源多模态算法之一。

Qwen 2.5 VL采用​​三模块架构​​:

  1. 大语言模型(LLM)​​:基于Qwen2.5语言模型预训练权重,引入多模态旋转位置编码(MRoPE)对齐时间、空间与文本模态。
  2. ​视觉编码器(ViT)​​:重新设计的动态分辨率ViT,支持原生分辨率输入,通过窗口注意力机制(最大窗口112×112)和二维旋转位置编码(2D-RoPE)降低计算复杂度,同时保持空间感知精度。
  3. 视觉-语言融合模块​​:采用多层感知机(MLP)压缩视觉特征序列,提升与LLM的交互效率。

其​创新技术​​包括:

  1. ​动态帧率(FPS)训练与绝对时间编码​​:通过时间戳对齐实现长视频理解(支持1小时以上)和秒级事件定位
  2. ​结构化输出设计​​:生成JSON格式的坐标、属性数据,以及QwenVL HTML格式的文档版面还原
  3. ​设备操作能力​​:无需微调即可控制电脑、手机完成多步骤任务(如订机票、修图) 

下面介绍一下如何使用VL模型进行图像识别和视频识别。在HF-Mirror.com网站中下载Qwen2.5-VL-7B-Instruct-AWQ的权重,这是7B参数量的量化版本,可以在我的3090显卡上运行。以下代码是加载模型

from transformers import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch
import base64
import os
import cv2
import matplotlib.pyplot as plt

model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
    "Qwen2.5-VL-7B-Instruct-AWQ",
    torch_dtype=torch.float16,
    attn_implementation="flash_attention_2",
    device_map="auto",
)

processor = AutoProcessor.from_pretrained("Qwen2.5-VL-7B-Instruct-AWQ")

首先是对图像进行识别,例如选取以下的图片

img = cv2.imread('./1.jpg')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.axis('off') # 不显示坐标轴
plt.show()

图片显示如下:

对图像进行描述,如以下代码

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "./1.jpg",
            },
            {"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)

最后输出的描述信息如下:

这张图片展示了一位穿着蓝色衬衫和深色领带的男子。他双手握拳,表情非常激动,似乎在庆祝或表达强烈的情感。背景是深灰色的,突出了人物的形象。

可以看到对于图像的描述非常准确。

下面是对视频进行描述,代码如下:

video = './test.mp4'
question = '描述一下视频的情节'

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "video",
                "video": video,
            },
            {"type": "text", "text": question},
        ],
    }
]

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)

最后输出的内容如下:

这段视频展示了一系列紧张且充满戏剧性的场景,主要围绕着一个小镇的污染事件展开。以下是情节的详细描述:

1. **办公室内的对话**:

 - 视频开始于一个办公室内,两位男性角色正在激烈地讨论。一位穿着深色夹克的男子显得非常焦虑和愤怒,另一位则戴着眼镜,表情严肃。

- 对话中提到“一个乡的老百姓让你当书记”,暗示了角色之间的权力关系和责任。

2. **审讯般的怒吼**:

- 画面切换到一个会议室,其中一位角色被要求回答问题。

以上就是VL模型的使用方法。 

### Qwen2.5VL 的特点和功能 Qwen2.5VL 是一种多模态模型,其设计目标在于处理视觉与语言的联合任务。以下是该模型的主要特性和功能: #### 1. **跨模态理解能力** Qwen2.5VL 展现出了强大的跨模态理解能力,能够高效地解析图像中的复杂语义并将其映射到自然语言描述中[^1]。这种能力使得它适用于多种场景,例如图文检索、视觉问答以及图像分类。 #### 2. **生成高质量的视觉-语言内容** 除了理解和分析外,Qwen2.5VL 还具备生成高质量视觉-语言内容的能力。它可以基于给定的图片生成详细的描述文字或者根据一段文本生成相应的插图。这一特性使其成为创意工作流的重要工具之一。 #### 3. **高效的推理性能** 通过优化架构设计和技术实现方式,Qwen2.5VL 提供了快速而精确的推理服务,在实际应用环境中表现出优异的速度表现的同时保持较高的准确性水平。 #### 4. **支持广泛的下游任务** 得益于其先进的技术和灵活的设计理念,Qwen2.5VL 能够很好地适应各种不同的具体应用场景需求,包括但不限于物体检测、姿态估计等领域内的特定子任务解决方法探索等方面的工作进展情况说明如下几个方面重点阐述: ```python def generate_caption(image): """ Generate a caption for the given image using Qwen2.5VL. Args: image (str): Path to the input image file. Returns: str: Generated caption describing the content of the image. """ # Load pre-trained model and process the image... return "A detailed description generated by Qwen2.5VL" ``` 上述代码片段展示了如何利用 Qwen2.5VL 自动生成一张图片的文字描述。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gzroy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值