【LLM多模态】Qwen-VL模型结构和训练流程

news2024/11/20 21:17:46

note

  • 观点:现有很多多模态大模型是基于预训练(和SFT对齐)的语言模型,将视觉特征token化并对齐到语言空间中,利用语言模型得到多模态LLM的输出。如何设计更好的图像tokenizer以及定位语言模型在多模态LLM中的作用很重要。

文章目录

  • note
  • 一、Qwen-VL模型
    • 1. 整体架构
    • 2. Position-aware Vision-Language Adapter作用
  • 二、训练过程
    • Q2. 针对文本标记的训练目标是什么?使用了什么优化器和学习率调度?
    • Q3. 这个阶段的训练过程持续了多少步骤?消耗了多少图像文本样本和图像文本标记?
    • Q4. 在第二个多任务预训练阶段,Qwen-VL模型是如何进行训练的?有哪些任务并行进行训练?
    • Q8. 在监督微调阶段,Qwen-VL模型是如何通过指导微调来增强交互和对话能力的?
    • Q9. 文章提到了如何适应多图像对话和多图像输入,可以解释一下这个过程吗?
  • 三、数据相关
    • Q1. Qwen-VL模型的第一个预训练阶段使用了怎样的数据集?这个数据集经过了哪些处理?
    • Q5. 为了增强模型对细节的理解和定位能力,Qwen-VL的训练过程中涵盖了哪些数据形式?这些数据形式与传统的图像-文本任务有何不同?
    • Q6. 用于视觉问答(VQA)任务的数据集包括哪些?
    • Q7. 如何改善与文本相关的任务?从哪里获取了额外的数据?
    • Q9. SFT数据的规模是多少?
  • 四、关键问题
    • Q3. 对于Qwen-VL模型的输入,图像是如何处理的?它们经过视觉编码器和适配器后得到了怎样的特征序列?
    • Q4. 为了区分图像特征输入和文本特征输入,作者引入了哪两个特殊的标记?这两个标记分别代表了什么意义?
    • Q6. 作者提到了如何处理边界框输入和输出,这个处理过程包括哪些具体步骤?
  • Reference

一、Qwen-VL模型

链接:https://arxiv.org/pdf/2308.12966.pdf
项目:https://github.com/QwenLM/Qwen-VL/tree/master
demo:https://modelscope.cn/studios/qwen/Qwen-VL-Chat-Demo/summary

在这里插入图片描述

1. 整体架构

Qwen-VL模型的整体网络架构包括以下三个组件:

大型语言模型(Large Language Model):

  • 作用:作为Qwen-VL模型的基础组件,这个部分采用了一个大型语言模型,其初始权重来自于预训练的Qwen-7B模型。
  • 来源:Qwen-VL的大型语言模型使用了来自Qwen-7B模型的预训练权重。

视觉编码器(Visual Encoder):

  • 作用:视觉编码器采用了Vision Transformer(ViT)架构,用于处理输入图像并生成一组图像特征。在训练和推理过程中,将输入图像调整到特定的分辨率,然后通过将图像分割成大小为14的图块来处理它们,生成图像特征。
  • 来源:视觉编码器的架构和预训练权重来自于Openclip的ViT-bigG模型。

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

  • 作用:为了缓解由于长图像特征序列而产生的效率问题,Qwen-VL引入了一个视觉-语言适配器,用于压缩图像特征。适配器包括一个单层的交叉注意力模块,随机初始化。

    • 此模块使用一组可训练的向量(嵌入)作为查询向量,使用来自视觉编码器的图像特征作为交叉注意力操作的键
    • 这个机制将视觉特征序列压缩到固定长度的256。
  • 来源:适配器的初始化是随机的。

这三个组件共同构成了Qwen-VL模型的整体网络架构,实现了对图像和文本的综合理解与处理。

2. Position-aware Vision-Language Adapter作用

