国内经典多模态大模型工作1——Qwen-VL系列(Qwen-VL、Qwen2-VL解读)

Qwen-VL

论文标题:《Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond》
论文链接:https://arxiv.org/pdf/2308.12966.pdf
项目:https://github.com/QwenLM/Qwen-VL/tree/master

模型

基本架构

  1. LLM:使用了来自Qwen-7B模型的预训练权重
  2. 视觉编码器:采用了Vision Transformer(ViT)架构,用于处理输入图像并生成一组图像特征。在训练和推理过程中,将输入图像调整到特定的分辨率,然后通过将图像分割成大小为14的图块来处理它们。预训练权重来自于OpenAI的clip的ViT-bigG。
  3. 位置感知的视觉-语言适配器(Position-aware Vision-Language Adapter):为了缩短图像token长度,同时作模态映射的模块。由一个单层的交叉注意力模块构成,使用一组可训练的向量(嵌入)作为查询向量,使用来自视觉编码器的图像特征作为交叉注意力操作的键。随机初始化。

各部分参数量:
在这里插入图片描述

位置感知的视觉-语言适配器(Position-aware Vision-Language Adapter)

作用

该组件的作用在于使得长序列的图像特征变得更加紧凑,从而提高了处理效率。同时,考虑到位置信息可以帮助模型更准确地理解图像细节,因此在压缩过程中保留了这方面的信息。

实现

该适配器由一个单层交叉注意力模块组成。
模块使用一组可训练的向量(嵌入)作为查询向量,使用来自视觉编码器的图像特征作为键进行交叉注意力操作。
将图像特征序列压缩成了固定长度的256。
考虑到图像中位置信息的重要性,作者引入了2D绝对位置编码到交叉注意力机制的查询-键对中。

训练

在这里插入图片描述
stage1:预训练,目标是使用大量的图文对数据对齐视觉模块和LLM的模态,这个阶段冻结LLM模块的参数;
stage2:多任务预训练,使用更高质量的图文多任务数据(主要来源自开源VL任务,部分自建数据集),更高的图片像素输入,全参数训练;
stage3:指令微调阶段,这个阶段冻结视觉Encoder模块,使用的数据主要来自大模型Self-Instruction方式自动生成,目标是提升模型的指令遵循和多轮对话能力。

具体实现

stage1 预训练
训练设置
  1. 在Qwen-VL模型的第一个预训练阶段,针对文本标记的训练目标是最小化文本标记的交叉熵(cross-entropy)。具体来说,模型的任务是尽量减小文本标记的预测与真实标记之间的差距,以提高文本生成的准确性。
  2. 使用了AdamW优化器:β1 = 0.9,β2 = 0.98,ε(eps)= 1e−6
  3. 余弦学习率调度,最大学习率设置为2e−4,最小学习率为1e−6,并使用了线性热身(linear warm-up)的方法,热身步数为500步。
  4. 权重衰减(weight decay)为5e−2和梯度剪切(gradient clipping)为1.0来优化模型的训练过程。
数据

在这里插入图片描述

stage2 多任务预训练阶段
设置

在第二个多任务预训练阶段:

  • Qwen-VL模型采用了高质量和细粒度的视觉-语言(VL)标注数据
  • 采用了更大的输入分辨率和交错的图像-文本数据

具体来说,Qwen-VL模型在第二个预训练阶段同时进行了以下七个任务的训练:

  • 图像描述(Captioning)
  • 视觉问答(VQA)
  • 定位任务(Grounding)
  • 参考定位和定位描述的双重任务(Ref Grounding 和 Grounded Cap.)
  • 光学字符识别(OCR)
  • 文本生成(Text Generation)

将视觉编码器的输入分辨率从224 x 224增加到448 x 448,以减少图像下采样导致的信息损失。我们解锁了大型语言模型,并训练整个模型。训练目标与预训练阶段相同。使用AdamW优化器,β1=0.9,β2=0.98,eps=1e-6。我们训练了19000步,热身400步,采用余弦学习率调度。

数据

在这里插入图片描述
在这里插入图片描述

stage3 监督微调

