【多模态】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

相关文章

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常