自学内容网 自学内容网

【大模型系列】Qwen2-VL(2024.10)

在这里插入图片描述

1 简介

在这里插入图片描述
Qwen团队开源了Qwen2-VL系列模型,支持多语言图像文本理解、代码/数学推理、视频分析、实时聊天、代理等。其核心创新点为:

  • 支持动态分辨率输入,并在训练过程中引入了2D-RoPE,从而使模型更好的捕获不同空间尺度的信息;
  • 开发了M-RoPE,使用单独的组件来表示时间和空间信息,使模型可以更自然的理解动态内容如视频或者流数据;

开源了3种不同size的模型:

ModelVision encoderLMMDescription
Qwen2-VL-2B675M1.5B最高效的模型,专为在设备上运行而设计。它可以为资源有限的大多数场景提供足够的性能。
Qwen2-VL-7B675M7.6B在成本方面性能优化的模型,在文本识别和视频理解能力方面进行了显著升级。它可以在广泛的视觉任务中提供显著的性能。
Qwen2-VL-72B675M72B最强大的模型,在视觉推理、指令遵循、决策和代理能力方面进一步改进。它可以在大多数复杂任务上提供最佳性能。

Vision encoder使用qwen-vl中的视觉编码器(Openclip’s ViT-bigG),LLM使用Qwen2系列。

2 模型结构

image

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)

image
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

image.png

  • 图像:视觉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|>中间

image.png

3.1.3 Visual Agent

Qwen2-VL支持VL-agent,它将不同的代理任务(如UI操作、机器控制、游戏和导航等)作为一系列的决策制定任务,Qwen2-vl通过多步action来完成这个任务。对于每种任务,Qwen团队定义了一系列的actions和keywords用户函数调用,Qwen2-vl通过观察、分析、指定计划和执行,并在获取环境新的反馈后执行下一步,循环这个过程直到任务完成。
image.png
这里是一个调用手机地图程序来查询最近的披萨店的例子,其中的每个screenshot就是当时手机界面的截图。

4 模型指标

image.png
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识别能力

image.png

4.4 数学推理

  • MathVista:综合基准,包含6141个不同的数学和视觉任务
  • MathVision:包含实际数据竞赛中的3040个数学问题,涵盖16个数学学科,5个难度等级

4.5 视觉定位任务

Benchmark:RefCOCO, RefCOCO+, RefCOCOg

image.png

4.6 视频理解任务

Benchmark:MVBench、PerceptionTest、EgoSchema、Video-MME
限制最大帧数为768
image.png

4.7 Visual Agent任务

基于Qwen-Agent framework,评估了Function calling、UI Operations、Card Games、Robotic Control和Navifagtion的能力:
image.png

5 消融实验结论

5.1 动态分辨率的效果

image.png

  • 图像分辨率的变化对指标影响不大,表明模型的鲁棒性
  • 动态分辨率有效率,在实现顶级性能的同时消耗更少的token
  • 分辨率的提升并不总是带来性能的提升

5.2 M-RoPE的效果

image.png

  • 使用M-RoPE在下游任务上取得了更好的效果
  • M-RoPE具有很好的外推性,即便超过设定的最大token数量16k,在80k tokens长度下依然表现出卓越的性能

5.3 Model scaling

image.png

  • 图(a)表明了模型尺寸的提升会带来持续的性能提升,尤其是数学能力与模型参数量表现为正相关,OCR相关任务即使是小一点的模型也会有很好的效果
  • 图(b)表明随着训练tokens数量的增加,识别图像中文本和图形任务相关的如AI2D、InfoVQA指标稳定上升,视觉问答相关的任务会出现波动

原文地址:https://blog.csdn.net/kabuto_hui/article/details/142966197

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!