0. 引言
梅子金黄杏子肥,麦花雪白菜花稀。
日长篱落无人过,惟有蜻蜓蛱蝶飞。
今天这篇小作文主要介绍阿里在2024年9月份发布的视觉语言模型:Qwen2-VL。
1. 简介
这篇论文介绍了Qwen2-VL系列模型,是对之前Qwen-VL模型的重大升级。主要创新点在于引入了朴素动态分辨率机制和多模态旋转位置嵌入(M-RoPE)。
Q1: 这篇文章想要解决什么问题?
A1: 主要解决两个核心问题:
-
现有大规模视觉语言模型(LVLMs)受限于固定的图像输入尺寸,难以有效处理不同分辨率的图像
-
现有模型在处理视频等动态内容时,位置编码方式过于简单,难以有效建模三维空间和时间动态信息
Q2: 这篇文章如何解决这些问题?
A2: 提出了两个关键创新:
-
朴素动态分辨率机制:可以将不同分辨率的图像动态处理为不同数量的视觉tokens
-
多模态旋转位置嵌入(M-RoPE):将位置编码分解为时间、高度和宽度三个组件,更好地建模多模态输入的位置信息
Q3: 文章所提出方法的效果如何?
A3: 在多个基准测试中取得了领先成绩:
-
在DocVQA、InfoVQA等文档理解任务上达到SOTA
-
在多语言OCR方面超越了包括GPT-4在内的所有现有LVLMs
-
72B版本在多个视觉问答基准上与GPT-4和Claude3.5-Sonnet等领先模型相当或更优
Q4: 文章所提方法还有哪些不足?
A4: 主要存在以下局限:
-
在MMMU基准测试中仍略逊于GPT-4,说明在处理复杂问题时还有提升空间
-
对于长视频的处理受限于序列长度限制,未来需要进一步扩展模型以支持更长序列
-
在视觉语言导航(VLN)任务中显著落后于专用模型,说明在3D环境建模方面仍有挑战
模型(2B、7B、72B)下载:https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d
2. 方法
Qwen2-VL的核心创新包括:
- 朴素动态分辨率机制
-
移除了原有的绝对位置嵌入
-
引入2D-RoPE捕获图像二维位置信息
-
动态将不同分辨率图像转换为可变数量的视觉tokens
- 多模态旋转位置嵌入(M-RoPE)
-
将位置编码分解为时间、高度和宽度三个组件
-
可以同时处理文本、图像和视频的位置信息
-
降低了图像和视频的位置ID值,支持更长序列外推
- 统一的图像和视频处理范式
-
混合训练方案同时整合图像和视频数据
-
使用深度为2的3D卷积处理视频输入
-
动态调整视频帧分辨率以平衡性能和效率
3. 实验结果
- 通用视觉问答
-
在RealWorldQA上得分77.8,超过GPT-4o(75.4)
-
在MMVet上得分74.0,大幅领先GPT-4V(67.5)
-
在MMT-Bench上得分71.7,显著超过此前最佳成绩(63.4)
- 文档和图表理解
-
在DocVQA、InfoVQA等多个指标上达到SOTA
-
在OCR和公式识别方面表现优异
-
特别在多语言OCR方面超越所有现有LVLMs
- 数学推理能力
-
MathVista上达到70.5分,超越其他LVLMs
-
MathVision上创造25.9分的开源基准新纪录
- 视频理解
-
在MVBench、PerceptionTest等基准上取得最佳性能
-
能处理长达20分钟以上的视频
-
但在处理超长视频时受限于序列长度限制
- 视觉代理能力
-
函数调用方面优于GPT-4o
-
UI操作任务中超越了GPT-4和之前的SOTA
-
在机器人控制任务ALFRED上略优于专用模型ThinkBot
4. 实战
代码
import os from PIL import Image import requests import torch from torchvision import io from typing import Dict from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor # Load the model in half-precision on the available device(s) model_dir = "/data/download_models/" model_id = "Qwen/Qwen2-VL-2B-Instruct" model_path = os.path.join(model_dir, model_id) model = Qwen2VLForConditionalGeneration.from_pretrained( "", torch_dtype="auto", device_map="auto" ) processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-2B-Instruct") # Image url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg" image = Image.open(requests.get(url, stream=True).raw) conversation = [ { "role": "user", "content": [ { "type": "image", }, {"type": "text", "text": "Describe this image."}, ], } ] # Preprocess the inputs text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True) # Excepted output: '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\n<|vision_start|><|image_pad|><|vision_end|>Describe this image.<|im_end|>\n<|im_start|>assistant\n' inputs = processor( text=[text_prompt], images=[image], padding=True, return_tensors="pt" ) inputs = inputs.to("cuda") # Inference: Generation of the output output_ids = model.generate(**inputs, max_new_tokens=128) generated_ids = [ output_ids[len(input_ids) :] for input_ids, output_ids in zip(inputs.input_ids, output_ids) ] output_text = processor.batch_decode( generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True ) print(output_text)
任务1:检测
以美团外卖截图搜索框识别为例。Qwen2-VL-2B-Instruct:无法探测出(结果为空)。Qwen2-VL-7B-Instruct,识别结果如下(可以正确检测出):
任务2:图片理解
待生成文案的图片:
用Qwen2-VL-Max生成朋友圈文案结果如下:
夜空繁星点点,麦浪轻拂心田。 “月上柳梢头,人约黄昏后。” 在这宁静的夜晚,愿你我都能找到心中的那份宁静与美好。
5. 总结
Qwen2-VL的主要贡献:
-
提出了朴素动态分辨率机制,有效解决了固定分辨率的限制
-
设计了多模态旋转位置嵌入(M-RoPE),更好地建模多模态位置信息
-
实现了统一的图像和视频处理范式,增强了模型的通用性
-
在多个基准测试中达到或超越SOTA水平
未来可改进的方向:
-
扩展模型以支持更长序列,以便更好地处理长视频内容
-
改进3D环境建模能力,提升视觉语言导航等任务的表现
-
增强处理复杂推理问题的能力,缩小与GPT-4在MMMU等基准上的差距
-
进一步优化动态分辨率机制,在保持性能的同时提高计算效率
-
探索更有效的视频帧采样和处理策略,平衡性能和资源消耗
总的来说,Qwen2-VL通过创新的技术方案显著提升了多模态处理能力,为大规模视觉语言模型的发展提供了新的思路。虽然在某些具体任务上还有提升空间,但其整体表现已经达到了业界领先水平。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。