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

news2024/10/9 21:45:24

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.coloradmin.cn/o/2200108.html

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

相关文章

如何构建某一行业的知识图谱

构建一个行业的知识图谱是一个系统而复杂的过程&#xff0c;它涉及到数据收集、处理、分析等多个环节。以下是构建行业知识图谱的基本步骤&#xff1a; 1. 需求分析&#xff1a; - 明确构建知识图谱的目的和应用场景&#xff0c;比如是用于辅助决策、市场分析、产品推荐等。…

【python机器学习】线性回归 拟合 欠拟合与过拟合 以及波士顿房价预估案例

文章目录 线性回归之波士顿房价预测案例 欠拟合与过拟合线性回归API 介绍:波士顿房价预测数据属性:机器学习代码实现 拟合 过拟合 欠拟合 模拟 及处理方法(正则化处理)导包定义函数表示欠拟合定义函数表示拟合定义函数表示过拟合 正则化处理过拟合L1正则化L2正则化 线性回归之波…

李沐 X动手学深度学习 数据操作+数据预处理 学习笔记(无代码,纯理论部分)

数据结构介绍 机器学习和神经网络最主要的的数据结构&#xff1a;N维数组0维数组&#xff1a;标量&#xff0c;eg:1.0&#xff08;是一个浮点数&#xff0c;可能表示一个类别&#xff09;1维数组&#xff1a;向量&#xff0c;eg:[1.0, 2.7, 3.4]&#xff08;特征向量&#xf…

Java中System类和RunTime类的Api

目录 System 类 1)out 2)err 3)in 4)currentTimeMillis() 5)nanoTime() 6)arraycopy(Object 要从里面复制东西的数组, int 要从里面复制东西数组的索引起始位置, Object 获得复制元素的数组, int 获得复制元素数组的起始索引, int 要复制东西的个数) 7)gc() 8)exit(int status)…

Miniconda 入门级使用教程

前言 Miniconda是一个更小的Anaconda发行版&#xff08;Anaconda是一个包含大量预装数据科学和机器学习库的Python发行版&#xff09;&#xff0c;它只包含conda包管理器和Python以及其必要的库。Miniconda的目的是提供一个更轻量级的选项来安装和运行conda环境&#xff0c;同…

动态轻量级线程池项目

动态线程池&#xff1a; 使用线程池ThreadPoolExecutor过程中你是否有以下痛点呢&#xff1f; ① 代码中创建了一个ThreadPoolExecutor&#xff0c;但是不知道参数设置多少比较合适。 ② 凭经验设置参数值&#xff0c;上线后发现需要调整&#xff0c;改代码重新发布服务&…

电脑缺失msvcr120.dll怎样修复,马上教你6种修复方法

在用电脑的时候&#xff0c;经常会碰到各种错误提示&#xff0c;比如“msvcr120.dll丢失”&#xff0c;导致的结果就是某些程序无法正常启动。那么&#xff0c;这个dll文件到底是啥&#xff0c;为什么会丢失&#xff0c;怎么解决呢&#xff1f;将通过这篇文章详细解释一下&…

Agent心理诊所上线!基于1.3K抑郁症问诊对话,上海交大团队搭建大模型对话Agent,可初诊抑郁症

心理健康问题是当今社会最大的挑战之一&#xff0c;根据 WHO 的世界心理健康报告&#xff0c;约有 2 亿 4,600 万人患有抑郁障碍&#xff0c;平均每 10 万人中就有 3,153 个案例&#xff0c;可以说&#xff0c;这是最常见的精神障碍之一。 然而&#xff0c;如今在心理健康方面…

终于有人把思科认证全部说清楚了

思科作为全球领先的网络设备供应商&#xff0c;其认证体系在全球范围内被广泛认可&#xff1b; 但是大部分了解的朋友都只知道CCNA、CCNP和CCIE&#xff0c;但对思科的整个系统不是很清楚。 随着Cisco产品线的扩大和市场份额的不断提升&#xff0c;Cisco认证产品从当初仅有的路…

Kubernetes的Pod调度:让你的应用像乘坐头等舱!

