当前位置: 首页 > news >正文

《Qwen2-VL》论文精读【下】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当

在这里插入图片描述

1 前言

《Qwen2-VL》论文精读【上】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当 上回详细分析了Qwen2-VL的论文摘要、引言、实验,下面继续精读Qwen2-VL的方法部分。

在这里插入图片描述

文章目录

  • 1 前言
  • 2 方法
    • 2.1 Model Architecture
    • 2.2 改进措施
      • 2.2.1 naive动态分辨率支持
      • 2.2.2 多模态旋转位置编码(M-RoPE)
      • 2.2.3 统一的图像和视频理解
    • 2.2 Training
      • 2.2.1 Data Format
    • 2.3 多模态模型训练使用的基础设施

2 方法

在这里插入图片描述

Qwen2-VL系列包含三种大小的模型,分别是Qwen2-VL-2B、Qwen2-VL-7B和Qwen2-VL-72B。表1列出了超参数和重要信息。值得注意的是,Qwen2-VL在各种大小的LLM中都使用了675M参数的ViT,以确保ViT的计算负载与LLM的规模无关。

2.1 Model Architecture

在这里插入图片描述

图2展示了Qwen2-VL的综合结构。作者保留了Qwen-VL框架,该框架将视觉编码器与语言模型相结合。对于各种尺度的适应性调整,作者实现了大约6.75亿参数的视觉Transformer(ViT),擅长处理图像和视频输入。在语言处理方面,作者选择了更强大的Qwen2系列语言模型

为了进一步提高模型在视频中有效感知和理解视觉信息的能力,作者引入了几个关键的升级:

2.2 改进措施

2.2.1 naive动态分辨率支持

这是Qwen2-VL的一个关键架构改进,即引入了 naive动态分辨率支持 。与其前身不同,Qwen2-VL现在可以处理任意分辨率的图像,动态地将它们转换为可变数量的视觉 Token 。为了支持这一功能,作者对ViT进行了修改,删除了原始的绝对位置嵌入,并引入了2D-RoPE来捕获图像的二维位置信息。在推理阶段,不同分辨率的图像被包装成一个单独的序列中,包装长度受限于GPU内存使用。

此外,为了减少每个图像的视觉 Token ,在ViT之后使用一个简单的MLP层来压缩相邻的 2x2 Token 为一个 Token ,压缩后的视觉 Token 的开头和结尾分别放置了特殊的<vision_start|>和<|vision_end|> Token 。因此,使用patch_size=14的ViT编码具有224×224分辨率的图像,在进入LLM之前将被压缩为66个 Token 。

2.2.2 多模态旋转位置编码(M-RoPE)

多模态旋转位置编码(M-RoPE) 另一个关键的架构增强是多模态旋转位置编码(M-RoPE)的创新。与LLMs中的传统1D-RoPE不同,它只能编码一维位置信息,M-RoPE可以有效地模拟多模态输入的位置信息。这是通过将原始旋转嵌入分解为三个组件:时间、高度和宽度来实现的。

  • 对于文本输入,这些组件使用相同的位置ID,使得M-RoPE在功能上等同于1D-RoPE。在处理图像时,每个视觉 Token 的时间ID保持不变,而根据 Token 在图像中的位置,为高度和宽度组件分配不同的ID。
  • 对于视频,由于它们被看作是一系列帧,每个帧的时间ID都会增加,而高度和宽度组件的ID分配模式与图像相同。在模型输入包含多个模态的情况下,每个模态的位置编号通过将前一个模态的最大位置ID加1来初始化。

M-RoPE的示例如图3所示。M-RoPE不仅增强了位置信息建模,还减少了图像和视频的位置ID值,使模型在推理过程中可以扩展到更长的序列。

在这里插入图片描述

2.2.3 统一的图像和视频理解

