大模型多模态人工智能微调模型推理服务Qwen【免费下载链接】Qwen-VLThe official repo of Qwen-VL (通义千问-VL) chat pretrained large vision language model proposed by Alibaba Cloud.项目地址https://gitcode.com/gh_mirrors/qw/Qwen-VL点击查看免费下载Qwen-VL-Chat 是阿里云通义千问系列中的通用多模态大语言模型LVLM能够直接接收图像与文本的混合输入完成视觉问答、密集文字理解、图表数学推理、多图对比和 Grounding按语言描述框出图中指定区域等任务。本篇教程以 TUTORIAL.md 为主线结合本仓库的 README.md、web_demo_mm.py 与评估脚本源码给出从模型初始化到各类能力逐项验证的可复现 Python 代码读完后你就能独立搭建 Qwen-VL-Chat 推理环境并用不同图片与 Prompt 挖掘模型能力。环境准备与依赖安装在运行教程代码之前需要先满足运行环境要求详见 README.md 的 Requirements 一节Python 3.8 及以上PyTorch 1.12 及以上推荐 2.0 及以上CUDA 11.4 及以上GPU 用户。随后安装仓库根目录下的 requirements.txt 所列依赖pip install -r requirements.txt该文件锁定了transformers4.32.0并包含accelerate、einops、tiktoken、transformers_stream_generator、scipy、torchvision、pillow等与视觉编码、流式生成相关的关键库。transformers_stream_generator是 web_demo_mm.py 中model.chat_stream流式输出所依赖的组件建议保持安装。初始化 Qwen-VL-Chat 模型使用 Qwen-VL-Chat 的第一步是初始化它的分词器Tokenizer与模型本身。教程给出的标准初始化代码如下import torch from transformers import AutoModelForCausalLM, AutoTokenizer from transformers.generation import GenerationConfig # 如果您希望结果可复现可以设置随机数种子。 # torch.manual_seed(1234) tokenizer AutoTokenizer.from_pretrained(Qwen/Qwen-VL-Chat, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapcuda, trust_remote_codeTrue).eval() model.generation_config GenerationConfig.from_pretrained(Qwen/Qwen-VL-Chat, trust_remote_codeTrue)执行完成后tokenizer对应 Qwen-VL-Chat 使用的分词器model对应模型本体。其中trust_remote_codeTrue是必需的Qwen-VL-Chat 的自定义代码含from_list_format、chat、draw_bbox_on_latest_picture等接口随权重托管在模型仓库中需通过该参数允许从远端加载自定义代码device_mapcuda将模型加载到 GPUeval()切换为推理模式GenerationConfig.from_pretrained(...)从权重目录加载官方推荐的生成超参数如温度、top_p 等。按硬件情况调整加载方式README.md 的 Quickstart 一节补充了更多设备选项可按实际硬件替换# 使用 bf16 精度推荐与预训练对齐 # model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapauto, trust_remote_codeTrue, bf16True).eval() # 使用 fp16 精度 # model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapauto, trust_remote_codeTrue, fp16True).eval() # 仅 CPU 推理 # model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapcpu, trust_remote_codeTrue).eval() # 使用指定 CUDA 设备 model AutoModelForCausalLM.from_pretrained(Qwen/Qwen-VL-Chat, device_mapcuda, trust_remote_codeTrue).eval()若因网络问题无法从 Hugging Face 拉取权重可以先通过 ModelScope 的snapshot_download下载到本地目录再加载from modelscope import snapshot_download from transformers import AutoModelForCausalLM, AutoTokenizer model_dir snapshot_download(qwen/Qwen-VL-Chat) # 从本地目录加载trust_remote_code 仍需为 True因为自定义代码同样来自本地目录 tokenizer AutoTokenizer.from_pretrained(model_dir, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_dir, device_mapcuda, trust_remote_codeTrue ).eval()另外官方还发布了 Int4 量化版本Qwen/Qwen-VL-Chat-Int4可显著降低显存占用并提升推理速度加载方式与普通版本一致仅需替换模型名。核心接口速览from_list_format 与 model.chat教程中的全部示例都围绕两个关键接口展开tokenizer.from_list_format([...])将图文混排输入字典列表每个元素是{image: 路径}或{text: 文本}预处理并分词为模型输入。图片路径既支持本地路径也支持 URLmodel.chat(tokenizer, queryquery, historyhistory)执行一轮对话返回(response, history)二元组。history是累积的多轮对话历史——首轮传入None后续轮次传入上一轮返回的history模型即可记住此前图片与问答内容。这种historyhistory的传参模式在仓库评估脚本中同样被广泛使用例如 eval_mm/mme/eval.py 对每条测试样本都以model.chat(tokenizer, queryquery, historyNone)发起单轮问答印证了该 API 的通用性。多轮视觉问答第一个问题我们以 1940 年电影《Rebecca》的电影海报assets/mm_tutorial/Rebecca_(1939_poster).jpeg.jpeg)为例询问模型海报上电影的名称。首先用tokenizer.from_list_format构造图文输入query tokenizer.from_list_format([ {image: assets/mm_tutorial/Rebecca_(1939_poster).jpeg}, {text: What is the name of the movie in the poster?}, ])接着调用model.chat。注意首轮对话历史为空传historyNoneresponse, history model.chat(tokenizer, queryquery, historyNone) print(response)预期得到类似如下输出The name of the movie in the poster is Rebecca.模型正确根据海报识别出了电影名称Rebecca。多轮追问第一轮返回的history已经包含了图片与问答记录。继续追问导演是谁时只需把上一轮的history传回query tokenizer.from_list_format([ {text: Who directed this movie?}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)预期输出The movie Rebecca was directed by Alfred Hitchcock.这正是 Qwen-VL-Chat 与纯预训练基座 Qwen-VL 的核心差异之一它经过对齐训练支持多图输入、多轮问答与更灵活的交互README.md 的模型对比部分。注意多轮追问时无需重复传入图片模型会通过history保留视觉上下文。文字理解密集文本识别Qwen-VL-Chat 对包含密集文字的图片有不错的理解能力。下面使用医院指示牌图片assets/mm_tutorial/Hospital.jpg询问各科室所在楼层query tokenizer.from_list_format([ {image: assets/mm_tutorial/Hospital.jpg}, {text: Based on the photo, which floor is the Department of Otorhinolaryngology on?}, ]) response, history model.chat(tokenizer, queryquery, historyNone) print(response)预期输出The Department of Otorhinolaryngology is located on the 4th floor.同样可以继续追问其他科室的位置此时记得用historyhistory传递前文query tokenizer.from_list_format([ {text: Based on the photo, which floor is the Department of Surgery on?}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)预期输出The Department of Surgery is located on the 3rd floor.这一能力来自模型端到端的中英双语文字识别README 指出相比当时其他开源 LVLM 常用的 224×224 分辨率Qwen-VL 将输入分辨率提升到 448×448从而显著改善了细粒度文字识别、文档问答与包围框标注效果——这也解释了为何模型能直接读懂指示牌上密集的小字号文字。图表数学推理结合图表理解与数学推理Qwen-VL-Chat 可以完成更复杂的任务。下图是餐厅菜单assets/mm_tutorial/Menu.jpeg我们询问购买两个 Salmon Burger 和三个 Meat Lovers Pizza 的总价query tokenizer.from_list_format([ {image: assets/mm_tutorial/Menu.jpeg}, {text: How much would I pay if I want to order two Salmon Burger and three Meat Lover\s Pizza? Think carefully step by step.}, ]) response, history model.chat(tokenizer, queryquery, historyNone) print(response)预期输出To order two Salmon Burgers and three Meat Lovers Pizzas, you would need to pay the following:For two Salmon Burgers: x2 Salmon Burgers at $10 each $20For three Meat Lovers Pizzas: x3 Meat Lovers Pizzas at $12 each $36Therefore, the total cost would be $56.这里的关键提示词是Think carefully step by step.——它引导模型把复杂任务拆解为分步推理显著提升准确率。如果你要完成的任务较复杂建议优先尝试这类逐步思考chain-of-thought提示词。多图理解与中文输入前面的例子都是单张图片 英文提问。实际上 Qwen-VL-Chat 是多语言模型支持中文输入并且支持一次输入多张图片。下面用中文让它对比重庆和北京两座城市的照片assets/mm_tutorial/Chongqing.jpeg 与 assets/mm_tutorial/Beijing.jpegquery tokenizer.from_list_format([ {image: assets/mm_tutorial/Chongqing.jpeg}, {image: assets/mm_tutorial/Beijing.jpeg}, {text: 上面两张图片分别是哪两个城市请对它们进行对比。}, ]) torch.manual_seed(5678) response, history model.chat(tokenizer, queryquery, historyNone) print(response)预期输出第一张图片是重庆的城市天际线它反映了现代都市的繁华与喧嚣。第二张图片是北京的天际线它象征着中国首都的现代化和国际化。两座城市都是中国的重要城市拥有独特的文化和发展历史。请注意城市对比属于主观性较强的问题模型输出存在较高的随机性。若不使用torch.manual_seed(5678)设置随机种子每次输出都可能不同即便设置了种子由于软硬件环境差异你的结果也可能与本文档展示的不同。多图能力在 README 中被明确列为 Qwen-VL 系列的特性Multi-image interleaved conversations它允许输入并对比多张图片、针对图片提问甚至进行多图故事创作。Grounding 能力按描述框出图中区域Grounding 是 Qwen-VL 系列标志性的能力模型能根据你的语言描述在图像中用矩形框框出指定区域。下面以上海天际线照片assets/mm_tutorial/Shanghai.jpg为例完整演示。第一步常规描述先用常规提示词让模型描述图片内容torch.manual_seed(1234) query tokenizer.from_list_format([ {image: assets/mm_tutorial/Shanghai.jpg}, {text: 图里有啥}, ]) response, history model.chat(tokenizer, queryquery, historyNone) print(response)预期输出图中是中国上海的天际线包括了上海塔、金茂大厦、上海环球金融中心、海洋大厦等著名建筑。第二步框出指定地标接着用请给我框出图中上海环球金融中心和东方明珠继续对话。注意此时对话历史非空需要用historyhistory传递query tokenizer.from_list_format([ {text: 请给我框出图中上海环球金融中心和东方明珠}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)预期输出一种特殊的标记语言ref上海环球金融中心/refbox(667,437),(760,874)/box和ref东方明珠/refbox(506,75),(582,946)/box模型的输出以ref引用描述文本与box包围框坐标两种标签给出了两个地标在图片中的精确位置。关于坐标格式README 的 Finetuning 数据格式一节有明确约定box(x1,y1),(x2,y2)/box中(x1, y1)与(x2, y2)是归一化到[0, 1000)区间的坐标值reftext_caption/ref是对应区域的文字描述。README 还指出Qwen-VL 虽未使用任何中文 Grounding 数据训练却能通过中文 Caption 数据与英文 Grounding 数据实现中文 Grounding 任务的零样本泛化。第三步可视化包围框Qwen-VL-Chat没有手但不会拒绝你的请求——它用标记语言给出位置你可以用分词器自带的工具把它画出来image tokenizer.draw_bbox_on_latest_picture(response, history) image.save(Shanghai_Output.jpg)保存下来的Shanghai_Output.jpg效果类似于下图draw_bbox_on_latest_picture会从最近一轮含box标签的回复中解析坐标并绘制矩形框。仓库的 web_demo_mm.py 中也采用了相同模式每次对话后调用tokenizer.draw_bbox_on_latest_picture(response, history)当返回的image非空时把标注图保存为临时文件展示给用户——说明这是官方认可的 Grounding 可视化标准做法。第四步继续多轮对话框出地标之后还可以继续与模型对话例如让它制定旅游计划query tokenizer.from_list_format([ {text: 帮我写个这座城市的旅游计划}, ]) response, history model.chat(tokenizer, queryquery, historyhistory) print(response)预期会得到一份包含多天的上海旅游计划此处省略完整回复实际运行会输出包含抵达安排、外滩、南京路、迪士尼等内容的详细计划。与前文相同旅游计划同样属于主观性问题输出具有随机性若不设置torch.manual_seed(1234)每次结果不同即便设置种子不同软硬件环境下结果也可能与文档展示有差异。Grounded Captioning带包围框的图像描述除按指令框出指定对象外Qwen-VL 还能在生成图像描述Caption的同时输出目标对象的包围框信息即 Grounded Captioning。下面用苹果图片assets/apple.jpeg演示img_url assets/apple.jpeg query tokenizer.from_list_format([ {image: img_url}, {text: Generate the caption in English with grounding:}, ]) response, history model.chat(tokenizer, queryquery, historyNone) print(response) image tokenizer.draw_bbox_on_latest_picture(response, history) if image is not None: image.save(apple.jpg)保存下来的apple.jpg效果类似于上图模型在描述两个苹果和一个碗的同时为每个对象输出了对应的ref与box标注并绘制在图上。如何去除响应中的框类标注有时你只想要纯净的文本描述不希望回复里出现ref、box等标注。教程给出了稳定的后处理方案用正则表达式清洗响应# response ref Two apples/refbox(302,257),(582,671)/boxbox(603,252),(878,642)/box andref a bowl/refbox(2,269),(304,674)/box import re clean_response re.sub(rref(.*?)/ref(?:box.*?/box)*(?:quad.*?/quad)*, r\1, response).strip() print(clean_response) # clean_response Two apples and a bowl该正则把ref.../ref及其后跟随的任意个box.../box以及可选的quad.../quad整体替换为被引用文本本身从而保留对象名称、剥离坐标标注。仓库 web_demo_mm.py 中的_remove_image_special函数实现了类似逻辑删除ref标签并截掉box片段是流式聊天界面展示纯文本回复的官方做法。进阶探索流式对话与更多调用方式流式输出在交互场景中web_demo_mm.py 使用model.chat_stream(tokenizer, message, historyhistory)逐段 yield 生成结果实现打字机式效果如果只需一次拿全结果则使用教程中的model.chat即可直接生成对纯预训练基座 Qwen-VLREADME 展示了不使用chat接口、直接model.generate(**inputs)再tokenizer.decode的调用方式输出会带有img、ref、box、|endoftext|等原始特殊 token批量评估仓库eval_mm/目录下的多个评估脚本如 eval_mm/mme/eval.py、eval_mm/evaluate_vqa.py均以model.chat为推理入口并针对 VQAv2、DocVQA、ChartQA 等数据集配置了max_new_tokens等生成参数可作为批量调用与评测的参考。小结通过本教程你已完整走通了 Qwen-VL-Chat 的五类核心能力验证多轮视觉问答、密集文字理解、图表数学推理、多图中文输入与 Grounding 定位并掌握了tokenizer.from_list_format、model.chat、history传递与draw_bbox_on_latest_picture等核心接口的使用方法。教程展示的示例远非模型能力的极限——你可以自由更换输入图片与提示词继续挖掘 Qwen-VL-Chat 的潜力。进一步的模型细节架构、训练与性能可阅读 README.md评估复现方法见 eval_mm/EVALUATION.md微调方法见 finetune.py 与 finetune 目录下的脚本。赞分享大模型多模态人工智能微调模型推理服务Qwen【免费下载链接】Qwen-VLThe official repo of Qwen-VL (通义千问-VL) chat pretrained large vision language model proposed by Alibaba Cloud.项目地址https://gitcode.com/gh_mirrors/qw/Qwen-VL点击查看免费下载相关推荐Swift 正则表达式 Unicode 支持全解析SE-0363 的字符类、匹配语义与选项体系Swift 正则表达式 Unicode 支持全解析SE 0363 的字符类、匹配语义与选项体系 Swift 5.7 通过 Regex 为字符串处理引入了全面、大模型多模态人工智能微调模型推理服务QwenQwen-VL-Chat 多模态实战教程从模型初始化到视觉问答、数学推理与 Grounding 定位Qwen VL Chat 多模态实战教程从模型初始化到视觉问答、数学推理与 Grounding 定位 本篇技术指南基于开源仓库 Qwen VL https:/大模型多模态人工智能微调模型推理服务QwenQwen-VL-Chat多模态大模型实战指南从视觉问答到区域标注Qwen VL Chat多模态大模型实战指南从视觉问答到区域标注 引言 Qwen VL Chat作为一款强大的多模态大规模语言模型在视觉语言理解领域展现出卓大模型多模态人工智能微调模型推理服务Qwen上一篇洛雪音乐音源汇总开源音源完整收录下一篇一次学会 ZeroBrane Studio:10 分钟从第一行 Lua 到第一个断点创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?