OpenVINO™2025与QWen-VL多模态视觉模型实现零样本对象检测

对象检测支持
QWen2.5-VL视觉多模态大模型支持通过生成边框或点来精确定位图像中的对象,并能为坐标和属性提供稳定的 JSON 输出,不仅能熟练识别花、鸟、鱼和昆虫等常见物体、还可以精准检测多种水果、交通工具、动物与人类,可以零代码实现超过300种以上的对象检测并输出它们的JSON格式坐标位置信息与标签信息。

模板与提示词
QWen2.5-VL对象检测依赖于正确的提示词与输入格式,qwen2.5_3b当前支持的图像分辨率从256~1280之间,根据提示词实现目标检测位置定位输出标准化的 JSON 格式文档。当需要使用QWen2.5-VL实现对象检测适合,输入输入需要:

图像:一张需要目标识别的图像
提示词:给出QWen2.5-VL能听懂的并输出JSON格式目标位置与标签的咒语。
在这里插入图片描述

格式如下:

其中prompt就是question的内容,推荐用以下两个提示词之一:

prompt1 = "Outline the position of each person and output all the coordinates in JSON format"
prompt2 = 'Detect all objects in the image and give the coordinates. The format of output should be like {"bbox_2d": [x1, y1, x2, y2], "label": label'

代码演示
当前加载Qwen-VL模型OpenVINO™支持的是通过optimum插件方式完成,支持代码如下:

from optimum.intel.openvino import OVModelForVisualCausalLM
min_pixels = 256 * 28 * 28
max_pixels = 1280 * 28 * 28
model_dir = "D:/LLMs/qwen2.5_3b/INT4"
processor = AutoProcessor.from_pretrained(model_dir, min_pixels=min_pixels, max_pixels=max_pixels)
model = OVModelForVisualCausalLM.from_pretrained(model_dir, device="CPU")
if processor.chat_template is None:
    tok = AutoTokenizer.from_pretrained("D:/LLMs/qwen2.5_3b")
    processor.chat_template = tok.chat_template

加载以后构建包含输入图像与特定提示词会话模板,然后把模板输入到模型,对获取的输出部分JSON数据进行文本解析,文本解析部分的代码如下:

output_text = processor.batch_decode(generated_ids,
                                     skip_special_tokens=True,
                                     clean_up_tokenization_spaces=True)
boxes = []
lines = output_text[0].splitlines()
for i, line in enumerate(lines):
    print("number of line: ", i ,  line)
    if line.strip().startswith("{\"bbox_2d\": ["):
        temp = line.strip().replace("us", "[")
        res = temp.split(", ")
        x1 = res[0].split(" ")[-1]
        y1 = res[1]
        x2 = res[2]
        y2 = res[3][:len(res[3])-1]
        print("box: ", x1, y1, x2, y2)
        boxes.append([x1, y1, x2, y2])
for i, box in enumerate(boxes):
    abs_x1 = int(box[0])
    abs_y1 = int(box[1])
    abs_x2 = int(box[2])
    abs_y2 = int(box[3])
    if abs_x1 > abs_x2:
        abs_x1, abs_x2 = abs_x2, abs_x1
    if abs_y1 > abs_y2:
        abs_y1, abs_y2 = abs_y2, abs_y1
    cv.rectangle(image, (abs_x1, abs_y1), (abs_x2, abs_y2), (0, 0, 255), 2)
cv.imshow("OpenVINO2025+QWen2.5 Multi-Models", image)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果,预测输出的JSON格式文档如下:

在这里插入图片描述
解析JSON格式,绘制BOX位置信息到图像上,显示如下:
在这里插入图片描述
用OpenVINO™2025本地部署大模型多块好省,CPU就可以实现大模型部署自由,真的不是梦。

### Qwen-VL-72B 和 Qwen-VL-Max 的特性比较 #### 参数规模模型架构 Qwen-VL-72B 是一款拥有 720亿参数的大规模多模态预训练模型,专为处理复杂的视觉和语言联合任务而设计[^1]。相比之下,Qwen-VL-Max 虽然具体参数量未公开,但从名称推测其可能代表了一个更为优化或改进版本,在某些特定场景下具备更优性能。 #### 处理能力对比 对于建模方面的挑战——即面对差异很大的视觉任务(包括不同类型输入的任务、不同粒度的任务以及格式各异的输出),Qwen-VL-72B 凭借庞大的参数量能够更好地捕捉复杂模式并适应多种类型的输入数据。然而,Qwen-VL-Max 可能在效率上有所提升,通过算法上的创新减少计算资源消耗的同时保持甚至提高准确性。 #### 数据需求分析 考虑到标注成本差异大且粒度和语义各异的数据集特点,Qwen-VL-72B 需要依赖大量高质量标记样本进行有效学习;而对于收集图像成本高且数量有限的情况,则显示出一定局限性。相反,Qwen-VL-Max 或者引入了新的机制来缓解这些问题,比如增强自监督学习的能力或是利用迁移学习技术从其他领域获取有用信息补充当前任务所需的知识。 ```python # Python伪代码展示如何加载这两个模型 from transformers import AutoModelForVisionToText, AutoTokenizer def load_model(model_name): tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForVisionToText.from_pretrained(model_name) return model, tokenizer qwen_vl_72b_model, qwen_vl_72b_tokenizer = load_model('qwen-vl-72b') qwen_vl_max_model, qwen_vl_max_tokenizer = load_model('qwen-vl-max') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值