【大模型系列】Qwen2-VL(2024.10)
Qwen团队开源了Qwen2-VL系列模型,支持多语言图像文本理解、代码/数学推理、视频分析、实时聊天、代理等。支持动态分辨率输入,并在训练过程中引入了2D-RoPE,从而使模型更好的捕获不同空间尺度的信息;开发了M-RoPE,使用单独的组件来表示时间和空间信息,使模型可以更自然的理解动态内容如视频或者流数据;ModelLMM675M1.5B最高效的模型,专为在设备上运行而设计。它可以为资源有限的
- Paper: https://arxiv.org/pdf/2409.12191
- Github: https://github.com/QwenLM/Qwen2-VL
- Huggingface: https://huggingface.co/collections/Qwen/qwen2-vl-66cee7455501d7126940800d
- ModelScope: https://modelscope.cn/organization/qwen?tab=model
- Demo: https://huggingface.co/spaces/Qwen/Qwen2-VL
- Blog: https://qwenlm.github.io/blog/qwen2-vl/
- Author: Peng Wang et al. 通义千问,阿里巴巴
文章目录
1 简介
Qwen团队开源了Qwen2-VL系列模型,支持多语言图像文本理解、代码/数学推理、视频分析、实时聊天、代理等。其核心创新点为:
- 支持动态分辨率输入,并在训练过程中引入了2D-RoPE,从而使模型更好的捕获不同空间尺度的信息;
- 开发了M-RoPE,使用单独的组件来表示时间和空间信息,使模型可以更自然的理解动态内容如视频或者流数据;
开源了3种不同size的模型:
Model | Vision encoder | LMM | Description |
---|---|---|---|
Qwen2-VL-2B | 675M | 1.5B | 最高效的模型,专为在设备上运行而设计。它可以为资源有限的大多数场景提供足够的性能。 |
Qwen2-VL-7B | 675M | 7.6B | 在成本方面性能优化的模型,在文本识别和视频理解能力方面进行了显著升级。它可以在广泛的视觉任务中提供显著的性能。 |
Qwen2-VL-72B | 675M | 72B | 最强大的模型,在视觉推理、指令遵循、决策和代理能力方面进一步改进。它可以在大多数复杂任务上提供最佳性能。 |
Vision encoder使用qwen-vl中的视觉编码器(Openclip’s ViT-bigG),LLM使用Qwen2系列。
2 模型结构
2.1 动态分辨率
对于图片的处理方式为:
- 不切片
- 宽高除以28作为输入(最小分辨率56*56,最大分辨率14*14*4*1280)
- 删除原始的绝对位置编码,引入2D-RoPE
- 使用独立的视觉标记<|vision_start|>, <|vision_end|>
在推理阶段,不同分辨率的图片被打包到一个序列种,并控制打包长度以限制GPU的使用。此外通过一个简单的MLP层将相邻2x2 tokens合并成一个token。
假设输入图片分辨率为224x224,vit的patch size为14:
则经过ViT后图片编码数量为:(224 / 14) x (224 / 14) = 16 x 16
每2x2个token压缩成一个:16 x 16 / 2 / 2 = 64
最后加上视觉标记<|vision_start|>, <|vision_end|>:共计66个token
2.2 M-RoPE(Multimodel Rotary Position Embedding)
code: transformers/models/qwen2_vl/modeling_qwen2_vl.py->Qwen2VLForConditionalGeneration->get_rope_index
- 对于纯text,m-rope编码没有区别
input_ids: [T T T T T], here T is for text.
temporal position_ids: [0, 1, 2, 3, 4]
height position_ids: [0, 1, 2, 3, 4]
width position_ids: [0, 1, 2, 3, 4]
- 如果同时存在text和vision,则m-rope编码如下:
# 假设输入的视频有3帧,每帧处理成2x2的宽高
input_ids: [V V V V V V V V V V V V T T T T T], here V is for vision.
vision temporal position_ids: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
vision height position_ids: [0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]
vision width position_ids: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
text temporal position_ids: [3, 4, 5, 6, 7]
text height position_ids: [3, 4, 5, 6, 7]
text width position_ids: [3, 4, 5, 6, 7]
text的开始idx是在最大vision position的基础上+1得到,例子中视频输入3张图,那么文本位置编码的起始位置为3。
2.3 统一图像和视频理解
混合图像和视频数据,以保证模型的图像和视频理解能力。
对于视频的处理方式如下:
- 视频每秒抽取2帧
- 使用深度为2的3D卷积来处理视频输入,从而使其能够在不增加序列长度的情况下处理更多的视频帧(为保持一致性,每张图片被看作为2个相同的视频帧,这样可以复用这个深度为2的3D卷积)
- 为平衡计算需求和整体训练效率,动态调整每个视频帧的分辨率,并将每个视频的总tokens数量限制为16384
动态分辨率:
- 图像:最小4*28*28(56x56),最大16384*28*28(3584x3584)
- 视频:最小128*28*28(316x316),最大768*28*28(775x775)
qwen_vl_utils/vision_process.py->smart_resize()
def smart_resize(
height: int, width: int, factor: int = IMAGE_FACTOR, min_pixels: int = MIN_PIXELS, max_pixels: int = MAX_PIXELS
) -> tuple[int, int]:
"""
Rescales the image so that the following conditions are met:
1. Both dimensions (height and width) are divisible by 'factor'.
2. The total number of pixels is within the range ['min_pixels', 'max_pixels'].
3. The aspect ratio of the image is maintained as closely as possible.
"""
if max(height, width) / min(height, width) > MAX_RATIO:
raise ValueError(
f"absolute aspect ratio must be smaller than {MAX_RATIO}, got {max(height, width) / min(height, width)}"
)
h_bar = max(factor, round_by_factor(height, factor))
w_bar = max(factor, round_by_factor(width, factor))
if h_bar * w_bar > max_pixels:
beta = math.sqrt((height * width) / max_pixels)
h_bar = floor_by_factor(height / beta, factor)
w_bar = floor_by_factor(width / beta, factor)
elif h_bar * w_bar < min_pixels:
beta = math.sqrt(min_pixels / (height * width))
h_bar = ceil_by_factor(height * beta, factor)
w_bar = ceil_by_factor(width * beta, factor)
return h_bar, w_bar
根据原图分辨率,计算最大分辨率和最小分辨率,再调用smart_resize得到调整后的图像宽高,宽高均是28的倍数。
3 训练
Stage1: 训练ViT,使用大量image-text pairs,600B tokens(image+text)
Stage2: 全量参数训练,使用更广泛的数据,800B tokens(image+text)
Stage3: 冻结ViT,使用instruction data微调LLM,数据格式为ChatML的格式
3.1 数据格式
3.1.1 Normal
- 图像:视觉tokens被插入在<|vision_start|>和<|vision_end|>中间
- 交互语句:放在<|im_start|>和<|im_end|>中间
3.1.2 Grouding
bounding box的坐标被归一化到[0, 1000)之间,并且用左上角和右下角表示:“(x1,y1), (x2, y2)”。
- 目标信息:放在<|object_ref_start|>和<|object_ref_end|>中间
- bbox信息:放在<|box_start|>和<|box_end|>中间
3.1.3 Visual Agent
Qwen2-VL支持VL-agent,它将不同的代理任务(如UI操作、机器控制、游戏和导航等)作为一系列的决策制定任务,Qwen2-vl通过多步action来完成这个任务。对于每种任务,Qwen团队定义了一系列的actions和keywords用户函数调用,Qwen2-vl通过观察、分析、指定计划和执行,并在获取环境新的反馈后执行下一步,循环这个过程直到任务完成。
这里是一个调用手机地图程序来查询最近的披萨店的例子,其中的每个screenshot就是当时手机界面的截图。
4 模型指标
Qwen2-VL-72B模型在大部分benchmark都取得了SOTA的效果,仅MMMU、MathVision上比GPT-4o略低。
4.1 视觉问答能力
Benchmark:
- RealWorldQA:评估real-world空间理解
- MMStar:通过视觉上不可或缺的样本来评估多模态能力
- MMVet:包含16个复杂的多模态任务
- MMT-Bench:多模态理解任务中32个meta-task和162 subtask的高级推理和指令能力
- MMBench,MMbench-1.1:评估20个维度上的细粒度能力
- MME:评估在14个子任务上的感知和识别能力
- HallusionBench
4.2 文档和图表理解
Benchmark:
- DocVQA,ChartQA,InfoVQA:测试模型理解文档、图表、高分辨率信息图种文本的能力;
- TextVQA:测试模型理解自然图片中文本的能力
- OCRBench:数学公式解析和信息提取
- AI2D:包含文本的科学图标,多选任务
4.3 多语言文本识别和理解
- MTVQA:多语言OCR识别能力
4.4 数学推理
- MathVista:综合基准,包含6141个不同的数学和视觉任务
- MathVision:包含实际数据竞赛中的3040个数学问题,涵盖16个数学学科,5个难度等级
4.5 视觉定位任务
Benchmark:RefCOCO, RefCOCO+, RefCOCOg
4.6 视频理解任务
Benchmark:MVBench、PerceptionTest、EgoSchema、Video-MME
限制最大帧数为768
4.7 Visual Agent任务
基于Qwen-Agent framework,评估了Function calling、UI Operations、Card Games、Robotic Control和Navifagtion的能力:
5 消融实验结论
5.1 动态分辨率的效果
- 图像分辨率的变化对指标影响不大,表明模型的鲁棒性
- 动态分辨率有效率,在实现顶级性能的同时消耗更少的token
- 分辨率的提升并不总是带来性能的提升
5.2 M-RoPE的效果
- 使用M-RoPE在下游任务上取得了更好的效果
- M-RoPE具有很好的外推性,即便超过设定的最大token数量16k,在80k tokens长度下依然表现出卓越的性能
5.3 Model scaling
- 图(a)表明了模型尺寸的提升会带来持续的性能提升,尤其是数学能力与模型参数量表现为正相关,OCR相关任务即使是小一点的模型也会有很好的效果
- 图(b)表明随着训练tokens数量的增加,识别图像中文本和图形任务相关的如AI2D、InfoVQA指标稳定上升,视觉问答相关的任务会出现波动
更多推荐
所有评论(0)