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

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.mfbz.cn/a/574308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

零基础HTML教程(27)--表单元素属性

文章目录 1. 背景2. disabled:禁用3. readonly:直读4. checked:选中5. maxlength:最大输入字符数6. 小结 1. 背景 上一篇我们讲了表单元素的两个属性id和name&#xff0c;其实表单元素还有其他几个常用属性&#xff0c;我们逐一介绍。 2. disabled:禁用 disabled属性表示禁用…

大厂面试题:从源码的角度分析MyBatis中#{}与${}的区别

大家好&#xff0c;我是王有志。 今天我会通过源码来分析一道京东&#xff0c;联储证券和爱奇艺都考察过的 MyBatis 面试题&#xff1a;MyBatis 中“#{}”和“${}”有什么区别&#xff1f;是否可以使用“#{}”来传递 order by 的动态列&#xff1f; “#{}”和“${}”有什么区…

【Linux】网络与守护进程

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;进程状态、类型、优先级、命令行参数概念、环境变量(重要)、程序地址空间 目录 &#x1f449;&#x1f3fb;守护…

Netty 进阶

文章目录 1. 粘包与半包1.1 粘包现象1.2 半包现象1.3 现象分析1.4 解决方案1) 方法1&#xff0c;短链接2) 方法2&#xff0c;固定长度3) 方法3&#xff0c;固定分隔符4) 方法4&#xff0c;预设长度 2. 协议设计与解析2.1 为什么需要协议&#xff1f;2.2 redis 协议举例2.3 http…

【小白版】最简单的 goland 自定义package 教程

正文 直奔主题&#xff0c;针对小白无法正确使用自定义的package包进行讲解。 在自己的go项目下执行 mod go mod init 项目名创建mod。mod是go管理依赖包的工具&#xff0c;类似Java的pom文件调整goland的配置&#xff0c;具体操作步骤如下面视频 通过视频可以看到原先报红的…

【分配】linear_sum_assignment函数

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 分配问题小结&#xff0c; linear_sum_assignment 函数使用的是Jonker-Volgenant algorithm算法 1. 分配问题 有工人和相应的工作&#xff0c;每个工作…

51单片机中断和定时的结合应用

#include <reg52.h>unsigned int cnt 0;sbit led P1^1;// 初始化定时器 void TimerSetup(){TMOD 0x01; // 定时器的第1个模式TH0 0xB8; // 定时器的初始值-高位TL0 0x00; // 定时器的初始值-低位TR0 1; //启动定时器cnt 0;EA 1; // 开启总中断ET0 1; // 时间中断…

DFS和回溯专题:全排列 II

DFS和回溯专题&#xff1a;全排列 II 题目链接: 全排列 II 参考题解 代码随想录 题目描述 代码纯享版 class Solution {public List<List<Integer>> list_all new ArrayList();public List<Integer> list new ArrayList();public int[] res;public Lis…

NVIDIA CUDA Toolkit

NVIDIA CUDA Toolkit CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developer CUDA Toolkit是用于CUDA开发的软件包&#xff0c;主要包括CUDA编译器、运行时库、GPU驱动程序和开发工具等。它允许开发者使用通用编程语言&#xff08;如C、C&#xff09;来利用NVIDIA GPU进行…

echart-better基于最新的echarts5.5标题旋转功能

使用教程以及相关的echarts-better最新的包在这里&#xff1a;https://edu.csdn.net/course/detail/24569 echarts在侧边竖向展示标题&#xff0c;以及次标题 主标题和次标题进行旋转&#xff0c;适用于移动端或其他场景。

如何安装mysl驱动程序jar包

简介&#xff08;为什么要安装mysql驱动jar包&#xff09; MySQL 驱动程序&#xff08;通常以 JAR 文件的形式提供&#xff09;用于在 Java 应用程序中连接和与 MySQL 数据库进行交互。这些驱动程序提供了一组 API&#xff0c;使 Java 应用程序能够执行诸如查询、插入、更新和…

大数据真题讲解系列——拼多多数据分析面试题

拼多多数据分析面试题&#xff1a;连续3次为球队得分的球员名单 问题&#xff1a; 两支篮球队进行了激烈的比赛&#xff0c;比分交替上升。比赛结束后&#xff0c;你有一个两队分数的明细表&#xff08;名称为“分数表”&#xff09;。表中记录了球队、球员号码、球员姓名、得…

parallels desktop 19密钥分享 附PD虚拟机安装教程 支持M/intel

PD19虚拟机安装破解教程 Parallels Desktop 百度网盘下载&#xff1a;https://pan.baidu.com/s/1ezQmJAjIx796NEr9WZbcOg 提取码: 8w61 &#xff08;地址容易失效&#xff0c;来之不易&#xff0c;务必点赞和收藏&#xff0c;如果失效了请到评论区留言反馈&#xff09; 注意&…

猫咪吃主食罐头的好处盘点,附高营养高适口猫罐头推荐清单

关于是否要给猫咪喂食罐头&#xff0c;这可真是个让人头疼的争议话题啊&#xff01;有的猫主人觉得&#xff0c;罐头能让猫咪尝到更多美味&#xff0c;营养也更全面&#xff1b;而有些则觉得&#xff0c;猫粮就足够了&#xff0c;何必多此一举呢&#xff1f;作为一位拥有两只6岁…

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…

C#基础|构造方法相关

哈喽&#xff0c;你好&#xff0c;我是雷工。 以下为C#方法相关的学习笔记。 01 方法的概述 概念&#xff1a;方法表示这个对象能够做什么&#xff0c;也就是封装了这个对象行为。 类型&#xff1a;实例方法—>静态方法&#xff08;抽象方法、虚方法&#xff09;—>特殊…

阿斯达年代记下载注册+短信验证教程分享

阿斯达年代记&#xff1a;三强争霸》预计将于4月24日盛大发布&#xff0c;标志着一款新颖的MMORPG游戏面世&#xff0c;它跨越安卓、苹果和PC三大平台&#xff0c;实现数据互通&#xff0c;满足多元化玩家群体的需求。无论是追求移动便捷的手游爱好者&#xff0c;还是偏爱高性能…

揭秘神器:智能私信破局获客难!

在数字营销的海洋中&#xff0c;每个企业都如同一艘努力航行的船&#xff0c;希望能在广阔的客户蓝海中获得丰收。然而&#xff0c;现实却往往充满挑战&#xff0c;尤其是当面对如何吸引并维系客户这一核心难题时。传统的获客手段逐渐显得力不从心&#xff0c;而智能科技的介入…

OpenHarmony语言基础类库【@ohos.util.Deque (线性容器Deque)】

Deque&#xff08;double ended queue&#xff09;根据循环队列的数据结构实现&#xff0c;符合先进先出以及先进后出的特点&#xff0c;支持两端的元素插入和移除。Deque会根据实际需要动态调整容量&#xff0c;每次进行两倍扩容。 Deque和[Queue]()相比&#xff0c;Queue的特…

Postman获取接口返回值设置为变量

//设置环境变量&#xff0c;提取token // 把responseBody转为json字符串 var jsonData JSON.parse(responseBody); // 设置环境变量&#xff0c;提取token pm.environment.set("Authorization", jsonData.token_type " " jsonData.access_token); //设…
最新文章