当前位置:   article > 正文

Qwen-VL环境搭建&推理测试

qwen-vl

引子

这几天阿里的Qwen2.5大模型在大模型圈引起了轰动,号称地表最强中文大模型。前面几篇也写了QWen的微调等,视觉语言模型也写了一篇CogVLM,感兴趣的小伙伴可以移步Qwen1.5微调-CSDN博客。前面也写过一篇智谱AI的视觉大模型(CogVLM/CogAgent环境搭建&推理测试-CSDN博客)。Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model, LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。

一、模型介绍

1、强大的性能

在四大类多模态任务的标准英文测评中(Zero-shot Captioning/VQA/DocVQA/Grounding)上,均取得同等通用模型大小下最好效果;

2、多语言对话模型

天然支持英文、中文等多语言对话,端到端支持图片里中英双语的长文本识别;这里就得吐槽下CogVLM了,竟然没有支持中文

3、多图交错对话

支持多图输入和比较,指定图片问答,多图文学创作等;

4、首个支持中文开放域定位的通用模型

通过中文开放域语言表达进行检测框标注;

5、细粒度识别和理解

相比于目前其它开源LVLM使用的224分辨率,Qwen-VL是首个开源的448分辨率的LVLM模型。更高分辨率可以提升细粒度的文字识别、文档问答和检测框标注。

二、安装环境

请移步QWen1.5微调的地址,Qwen1.5微调-CSDN博客

docker run -it --rm --gpus=all -v /mnt/code/LLM_Service/:/workspace qwen:v1.0 bash

三、推理测试

1、QWen-VL-chat

cd /workspace/qwen-vl

python qwen-vl-chat.py

  1. from transformers import AutoModelForCausalLM, AutoTokenizer
  2. from transformers.generation import GenerationConfig
  3. import torch
  4. torch.manual_seed(1234)
  5. # 请注意:分词器默认行为已更改为默认关闭特殊token攻击防护。
  6. tokenizer = AutoTokenizer.from_pretrained("/workspace/model/Qwen-VL-Chat", trust_remote_code=True)
  7. # 打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存
  8. # model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-VL-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
  9. # 打开fp16精度,V100、P100、T4等显卡建议启用以节省显存
  10. # model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-VL-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
  11. # 使用CPU进行推理,需要约32GB内存
  12. # model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-VL-Chat", device_map="cpu", trust_remote_code=True).eval()
  13. # 默认gpu进行推理,需要约24GB显存
  14. model = AutoModelForCausalLM.from_pretrained("/workspace/model/Qwen-VL-Chat", device_map="cuda", trust_remote_code=True, fp16=True).eval()
  15. # 可指定不同的生成长度、top_p等相关超参(transformers 4.32.0及以上无需执行此操作)
  16. # model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-VL-Chat", trust_remote_code=True)
  17. # 第一轮对话
  18. query = tokenizer.from_list_format([
  19. {'image': 'https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg'}, # Either a local path or an url
  20. {'text': '这是什么?'},
  21. ])
  22. response, history = model.chat(tokenizer, query=query, history=None)
  23. print(response)
  24. # 图中是一名女子在沙滩上和狗玩耍,旁边是一只拉布拉多犬,它们处于沙滩上。
  25. # 第二轮对话
  26. response, history = model.chat(tokenizer, '框出图中击掌的位置', history=history)
  27. print(response)
  28. # <ref>击掌</ref><box>(536,509),(588,602)</box>
  29. image = tokenizer.draw_bbox_on_latest_picture(response, history)
  30. if image:
  31. image.save('1.jpg')
  32. else:
  33. print("no box")

2、QWen-VL

python qwen-vl.py

  1. from transformers import AutoModelForCausalLM, AutoTokenizer
  2. from transformers.generation import GenerationConfig
  3. import torch
  4. torch.manual_seed(1234)
  5. tokenizer = AutoTokenizer.from_pretrained("/workspace/model/Qwen-VL-Chat", trust_remote_code=True)
  6. # 打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存
  7. # model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-VL", device_map="auto", trust_remote_code=True, bf16=True).eval()
  8. # 打开fp16精度,V100、P100、T4等显卡建议启用以节省显存
  9. # model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-VL", device_map="auto", trust_remote_code=True, fp16=True).eval()
  10. # 使用CPU进行推理,需要约32GB内存
  11. # model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-VL", device_map="cpu", trust_remote_code=True).eval()
  12. # 默认gpu进行推理,需要约24GB显存
  13. model = AutoModelForCausalLM.from_pretrained("/workspace/model/Qwen-VL-Chat", device_map="cuda", trust_remote_code=True, fp16=True).eval()
  14. # 可指定不同的生成长度、top_p等相关超参(transformers 4.32.0及以上无需执行此操作)
  15. # model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-VL", trust_remote_code=True)
  16. query = tokenizer.from_list_format([
  17. {'image': 'https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg'}, # Either a local path or an url
  18. {'text': 'Generate the caption in English with grounding:'},
  19. ])
  20. inputs = tokenizer(query, return_tensors='pt')
  21. inputs = inputs.to(model.device)
  22. pred = model.generate(**inputs)
  23. response = tokenizer.decode(pred.cpu()[0], skip_special_tokens=False)
  24. print(response)
  25. # <img>https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg</img>Generate the caption in English with grounding:<ref> Woman</ref><box>(451,379),(731,806)</box> and<ref> her dog</ref><box>(219,424),(576,896)</box> playing on the beach<|endoftext|>
  26. image = tokenizer.draw_bbox_on_latest_picture(response)
  27. if image:
  28. image.save('2.jpg')
  29. else:
  30. print("no box")

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号