Qwen-VL中的“Position-aware Vision-Language Adapter”是一个组件,其作用是为了解决长序列的图像特征在效率上的问题。具体来说,它的工作方式如下:

(1)压缩图像特征序列:

  • 该适配器由一个单层交叉注意力模块组成,它的初始化是随机的。
  • 模块使用一组可训练的向量(嵌入)作为查询向量,使用来自视觉编码器的图像特征作为键进行交叉注意力操作。
  • 这个机制将图像特征序列压缩成了固定长度的256。

(2)考虑位置信息:

  • 为了保留对细节的理解,考虑到位置信息的重要性,作者引入了2D绝对位置编码到交叉注意力机制的查询-键对中。关于2D的位置编码可以参考苏神-Transformer升级之路:17、多模态编码位置的简单思考。
  • 这个操作的目的是在压缩的过程中尽量减小位置信息的丢失。

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

在处理大量的图像特征时,尤其是在序列非常长的情况下,直接传递可能会导致效率问题。通过引入这个“Position-aware Vision-Language Adapter”,可以有效地处理长序列,提高了模型的整体性能。

二、训练过程

在这里插入图片描述

• Stage1 为预训练,目标是使用大量的图文Pair对数据对齐视觉模块和LLM的特征,这个阶段冻结LLM模块的参数;

• Stage2 为多任务预训练,使用更高质量的图文多任务数据(主要来源自开源VL任务,部分自建数据集),更高的图片像素输入,全参数训练;

• Stage3 为指令微调阶段,这个阶段冻结视觉Encoder模块,使用的数据主要来自大模型Self-Instruction方式自动生成,目标是提升模型的指令遵循和多轮对话能力

Q2. 针对文本标记的训练目标是什么?使用了什么优化器和学习率调度?

(1)在Qwen-VL模型的第一个预训练阶段,针对文本标记的训练目标是最小化文本标记的交叉熵(cross-entropy)。具体来说,模型的任务是尽量减小文本标记的预测与真实标记之间的差距,以提高文本生成的准确性。

在这个阶段,作者使用了AdamW优化器,并设置了以下超参数:

  • β1 = 0.9

  • β2 = 0.98

  • ε(eps)= 1e−6

(2)对于学习率调度,作者采用了余弦学习率调度(cosine learning rate schedule)。最大学习率(maximum learning rate)被设置为2e−4,最小学习率(minimum learning rate)为1e−6,并使用了线性热身(linear warm-up)的方法,热身步数为500步。

(3)使用了权重衰减(weight decay)为5e−2和梯度剪切(gradient clipping)为1.0来优化模型的训练过程。

这些优化器和学习率调度的选择旨在帮助模型更好地学习图像与文本之间的关联关系,从而实现文本标记的准确性提高。

Q3. 这个阶段的训练过程持续了多少步骤?消耗了多少图像文本样本和图像文本标记?

在第一个预训练阶段,训练过程持续了50000步,消耗了大约15亿的图像文本样本和5000亿的图像文本tokens。
在这里插入图片描述
多任务预训练阶段(3.2)
We unlocked the large language model and trained the whole model. The training objective is the same as the pre-training stage.

Q4. 在第二个多任务预训练阶段,Qwen-VL模型是如何进行训练的?有哪些任务并行进行训练?

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

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

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

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

在这个阶段,作者综合利用了不同的数据源和任务,使得模型能够在多方面进行训练,从而提升其对于图像与文本的综合理解能力。

Q8. 在监督微调阶段,Qwen-VL模型是如何通过指导微调来增强交互和对话能力的?

在监督微调阶段,Qwen-VL模型通过引入额外的指导微调数据来提升其交互和对话能力,从而生成了交互式的Qwen-VL-Chat模型。这些多模态的指导调整数据主要来自于图像描述或对话数据,这些数据可以通过LLM(Large Language Model)自我训练生成。然而,这些数据通常只涵盖了单一图像对话和推理,且仅限于对图像内容的理解。因此,作者们通过手动标注、模型生成和策略串联等方法构建了一组额外的对话数据,以将定位和多图像理解能力融入到Qwen-VL模型中。