统一的图像和视频理解 Qwen2-VL采用了一种混合训练方法,结合了图像和视频数据,以确保在图像理解和视频理解方面的熟练程度。为了尽可能地保留视频信息,作者每秒采样每个视频两帧。此外,还集成3D卷积深度为2来处理视频输入,使模型能够处理3D Pipeline 而不是2D块,从而允许在不增加序列长度的情况下处理更多的视频帧。

为了保持一致性,作者将每个图像视为两个相同的帧。为了在长视频处理的计算需求与整体训练效率之间取得平衡,作者动态调整每个视频帧的分辨率,将每个视频的总 Token 数限制在16384个以内。这种训练方法在模型理解长视频的能力和训练效率之间取得了平衡。

2.2 Training

遵循Qwen-VL,作者采用三阶段训练方法:

  • 第一阶段,专注于训练视觉Transformer(ViT)组件,利用大量的图像文本对来增强大型语言模型(LLM)内的语义理解。
  • 第二阶段,解冻所有参数,用更广泛的数据进行训练以进行更全面的学习。
  • 在最后第三阶段,锁定ViT参数,并使用指导数据集对LLM进行独家微调。

模型在包括图像文本对、光学字符识别(OCR)数据、交错图像文本文章、视觉问答数据集、视频对话和图像知识数据集的多样化数据集上进行了预训练。作者的数据源主要包括清理过的网页、开源数据集和合成数据。数据知识截止日期为2023年6月。这种多样化数据组成对于开发强大的多模态理解能力至关重要。

第一阶段初始预训练阶段,Qwen2-VL暴露在一个约600万亿个 Token 的语料库中。Qwen2-VL的LLM组件使用Qwen2的参数初始化,而Qwen2-VL的视觉编码器使用自定义的DFN派生的ViT进行初始化。然而,原始DFN的ViT中的固定位置嵌入被替换为RoPE-2D。这个预训练阶段主要关注学习图像-文本关系、通过OCR在图像中识别文本内容以及图像分类任务。这种基础训练对于使模型能够发展出对核心视觉-文本相关性和对齐的强健理解至关重要。

第二阶段预训练 标志着重大进步,涉及额外的800亿图像相关数据。这一阶段引入了更多的混合图像文本内容,有助于更精细地理解视觉和文本信息之间的互动。将视觉问答数据集纳入模型,可提高其响应图像相关 Query 的能力。此外,将多任务数据集纳入模型,对于开发模型同时处理多样任务的能力至关重要,这在处理复杂现实世界数据集时尤为重要。同时,纯文本数据继续在保持和提高模型语言熟练度方面发挥关键作用。

在预训练阶段,Qwen2-VL总共处理了1.4万亿个 Token 。具体来说,这些 Token 不仅包括文本 Token ,还包括图像 Token 。然而,在训练过程中,作者只提供了对文本 Token 的监督。这种接触广泛而多样语言和视觉场景的训练确保了模型对视觉和文本信息之间复杂关系的深入理解,从而为各种多模态任务奠定了坚实的基础。

在最后第三阶段微调阶段,使用ChatML格式构建指令遵循数据。这个数据集不仅包括纯文本对话数据,还包括多模态对话数据。多模态组件包括图像问答、文档解析、多图像比较、视频理解、视频流对话和基于 Agent 的交互。作者构建数据的方法旨在增强模型在各种模态上理解和执行各种指令的能力。通过结合多种数据类型,作者试图开发一个更通用和强大的语言模型,可以处理复杂的、多模态任务,除了传统的文本交互。

Chat Markup Language (简称 ChatML )
在这里插入图片描述

2.2.1 Data Format

与Qwen-VL一样,Qwen2-VL也使用了特殊 Token 来区分视觉和文本输入。在图像特征序列的开始和结束处,插入 Token <|vision_start|>和<|vision_end|>来划分图像内容。

对话数据。在对话格式方面,使用ChatML格式构建指令调优数据集,其中每个交互的语句都使用两个特殊 Token (<|im_start|>和<|im_end|>)来方便对话终止。蓝色部分表示监督部分。

