Qwen-VL 家族与动态 FPS 视频


文档摘要

Qwen-VL 家族与动态 FPS 视频 本节摘要:Qwen-VL 家族——Qwen-VL(2023)、Qwen2-VL(2024)、Qwen2.5-VL(2025)、Qwen3-VL(2025)——是 2026 年最有影响力的开源视觉-语言模型谱系。每一代都做了一个决定性的架构押注,开源生态在十二个月内就会跟上:用 M-RoPE 做原生动态分辨率、配绝对时间对齐的动态 FPS 采样、ViT 里的窗口注意力、结构化 agent 输出格式。到 Qwen3-VL,配方已稳定:原生宽高比输入的 2D-RoPE-ViT 编码器、进大型 Qwen3 语言基座的 MLP 投影器,以及把 OCR、定位、agent 行为当作一等目标的训练阶段。本节按时间顺序读这个家族,让你明白每个旋钮为何在此。

Qwen-VL 家族与动态 FPS 视频

本节摘要:Qwen-VL 家族——Qwen-VL(2023)、Qwen2-VL(2024)、Qwen2.5-VL(2025)、Qwen3-VL(2025)——是 2026 年最有影响力的开源视觉-语言模型谱系。每一代都做了一个决定性的架构押注,开源生态在十二个月内就会跟上:用 M-RoPE 做原生动态分辨率、配绝对时间对齐的动态 FPS 采样、ViT 里的窗口注意力、结构化 agent 输出格式。到 Qwen3-VL,配方已稳定:原生宽高比输入的 2D-RoPE-ViT 编码器、进大型 Qwen3 语言基座的 MLP 投影器,以及把 OCR、定位、agent 行为当作一等目标的训练阶段。本节按时间顺序读这个家族,让你明白每个旋钮为何在此。

学习目标

阅读完本节,你应当能够:

  1. 计算 M-RoPE 的三轴旋转(时间、高、宽),解释为什么三者都需要。
  2. 为视频挑一种动态 FPS 采样策略,就「每秒 token 数 vs 事件检测准确率」做推理。
  3. 按顺序说出 Qwen-VL 四代升级及各自解锁了什么。
  4. 接好 Qwen2.5-VL 式的 JSON agent 输出格式,并从 VLM 响应里解析结构化工具调用。

一、问题与直觉

Qwen-VL 在 2023 年 8 月发布,是对 LLaVA-1.5 与 BLIP-2 的直接回应。Qwen 团队瞄准的差距有三:分辨率、视频、结构化输出。

  • 分辨率:LLaVA-1.5 跑在 336×336。拍照够用,对中文发票或密集表格截图毫无用处。Qwen-VL 的第一个创新是 448×448 加带定位的边界框输出,让模型能「指」东西。
  • 视频:Video-LLaMA 堆叠逐帧编码器再喂给 LLM,短片段能用,多分钟视频里时间轴才是信号。Qwen 团队想要一个能理解时间的单一编码器。
  • 结构化输出:LLaVA 吐自由文本,而 agent 需要 JSON。Qwen-VL 在显式 JSON 输出格式(含作为文本的边界框坐标)上训练。

Qwen-VL 的每一代都延伸这三轴之一。

Qwen-VL(2023 年 8 月)

第一代:OpenCLIP ViT-bigG/14 作编码器(25 亿参数)、与 LLaMA 兼容的 Q-Former(256 query 的一步式)、Qwen-7B 基座。贡献:

  • 448×448 分辨率(当时开源 VLM 的 SOTA)。
  • 定位:在带显式坐标 token 输出的图文对上训练。「The cat is at <box>(112, 204), (280, 344)</box>」。
  • 从一开始就中英双语训练。

当时的基准:英文上与 GPT-4V 竞争,中文上统治。定位监督才是真正的头条。

Qwen2-VL(2024 年 9 月)——M-RoPE 与原生分辨率

Qwen2-VL 用一个原生动态分辨率的 ViT 编码器,取代了固定分辨率 + Q-Former 的栈。关键改动:

  • 原生动态分辨率:ViT 接受任何能被 28 整除的 H×W(patch 14 配 2× 空间合并)。1120×672 的图(40×24 合并 patch)产出 960 个视觉 token。不缩放、不切图、无缩略图。
  • M-RoPE(多模态 RoPE):每个 token 携带三维位置 (t, h, w) 而非一维。图 t=0,视频 t=帧索引。RoPE 按每轴频率旋转 query/key 向量。没有位置嵌入表。
  • MLP 投影器:丢掉 Q-Former,在合并后的 patch token 上用两层 MLP。
  • 动态 FPS 视频:视频默认按 1~2 FPS 采样,但模型接受任意帧数。

结果:Qwen2-VL-7B 在多个多模态基准上追平 GPT-4o,并在 DocVQA 上胜过它(94.5 vs 88.4)。架构改动是决定性一步。

Qwen2.5-VL(2025 年 2 月)——动态 FPS + 绝对时间

