《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。此外,作者在训练过程中利用了矩阵乘法中的通信和计算的重叠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TypeScript延迟执行工具类

TypeScript延迟执行工具类 在前端开发中&#xff0c;我们经常需要处理一些延迟执行、防抖和节流的场景。今天介绍一个实用的Delay工具类&#xff0c;它提供了这些常用的延迟执行功能。 文章目录 TypeScript延迟执行工具类0、完整代码1. 基础延迟执行sleep方法execute方法 2. 防…

RustRover加载Rust项目报错

问题描述&#xff1a; 昨天还可以正常使用的RustRover今天打开Rust项目一直报错&#xff1a; warning: spurious network error (3 tries remaining): [7] Couldnt connect to server (Failed to connect to 127.0.0.1 port 51342 after 105750 ms: Couldnt connect to server…

C语言---文件操作万字详细分析(6)

文件操作 到这里&#xff0c; C语言所有知识点&#xff0c; 就告已段落了&#xff0c; 虽然知识点到这里结束了&#xff0c; 但我想&#xff0c; 我们的编程之路也可能刚刚开始&#xff0c; 这些知识&#xff0c; 是我们在创造伟大事物时&#xff0c; 必不可少的基础&#xff…

回溯——3、5升杯倒4升水

回溯应用 接前面书上说数学浅谈最大公约数g c d ( a , b ) = x ∗ a + y ∗ b gcd(a,b)=x*a+y*b gcd(a,b)=x∗a+y∗bP 3 2 = 6 P_{3}^{2}=6 P32​=6只要一杯8升水代码一般回溯方法的程序结构打印接前面 递归的改造——间隔挑硬币打印所挑选的硬币需要用到回溯。但书上的回溯没…

clickhouse 安装配置

1.clickhouse官网下载安装包&#xff1a; 官网下载地址&#xff1a; https://packages.clickhouse.com/tgz/ 下载四个tgz文件&#xff1a; 1 clickhouse-common-static 2 clickhouse-common-static-dbg 3 clickhouse-server 4 clickhouse-client 2 安装上面1到4的顺序依…

STM32学习记录---jlink使用

SEGGER J-Flash V6.82g下载程序&#xff1b; 硬件&#xff1a;ARM仿真器 swd口 过程&#xff1a; 1.打开软件&#xff0c;会提示是否打开上一次的.jflash文件&#xff1b; 2.新建工程 3.选择器件&#xff0c;找不到&#xff0c;可以找相近的或者相近的核心 4.选择完成&…

IPsec传输模式与隧道模式的深度解析及应用实例

随着网络安全威胁的日益严峻&#xff0c;IPsec作为网络层安全协议&#xff0c;其传输模式与隧道模式的选择对确保通信安全至关重要。本文旨在深入探讨这两种模式的差异&#xff0c;并通过实际案例展示其应用。 一、传输模式和隧道模式的详细描述 传输模式&#xff1a; 应用场景…

A014-基于Spring Boot的家电销售展示平台设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

代码随想录第十六天| 513.找树左下角的值 、112. 路径总和 、113. 路径总和 II、106、从中序与后序遍历序列构造二叉树

513. 找树左下角的值 题目描述 给定一个二叉树&#xff0c;找到树的最后一行最左边的节点值。 解题思路 深度优先遍历 (DFS)&#xff1a;使用深度优先遍历来查找树的左下角值。记录最大深度&#xff1a;定义 maxDepth 变量&#xff0c;用于记录遍历时的最大深度。更新左下角…

triangle_area_calculators库发布

最近将在pip网站上发布triangle_area_calculators库&#xff08;我编写的python第三方库&#xff09; triangle_area_calculators库用于计算不同类型及不同已知量的三角形面积 在triangle_area_calculators库中&#xff0c;有一个名为TriangleAreaCalculators的类 可以通过f…

分布式数据库:核心概念、架构设计及应用实践

随着互联网和大数据技术的迅猛发展&#xff0c;传统单体数据库架构在处理大规模数据、支持高并发访问方面面临严峻挑战。分布式数据库应运而生&#xff0c;以其高可用性、扩展性和容错能力&#xff0c;逐渐成为现代化企业数据库架构的主流选择。本文将系统性地介绍分布式数据库…

2024年北京海淀区中小学生信息学竞赛校级预选赛试题

2024年北京海淀区中小学生信息学竞赛校级预选赛试题 题目总数&#xff1a;24 总分数&#xff1a;100 编程基础知识单选题 第 1 题 单选题 关于 2024年海淀区信息学竞赛的描述错误的是( ) A.报名在网上报名系统进行 B.必须经过学籍所在学校的指导教师审核 C.学校…

软件测试学习笔记丨Vue常用指令-输入绑定(v-model)

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23461 指令 指令是将一些特殊行为应用到页面DOM元素的特殊属性 格式都是以v-开始的&#xff0c;例如&#xff1a; v-model&#xff1a;双向绑定v-if和v-else&#xff1a;元素是否存在v-sho…

PySpark 本地开发环境搭建与实践

目录 一、PySpark 本地开发环境搭建 &#xff08;一&#xff09;Windows 本地 JDK 和 Hadoop 的安装 &#xff08;二&#xff09;Windows 安装 Anaconda &#xff08;三&#xff09;Anaconda 中安装 PySpark &#xff08;四&#xff09;Pycharm 中创建工程 二、编写代码 …

解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析

解决 Spring 异步处理中的 JDK 动态代理问题及相关错误分析 遇到的问题&#xff1a; 在使用 Spring 的 Async 注解开启异步处理时&#xff0c;遇到以下错误&#xff1a; The bean ServiceImplChannel could not be injected as a com.wn.order.pay.recharge.controller.Serv…

UI自动化测试 —— CSS元素定位实践!

前言 自动化测试元素定位是指在自动化测试过程中&#xff0c;通过特定的方法或策略来准确识别和定位页面上的元素&#xff0c;以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。 在自动化测试中&#xf…

封装一个请求的hook(react函数组件)

对于后台系统&#xff0c;上面筛选&#xff0c;下面表格分页的页面&#xff0c;这个hook非常实用 omitBy方法&#xff1a;过滤不为undefined的对象属性 export const omitBy <T extends IObject, K extends keyof T>(object:T, predicate:(value:T[K]) > boolean):I…

AI大模型重塑软件开发:流程、优势、挑战与展望

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

一篇文章教会你,Pycharm 的常用配置及快捷键~

每一位Python开发者都熟悉PyCharm这个强大的IDE&#xff0c;它提供了丰富的功能来提高编程效率。但你是否充分利用了PyCharm的所有配置和快捷键&#xff1f;今天&#xff0c;我们就来深度剖析PyCharm的常用配置和快捷键&#xff0c;让你从入门到精通&#xff0c;提升编程效率&a…

聚划算!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测

聚划算&#xff01;Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测 目录 聚划算&#xff01;Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 聚划算&#xff01;Tran…