在这里插入图片描述

视觉定位。 为了赋予模型视觉定位能力,边界框坐标在 [0, 1000)范围内进行归一化,并作为
( X t o p l e f t , Y t o p l e f t ) , ( X b o t t o m r i g h t , Y b o t t o m r i g h t ) (X_{top left},Y_{top left}),(X_{bottom right},Y_{bottom right}) (Xtopleft,Ytopleft),(Xbottomright,Ybottomright)
的表示。使用 <|box_start|> 和 <|box_end|> Token 边界框文本。为了准确地将边界框与文本描述关联起来,引入了 <|object_ref_start|> 和 <|object_ref_end|> Token 表示边界框引用的内容,从而使模型能够有效解释和生成特定区域的精准描述。

在这里插入图片描述

Visual代理。为了将Qwen2-VL开发为一个通用的VL-Agent,作者将各种 Agent 任务,如UI操作、机器人控制、游戏和导航,视为顺序决策问题,使Qwen2-VL能够通过多步动作执行完成任务。对于每个任务,作者首先定义一组允许的动作和关键词模式(下划线)用于函数调用。Qwen2-VL然后分析观察,进行推理和规划,执行选定的动作,并与环境交互以获取新的观察。这个周期会重复迭代,直到任务成功完成。通过集成各种工具并利用大型视觉语言模型(LVLMs)的视觉感知能力,Qwen2-VL能够迭代执行涉及实际世界视觉交互的 increasingly complex 任务。

在这里插入图片描述

2.3 多模态模型训练使用的基础设施

Qwen2-VL模型在 Alibaba Cloud 的PAI-Lingjun智能计算服务上进行了训练,该服务具有可扩展的计算能力、自动恢复和滞后检测功能。

Storage存储。作者使用阿里云的超级高速CPFS(Cloud Parallel File Storage)构建了Qwen2-VL预训练和训练的存储系统。作者将文本数据和视觉数据存储解耦。作者仅在CPFS上存储文本数据,并使用mmap进行高效访问。对于视觉数据,作者使用阿里云的OSS(Object Storage Service)(阿里云,2024b)进行持久存储。在训练过程中,作者通过OSS的python-client并发地访问视觉数据,并调整并发和重试参数以避免达到QPS(每秒 Query 数)限制。作者还发现,视频数据解码是主要 Bottleneck ,尤其是对于长视频。在尝试了开源和内部软件失败后,作者选择了缓存解码技术。预训练权重保存了每个GPU的优化器和模型状态在CPFS上。

并行性。作者使用3D并行性,结合数据并行性(DP),张量并行性(TP)和流水线并行性(PP)来扩展Qwen2-VL模型训练。作者还利用深度速度的零一冗余优化器来节省内存。顺序并行性(SP)与选择性预训练权重激活相结合,以减少内存使用。在启用TP训练时,作者总是将视觉编码器和大语言模型一起切分,但不会将视觉合并器切分,因为其参数相对较少。

作者发现TP训练会导致由于卷积算子的非确定性行为而产生不同的模型共享权重。作者通过离线减少共享权重来解决这个问题,从而避免了额外的全缩减通信步骤。这种方法对性能的影响很小。作者利用1F1B PP进行Qwen2-VL 72B训练。作者将视觉编码器、视觉 Adapter 以及几个LLM的解码层合并到同一阶段,并将剩余的解码层均匀切分。请注意,每个数据点的视觉和文本序列长度都是动态的。作者在启动1F1B过程之前广播动态序列长度,并使用批索引访问形状信息。作者还实现了交错1F1B PP,但发现它的速度比标准1F1B设置慢。

软件。作者使用PyTorch版本2.1.2进行训练,并使用CUDA 11.8进行加速。此外,作者在ViT和语言模型(LLM)中使用Flash-Attention以实现高效的训练。作者还利用了Nvidia提供的融合运算符,如LayerNorm、RMSNorm和Adam。此外,作者在训练过程中利用了矩阵乘法中的通信和计算的重叠。

