
qwen2.5vl通过增强的视觉识别精确的目标定位强大的文档解析和长视频理解在理解和与世界交互方面实现了重大飞跃突出特性能够使用边界框或点准确地定位物体。它可以从发票、表格和表单中提取结构化数据以及对图表、示意图和布局进行详细分析为了处理复杂输入qwen2.5vl引入动态分辨率处理和绝对时间编码能够处理不同尺寸的图像和超长时长的视频长达数小时并实现秒级事件定位使得模型可以原生感知空间尺度和时间动态而无需依赖传统的归一化技术架构优化通过从头训练原生动态分辨率的Vision Transformer(ViT)并融入Window Attention机制QWEN2.5VL提供了三种尺寸Qwen2.5-VL-72B旗舰模型与GPT-4o和Claude 3.5 Sonnet等最先进模型相媲美特别擅长文档和图表理解◦ Qwen2.5-VL-7B 和 Qwen2.5-VL-3B较小模型优于同类竞争对手即使在资源受限环境中也能提供强大能力现在为止的疑问的地方使用边界框或点定位 动态分辨率处理 绝对时间编码 window Attention机制multimodal 多模态qwen2.5vl在各个benchmark上取得很好的结果引言部分LVLMs标志着多模态理解和交互方式的变革但是在各种人物上都能胜任但是达不到卓越的水平。底层基础是细粒度视觉任务在Qwen2.5VL中致力于探索细粒度感知能力顶层是多模态推理 通过利用最新的Qwen2.5大语言模型并结合多模态问答QA数据的构建来增强这一能力一系列的研究工作推进了多模态大模型的发展架构创新现有范式通常是由视觉编码器、跨模态投影器、和LLM组成细粒度感知模型是另一个关键Omni全能 和 MoE mixture of experts 全能架构和混合专家架构也为LVLNMs视觉编码器的增强和分辨率缩放 整理具有更多样化场景和更高质量的数据然而尽管取得了显著进展当前的视觉语言模型仍面临一些发展瓶颈包括计算复杂度高上下文理解有限细粒度视觉感知能力较差以及在不同序列长度下性能不一致Qwen2.5VL在技术层面的贡献主要是在视觉编码器中实现了窗口注意力机制优化推理效率引入了动态FPS帧率采样将动态分辨率扩展到了时间维度从而能够全面理解不同采样率的视频在时间域升级了MRope 多维旋转位置编码通过将其与绝对时间对齐促进了更复杂的时序学习我们在预训练和监督微调的数据整理方面pay effort总结了qwen2.5VL的能力 可以看懂复杂文档不仅可以看到物体还可以指出物体能看长视频且知道具体时间发生了什么能当手机电脑助手agent看这个架构图RMSnorm跟之前的batchnorm和layernorm不一样 还有window attention 还有SwiGLU 这三点都不一样。我看图注里面还说了多维旋转位置编码看到这个部分是有多维旋转位置编码和动态帧率采样的动态采样在图像方面比如siglip不管输入是啥图都是强行剪裁为固定的。Qwen2.5VL的图像编码器会根据图片实际长宽比动态将其切割为不同数量的patch.在视频方面对于时长两小时的动态稀疏抽帧对于一段5s的体育进球集锦模型会密集抽帧多维旋转位置编码如果是图像或者是文字跟旋转位置编码差不多。如果是视频涉及到时间了就会加上一个时间参数详细介绍Qwen2.5VL整体架构大语言模型是由Qwen LLM的预训练权重进行初始哈将一维旋转位置编码 修改为了与绝对时间对齐的多模态旋转位置编码视觉编码器采取重新设计的VIT transformer引入了2D-Rope和窗口注意力机制以支持原生的输入分辨率同时加速整个视觉编码器的计算。在训练和推理期间输入图像的高度和宽度会被调整为28的倍数然后输入到VIT中视觉编码器通过步长为14的方式将图像分割为图块基于MLP的视觉-语言融合器为了解决长图像特征序列带来的效率挑战采取简单有效的方法在将特征序列输入大语言模型(llm)之前对齐进行压缩也就是不是直接使用VIT提取的原始图块特征而是首先将空间上相邻的四个图块特征进行分组。然后将这些分组后的特征拼接起来并通过一个两层的MLP多层感知机将其投影到与LLM中使用的文本嵌入维度相匹配的维度。动态压缩不同长度的图像特征序列 【巧妙解决 (2x2 压缩)它采用了一个非常聪明的“打包”策略。把相邻的 4 个 小图块特征捆绑在一起然后用一个两层的小神经网络 (MLP) 把它们“压缩”成 1 个 特征向量】这个full attention block indexes的意思就是在这几个层是使用完整注意力的不是窗口注意力了输入通道数输出通道数 这个的作用就是将视觉编码器的维度投影到大语言模型所需要的维度介绍视觉编码器.重新设计vit引入窗口注意力机制只有四层使用了全自注意力其余层使用最大窗口尺寸为112*112patch是14*14 对应8*8个图像块的窗口注意力对于小于112*112的不填充进行处理 注意patch指的是图像块大小8*8图像块的数目要注意区分在位置编码方面涉及到2drope 和 3drope。3d是为了处理视频的输入14*14的图像块作为基本单元对于视频数据将连续的两帧分组到一起【对于这个将连续两帧分组到一起减少token数量说实话我没看懂】使用RMSnorm进行归一化使用SwiGLU作为激活函数RMS之前都是使用layernorm先计算均值减去均值在计算方差除以标准差。研究人员发现只要将数据尺度缩放到合理范围模型就能很好地学习RMS root mean square 均方根然后除以这个均方根看均方根的计算SwiGLU(swish-gated linear unit) 是前馈神经网络中的核心结构。代替传统的relu或者gelu激活函数传统FFN 输入 升维 relu激活 降维 输出。swiglu 引入门控机制如何做到门控的呢其实就是swish得到的范围使得左侧的那个linear1的特征是放大或者缩小的原生动态分辨率与帧率Qwen2.5-VL在空间和时间两个维度上引入了改进在空间维度上Qwen2.5-VL能够将不同尺寸的图像动态转换为对应长度的token(词元序列与传统方法对坐标进行归一化不同Qwen2.5-VL直接使用输入图像的实际尺寸来表示边界框、点以及其他空间特征。对于视频输入Qwen2.5-VL结合了动态帧率训练和绝对时间编码。通过适应可变的帧率将Mrope的id直接与时间戳对齐使得模型能够通过时间维度id之间的间隔来理解时间的节奏### 问题一是怎么进行动态转换的怎么就可以将不同尺寸的图像进行动态转换了是使用了什么传统的模型如早期的 CLIP处理图像时不管你是 4K 长图还是手机小图都会**暴力缩放Resize** 或**裁剪Crop** 成一个固定的正方形比如 224x224。这会导致图像变形或细节丢失。Qwen2.5-VL 能够实现“动态转换”主要依赖于以下**三个核心技术的组合**#### 1. 动态 Patch 切割不缩放只切块模型不再改变图片的原始长宽比而是设定一个**最小切割单位Patch Size 14x14 像素**。* **做法**输入一张图片模型先把它的高和宽调整为 14 的倍数论文中提到是 28 的倍数即 14 的偶数倍。然后直接用 14x14 的网格去切这张图。* **结果**一张 280x560 的长图会被切成 $20 \times 40 800$ 个 Patch一张 280x280 的方图会被切成 $20 \times 20 400$ 个 Patch。**图片的序列长度Token 数量是根据图片实际尺寸动态变化的。**#### 2. 窗口注意力机制Window Attention—— 解决“不同长度导致显存爆炸”的问题如果图片很大切出了几万个 Patch传统的“全局注意力”会让计算量呈平方级爆炸。* **做法**论文 2.1.1 节提到模型引入了**窗口注意力**。它把图像划分成一个个最大 **112x112 像素即 8x8 个 Patch** 的“小窗口”。* **结果**注意力计算被限制在窗口内部。无论原图多大模型每次只处理 64 个 Patch 的关系。对于小于 112x112 的区域甚至**不进行 Padding不补零**直接保留原始分辨率计算。这就让模型能够“原生”处理任意尺寸的图片而不会撑爆显存。#### 3. MLP 动态压缩2x2 合并为了进一步控制输入给大语言模型的 Token 数量模型在视觉编码器和语言模型之间加了一个“压缩器”。* **做法**把空间上相邻的 **4 个 Patch2x2** 的特征拼接起来通过一个两层 MLP 网络压缩成 **1 个 Token**。* **结果**Token 序列长度直接**缩减为原来的 1/4**。这种压缩是动态的图大就多压缩点图小就少压缩点完美适配语言模型的输入限制。---### 问题二怎么就可以动态适应改变帧率了这里需要澄清一个概念模型并不是在推理时去“改变”视频的帧率而是**在训练阶段通过“动态抽帧策略”逼迫模型学会适应不同的帧率**。#### 1. 训练时的“动态抽帧”Dynamic FPS Sampling* **做法**在训练数据预处理时对于同一个视频模型不会固定每秒抽 1 帧。而是**随机采用不同的帧率FPS进行抽帧**。比如这个 Batch 里视频 A 按 1 FPS 抽帧视频 B 按 5 FPS 抽帧。* **目的**如果模型只见过固定帧率的视频它就会把“动作快慢”和“帧数多少”绑定死。通过动态抽帧模型被迫明白**不能靠数帧数来判断时间必须依靠注入的“时间戳”信息。**#### 2. 3D Patch 划分连续两帧打包* **做法**如论文 2.1.1 节所述对于视频数据模型将**连续的两帧**在时间维度上打包形成一个 **14x14x2高x宽x时间** 的 3D Patch。* **结果**这相当于把视频的 Token 数量直接**砍半**。配合动态抽帧模型就能在有限的算力下处理长达数小时的视频。---### 问题三怎么就将 ID 与时间戳进行对齐了MRoPE 的魔法这是 Qwen2.5-VL 最精妙的设计。传统的视频模型时间位置编码ID是**相对的序号**而 Qwen2.5-VL 把它变成了**绝对的物理时间**。#### 1. 传统做法相对序号 ID假设一个视频抽了 4 帧传统模型给它们分配的时间 ID 是[0, 1, 2, 3] 代表第 0 帧、第 1 帧...* **缺陷**模型只知道“画面 2 在画面 1 后面”但不知道中间过了 0.1 秒还是 10 秒。#### 2. Qwen2.5-VL 的做法绝对时间戳 ID模型在计算 **MRoPE多维旋转位置编码** 时时间维度T的 ID 不再使用整数序号而是**直接使用这一帧对应的真实物理时间戳秒数**。假设抽帧的时间点是 0秒、1.5秒、3.2秒、5.0秒那么分配的时间 ID 就是[0.0, 1.5, 3.2, 5.0]#### 3. “对齐”是如何在数学上生效的在 Transformer 计算注意力Attention时Query (Q) 和 Key (K) 会乘上 RoPE 旋转矩阵。RoPE 的核心特性是**两个 Token 的注意力得分只取决于它们位置 ID 的“差值”。*** 当模型计算“画面 1 (1.5s)”和“画面 2 (3.2s)”的注意力时时间维度的 ID 差值是 $3.2 - 1.5 1.7$。* 当模型计算“画面 2 (3.2s)”和“画面 3 (5.0s)”的注意力时时间维度的 ID 差值是 $5.0 - 3.2 1.8$。**“对齐”的本质就在这里**MRoPE 的旋转矩阵直接接收这些**浮点数的时间差值**作为输入。模型在训练时通过注意力机制直接学习到了“ID 差值 1.7 代表过了 1.7 秒画面里的物体应该移动了多远”。### 总结* **动态分辨率**靠的是 **14x14 动态切块 窗口注意力 MLP 压缩**不缩放、不补零。* **动态帧率**靠的是**训练时的随机抽帧策略**逼迫模型放弃数帧数转而依赖时间信息。* **ID 与时间戳对齐**靠的是**把 MRoPE 时间维度的整数索引替换成了真实的物理时间戳秒数**让模型在底层数学计算上直接感知物理时间的流逝。我的问题我是不是可以理解为首先这个图是会先弄成28的倍数的然后会按照14*14的分割为图像块。但是最多不会超过64个如果超过的话 那剩下的数据是如何进行处理的呢然后还使用了2*2的的将patch合并在一起。我想知道这个先后顺序是啥到底是如何发挥作用的窗口注意力是咋运行的一张大的图片输入进入都经过了什么样子的处理qwen的回答你的理解非常接近真相了但有一个关键的误解需要纠正**“窗口最多包含 64 个 Patch” 并不意味着 “一张图片最多只能有 64 个 Patch”。**如果一张图片非常大它会被切成几百甚至上千个 Patch然后**划分到多个窗口中**去处理。为了让你彻底明白一张大图输入后到底经历了什么我们按照**严格的先后顺序**用一个具体的例子假设输入一张 **1120 x 560** 像素的宽屏大图来走一遍全流程---### 第一步尺寸调整Resize to multiples of 28* **操作**模型不会把这张图强行压缩成正方形而是保持它的长宽比把长和宽调整为 **28 的倍数**。* **为什么是 28** 因为后面有个 2x2 合并的操作Patch 大小是 1414 × 2 28。这样能保证切出来的 Patch 刚好能被 2 整除不用补零。* **结果**假设这张图刚好是 1120 x 560已经是 28 的倍数了不需要调整。### 第二步图像分块Patching切成 14x14* **操作**用 14x14 的网格去切这张图。* **计算*** 横向1120 ÷ 14 80 个 Patch。* 纵向560 ÷ 14 40 个 Patch。* **结果**这张大图被切成了 **80 × 40 3200 个 Patch**。* *注意这里已经有 3200 个 Patch 了远超 64 个*### 第三步进入视觉编码器ViT与 窗口注意力Window Attention这是最核心的一步。如果让这 3200 个 Patch 互相计算注意力计算量是 $3200 \times 3200 \approx 1000$ 万次显存会直接撑爆。所以**窗口注意力**登场了。* **划分窗口**模型设定窗口最大为 **112 x 112 像素**。因为每个 Patch 是 14x14所以一个窗口正好装下 **8 x 8 64 个 Patch**。* **多窗口并行处理*** 对于这张 1120 x 560 的图模型会把它划分成多个 112x112 的“小房间”窗口。* 横向有 1120 ÷ 112 10 个窗口纵向有 560 ÷ 112 5 个窗口。* 整张图被分成了 **10 × 5 50 个窗口**。* **注意力计算小组讨论*** 在每一个窗口内部只有 64 个 Patch。模型只计算这 64 个 Patch 之间的注意力计算量 $64 \times 64 4096$ 次。* 50 个窗口各自独立计算互不干扰。* **穿插全局注意力全班大会*** 如果一直只在窗口里算模型就看不到整张图的全貌了。* 所以在 ViT 的 32 层网络中**第 7、15、23、31 层**会突然打破窗口限制让这 3200 个 Patch 进行一次**全局注意力计算**。* 其他 28 层则继续使用高效的窗口注意力。### 第四步2x2 合并压缩MLP Merger* **先后顺序**这个操作发生在 **ViT 提取完特征之后****输入给大语言模型LLM之前**。* **操作**ViT 输出了 3200 个 Patch 的特征向量。为了不让后面的 LLM 累死模型把空间上相邻的 **4 个 Patch2x2** 捆绑在一起。* **计算**3200 个 Patch ÷ 4 **800 个合并后的特征**。* **MLP 投影**这 4 个特征拼接后通过一个两层神经网络MLP被压缩并转换成 LLM 能看懂的维度比如从 1280 维变成 8192 维。### 第五步喂给大语言模型LLM* **结果**原本如果直接输入LLM 需要处理 3200 个视觉 Token。经过 2x2 压缩后LLM 只需要处理 **800 个 Token**。* 这 800 个 Token 和用户的文本问题比如“图里有几个人”拼接在一起送入 LLM 进行最终的推理和回答。---### 总结你的疑惑1. **“最多不会超过64个如果超过的话剩下的数据是如何进行处理的呢”*** **解答**不是整张图不超过 64 个而是**每个窗口内**不超过 64 个。如果图很大就会划分出**多个窗口**比如 50 个窗口每个窗口各自处理自己的 64 个 Patch。2. **“2*2的将patch合并在一起先后顺序是啥”*** **解答**顺序是**先切块 (14x14) - 进 ViT 提取特征 (使用窗口注意力) - 出来后再进行 2x2 合并压缩 - 最后给 LLM**。3. **“窗口注意力是咋运行的”*** **解答**就像把一个大班级3200人分成 50 个小组每组 64 人。平时讨论问题计算注意力只在小组内进行极大地节省了精力算力。但每隔一段时间第 7,15,23,31 层全班会开一次大会全局注意力确保大家没有脱离整体目标。