AI长眼睛了,玩一玩视觉·语言·大模型!Qwen-VL

前段时间,我们已经玩了国内最强的开源大语言模型“通义千问qwen”和“百川baichuan2”。今天来玩一个更厉害的,跨纬度吊打普通大语言模型。

这个模型叫Qwen-VL,VL 的意思是视觉语言模型。意思就是不光能侃大山,还学会刷图片了…

下面来看一些我实测的例子。

首先我提供了这样一张照片。

下面是AI的回答。

哈哈~~

AI的眼神太犀利,奶白色短裤,黑色装饰都能看出来?

另外谁能解释一下“光头” 是怎么来的?

然后又说拍摄啊….道具啊…

我不敢再问细问了~~

懂得说一下,照片里的是谁,他们在干什么?

然后我又试了一下这张图片。

下面是和AI的聊天记录。

准确地认出这个人,并且可以准确的回答各种关联信息。要知道这可是没有联网的哦…全是在单个离线模型中的内容哦。

然后,我们来试试风景照片

下面的是AI的回答。

它居然一眼就能认出这是西湖…

同样的问题,问了讯飞星火在线版,只回答了这是一个美丽的湖泊。果然杭州产的模型,对杭州还是很了解的。

最后发一张,换脸软件中的示例图片。

准确的分析除了咖啡,杯子的颜色,背景,女子,椅子,黄色灯光。

另外它还识别了人物底部的区域和部分文字。

除了能读懂图片,分清楚左右手外,它还能帮你检测特定物品,打上检测框。以往的检测算法,现在一句话就搞定了????

我这里用的的所有图片都是随机选区,并不是官方示例。整体来看这个视觉语言大模型已经有一定的可玩性了。

如果说理解文字是一维空间,那么能理解图片就是二位空间了。所以你们说这是不是对普通大语言模型的降维打击。

类似的功能其实在讯飞星火和百度文心一言上也有,但是,人家是大量的人力,物力,财力堆出来的,而现在我们可以直接在本地电脑跑起来了,一个人,一台电脑,连网络都不需要。

只要一张 RTX3060 12G就能跑起来的AI模型,居然有这么强的图片分析能力,真的可以了!

感觉自己微调一下,就可以使用在某些场景了。

简介

下面来看一下官方对于Qwen-VL的介绍。

Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model, LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL 系列模型的特点包括:

  • 强大的性能
  • 多语言对话模型
  • 多图交错对话
  • 首个支持中文开放域定位的通用模型
  • 细粒度识别和理解

模型

大模型大模型,重点就是模型了,所有的活都是直接在模型中完成。

官方提供了两个模型。

  • Qwen-VL: Qwen-VL 以 Qwen-7B 的预训练模型作为语言模型的初始化,并以 Openclip ViT-bigG  作为视觉编码器的初始化,中间加入单层随机初始化的 cross-attention,经过约1.5B的图文数据训练得到。最终图像输入分辨率为448。
  • Qwen-VL-Chat: 在 Qwen-VL 的基础上,我们使用对齐机制打造了基于大语言模型的视觉AI助手Qwen-VL-Chat,其训练数据涵盖了 QWen-7B 的纯文本 SFT 数据、开源 LVLM 的 SFT 数据、数据合成和人工标注的图文对齐数据。

还有一个在Chat基础上做了Int4量化的模型,适合在低配置设备上运行。

评估结果

下面看一下具体的评估对比数据。

从这个图片来看,相比于同类模型,还是遥遥领先的。另外有一个视觉模型好像比这个强,但是运行要求太高了,玩不动。

依赖

  • python 3.8及以上版本
  • pytorch 1.12及以上版本,推荐2.0及以上版本
  • 建议使用CUDA 11.4及以上(GPU用户需考虑此选项)
pip install modelscope -U
pip install transformers accelerate tiktoken -U
pip install einops transformers_stream_generator -U
pip install "pillow==9.*" -U
pip install torchvision
pip install matplotlib -U

 

我本地配置时使用的版本是Python3.10,cuda118,Torch2.0.1。

快速使用

可以通过以下代码轻松调用:

from modelscope import (
    snapshot_download, AutoModelForCausalLM, AutoTokenizer, GenerationConfig
)
import torch
model_id = 'qwen/Qwen-VL-Chat'
revision = 'v1.1.0'

model_dir = snapshot_download(model_id, revision=revision)
torch.manual_seed(1234)

# 请注意:分词器默认行为已更改为默认关闭特殊token攻击防护。tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True)
# 打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存
# model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, bf16=True).eval()
# 打开fp16精度,V100、P100、T4等显卡建议启用以节省显存
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True, fp16=True).eval()
# 使用CPU进行推理,需要约32GB内存
# model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="cpu", trust_remote_code=True).eval()
# 默认使用自动模式,根据设备自动选择精度
# model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto", trust_remote_code=True).eval()

# 可指定不同的生成长度、top_p等相关超参
model.generation_config = GenerationConfig.from_pretrained(model_dir, trust_remote_code=True)

# 第一轮对话 1st dialogue turn
query = tokenizer.from_list_format([
    {'image': 'https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg'},
    {'text': '这是什么'},
])
response, history = model.chat(tokenizer, query=query, history=None)
print(response)
# 图中是一名年轻女子在沙滩上和她的狗玩耍,狗的品种是拉布拉多。她们坐在沙滩上,狗的前腿抬起来,与人互动。# 第二轮对话 2st dialogue turn
response, history = model.chat(tokenizer, '输出击掌的检测框', history=history)
print(response)
# <ref>"击掌"</ref><box>(211,412),(577,891)</box>
image = tokenizer.draw_bbox_on_latest_picture(response, history)
image.save('output_chat.jpg')


这段代码已经提供了非常详细的注释,懂的应该都能看懂,不懂的就不要强求了。直接复制粘贴,能用起来就好了。

 

另外官方还提供了量化,微调,以及更详细的能力测评数据。有兴趣的可以去看看。

具体的安装配置方法可以参考我之前关于《玩一玩阿里千问开源版》的文章。

虽然官方的配置运行资料看起来很简单,但是实际配置可能还是要费点力气,哪怕是专业人士,也需要踩坑时间,下载时间,调试时间,总的来说会浪费不少时间。

所以我会把包打好,直接发出来。

你们只管点赞,转发,在看即可。

其实这个项目我很早就跑通了,只是一直有事情。昨晚刚准备发文章,又临时被其它事情打断了。

今天说什么都要先把文章发出来,一键运行包稍后跟上!

给公众号“托尼不是塔克”发关键词“qwvl” 即可获取!

收工,收工!

 

小尾巴==========================
公众号:托尼不是塔克
交流群
知识星球
==============================