相关文章:

《Qwen2-VL》论文精读【下】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当

1 前言 《Qwen2-VL》论文精读【上】&#xff1a;发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当 上回详细分析了Qwen2-VL的论文摘要、引言、实验&#xff0c;下面继续精读Qwen2-VL的方法部分。 文章目录 1 前言2 方法2.1 Model Architecture2.2 改进措施2…...

WebSocket消息帧的组成结构

WebSocket消息帧是WebSocket协议中的一个基本单位&#xff0c;它定义了数据在客户端和服务器之间传递的格式。每个数据帧包含了不同类型的数据和各种控制信息。以下是WebSocket消息帧的组成结构&#xff1a; WebSocket 帧结构 FIN、RSV1、RSV2、RSV3 和 opcode&#xff08;第一…...

如何利用低代码开源框架实现高效开发?

随着数字化转型步伐的加快&#xff0c;越来越多的企业开始关注提高软件开发效率的方法。低代码平台因其能够大幅减少编码量而受到欢迎&#xff0c;而开源框架则因其灵活性和社区支持成为开发者的首选。如何利用低代码开源框架实现高效开发&#xff0c;成为许多企业和开发者面临…...

使用 RabbitMQ 有什么好处?

大家好&#xff0c;我是锋哥。今天分享关于【使用 RabbitMQ 有什么好处&#xff1f;】面试题。希望对大家有帮助&#xff1b; 使用 RabbitMQ 有什么好处&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ 是一种流行的开源消息代理&#xff0c;广…...

机器学习周报(RNN的梯度消失和LSTM缓解梯度消失公式推导)

文章目录 摘要Abstract 1 RNN的梯度消失问题2 LSTM缓解梯度消失总结 摘要 在深度学习领域&#xff0c;循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;被广泛应用于处理序列数据&#xff0c;特别是在自然语言处理、时间序列预测等任务中。然而&#xff0c…...

一篇文章理解前端中的 File 和 Blob

概述&#xff1a; js处理文件、二进制数据和数据转换的时候&#xff0c;提供了一些API和对象&#xff0c;例如&#xff1a;File、Blob、FileReader、ArraryBuffer、Base64、Object URL 和 DataURL。现在主要介绍File和Blob这两个对象。 1.Blob介绍 在js中&#xff0c;Blob&am…...

串口屏控制的自动滑轨(未完工)

序言 疫情期间自己制作了一个自动滑轨&#xff0c;基于无线遥控的&#xff0c;但是整体太大了&#xff0c;非常不方便携带&#xff0c;所以重新设计了一个新的&#xff0c;以2020铝型材做导轨的滑轨&#xff0c;目前2020做滑轨已经很成熟了&#xff0c;配件也都非常便宜&#x…...

DFA算法实现敏感词过滤

DFA算法实现敏感词过滤 需求&#xff1a;检测一段文本中是否含有敏感词。 比如检测一段文本中是否含有&#xff1a;“滚蛋”&#xff0c;“滚蛋吧你”&#xff0c;“有病”&#xff0c; 可使用的方法有&#xff1a; 遍历敏感词&#xff0c;判断文本中是否含有这个敏感词。 …...

Python自动化运维:技能掌握与快速入门指南

#编程小白如何成为大神&#xff1f;大学生的最佳入门攻略# 在当今快速发展的IT行业中&#xff0c;Python自动化运维已经成为了一个不可或缺的技能。本文将为您详细介绍Python自动化运维所需的技能&#xff0c;并提供快速入门的资源&#xff0c;帮助您迅速掌握这一领域。 必备…...

在linux系统中安装pygtftk软件