这样做的目的是确保模型可以有效地将这些能力传递到更广泛的语言和问题类型中,从而提升了模型在交互和对话方面的性能。在这个阶段,作者们将模型的视觉编码器冻结,仅优化语言模型和适配器模块,以保证模型的训练稳定和有效。

训练Qwen-VL-Chat模型的微调参数设定:

  • 全局批次大小为128的训练方式
  • 使用了具有最大学习率1e-5、最小学习率1e-6和线性预热3000步的学习率调度。

Q9. 文章提到了如何适应多图像对话和多图像输入,可以解释一下这个过程吗?

在Qwen-VL模型的训练过程中,为了适应多图像对话和多图像输入,作者采取了一些措施:

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

以下是一个示例:
在这里插入图片描述

通过这样的设计,模型可以更好地理解多图像对话,并能够根据用户提供的不同图像进行交互。这种方式有助于模型适应处理多个图像输入的场景。

在训练过程中,只对答案和特殊标记(上例中为蓝色)进行监督,而不监督角色名称或问题提示。在这个阶段,视觉编码器被冻结,只优化语言模型和适配器模块。具体来说,Qwen-VL-Chat模型以全局批次大小为128进行训练,采用学习率调度,最大学习率为1e−5,最小学习率为1e−6,线性预热3000步。

三、数据相关

Q1. Qwen-VL模型的第一个预训练阶段使用了怎样的数据集?这个数据集经过了哪些处理?

在这里插入图片描述

Qwen-VL模型的第一个预训练阶段使用了一个大规模、弱标记的、通过网络爬取得到的图像文本对数据集。这个预训练数据集包括了来自公开资源和部分内部数据的图像文本对。为了保证数据质量,研究人员对数据集进行了清理,去除了其中的某些模式。在清理后,原始数据集中包含了50亿对图像文本对,而剩余的数据经过处理后仍然有14亿对,其中77.3%为英文文本,22.7%为中文文本

Q5. 为了增强模型对细节的理解和定位能力,Qwen-VL的训练过程中涵盖了哪些数据形式?这些数据形式与传统的图像-文本任务有何不同?

为了增强模型对细节的理解和定位能力,Qwen-VL的训练过程涵盖了数据形式,包括了区域描述、问题和检测。与传统的图像-文本任务不同,这些数据形式要求模型准确理解和生成符合指定格式的区域描述。

具体来说,Qwen-VL的训练数据包括了以下内容:

  • 区域描述(Region Descriptions):这是描述图像中特定区域的文本,通常包括了区域的位置、特征或属性等信息。
  • 问题(Questions):与区域描述相关的问题,模型需要理解问题并生成相应的回答。
  • 检测(Detections):这些是图像中的检测结果,通常与区域描述和问题相关联。检测结果可以包括了图像中不同区域的边界框信息。

与传统的图像-文本任务不同之处在于,Qwen-VL的训练数据要求模型不仅能够处理图像和文本的匹配,还需要理解和生成符合指定格式的区域描述,这要求模型具备更强的细节理解和定位能力。传统的图像-文本任务可能更侧重于图像标注或问题回答,而不一定需要生成特定格式的区域描述

Q6. 用于视觉问答(VQA)任务的数据集包括哪些?

用于视觉问答(VQA)任务的数据集包括了以下几个:

GQA (Hudson and Manning, 2019)
VGQA (Krishna et al., 2017)
VQAv2 (Goyal et al., 2017)
DVQA (Kafle et al., 2018)
OCRVQA (Mishra et al., 2019)
DocVQA (Mathew et al., 2021)

Q7. 如何改善与文本相关的任务?从哪里获取了额外的数据?

