【多模态】31、Qwen-VL | 一个开源的全能的视觉-语言多模态大模型

2024-05-16 00:36

本文主要是介绍【多模态】31、Qwen-VL | 一个开源的全能的视觉-语言多模态大模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 模型架构
      • 2.2 输入和输出
      • 2.3 训练
    • 三、效果
      • 3.1 Image Caption 和 General Visual Question Answering
      • 3.2 Text-oriented Visual Question Answering
      • 3.3 Refer Expression Comprehension
      • 3.4 视觉-语言任务的少样本学习
      • 3.5 真实世界用户行为中的指令遵循

论文:Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond

代码:https://github.com/QwenLM/Qwen-VL

出处:阿里

时间:2023.10

贡献:

  • Qwen-VL 在大量以视觉为中心的理解基准上实现了优秀的性能
  • Qwen-VL 支持多语言,尤其是英文和中文,自然的支持英文、中文和多语言指令
  • Qwen-VL 在训练阶段支持任意交错的图像-文本数据作为输入
  • Qwen-VL 在细粒度的图像理解上更好,因为在训练中使用了更高分辨率的输入大小和细粒度的语料库,有很好的文本阅读、面向文本的问答、细粒度的对话等能力

在这里插入图片描述

一、背景

尽管现有的很多多模态大模型取得了不错的效果,但开源的多模态大模型仍然有训练和优化不足的问题,也落后于专有模型,此外,现实场景非常复杂,所以地力度的视觉理解很重要,但相关研究不是很多。

本文开源了一系列 Qwen 家族的模型 Qwen-VL 系列,该系列模型是基于 Qwen-7B 语言模型的,作者通过引入了一个新的 visual capacity,包括一个 language-aligned 视觉编码器和一个 position-aware adapter,来提升 LLM 基准。

整个模型架构及输入输出都很简洁,且作者使用了一个三阶段的训练流程

Qwen-VL 的能力:

  • 能够感知和理解视觉输入,根据给定的提示生成回答,并完成各种视觉任务,如 caption、问题回答等

Qwen-VL-Chat:

  • 基于 Qwen-VL 的指令调优视觉语言聊天机器人,能够和用户交流,根据用户意图来感知输入图像

在这里插入图片描述

二、方法

2.1 模型架构

网络整体架构由 3 个部分组成,如表 1 所示:

  • 大型语言模型:Qwen-VL 使用大语言模型 Qwen-7b 作为其基础组件,使用预训练好的权重来初始化模型
  • 视觉编码器:Qwen-VL 使用 ViT 架构作为视觉编码器,具体的是使用的 Openclip 的 ViT-bigg 预训练的权重进行初始化,在训练过程中,输入图像都被调整到特定的分辨率。且视觉编码器将图像分割成 14 大小的 patch 后生成一组图像特征
  • position-aware Vision-Language Adapter:为了环境长图像特征序列带来的效率问题, Qwen-VL 引入了一个压缩图像特征的适配器,该适配器包含一个随机初始化的单层 cross-attention 模块。该模块使用一组可训练的向量(embedding)来作为 query,encoder 提取到的图像特征作为 key,这种机制将视觉特征序列压缩为固定长度 256。

在这里插入图片描述

2.2 输入和输出

1、图像输入

图像通过 visual encoder 和 adapter 进行处理,产生固定长度的图像特征序列,为了区分图像特征输入和文本特征输入,在图像特征序列的开始和结束添加了两个特殊标记 ( 和 ),分别表示开始和结束

2、bounding box 输入和输出

为了增强模型对细粒度视觉的理解和定位,Qwen-VL 的训练包括 region description、questions、detections,该任务需要模型以指定格式准确理解和生成区域描述。

对应任何给定的 bbox,使用归一化方法将其归一化到 [0,1000],并转换为指定的字符串格式:“(x1,y1),(x2,y2)”,且在开始和结束处添加 ( 和 ),与其相关的描述语句还会添加特殊标记 ( 和 )

2.3 训练

Qwen-VL 的训练分为三个阶段,前两个阶段是预训练,最后一个阶段是指令微调

1、预训练

在第一预训练结果,作者主要使用 large-scale,weakly labeled,web-crawled 的 image-text pairs 来训练,数据如表 2 所示,original dataset 包含共 50 亿的图像-文本对儿,清洗后保留了 14 亿的数据,其中 77.3% 的英文数据和 22.7% 的中文数据

在这里插入图片描述

在这个阶段,作者将大语言模型冻结,只优化 vision encoder 和 VL adapter,输入图像 resize 到了 224x224,训练的目标是最小化 text token 的 cross-entropy

最大的学习率为 2e-4,batch size 为 30720 个 pairs,整个第一阶段预训练共 50000 steps,共使用 15 亿个图像-文本 pairs

下图为 stage 1 的收敛曲线

在这里插入图片描述

2、多任务预训练

在 stage 2 会进行多任务预训练,会引入有更大分辨率和交错图文数据的高质量和细粒度数据

作者同时对 Qwen-VL 进行了 7 项任务训练,相关数据如表 3 所示,作者将 visual encoder 的输入从 224x224 提升到了 448x448

在这里插入图片描述

3、有监督微调

在这个阶段,作者对预训练后的模型使用指令微调来提升模型的指令跟随能力和对话能力,来实现交互式的 Qwen-VL-Chat 模型

数据主要来源于 caption 数据或对话数据,这些标签都是使用 LLM 模型得到的,而且这些数据往往只处理单幅图像的对话和推理,仅限于图像内容理解

数据量:350k

训练技巧:冻结 visual encoder,训练语言模型和adapter模块

在这里插入图片描述

三、效果

下面作者会对各种多模态任务进行评估,Qwen-VL 表示多任务训练后的模型(第二阶段后),Qwen-VL-chat 表示经过有监督微调(SFT)后的模型(第三阶段后)

3.1 Image Caption 和 General Visual Question Answering

在这里插入图片描述

3.2 Text-oriented Visual Question Answering

面向文本的视觉问答

在这里插入图片描述

3.3 Refer Expression Comprehension

提及表达的理解

在这里插入图片描述

3.4 视觉-语言任务的少样本学习

在这里插入图片描述

3.5 真实世界用户行为中的指令遵循

在这里插入图片描述

这篇关于【多模态】31、Qwen-VL | 一个开源的全能的视觉-语言多模态大模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/993369

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man