1.下载和安装 网址&#xff1a; https://dputhier.github.io/pygtftk/index.html ## 手动安装 git clone http://gitgithub.com:dputhier/pygtftk.git pygtftk cd pygtftk # Check your Python version (>3.8,<3.9) pip install -r requirements.txt python setup.py in…...

decodeURIComponentSafe转义%问题记录URI malformed

decodeURIComponentSafe转义%问题记录 问题背景 当我们解析包涵 % 字符的字符串时&#xff0c;会出现错误如下 Uncaught URIError: URI malformed 解决方案&#xff1a; function decodeURIComponentSafe(s) {if (!s) {return s;}return decodeURIComponent(s.replace(/%(?…...

自由学习记录(18)

动画事件的碰撞器触发 Physics 类的常用方法 RaycastHit hit; if (Physics.Raycast(origin, direction, out hit, maxDistance)) {Debug.Log("Hit: " hit.collider.name); } Physics.Raycast&#xff1a;从指定点向某个方向发射射线&#xff0c;检测是否与碰撞体…...

vue3-ref 和 reactive

文章目录 vue3 中 ref 和 reactivereactive 与 ref 不同之处ref 处理复杂类型ref在dom中的应用 vue3 中 ref 和 reactive ref原理 基本原理 ref是Vue 3中用于创建响应式数据的一个函数。它的基本原理是通过Object.defineProperty()&#xff08;在JavaScript的规范中用于定义对…...

Apache Calcite - 查询优化之自定义优化规则

RelOptRule简介 为了自定义优化规则&#xff0c;我们需要继承RelOptRule类。org.apache.calcite.plan.RelOptRule 是 Apache Calcite 中的一个抽象类&#xff0c;用于定义优化规则。优化规则是用于匹配查询计划中的特定模式&#xff0c;并将其转换为更优化的形式的逻辑。通过继…...

大型语言模型(LLM)的小型化研究进展

2024年&#xff0c;大型语言模型&#xff08;LLM&#xff09;的小型化研究取得了显著进展&#xff0c;主要采用以下几种方法实现&#xff1a; 模型融合&#xff1a;通过将多个模型或检查点合并为一个单一模型&#xff0c;减少资源消耗并提升整体性能。例如&#xff0c;《WARM: …...

MiniWord