通过指令微调对Qwen-VL预训练模型进行了微调,以增强其遵循指令和对话能力,得到交互式的Qwen-VL-Chat模型。多模态指令微调数据主要来自通过LLM自我指令生成的字幕数据或对话数据,这些数据通常只涉及单图像对话和推理,并仅限于图像内容理解。
训练过程中混合了多模态和纯文本对话数据,以确保模型在对话能力上的通用性。
数据量为35万。

只监督答案和特殊标记(示例中的蓝色部分),而不监督角色名称或问题提示,以确保预测和训练分布之间的一致性。在这一阶段,我们冻结视觉编码器,优化语言模型和适配器模块。具体来说,Qwen-VL-Chat的全局batch大小为128,学习率计划的最大学习率为1e-5,最小学习率为1e-6,线性热身3000步。

添加图像标识:在对话中,为了区分不同的图像输入,作者在每个图像前添加了一个形如"Picture id:"的字符串,其中id对应了图像输入的顺序。
对话格式设计:作者使用了ChatML格式来构建指导微调的数据集。在这个格式中,每个对话交互的陈述都被标记了两个特殊的token((<|im_start|> and <|im_end|>),用于便于对话的终止。
在这里插入图片描述

数据

  1. Qwen-VL模型的第一个预训练阶段使用了一个大规模、弱标记的、通过网络爬取得到的图像文本对数据集。这个预训练数据集包括了来自公开资源和部分内部数据的图像文本对。为了保证数据质量,研究人员对数据集进行了清理,去除了其中的某些模式。在清理后,原始数据集中包含了50亿对图像文本对,而剩余的数据经过处理后仍然有14亿对,其中77.3%为英文文本,22.7%为中文文本。
  2. 为了增强模型对细节的理解和定位能力,Qwen-VL的训练过程涵盖了数据形式,包括了区域描述、问题和检测。与传统的图像-文本任务不同,这些数据形式要求模型准确理解和生成符合指定格式的区域描述。
  3. 各阶段数据规模:(1)5B (2)76.8 M (3) 350k
  4. 改善OCR任务表现:(1)收集pdf和HTML格式的数据,(2)生成合成OCR数据
  5. 边界框输入和输出的处理:(1)首先进行了一个归一化处理,将其范围限定在[0, 1000)之间,(2)将归一化后的边界框转化成了一个特定的字符串格式:“(X_top left,Y_top left),(X_bottom right,Y_bottom right)”。(3)这个字符串被看作文本进行处理,无需额外的位置词汇;(4)为了区分检测字符串和普通文本字符串,作者在边界框字符串的开始和结束处添加了两个特殊的标记< box >< /box >
  6. 数据清洗:Qwen-VL对数据的精细化清洗:在1阶段的pre-training中,Qwen-VL使用的的是公开数据集的图像文本对,其中包含了大量的噪声,为了清洗数据,Qwen-VL做了如下几个步骤:
    移除图像长宽比过大的对
    移除图像过小的对
    根据CLIP评分移除质量较差的对(不同的数据集使用的不同的阈值)
    移除文本中含有非英文或非中文字符的对
    移除文本中含有表情符号的对
    移除文本长度过短或过长的对
    清理文本中的HTML标签部分
    根据特定不规则模式清理文本(个人认为就是一些硬规则+正则表达式)

训练参数:

在这里插入图片描述

Qwen2-VL

论文标题:《Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution》
论文:https://arxiv.org/pdf/2409.12191
项目:https://github.com/QwenLM/Qwen2-VL

当前最强的开源MLLM之一。与上一代相比支持动态分辨率,视频理解,以及Agent能力。放出了3种规模的模型。
在这里插入图片描述

Qwen2-VL系列旨在重新定义传统的固定分辨率视觉处理方法,解决了在处理不同分辨率图像时的效率和准确性问题。主要是引入了“Naive Dynamic Resolution”机制,使模型能够动态处理不同分辨率的图像,并生成不同数量的视觉tokens,从而提升视觉表示的效率和准确性。

模型

在这里插入图片描述

基本架构

LLM+视觉编码器结构,无adapter。
LLM:Qwen2
视觉编码器:实现了一种具有大约675百万参数的ViT,能够处理图像和视频输入。

原生动态分辨率 Naive Dynamic Resolution

Qwen2-VL现在可以处理任意分辨率的图像,动态将其转换为可变数量的视觉tokens。为支持此功能,修改了ViT,去除了原始的绝对位置嵌入,并引入了2D-RoPE,以捕捉图像的二维位置信息。

在推理阶段,不同分辨率的图像被打包成一个单一序列,打包长度受到控制,以限制GPU内存使用。此外,为减少每幅图像的视觉tokens,在ViT后采用了一个简单的多层感知器(MLP)层,将相邻的2×2个tokens压缩为一个token,并在压缩的视觉tokens的开头和结尾放置特殊的<|vision_start|>和<|vision_end|> tokens。因此,分辨率为224×224的图像在使用patch_size=14的ViT编码后,将在进入LLM之前压缩为66个tokens(16*16/4+2)。

多模态旋转位置嵌入 Multimodal Rotary Position Embedding (M-RoPE)

在这里插入图片描述

与传统的1D-RoPE(用于LLM)仅能编码一维位置信息不同,M-RoPE有效地建模了多模态输入的位置信息。这通过将原始旋转embedding分解为三个组成部分:时间、高度和宽度来实现。对于文本输入,这些组件使用相同的位置ID,使得M-RoPE在功能上等同于1D-RoPE。
在处理图像时,每个视觉token的时间ID保持不变,而高度和宽度组件则根据token在图像中的位置分配不同的ID。对于视频,视为一系列帧,每帧的时间ID递增,而高度和宽度组件遵循与图像相同的ID分配模式。在输入包含多种模态的情况下,每种模态的位置编号通过将前一模态的最大位置ID +1 来初始化(如图中文本输入的第一个位置编码为4)。M-RoPE不仅增强了位置信息的建模,还减少了图像和视频的位置ID值,使模型在推理时能够推断更长的序列。

统一的图像与视频理解

Qwen2-VL采用混合训练方案,结合图像和视频数据,确保在图像理解和视频理解方面的熟练度。为了尽可能完整地保留视频信息,以每秒两帧的频率采样每个视频。此外,将3D卷积与深度为二的卷积结合,以处理视频输入,使模型能够处理3D pipeline 而非2D块,从而在不增加序列长度的情况下处理更多视频帧。
为了保持一致性,每幅图像被视为两个相同的帧组成的视频。为了平衡长视频处理的计算需求与整体训练效率,动态调整每个视频帧的分辨率,将每个视频的总tokens数限制为16384。该训练方法在模型理解长视频的能力与训练效率之间取得了平衡。

训练

遵循Qwen-VL,采用三阶段训练方法。

  1. Stage1: 专注于训练ViT组件,利用大量图像-文本对提升大型语言模型(LLM)的语义理解。
  2. Stage2:全参训练,使用更广泛的数据进行更全面的学习。
  3. Stage3:冻结ViT,使用指令数据集进行LLM的微调。

Stage1 预训练

包括图像-文本对、光学字符识别(OCR)数据、交错的图像-文本文章、视觉问答数据集、视频对话和图像知识数据集。数据源主要来自清理过的网页、开源数据集和合成数据,数据截止日期为2023年6月。

在初始预训练阶段,Qwen2-VL接触到约6000亿个tokens。Qwen2-VL的LLM组件使用Qwen2中的参数初始化,而视觉编码器则基于DFN的ViT初始化。原DFN ViT中的固定位置embedding被RoPE-2D替代。此阶段主要学习图像-文本关系、通过OCR进行文本内容识别、图像分类任务,为模型建立视觉-文本关联的扎实基础。

Stage2 多任务预训练

涉及额外的8000亿个与图像相关的数据。此阶段引入了更多混合图像-文本内容,促进了对视觉和文本信息之间相互作用的更细致理解。视觉问答数据集的纳入提升了模型对图像相关查询的响应能力,同时,多任务数据集的引入对模型同时处理多种任务的能力至关重要,这在处理复杂的现实世界数据集时尤为重要。纯文本数据继续在维持和提高模型语言能力方面发挥关键作用。

在整个预训练阶段,Qwen2-VL处理了总计1.4万亿个tokens,包括文本tokens和图像tokens。然而,训练过程中仅对文本tokens提供监督。

Stage3 指令微调

采用ChatML格式构建指令跟随数据集。该数据集不仅包括纯文本对话数据,还包含多模态对话数据。包括:图像问答、文档解析、多图像比较、视频理解、视频流对话和基于代理的交互。

数据

数据格式

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

对话数据

使用ChatML格式构建指令调优数据集,每个交互的陈述用两个特殊tokens(<|im_start|>和<|im_end|>),以便于对话的结束。蓝色tokens的部分表示受监督的部分。
在这里插入图片描述

视觉定位

为了赋予模型视觉定位能力,边界框坐标被标准化到[0, 1000)范围内,并表示为左上和右下的像素点坐标。
Tokens <|box_start|>和<|box_end|>用于标记边界框文本。为了准确地将边界框与其文本描述联系起来,引入了tokens <|object_ref_start|>和<|object_ref_end|>,以指示边界框所引用的内容,从而使模型能够有效地解释和生成特定区域的精确描述。
在这里插入图片描述

视觉代理

为了将Qwen2-VL发展为通用的VL-Agent,将各种代理任务(如UI操作、机器人控制、游戏和导航)视为顺序决策问题,使Qwen2-VL能够通过多步行动执行来完成任务。对于每个任务,首先定义一组可允许的动作和关键词模式(下划线)以供功能调用。然后,Qwen2-VL分析观察结果,进行推理和规划,执行所选动作,并与环境互动以获取新观察。这一循环反复进行,直到任务成功完成。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DAMA数据管理知识体系(第13章 数据质量)

课本内容 13.1 引言 语境图 图13-1 语境关系图&#xff1a;数据质量业务驱动因素 1&#xff09;提高组织数据价值和数据利用的机会。2&#xff09;降低低质量数据导致的风险和成本。3&#xff09;提高组织效率和生产力。4&#xff09;保护和提高组织的声誉。 提机会、降成本、增…

3D看车如何实现?有哪些功能特点和优势?

3D看车是一种创新的汽车展示方式&#xff0c;它利用三维建模和虚拟现实技术&#xff0c;将汽车以更真实、更立体的形式呈现在消费者面前。 一、3D看车的实现方式 1、三维建模&#xff1a; 通过三维建模技术&#xff0c;按照1:1的比例还原汽车外观&#xff0c;包括车身线条、细…

yolov8/9/10/11模型在中医舌苔分类识别中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、10、11模型在中医舌苔分类识别中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高&#xff0c;对于中医主张的理念越来越认可&#xff0c;对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察&#xff0c;仅仅通过这…

大数据新视界 --大数据大厂之 GraphQL 在大数据查询中的创新应用:优化数据获取效率

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

《Programming from the Ground Up》阅读笔记:p181-p216

《Programming from the Ground Up》学习第10天&#xff0c;p181-p216总结&#xff0c;总计34页。 一、技术总结 第10章主要讲计算机是如何计算的&#xff0c;如十进制、二进制、八进制、十六进制以及浮点数和负数的表示。属于比较基础的内容&#xff0c;如果有一定基础&…

(Linux和数据库)1.Linux操作系统和常用命令

了解Linux操作系统介绍 除了办公和玩游戏之外不用Linux&#xff0c;其他地方都要使用Linux&#xff08;it相关&#xff09; iOS的本质是unix&#xff08;unix是付费版本的操作系统&#xff09; unix和Linux之间很相似 Linux文件系统和目录 bin目录--放工具使用的 操作Linux远程…

2023 CCPC哈尔滨 报告

比赛链接&#xff1a;Dashboard - 10.6组队训练赛-2023CCPC哈尔滨站 - Codeforceshttps://codeforces.com/group/w6iGs8kreW/contest/552949 做题数&#xff1a;3 题 三题都是队友写的。所以来补一下 B L J。 B题&#xff1a; B. Memory Little G used to be a participant …

计算机毕业设计 内蒙古旅游景点数据分析系统的设计与实现 Python毕业设计 Python毕业设计选题 Spark 大数据【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Http 协议和 RPC 协议有什么区别?

Http 协议和 RPC 协议有什么区别&#xff1f; 三个层面来述说&#xff1a; 从功能特性来说&#xff1a; HTTP是一个属于应用层的超文本传输协议&#xff0c;是万维网数据通信的基础&#xff0c;主要服务在网页端和服务端的数据传输上。 RPC是一个远程过程调用协议&#xff0…

安装Unity3D并配置VisualStudio

安装Unity3D并配置VisualStudio 由于近期课程要求&#xff0c;需要在电脑上安装Unity3D并配置VisualStudio&#xff0c;所以顺便写了本篇博文 1.下载Unity Hub 首先我们找到Unity中文官网&#xff0c;下载Unity Hub&#xff0c;它可以帮助我们管理我们的Unity项目和版本&#…

c++11~c++20 thread_local

线程局部存储是指对象内存在线程开始后分配&#xff0c;线程结束时回收且每个线程有该对象自己的实例&#xff0c;简单地说&#xff0c;线程局部存储的对象都是独立各个线程的。实际上这并不是一个新鲜个概念&#xff0c;虽然C一直没因在语言层面支持它&#xff0c;但是很早之前…

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优

处理Java内存溢出问题&#xff08;java.lang.OutOfMemoryError&#xff09;&#xff1a;增加JVM堆内存与调优 在进行压力测试时&#xff0c;遇到java.lang.OutOfMemoryError: Java heap space错误或者nginx报错no live upstreams while connecting to upstream通常意味着应用的…

【斯坦福CS144】Lab4

一、实验目的 完成一个网络接口实现。 二、实验内容 完成一个网络接口实现&#xff0c;其大部分工作是&#xff1a;为每个下一跳IP地址查找(和缓存)以太网地址。而这种协议被称为地址解析协议ARP。 三、实验过程 在minnow目录下输入git merge origin/check4-startercode获…

DAMA数据管理知识体系(第15章 数据管理成熟度评估)

课本内容 15.1 引言 概要 能力成熟度评估&#xff08;Capability Maturity Assessment&#xff0c;CMA&#xff09;是一种基于能力成熟度模型&#xff08;Capability Maturity Model&#xff0c;CMM&#xff09;框架的能力提升方案&#xff0c;描述了数据管理能力初始状态发展到…

简易登录注册;测试类;postman测试;

项目是如何创建的&#xff0c;最简易的登陆注册功能是怎么实现的&#xff0c;数据库不能明文存放密码&#xff0c;密码经过了怎么样的处理存入数据库 前端使用nodejs18 后端项目需要等待maven加载完相关依赖&#xff0c;后端使用java17 1后端 1.1 创建项目所需要的数据库 内…

Sentinel最全笔记,详细使用步骤教程清单

一、Sentinel的基本功能 1、流量控制 流量控制在网络传输中是一个常用的概念&#xff0c;它用于调整网络包的发送数据。然而&#xff0c;从系统稳定性角度考虑&#xff0c;在处理请求的速度上&#xff0c;也有非常多的讲究。任意时间到来的请求往往是随机不可控的&#xff0c;…

Unity转Unreal5之从入门到精通 Spline(样条曲线)组件的使用

前言 Spline 组件 能编辑 样条曲线,定义一条路径,路径上的点可以通过距离起点的长度获取,因此可以实现 物体沿路径连续移动 的效果或者 物体沿路径分布 的效果。 今天我们就来实现一个简单的Spline样条曲线的Demo 实现一个沿路径运动的功能 1.新建一个基于 Actor 的蓝图…

ICE/TURN/STUN/Coturn服务器搭建

ICE 当我们想要实现在公网环境下的语音/视频通话功能时&#xff0c;就需要用到ICE交互式连接建立。ICE不是一种协议&#xff0c;整合了 STUN 和 TURN 两种协议&#xff08;用于 NAT 穿透&#xff09;的框架。 ICE的主要目标是解决NAT&#xff08;网络地址转换&#xff09;穿越…

[ C++ ] C++ 类和对象 -- 类的六个默认成员函数

目录 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值操作符重载 5.两个取地址操作符的重载 在C中当你创建一个空类&#xff0c;那这个空类是什么都没有吗&#xff1f;不是的&#xff0c;编译器会默认帮你生成六个成员函数 1.构造函数 构造函数是特殊的成员函数&#xff0c;…

leetcode 10.9 94.二叉树的中序遍历

94. 二叉树的中序遍历 已解答 简单 相关标签 相关企业 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a…