一、Kubernetes 中 Pod 调度的重要性 在 Kubernetes 的世界里&#xff0c;Pod 调度就像是一个繁忙的交通指挥官&#xff0c;负责把小车&#xff08;也就是我们的 Pod&#xff09;送到最合适的停车位&#xff08;节点&#xff09;。调度不仅关乎资源的合理利用&#xff0c;还关乎…

【投稿优惠|稳定检索】2024 年信息学、网络与电子工程国际会议(INEE 2024)

2024 年信息学、网络与电子工程国际会议 2024 International Conference on Informatics, Networks, and Electronic Engineering 【1】大会信息 会议名称&#xff1a;2024 年信息学、网络与电子工程国际会议 会议简称&#xff1a;INEE 2024 大会时间&#xff1a;请查看官网 …

P-Tuning v2:一种普遍有效的提示调整方法

人工智能咨询培训老师叶梓 转载标明出处 预训练语言模型通过微调&#xff08;fine-tuning&#xff09;来适应特定任务虽然效果显著&#xff0c;但存在训练成本高、参数存储量大等问题。为了解决这些问题&#xff0c;清华大学的研究者们提出了一种名为P-Tuning v2的提示调整&am…

whistle配合app抓包

whistle配合app抓包 1.前置准备2.手机配置3.手机安装证书1.前置准备 下载启动whistle,本例使用默认的127.0.0.1:8899 需要保证Capture TUNNEL CONNECTS处在开启状态: 输入命令:w2 start,获取当前局域网的ip地址,并记录: 2.手机配置 打开无线局域网连接dxm_phone,配置…

Codeforces Round 833 (Div. 2)

比赛链接&#xff1a;Dashboard - Codeforces Round 833 (Div. 2) - Codeforces B. Diverse Substrings 题意&#xff1a; 思路&#xff1a; 当字符串长度 > 10 时&#xff0c;每个字符出现的次数至少是 2 次 ( 0 ~ 9 个出现一次&#xff0c;剩余字符出现 ) 当字符串长度…

Kali Linux 下载与安装手册

目录 Kali 是什么&#xff1f; 通过Kali官方网站下载 Kali 是什么&#xff1f; Kali Linux&#xff0c;前称BackTrack&#xff0c;是一个基于Debian的Linux发行版&#xff0c;专为数字取证和渗透测试而设计。它由Offensive Security Ltd.开发和维护&#xff0c;旨在为安全专…

10.10 题目总结(累计)

1.完成所有任务需要的最少轮数(思路) 思路:将数组的数依次放到map里面,如果有相同则在原有的基础上加一,然后全部放完之后,就遍历map,然后计算总次数,然后有一次的的则直接返回. AC: class Solution {public int minimumRounds(int[] tasks) {HashMap<Integer, Integer>…

【C++】--类和对象(3)

&#x1f911;个人主页: 起名字真南 &#x1f911;个人专栏:【数据结构初阶】 【C语言】 【C】 目录 1 深入构造函数2 类型转换3 static成员4 友元函数5 内部类6 匿名对象 1 深入构造函数 之前我们实现构造函数的时候&#xff0c;初始化成员变量都是在函数体内赋值&#xff0c…

linux-冯诺伊曼体系结构以及操作系统

冯诺依曼体系结构 我们不畅见到计算机&#xff0c;如笔记本&#xff0c;不常见的如服务器&#xff0c;大部分都遵循着冯诺伊曼体系结构 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由一个个硬件组件组成。 输入单元&#xff1a;包括键盘 , 鼠标&#xff0c;扫描…

鸿蒙开发之ArkUI 界面篇 二十四 计数器案例

计数器案例&#xff0c;点击’-‘按钮&#xff0c;数字减少1&#xff0c;点击啊‘’按钮&#xff0c;数字加一 分析&#xff1a;这里需要三个组件&#xff0c;外层容器是Row&#xff0c;从左往右的组件分别是ButtonTextButton&#xff0c;涉及到修改更新界面&#xff0c;变量需…

Java语言教程:打造你的第一款五子棋游戏 JAVA学习攻略心得总结

目录 Java语言教程&#xff1a;打造你的第一款五子棋游戏 游戏简介 游戏代码 自学Java攻略及功能 1. Java基础知识 2. 面向对象编程&#xff08;OOP&#xff09; Java简介 游戏简介 五子棋&#xff0c;又称连珠&#xff0c;是一种两人对弈的棋类游戏。五子棋的规则简单易…