1.nuget 下载配置 2.引用 3. var value = new Dictionary<string, object>() { ["nianfen"] = nianfen, ["yuefen"] = yuefen, ["yuefenjian1"] = (int.Par…...

Netty 常见组件介绍

Netty 常见组件介绍 上篇文章Netty入门程序echo 基本包含了Netty常见的组件&#xff0c;本文分别介绍各个组件 Bootstrap or ServerBootstrapEventLoopEventLoopGroupChannelPipelineChannelFuture or ChannelFutureChannelInitializerChannelHandler Bootstrap vs ServerBo…...

高频电子线路---倍频器与振荡器

目录 倍频电路原理 丙类倍频器原理电路 问题: 提升滤波方法: 导通角 振荡器 振荡器基本工作原理 首先是怎么维持 那么如何振荡呢? 思考题: 组成要素 振荡器的起振条件 平衡条件 要点提示 稳定条件 振幅平衡 硬激励起振时: 稳定条件 相位平衡 倍频电路原理 简单原理 : …...

删除 git submodule

直接运行下面命令即可&#xff1a; git rm <path-to-submodule>然后提交修改即可。 但是&#xff0c;还有一个小问题&#xff1a;上面命令只是将 submodule 的代码目录删除了。 以下痕迹还存在你的仓库中&#xff1a; .gitmodule 中关于该 submodule 的信息.git 目录…...

el-table 多选默认选中(根据返回的id给数据加默认选中状态)

前言 el-table是我们最常用的展示数据的方式&#xff0c;但是有时候需要用到多选来选择数据&#xff0c;新增数据的时候还好&#xff0c;选中状态都是正常的&#xff0c;但是修改就遇到问题&#xff0c;需要对这个已经选择过的数据加上默认的选中状态&#xff0c;本次就是解决…...

境外网站翻译之自由职业

Polls Do you use AI tools (e.g ChatGPT, Midjourney, Github Copilot) as part of your work? 你在工作中会使用人工智能工具&#xff08;如 ChatGPT、Midjourney、Github Copilot&#xff09;吗&#xff1f; Yes, as an assistant 是的&#xff0c;作为一种辅助工具。 Y…...

批量图片转PDF文件的多种方法详解

要将批量图片转换为PDF文件&#xff0c;可以使用多种方法&#xff0c;包括使用在线工具、桌面应用程序或编程语言。以下是几种常见的方法&#xff1a; 方法一&#xff1a;使用在线工具 选择工具&#xff1a;搜索“图片转PDF”在线工具&#xff0c;如 Smallpdf、ILovePDF 等。…...

Web服务器(理论)

目录 Web服务器www简介常见Web服务程序介绍&#xff1a;服务器主机主要数据浏览器 网址及HTTP简介URLhttp请求方法:2.3 HTTP协议请求的工作流程&#xff1a; www服务器的类型静态网站动态网站 快速安装Apache安装准备工作httpd所需目录主配置文件 nignx安装1、安装2、准备工作 …...

js:()=>(,);()的作用:明确表达式的边界。

()>{表达式1&#xff1b;表达式2&#xff1b;表达式3&#xff1b;... return 结果} 等同于 ()>(表达式1,表达式2,表达式3,... 结果&#xff09; 例子&#xff1a; const strarr [a, b, c];const result strarr.reduce((acc, curr) > {(acc[curr] 1);console.lo…...

RSI 5G通信技术中用于标识小区的特定参数

RSI是指在5G通信技术中用于标识小区的特定参数&#xff0c;全称为Radio Subframe Indicator&#xff08;无线子帧指示符&#xff09;。在原文的上下文中&#xff0c;RSI被用来确保相邻小区间有足够的间隔&#xff0c;避免由于RSI冲突导致用户设备&#xff08;UE&#xff09;随机…...

JavaScript中的闭包、递归问题

一、函数定义和调用 1.函数的定义方式 方式一 函数声明方式 function 关键字(命名函数) function fn(){}方式二 函数表达式&#xff08;匿名函数&#xff09; var fn function(){}方式三 new Function() var f new Function(a,b,console.log(a b););//语法 var fn new Fu…...

【青牛科技】GC4938替代A4938/Allegro在水泵、筋膜枪、吸尘器和电动工具中的应用

随着技术的不断进步&#xff0c;电机驱动控制器在各类电动设备中的应用越来越广泛。GC4938作为一种新型的电机驱动控制器&#xff0c;逐渐被视为A4938/Allegro的替代品。在这篇文章中&#xff0c;我们将探讨GC4938在水泵、筋膜枪、吸尘器和电动工具等设备中的应用优势和特点。 …...

基于yolov5的输电线,电缆检测系统,支持图像检测,视频检测和实时摄像检测功能(pytorch框架,python源码)

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; yolov5&#xff0c;输电线(线缆)检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测【pytorch框架】_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov5的输…...

uniapp下载文件的方案,包括H5,App方案解决办法

1. 在uniapp需要下载文件&#xff0c;但是显示情况是不能下载。所以只能使用该办法来进行下载。 2. 这有一个注意点是&#xff1a;如果你做的是H5的方案&#xff0c;那么我已经替你踩好坑了&#xff0c;UC浏览器是不支持blob类型的下载&#xff0c;以及创建a标签的方案来进行下…...

c++ 贪心算法

概念 贪心算法是一种在每一步选择中都选择当前最优解的算法策略。这种方法适用于某些特定问题&#xff0c;可以通过局部最优选择构建全局最优解。 特点 局部最优选择&#xff1a;每一步选择都选择当前看起来最优的解。无后效性&#xff1a;当前选择不会影响未来选择的可能性…...