【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.mzph.cn/news/828695.shtml

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

相关文章

面试算法题之暴力求解

这里写目录标题 1 回溯1.1 思路及模板1.1 plus 排列组合子集问题1.2 例题1.2.1 全排列1.2.2 N 皇后1.2.3 N皇后问题 II1.2.4 子集 &#xff08;子集/排列问题&#xff09;1.2.4 组合(组合/子集问题)1.2.5 全排列 &#xff08;排列问题&#xff09;1.2.1做过1.2.6 子集II &#…

项目十一:爬取热搜榜(小白实战级)

首先&#xff0c;恭喜各位也恭喜自已学习爬虫基础到达圆满级&#xff0c;今后的自已python爬虫之旅会随着网络发展而不断进步。回想起来&#xff0c;我学过请求库requests模块、解析库re模块、lmxl模块到数据保存的基本应用方法&#xff0c;这一次的学习python爬虫之旅收获很多…

模块三:二分——153.寻找旋转排序数组中的最小值

文章目录 题目描述算法原理解法一&#xff1a;暴力查找解法二&#xff1a;二分查找疑问 代码实现解法一&#xff1a;暴力查找解法二&#xff1a;CJava 题目描述 题目链接&#xff1a;153.寻找旋转排序数组中的最小值 根据题目的要求时间复杂度为O(log N)可知需要使用二分查找…

vue集成百度地图vue-baidu-map

文章目录 vue集成百度地图vue-baidu-map1. Vue Baidu Map文档地址2. 设置npm数据源3. 安装vue-baidu-map4. 配置vue-baidu-map4.1 main.js全局注册4.2 vue页面设置4.3 效果 vue集成百度地图vue-baidu-map 1. Vue Baidu Map文档地址 https://dafrok.github.io/vue-baidu-map/#…

Golang GMP解读

概念梳理 1. 1 线程 通常语义中的线程&#xff0c;指的是内核级线程&#xff0c;核心点如下&#xff1a; 是操作系统最小调度单元&#xff1b;创建、销毁、调度交由内核完成&#xff0c;cpu 需完成用户态与内核态间的切换&#xff1b;可充分利用多核&#xff0c;实现并行. …

Unity之圆环slider

一、参考文章 Unity_圆环滑动条&#xff08;圆形、弧形滑动条&#xff09;_unity弧形滑动条-CSDN博客 此滑动条拖动超过360后继续往前滑动值会从0开始&#xff0c;正常我们超过360度时不可在滑动。 二、 超过360度不可滑动问题解决 参考HTML文章制作&#xff1a; https://www.c…

SpringCloud系列(15)--Eureka自我保护

前言&#xff1a;在上一章节中我们说明了一些关于Eureka的服务发现功能&#xff0c;也用这个功能进行接口的实现&#xff0c;在本章节则介绍一些关于Eureka的自我保护 1、Eureka保护模式概述 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。默认情况…

论文辅助笔记:LLM-Mob metric测量

0 导入库 import os import pandas as pd from sklearn.metrics import f1_score import ast import numpy as np1 基本的metric计算方式 1.1 get_acc1_f1 def get_acc1_f1(df):#计算top1 prediction的准确度和f1 scoreacc1 (df[prediction] df[ground_truth]).sum() / le…

开源数据集分享———猫脸码客

猫脸码客作为一个专注于开源数据集分享的公众号&#xff0c;致力于为广大用户提供丰富、优质的数据资源。我们精心筛选和整理各类开源数据集&#xff0c;涵盖机器学习、深度学习、自然语言处理等多个领域&#xff0c;以满足不同用户的需求。 (https://img-blog.csdnimg.cn/d98…

Exploiting CXL-based Memory for Distributed Deep Learning——论文泛读

ICPP 2022 Paper CXL论文阅读笔记整理 问题 深度学习&#xff08;DL&#xff09;正被广泛用于解决不同领域的科学应用中的复杂问题。DL应用程序使用大规模高性能计算&#xff08;HPC&#xff09;系统来训练给定的模型&#xff0c;需要消耗大量数据。这些工作负载具有很大的内…

Git for Windows 下载与安装

当前环境&#xff1a;Windows 8.1 x64 1 打开网站 https://git-scm.com/ &#xff0c;点击 Downloads 。 2 点击 Windows 。 3 选择合适的版本&#xff0c;这里选择了 32-bit Git for Windows Portable。 4 解压下载后的 PortableGit-2.44.0-32-bit.7z.exe &#xff0c;并将 P…

使用 Flask 和 WTForms 构建一个用户注册表单

在这篇技术博客中&#xff0c;我们将使用 Flask 和 WTForms 库来构建一个用户注册表单。我们将创建一个简单的 Flask 应用&#xff0c;并使用 WTForms 定义一个注册表单&#xff0c;包括用户名、密码、确认密码、邮箱、性别、城市和爱好等字段。我们还将为表单添加验证规则&…

好用的在线客服系统PHP源码(开源代码+终身使用+安装教程) 制作第一步

创建一个在线客服系统是一个涉及多个步骤的过程&#xff0c;包括前端界面设计、后端逻辑处理、数据库设计、用户认证、实时通信等多个方面。以下是使用PHP制作在线客服系统的第一步&#xff1a;需求分析和系统设计。演示&#xff1a;ym.fzapp.top 第一步&#xff1a;需求分析 确…

分布式技术在文本摘要生成中的应用

摘要 自然语言处理首先要应对的是如何表示文本以供机器处理&#xff0c;随着网络技术的发展和信息的公开&#xff0c;因特网上可供访问的数字文档成爆炸式的增长&#xff0c;文本摘要生成逐渐成为了自然语言处理领域的重要研究课题。本文主要介绍了分布式技术在文本摘要生成中…

基于springboot+vue+Mysql的广场舞团管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

猫头虎分享已解决Bug || TypeError: Cannot read property ‘map‘ of undefined**

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

智慧养猪场视频AI智能监控与可视化管理方案

在科技日新月异的今天&#xff0c;智能化、自动化已成为众多行业追求的方向。养猪业作为传统农业的重要组成部分&#xff0c;同样迎来了技术革新的春风。特别是随着人们对食品安全等问题的日益关注&#xff0c;养猪场视频监控监管方案的智能化升级显得尤为重要。 养猪场视频智…

Android11适配

1.分区存储 1.1.背景 Android 11 进一步增强了平台功能&#xff0c;为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分&#xff0c;平台引入了进一步的改进&#xff0c;以简化向分区存储的转换。 为了让用户更好地控制自己的文件&#xff0c;保护用户…

(C++) share_ptr 之循环引用

文章目录 &#x1f6a9;前言&#x1f6a9;循环引用&#x1f579;️例子1Code&#x1f62d;shared_ptr &#xff08;错误&#xff09;&#x1f602;weak_ptr &#xff08;正确&#xff09;&#x1f62d;unique_ptr &#xff08;错误&#xff09; &#x1f579;️例子2Code &…

Vu3+QuaggaJs实现web页面识别条形码

一、什么是QuaggaJs QuaggaJS是一个基于JavaScript的开源图像识别库&#xff0c;可用于识别条形码。 QuaggaJs的作用主要体现在以下几个方面&#xff1a; 实时图像处理与识别&#xff1a;QuaggaJs是一款基于JavaScript的开源库&#xff0c;它允许在Web浏览器中实现实时的图像…