- 引言
- 简介
- 方法
- 实验结果
- 实战
- 代码
- 任务1:检测
- 任务2:图片理解
- 总结
- 引言 =======
梅子金黄杏子肥,麦花雪白菜花稀。
日长篱落无人过,惟有蜻蜓蛱蝶飞。
小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖热干面的小女孩。紧接前文:多模态大模型系列:Qwen-VL解读及其实战,今天这篇小作文主要介绍阿里在2024年9月份发布的视觉语言模型:Qwen2-VL。
- 简介 =======
这篇论文介绍了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环境建模方面仍有挑战
更多大模型相关欢迎留意本 微信公众号《小窗幽记机器学习》 。
论文地址:https://arxiv.org/abs/2409.12191
Github地址:https://github.com/QwenLM/Qwen2-VL
模型(2B、7B、72B)下载:https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d
- 方法 =======
Qwen2-VL的核心创新包括:
- 朴素动态分辨率机制
- 移除了原有的绝对位置嵌入
- 引入2D-RoPE捕获图像二维位置信息
- 动态将不同分辨率图像转换为可变数量的视觉tokens
- 多模态旋转位置嵌入(M-RoPE)
- 将位置编码分解为时间、高度和宽度三个组件
- 可以同时处理文本、图像和视频的位置信息
- 降低了图像和视频的位置ID值,支持更长序列外推
- 统一的图像和视频处理范式
- 混合训练方案同时整合图像和视频数据
- 使用深度为2的3D卷积处理视频输入
- 动态调整视频帧分辨率以平衡性能和效率
-
实验结果 =========
-
通用视觉问答
- 在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
- 实战 =======
代码
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生成朋友圈文案结果如下:
夜空繁星点点,麦浪轻拂心田。
“月上柳梢头,人约黄昏后。”
在这宁静的夜晚,愿你我都能找到心中的那份宁静与美好。
- 总结 =======
Qwen2-VL的主要贡献:
- 提出了朴素动态分辨率机制,有效解决了固定分辨率的限制
- 设计了多模态旋转位置嵌入(M-RoPE),更好地建模多模态位置信息
- 实现了统一的图像和视频处理范式,增强了模型的通用性
- 在多个基准测试中达到或超越SOTA水平
未来可改进的方向:
- 扩展模型以支持更长序列,以便更好地处理长视频内容
- 改进3D环境建模能力,提升视觉语言导航等任务的表现
- 增强处理复杂推理问题的能力,缩小与GPT-4在MMMU等基准上的差距
- 进一步优化动态分辨率机制,在保持性能的同时提高计算效率
- 探索更有效的视频帧采样和处理策略,平衡性能和资源消耗
总的来说,Qwen2-VL通过创新的技术方案显著提升了多模态处理能力,为大规模视觉语言模型的发展提供了新的思路。虽然在某些具体任务上还有提升空间,但其整体表现已经达到了业界领先水平。