在文章中,为了改善与文本相关的任务,作者采取了以下措施:

  • 收集pdf和HTML格式的数据:从Common Crawl获取了pdf和HTML格式的数据,这些数据包含了自然风光背景下的英文和中文语言的合成OCR数据。
  • 生成合成OCR数据:通过Kim等人(2022)的方法,生成了英文和中文语言的合成OCR数据,这有助于改善文本相关的任务。

监督微调阶段SFT(3.3)

In this stage, we freeze the visual encoder and optimize the language model and adapter module.

Q9. SFT数据的规模是多少?

350k

四、关键问题

Q3. 对于Qwen-VL模型的输入,图像是如何处理的?它们经过视觉编码器和适配器后得到了怎样的特征序列?

Qwen-VL模型的输入中,图像经过了以下处理:

  • 视觉编码器:Qwen-VL使用了Vision Transformer (ViT)架构的视觉编码器。在训练和推理过程中,输入的图像会被调整到特定的分辨率。视觉编码器通过将图像分割成大小为14的图块进行处理,生成一组图像特征。
  • 适配器:为了解决由于长图像特征序列而产生的效率问题,Qwen-VL引入了一个称为“Position-aware Vision-Language Adapter”的适配器,用于压缩图像特征。该适配器包含一个单层的交叉注意力模块,它的初始化是随机的。该模块使用一组可训练的向量(嵌入)作为查询向量,将视觉编码器生成的图像特征作为交叉注意力操作的关键。这个机制将视觉特征序列压缩成了固定长度的256。另外,考虑到位置信息对于细节图像理解的重要性,2D绝对位置编码被引入到交叉注意力机制的查询-关键对中,以减轻在压缩过程中位置细节的潜在丢失。压缩后的图像特征序列长度为256,随后被输入到大型语言模型中。

因此,经过视觉编码器和适配器处理后,图像会生成一个包含256维特征的固定长度序列,以供后续模型处理和理解。

Q4. 为了区分图像特征输入和文本特征输入,作者引入了哪两个特殊的标记?这两个标记分别代表了什么意义?

为了区分图像特征输入和文本特征输入,作者引入了两个特殊的标记:和。其中:

  • <img>标记代表着图像特征的开始,标志着图像内容的起始点。
  • </img>标记代表着图像特征的结束,标志着图像内容的结束点。

这两个特殊标记的引入使得模型可以清晰地识别并区分图像特征和文本特征,从而正确处理输入数据。

Q6. 作者提到了如何处理边界框输入和输出,这个处理过程包括哪些具体步骤?

在处理边界框输入和输出时,作者采取了以下具体步骤:

边界框输入:

  • 针对给定的边界框,首先进行了一个归一化处理,将其范围限定在[0, 1000)之间。
  • 然后,将归一化后的边界框转化成了一个特定的字符串格式:“(Xtopleft,Ytopleft),(Xbottomright,Ybottomright)”。
  • 这个字符串被看作文本进行处理,无需额外的位置词汇。

特殊标记:

  • 为了区分检测字符串和普通文本字符串,作者在边界框字符串的开始和结束处添加了两个特殊的标记,分别是"“和”"。

关联描述词或句子:

  • 为了正确地将边界框与相应的描述词或句子关联起来,作者引入了另一组特殊标记,分别是"“和”"。

  • 这两组标记用于标示被边界框引用的内容。

通过这些处理步骤,Qwen-VL模型能够有效地处理边界框的输入,从而增强了模型对细节的理解和定位能力。

Reference

[1] 苏神-Transformer升级之路:17、多模态编码位置的简单思考
[2] Qwen-VL:突破视觉与语言融合的多模态模型,GPT4V的国产化替代
[3] 模型方法-Qwen-VL中文的多模态模型

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

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

相关文章

LeetCode54. 螺旋矩阵

LeetCode54.螺旋矩阵 题解思路 代码 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> res;int n matrix.size();// 行int m matrix[0].size(); // 列vector<vector<bool>> st(n, v…