Qwen2.5-VL 的大转向在视频。动态 FPS 不只是「需要时多采几帧」,论文把它形式化了:

  • 绝对时间 token:不用位置索引(帧 0、1、2……),用真实时间戳。「At 0:04, the cat jumps.」模型看到与帧 token 交错的 <time>0.04</time> token。
  • 动态 FPS:慢镜头采 1 FPS,动作镜头采 4+ FPS。用户或训练器选;M-RoPE 自适应。
  • ViT 窗口注意力:空间注意力加窗(块内局部)以提吞吐;每几层加一次全局注意力。
  • 显式 JSON 输出格式:在工具调用数据上训练。{"tool": "click", "coords": [380, 220]}。开箱即 agent 就绪。
  • MRoPE-v2 缩放:位置随最大输入尺寸缩放,使 10 分钟视频不耗尽频率范围。

基准:Qwen2.5-VL-72B 在大多数视频基准上胜过 GPT-4o,文档上追平 Gemini 2.0,并创下开源模型 GUI 定位的 SOTA(ScreenSpot:84% 准确率 vs GPT-4o 的 38%)。

Qwen3-VL(2025 年 11 月)

Qwen3-VL 是增量升级,是巩固而非重造:更大的 LLM 主干(Qwen3-72B)、扩张的训练数据、改进的 OCR、通过 Qwen3「思考模式」更强的推理。ViT 与 M-RoPE 不变。论文聚焦数据与训练改进,而非架构。

谱系启示:到 2025 年,Qwen-VL 架构已稳定,后续代际扩算力与数据,而非原语。

M-RoPE 的数学

经典 RoPE 用配对坐标,按位置 m 旋转维度 d 的 query q:

q_rot[2i] = q[2i] * cos(m * theta_i) - q[2i+1] * sin(m * theta_i) q_rot[2i+1] = q[2i] * sin(m * theta_i) + q[2i+1] * cos(m * theta_i) theta_i = 10000^(-2i/d)

M-RoPE 把隐藏维分成三段。设 d = 96,给时间 32 维、高 32 维、宽 32 维。每段按自己轴的位置旋转。(t=5, h=10, w=20) 的 patch 在三段上分别施加 R_t(5)R_h(10)R_w(20)

文本 token 用 t = 文本索引, h = 0, w = 0(或归一化选择)以保兼容。视频帧用 t = 帧时间, h = 行, w = 列。单图用 t = 0

好处:一个位置编码同时处理文本、图像、视频,无需分支代码或不同的位置表。

动态 FPS 采样逻辑

给定时长 T 秒的视频与目标 token 预算 B:

  1. 算能负担的最大 FPS:fps_max = B / (T * tokens_per_frame)
  2. {1, 2, 4, 8} 里挑满足 fps <= fps_max 的目标 FPS。
  3. 若运动剧烈(光流启发式或用户显式要求),挑高 FPS;若平缓,挑低。
  4. 按选定 FPS 均匀采样;帧间插入 <time>t</time> token。

Qwen2.5-VL 在训练中隐式学了这套逻辑;推理时用户用 fps 参数控制。60 秒动作序列、4 FPS、每帧 81 token = 19440 token,32k 上下文里可处理。

结构化 agent 输出

Qwen2.5-VL 的 agent 训练显式以结构化工具调用为目标:

{ "tool": "mouse_click", "coords": [1024, 512], "button": "left", "modifier": null }

解析是确定性的:对模型输出跑 JSON.parse。对比自由形式的「click at (1024, 512)」——那需要正则与歧义处理。这个转变正是 Qwen2.5-VL 的 ScreenSpot 分数从 Qwen2-VL 的 55% 跳到 84% 的原因。

二、从零实现

code/main.py 实现:

  • 为一条混了文本、图像 patch、视频帧的打包序列算 M-RoPE 位置。
  • 动态 FPS 采样器:给定 (时长, 预算, 运动级别),挑 FPS 并发帧时间戳。
  • 一个玩具级的 Qwen2.5-VL JSON 输出解析器,处理带坐标字段的工具调用响应。

M-RoPE 的伪代码

def mrope_rotate(q, t, h, w, d=96, base=10000): # 三段: 时间 d/3, 高 d/3, 宽 d/3 band = d // 3 out = q.copy() for i in range(band // 2): theta = base ** (-2*i / band) # 时间段 out[2*i], out[2*i+1] = rotate_pair(q[2*i], q[2*i+1], t*theta) # 高段 out[band+2*i], out[band+2*i+1] = rotate_pair(q[band+2*i], q[band+2*i+1], h*theta) # 宽段 out[2*band+2*i], out[2*band+2*i+1] = rotate_pair(q[2*band+2*i], q[2*band+2*i+1], w*theta) return out def rotate_pair(a, b, angle): return (a*cos(angle) - b*sin(angle), a*sin(angle) + b*cos(angle))

