Qwen2-VL:Qwen系列已在开源的路上一骑绝尘

文摘   2024-08-30 11:11   荷兰  

昨天睡太早了,起来之后,就被Qwen2-VL开源消息刷屏了。

良心Qwen,开源了Qwen2-VL的2B和7B,72B需要API调用暂未开源。

该说不说Qwen系列模型真的是在开源路上一骑绝尘,全全全!

vl、audio、text连续更新,kpi直接拉满!

HF: https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d
Blog: https://qwenlm.github.io/blog/qwen2-vl/

啥也不说,先看榜单。

72B效果
7B效果

对比Qwen-VL

Qwen2-VL相比Qwen-VL,有如下改进:

  • 适配不同分辨率和不同长宽比的图片
  • 长视频理解:可以理解20分钟以上的长视频
  • 更强的复杂推理和决策的能力,可根据视觉环境和文字指令进行自动操作手机、机器人等设备
  • 支持除英语和中文外,也支持大多数欧洲语言、日语、韩语、阿拉伯语、越南语等多语言

模型结构上ViT加Qwen2的串联结构,在三个不同尺度的模型上,均采用600M的ViT,支持图像和视频统一输入。

  • 实现了对原生动态分辨率的全面支持,不同大小图片被转换为动态数量的 tokens,最小只占4个tokens。
  • 增加多模态旋转位置嵌入(M-ROPE),将原始旋转嵌入分解为代表时间、高度和宽度的三个部分,使得大规模语言模型能够同时捕捉和整合一维文本序列、二维视觉图像以及三维视频的位置信息。

先来简单测测Qwen2-7B-VL效果

https://modelscope.cn/studios/qwen/Qwen2-7B-VL-demo

以下测试均基于魔搭上的demo进行测试(有时候服务不稳定):

  • 测试一下单图片信息抽取功能

input:请逐步详细分析,谁(姓名)几点出发,从哪儿到哪儿,并且花了多少钱

结果:完全正确

  • 测试一下单图片信息抽取+计算功能

input:请逐步详细分析,告诉我在中文数据和英文数据分别占比是多少,并且告诉我总和

MAP-Neo论文中一张截图

结果:完全正确

追问input:英文和代码数据的占比总和呢?

  • 测试一下单图片理解功能

input:请逐步详细分析,这张图片里是有两只狗,对吗

结果:完全正确

  • 测试一下单图片手写ORC功能

input:请逐步详细分析,输出图片中的文字内容

结果:错了一个字少了一个字,但是这种连笔确实还比较难

  • 测试一下单图片表格结构化输出

input:识别图片中表格内容,并以结构化格式输出

结果:内容识别准确,但是表格结构不对,并且可能由于网页端输出长度限制,输出不正确。

再测个简单表,

结果:完全正确

  • 测试一下多图片信息抽取+计算功能

input:请逐步详细分析,两张票一共花了多少钱

网图-另一张是上面的火车票图

结果:OCR准确,但是计算出现了瑕疵

  • 再测试一下多图片信息抽取+计算功能

input:请逐步详细分析,两顿饭我花了多少钱

结果:完全正确,这次对了,难倒你对饭情有独钟?

篇幅有限,更多的能力大家自己测测看看吧

HF快速使用:

PS:模型下载有困难的同学,详见我之前写的一篇文章《大模型下载使我痛苦》

from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info

model = Qwen2VLForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2-VL-7B-Instruct", torch_dtype="auto", device_map="auto"
)

processor = AutoProcessor.from_pretrained("Qwen/Qwen2-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)

PS:给公众号添加【星标⭐️】不迷路!您的点赞在看关注是我坚持的最大动力!

我们的口号是“生命不止,学习不停”!

往期推荐:

NLP工作站
日常分享AIGC前沿知识&落地经验总结,也欢迎关注《ChatGPT原理与实战》、《大型语言模型实战指南》两本大模型相关书籍
 最新文章