分步搭建HF区块链网络--部署fabric区块链--加入channel

一.搭建网络规划 采用容器环境&#xff0c;搭建1个排序节点(Orderer)、2个对等节点(Peer)&#xff0c;另外用 一个fabric-cli容器。实训中的绝大部分命令是通过该容器执行的。 容器名称设置 二. 配置HF网络证书 首先docker ps 检查镜像&#xff0c;确保镜像为空 1.生成crypto…

leaftjs+turfjs+idw纯前端实现等值面绘图

最近有个绘制等值面图的需求。我们一般的实现路径是&#xff1a; 1.后台绘图&#xff0c;用surfer绘制好&#xff0c;给前端调用叠加到地图。 2.后台用python绘图&#xff0c;绘制好给前端调用&#xff0c;叠加到地图。 3.后台进行插值计算、地图裁剪、最终生成geojson文件或…

[集群聊天项目] muduo网络库

目录 网络服务器编程常用模型什么是muduo网络库什么是epoll muduo网络库服务器编程 网络服务器编程常用模型 【方案1】 &#xff1a; accept read/write 不是并发服务器 【方案2】 &#xff1a; accept fork - process-pre-connection 适合并发连接数不大&#xff0c;计算任…

第一篇:Python简介:开启你的编程之旅

Python简介&#xff1a;开启你的编程之旅 在这个系列文章中&#xff0c;我将带领大家深入了解Python——一个极具魅力的编程语言。如果你对编程感兴趣&#xff0c;想要掌握一门既实用又强大的语言&#xff0c;那么Python无疑是一个绝佳的选择。本篇文章是这个系列的序章&#…

文件包含漏洞基础

php 中的文件包含函数&#xff1a; incude &#xff1a; require incude_once require_once 为了减少重复性代码的编写&#xff1b; 任意后缀的文件当中只要存在 php 代码就会被当作 php 执行&#xff1b; 本质&#xff1a;由于包含的文件不可控&#xff0c;导致文件包含…

S32K的JLINK与PE接线方法与刷程序失败问题

S32K的JLINK与PE接线方法与刷程序失败问题 1、PE的接线方法2、JLINK的接线方法3、刷程序失败问题 1、PE的接线方法 2、JLINK的接线方法 3、刷程序失败问题 出现如下问题&#xff1a; Secure Debug might be enabled on this device.lf so.please unlock the device via PEmic…

Maven基础篇4

跳过测试(了解) 1.背景 你的模块还没完成&#xff0c;项目经理就已经完成测试模块的开发 自己的模块写好提交测试&#xff0c;看看功能有没有完成&#xff0c;完成了那么就成功&#xff0c;否则失败&#xff1b; 使用背景&#xff1a; 1.测试用例写好了&#xff0c;自己模…

【计算机网络】成功解决 ARP项添加失败:请求的操作需要提升

最近在用Wireshark做实验时候&#xff0c;需要清空本机ARP表和DNS缓存&#xff0c;所以在cmd窗口输入以下命令&#xff0c; 结果发生了错误&#xff1a;ARP项添加失败&#xff1a;请求的操作需要提升 一开始我还以为是操作的命令升级了&#xff0c;但是后面发现其实只是给的权…

C++面向对象程序设计 - 继承与派生

面向对象技术强调软件的可重用性&#xff08;software reusability&#xff09;&#xff0c;C语言提供了类的继承机制&#xff0c;解决了软件重用问题。 C中所谓“继承”就是在一个已存在的类的基础上建立一个新类&#xff0c;从已有的类那里获得已有特性&#xff0c;叫做类的继…

网络协议深度解析:SSL、 TLS、HTTP和 DNS(C/C++代码实现)

在数字化时代&#xff0c;网络协议构成了互联网通信的基石。SSL、TLS、HTTP和DNS是其中最关键的几种&#xff0c;它们确保了我们的数据安全传输、网页的正确显示以及域名的正常解析。 要理解这些协议&#xff0c;首先需要了解网络分层模型。SSL和TLS位于传输层之上&#xff0c…