动态 FPS 采样

def dynamic_fps(duration, budget, tokens_per_frame, motion_level): fps_max = budget / (duration * tokens_per_frame) candidates = [1, 2, 4, 8] fps = max([f for f in candidates if f <= fps_max], default=1) if motion_level == "high": # 动作镜头尽量挑高 fps = min(8, fps_max) n_frames = int(duration * fps) timestamps = [round(i / fps, 2) for i in range(n_frames)] return fps, timestamps # 帧间插 <time>t</time>

💡 关键设计:绝对时间 token 让模型看到真实秒数而非帧索引,因此「在 0:04 跳跃」与采样率无关——无论 1 FPS 还是 4 FPS,同一个事件的时间戳一致,模型的时间推理才稳定。

JSON agent 解析

def parse_tool_call(response_text): # Qwen2.5-VL 输出可确定性 JSON.parse start = response_text.index("{") end = response_text.rindex("}") + 1 return json.loads(response_text[start:end]) # {"tool":"mouse_click","coords":[1024,512],...}

三、框架对比

  • Qwen2.5-VL 官方(transformers):Qwen2_5_VLProcessor 暴露 min_pixels/max_pixels/fps,M-RoPE 与窗口注意力内置,JSON agent 输出是默认训练目标。
  • Qwen3-VL:同架构,接 Qwen3 思考模式,推理链更长;ViT 与 M-RoPE 不变,数据与训练改进。
  • InternVL3(V2PE):同类思路的可变位置编码,按模态做编码,原生多模态预训练(第 10 节)。
  • LLaVA-OneVision:固定 token 预算 + 双线性池化,与 Qwen 的「预算随输入伸缩」形成对比。

工程取舍:要原生动态分辨率 + 时间对齐视频用 Qwen2.5/3-VL;要可预测预算用 OneVision;要 GUI agent 直接用 Qwen2.5-VL 的 ScreenSpot 84%;长视频用 Qwen 的动态 FPS + 绝对时间 token。

四、可复用产物

本节产出 outputs/skill-qwen-vl-pipeline-designer.md。给定一个视频任务(监控、agent、动作识别、无障碍),它输出 Qwen2.5-VL 配置(帧预算、FPS 策略、窗口注意力开关、agent 输出模式)与延迟估算。每当你为视频产品部署 Qwen-VL 系模型时都用它。

五、练习

  1. 手算 M-RoPE:为 (t=3, h=5, w=7)、隐藏维 48(每段 16、base theta 10000)的 patch 算 M-RoPE 旋转,给出每段前三对的旋转角。

  2. 监控视频:10 分钟的安防录像,1 FPS 产多少帧?384 分辨率配 3× 池化共多少 token?Qwen2.5-VL 默认 32k 上下文能扛吗?

  3. 挑 FPS:为 30 秒网球回合、30 秒菜谱演示、30 秒 UI agent 录屏分别挑 FPS,用动态 FPS 逻辑论证。

  4. 为何 MLP 行了:Qwen2.5-VL 彻底丢掉 Q-Former。为什么 2025 年简单 MLP 能行,2023 年却不行?(提示:数据规模与编码器质量。)

  5. 解析 JSON:把三条 Qwen2.5-VL JSON 工具调用输出解析成 Python dict。畸形 JSON 会怎样失败?Qwen cookbook 推荐什么恢复策略?

本节要点回顾

  1. 四代演进:Qwen-VL(448+定位+双语)→ Qwen2-VL(M-RoPE+原生分辨率)→ Qwen2.5-VL(动态 FPS+绝对时间+JSON agent)→ Qwen3-VL(扩数据+思考模式,架构稳定)。
  2. M-RoPE 三轴:隐藏维分时间/高/宽三段,每段按各自轴旋转,一个编码同时处理文本/图/视频。
  3. 原生动态分辨率:ViT 接受任意被 28 整除的 H×W,patch 14 配 2× 空间合并,不缩放不切图。
  4. 绝对时间 token:<time>t</time> 让模型看真实秒数,与采样率无关,时间推理才稳。
  5. 动态 FPS:按预算/时长/运动级别从 {1,2,4,8} 挑 FPS,慢镜头低、动作镜头高。
  6. 窗口注意力:ViT 空间注意力加窗提吞吐,每几层加全局。
  7. JSON agent 输出:显式训练工具调用 JSON,ScreenSpot 从 55% 跳到 84%。
  8. min/max_pixels:每请求旋钮,控制总像素数与 token 数。
  9. Qwen2.5-VL-72B:视频基准胜 GPT-4o,GUI 定位 84% 创开源 SOTA。
  10. 架构稳定:2025 年后扩算力与数据,不动原语。

下一节,我们将进入 InternVL3——它走「原生多模态」路线,从一开始就在多模态数据上联合预训练视觉与语言,而非事后用投影器连接两个冻结塔。


发布者: 作者: Rohit Gupta 转发
评论区 (0)
U