说说2024年暑期三下乡社会实践工作新闻投稿经验

作为一名在校大学生,我有幸自去年起参与学院组织的暑期大学生三下乡社会实践团活动。这项活动不仅是我们深入基层、服务社会的重要平台,也是展现当代大学生风采、传递青春正能量的有效途径。然而,如何将这些生动鲜活的实践故事、感人至深的瞬间传播出去,让更多人了解并受到启发…

在PostgreSQL中如何创建和使用自定义函数,包括内置语言(如PL/pgSQL)和外部语言(如Python、C等)?

文章目录 一、使用内置语言 PL/pgSQL 创建自定义函数示例代码使用方法 二、使用外部语言 Python 创建自定义函数安装 PL/Python 扩展示例代码使用方法 三、使用外部语言 C 创建自定义函数编写 C 代码编译为共享库在 PostgreSQL 中注册函数注意事项 总结 PostgreSQL 是一个强大的…

前端H5动态背景登录页面(下)

最近正好有点儿时间&#xff0c;把之前没整理完的前端动态背景登录页面给整理一下&#xff01;这是之前的连接前端H5动态背景登录页面&#xff08;上&#xff09;&#xff0c;这主要是两个登陆页面&#xff0c;一个彩色气泡&#xff0c;一个动态云朵&#xff0c;感兴趣的可以点…

08 内核开发-避免冲突和死锁-mutex

08 内核开发-避免冲突和死锁-mutex 课程简介&#xff1a; Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础&#xff0c;让他们能够理解和参与到Linux内核的开发过程中。 …

U盘无法正常格式化?教你一个强力的办法

前言 电脑格式化U盘或者移动硬盘的操作&#xff0c;相信各位小伙伴都是有一定经历的。 如果设备正常&#xff0c;那么进入到【此电脑】&#xff0c;在对应的分区点击【鼠标右键】-【格式化】就可以把对应的存储设备恢复到初始状态。 但凡事都会有例外&#xff0c;比如在格式化…

实验 | RT-Thread:L1

1 线程间同步 同步是指按预定的先后次序进行运行&#xff0c;线程同步是指多个线程通过特定的机制&#xff08;如互斥量&#xff0c;事件对象&#xff0c;临界区&#xff09;来控制线程之间的执行顺序&#xff0c;也可以说是在线程之间通过同步建立起执行顺序的关系&#xff0…

海外短剧:跨文化的新浪潮与看剧系统的搭建,海外短剧系统搭建开发定制

在全球化的大潮下&#xff0c;海外短剧作为一种新兴的文化交流方式&#xff0c;正逐渐受到越来越多人的喜爱。这种融合了各地文化元素、叙事手法新颖独特的短剧形式&#xff0c;不仅丰富了观众的视觉体验&#xff0c;也为影视媒体和想拓展海外市场的企业带来了无限商机。 一、…

【深度学习-第5篇】使用Python快速实现CNN分类(模式识别)任务,含一维、二维、三维数据演示案例(使用pytorch框架)

在之前的文章中介绍了CNN的图解入门&#xff0c;CNN的MATLAB分类实现&#xff0c;CNN的MATLAB回归实现。 卷积神经网络(Convolutional Neural Networ&#xff0c;简称CNN)是一种广泛应用于图像识别领域的深度学习算法。它通过模拟人类视觉系统的层次结构&#xff0c;可以自动提…

Docker NetWork (网络)

Docker 为什么需要网络管理 容器的网络默认与宿主机及其他容器都是相互隔离的&#xff0c;但同时我们也要考虑下面的一些问题&#xff0c; 比如 多个容器之间是如何通信的容器和宿主机是如何通信的容器和外界主机是如何通信的容器中要运行一些网络应用(如 nginx、web 应用、数…