基于LLMs的多模态大模型(Flamingo, BLIP-2,KOSMOS-1,ScienceQA)

news2025/4/27 4:48:51

前一篇博客已经整理了不训练视觉模型的文章们:

  • 基于LLMs的多模态大模型(Visual ChatGPT,PICa,MM-REACT,MAGIC)

本篇文章将介绍一些需要训练视觉编码器来适配多模态大模型的工作们,这也是目前最为流行的研究思路。

其实早在2021年DeepMind发表Frozen的时候就已经有了few-shot甚至in-context learning的思路,博主在以往的博文中也有过介绍(Multimodal Few-Shot Learning with Frozen Language Models),此处简要回顾一下,如下图所示,Frozen先将图片编码成visual tokens,然后作为prefix跟文本的tokens一起输入到LLMs。在o-shot,1-shot和few-shot时都可以利用类似的操作。

在这里插入图片描述
由于Frozen仅有vision encoder是支持训练,而LLMs参数处于冻结状态,即通过训练视觉编码器来适配LLMs,这种方法可以使得训练成本大大降低,而当现在有了chatgpt系列的技术之后,这一思路也很自然的能被用到多模态大模型上来。


在这里插入图片描述
Flamingo
出自DeepMind,它在Frozen模型的基础上做进一步的改进,不同点主要有两个:一是使用了更大的LLMs,二是冻结视觉编码器,引入perceiver resampler和XAttn-Dense两个适配单元作为可训练的模块。

  • perceiver resampler:类似DETR,通过设计多个Perceiver Resampler来生成64个固定长度的tokens,主要作用在于可以从图像中提取固定长度的特征向量,能够解决图像甚至多帧视频的feature map不一致的问题。
  • XAttn-Dense:在每一层LLM上都会增加corss- attention以入到LLM中与视觉向量进行交互,融合多模态信息。

另外值得注意的是,Flamingo在训练时使用了MultiModal MassiveWeb (M3W) 数据集,这是一个从网页上收集的图文混合数据,由于这种混合数据需要先拍平再输入模型(通过图片相对位置等信息),从而让Flamingo拥有了in-context learning的能力。

Flamingo有3B,9B,80B的三个版本,性能和N-shots能力如下图所示。

在这里插入图片描述

paper:Flamingo: a Visual Language Model for Few-Shot Learning
arxiv:https://arxiv.org/abs/2204.14198
code:https://github.com/lucidrains/flamingo-pytorch


BLIP-2
首先回顾一下BLIP,BLIP的主要特点是结合了encoder和decoder,即形成了统一理解和生成(Understanding&Generation)的多模态模型。统一的动机在于encoder模型如CLIP没有生成器无法做VQA等生成任务,而如果用encoder-decoder框架无法做retrieval任务。因此BLIP很大的贡献在于MED(mixture of encoder-decoder)模块。从而使该模型既可以有理解能力(encoder),又可以有生成能力(decoder)。
在这里插入图片描述

而BLIP-2和Flamingo一样,用一个Qformer来提取图像特征(等同与Flamingo的perceiver resampler),然后用cross- attention进行多模态交互,此时视觉编码器和LLM都会被冻结,只训练Qformer,而在下游任务微调时,可以再解锁视觉编码器,让它跟Qformer一起训练,如下图所示。

在这里插入图片描述
因此BLIP-2设计了两阶段的训练策略,以使视觉编码器能学会提取更关键的信息。

  • 第一阶段:使用多种预训练任务,如Image-Text Contrastive Learning,Image-grounded Text Generation,Image-Text Matching让Qformer学会如何从视觉编码器中抽取文本相关的特征。
  • 第二阶段,将Qformer插入到LLMs中,用language modeling进行训练。

BLIP2的训练数据包括MSCOCO,Visual Genome,CC15M,SBU,115M来自于LAION400M的图片以及BLIP在web images上生成的描述。不过BLIP-2没有使用Flamingo那种图文交错的数据,因此它没有太强的in-context learning能力。

paper:BLIP2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
arxiv:https://arxiv.org/abs/2301.12597
code:https://github.com/salesforce/LAVIS/tree/main/projects/blip2


在这里插入图片描述
KOSMOS-1
KOSMOS-1是一个基于decoder-only Transformer的因果语言模型、并且完全从头开始训练,能够instruction following和in-context learning。

首先对于多模态的输入,会使用特殊符号进行每种模态的分割:

图像输入:<image>Image Embedding</image>
文本输入:<s>这是一只狗吗</s>
交错的图文输入:<s><image>Image Embedding</image>这是一只白狗吗?</s>

在这里插入图片描述

此外,Flamingo中的Resampler同样会被使用来做注意力池化以减少图像嵌入的数量。

因果语言模型是指在获得以上展平后的embedding后,将在Transformer中应用一个causal mask以mask未来的信息,即从左到右的因果模型以自回归的方式处理序列。该模型共有24层,2048个隐藏维度,8192的FFN中间层大小,32个注意力头,这一部分1.3B。使用Magneto的初始化、xPos的position embedding、CLIP(ViT-L/14)得到1024维图新特征。最后一共1.6B参数量。

对于训练数据来说,由多个源的数据组成:

  • 交错的多模态数据。主要是交错排列的图文文档,来自Common Crawl的原始网页快照,通过过滤、提取图像文本、并限制最大长度为5,且随机对齐一半只有1张图的网页。
  • mage-caption pairs。主要是LAION-2B、LAION-400M、COYO-700M、Conceptual Captions数据集。
  • 一些纯文本预料。主要是The pile和Common Crawl数据集。

其中数据中有0.5M个tokens来自文本语料,0.5M个tokens来自图文对,0.2M个tokens来自交错数据,约360B的tokens,然后通过language modeling进行预训练(即next-token prediction)。

此外,KOSMOS-1能够更好地理解人类指令,在预训练结束之后,还加入了Unnatural Instruction(68478个指令-输入-输出三元组)和FLAN v2 (涵盖不同类型的语言理解任务,例如阅读理解、常识推理、闭卷问答,随机选择 54k )进行指令微调,这是非常靠近ChatGPT的做法了,也被相信GPT-4的多模态能力有可能也是从instruction中得来。

从结果来看,KOSMOS-1比Flamingo-3B和Flamingo-9B模型具有更高的准确率和鲁棒性。

paper:Language Is Not All You Need: Aligning Perception with Language Models
arxiv:https://arxiv.org/abs/2302.14045


通用来说,预训练主要是帮助模型能够拥有很多的知识,使得生成的结构更符合语义和逻辑(在多模态领域可能就是多模态语义理解了),但如果想要面对用户的要求(如帮我翻译以下文章)则需要instruct tuning。

因此在KOSMOS-1使用instruction tuning后,也短短数周内出现了很多类似的文章,如MiniGPT-4,LLaVA,mPLUG-Owl,InstuctBLIP等,它们将在下一篇博文中继续整理:

  • 基于LLMs的多模态大模型(MiniGPT-4,LLaVA,mPLUG-Owl,InstuctBLIP)
  • 基于LLMs的多模态大模型(PALM-E,ArtGPT-4,VPGTrans )

ScienceQA
补。有了instruct tuning,还会缺少多模态cot的数据集吗?该数据集来自UCLA和艾伦人工智能研究院,是首个用于测试模型的多模态推理能力的多模态科学问答(Science Question Answering)数据集。构建该数据的Motivation来自于为了正确回答科学问题,模型需要

  • 理解多模态内容
  • 获取外部知识
  • 揭示推理过程

在这里插入图片描述

比如要回答上图所示的例子(输入为问题,回答和一个多模态的上下文),那么首先要知道关于力的定义,然后形成一个多步的推理过程,最终才能得到正确答案。

ScienceQA数据一共包含21208个例子, 其中10332的题目有视觉上下文,10220道的题目有文本上下文,6532道(30.8%)有视觉+文本。且83.9%问题有背景知识标注(lecture),91.3%问题有详细的解答(explanation),这么详细的数据集非常适合做cot了。

基于这样的数据集,也可以通过结合上面的方法来进一步拓展利用LLMs的能力。

paper:ScienceQA: Science Question Answering
arxiv:https://arxiv.org/pdf/2209.09513.pdf
code:https://github.com/lupantech/ScienceQA

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

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

相关文章

QT桌面项目(状态栏和导航栏设置)

文章目录 前言一、状态栏二、导航栏三、同时添加状态栏和导航栏总结 前言 为了和我们这个项目做的更加真实&#xff0c;这里为我们的项目添加上状态栏和导航栏让他变成更加接近手机的桌面效果。 一、状态栏 这个状态栏就是显示时间和wifi状态&#xff0c;电池电量的&#xf…

9秒被骗132万元,AI换脸骗术,如何防范?

5月22日&#xff0c;安徽安庆的何先生接到熟人视频电话&#xff0c;让他帮忙转一笔账&#xff0c;但在9秒之后&#xff0c;对方却以“在开会”为由&#xff0c;迅速挂断了电话&#xff0c;还称“微信和电话不能说&#xff0c;加一下QQ”。“因为打了视频电话&#xff0c;又是熟…

数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)

目录 邻接矩阵 图节点的结构 创建并初始化 插入边 完整的图的建立 邻接表 图节点的结构 创建并初始化 插入边 完整的图的建立 邻接矩阵 图节点的结构 #include <stdio.h> #include <stdlib.h>#define MaxVertexNum 100 // 最大顶点数typedef int Wei…

Maven介绍与安装和配置

目录 Maven 简介 约定优于配置 Maven 特点 Maven 安装与配置 Maven 下载 配置 Maven 环境变量 Maven 简介 Maven 是一款基于 Java 平台的项目管理和整合工具&#xff0c;它将项目的开发和管理过程抽象成一个项目对象模型&#xff08;POM&#xff09;。开发人员只需要做一…

C语言结构体

C语言结构体 前言1. 结构体的声明1.1 结构体的基础知识1.2 结构体声明1.3 结构体成员的类型1.4 结构体变量的定义和初始化 2. 结构体成员的访问2.1 结构体变量访问成员2.2 结构体指针访问指针变量的成员 3. 结构体传参4. 结尾 前言 C语言结构体是一种自定义数据类型&#xff0…

vite-plugin-pwa配置详解

vite-plugin-pwa配置详解 前提&#xff1a;前端域名和后端服务域名相同时&#xff0c;用window.open新开页面下载或者导出文件&#xff0c;项目中导出和下载功能失效&#xff0c;原因是&#xff0c;域名相同走缓存 实现service worker离线缓存以前需要自己编写sw.js文件内容&…

基于SpringBoot+Vue的闲一品交易平台设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

MT4电脑版交易软件使用技巧有哪些?

MT4交易软件作为连接券商平台与投资者之间的纽带&#xff0c;不仅是外汇金融机构的首选交易平台&#xff0c;也因其显著的优势成为了外汇投资者进行网上交易的重要平台。而MT4交易软件又分为电脑版和手机版&#xff0c;因为大多数投资者进行外汇投资时使用的是MT4电脑版软件&am…

Gradio的web界面演示与交互机器学习模型,接口自动刷新或连续刷新数据流《5》

通过在接口中设置liveTrue&#xff0c;可以使接口自动刷新。现在&#xff0c;一旦用户输入发生变化&#xff0c;界面就会重新计算。依然使用计算器的示例&#xff1a; 实时接口 import gradio as grdef calculator(num1, operation, num2):if operation "add":ret…

浏览器原理+跨域+解决方案

原网址&#xff1a;浏览器部分笔记_浏览器不同窗口cookie共享吗_JackieChan_的博客-CSDN博客 一、浏览器存储对象 1.cookie cookie是一种纯文本文件&#xff0c;大小只有4kb&#xff0c;每次发送非跨域html请求时都会自动携带。特性如下&#xff1a; cookie一旦创建&#xff…

华为开源自研AI框架昇思MindSpore应用案例:Pix2Pix实现图像转换

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 在实际应用场景中&#xff0c;由于训练数据集不足&#xff0c;所以很少有人会从头开始训练整个网络。普遍的做法是&#xff0c;在一个非常大的基础数据集上训练得到一个预训练模型&#xff0c;然后使用该模…

Java程序设计入门教程--主函数

情形 在Java中&#xff0c;主函数就是主方法&#xff0c;即main()方法。它是Java应用程序的入口方法&#xff0c;也就是说&#xff0c;程序在运行的时候&#xff0c;第一个执行的方法就是main()方法&#xff0c;这个方法和其他的方法有很大的不同&#xff0c;比如方法的名字必…

Python100天:01.初识python

❝ 本教程计划通过100天的时间&#xff0c;每天分享一篇关于python的知识点&#xff0c;与大家一起学习python这门编程语言。 ❞ Python 对初学者来说是一门很棒的语言&#xff1a; 容易学 有一个积极的支持社区 在网络开发、游戏、数据科学方面提供多种机会。 Python的应用领域…

PMP课堂模拟题目及解析(第13期)

121. 项目经理、团队成员以及若干干系人共同参与一次风险研讨会。已经根据风险管理计划生成并提供一份风险报告。若要为各个项目风险进行优先级排序&#xff0c;现在必须执行哪一项分析&#xff1f; A. 定量风险分析 B. 根本原因分析 C. 偏差分析 D. 定性风险分析 122. …

Yarn资源调度详解

第1章 Yarn资源调度器 思考&#xff1a; 1&#xff09;如何管理集群资源&#xff1f; 2&#xff09;如何给任务合理分配资源&#xff1f; Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapRe…

什么是产品操作手册?企业该怎样制作产品操作手册页面?

产品操作手册是一种用于指导用户如何正确使用和维护产品的文档。它通常包括产品的基本信息、操作步骤、安全警告、故障排除、维护方法等内容。产品操作手册对于企业来说非常重要&#xff0c;它不仅可以提高用户的使用体验&#xff0c;还可以为企业节省售后服务成本。本文将介绍…

cython编译加密python源码

场景 python的解释特性是将py编译为独有的二进制编码pyc 文件&#xff0c;然后对pyc中的指令进行解释执行&#xff0c;但是 pyc的反编译却非常简单&#xff0c;可直接反编译为源码&#xff0c;当需要将产品发布到外部环境的时候&#xff0c;源码的保护尤为重要。 一、Cpython介…

Java程序设计入门教程--标识符和关键字

目录 标识符 标识符的约定 标识符 1. 定义 用来标识类名&#xff0c;变量名&#xff0c;方法名&#xff0c;类型名&#xff0c;数组名&#xff0c;文件名的有效序列称为标识符。简单地说&#xff0c;标识符就是一个名字。 2. 标识符命名规则 &#xff08;1&#xff09;大小…

Tuxera for Mac2023中文版读写硬盘U盘工具

在日常生活中&#xff0c;我们使用Mac时经常会遇到外部设备不能正常使用的情况&#xff0c;如&#xff1a;U盘、硬盘、软盘等等一系列存储设备&#xff0c;而这些设备的格式大多为NTFS&#xff0c;Mac系统对NTFS格式分区存在一定的兼容性问题&#xff0c;不能正常读写。 那么什…

算法|1.二分及其扩展

算法|1.二分及其扩展 1、有序数组中找到num 题意&#xff1a;给定有序数组&#xff0c;在有序数组中找到指定数字&#xff0c;找到返回true&#xff0c;找不到返回false. 解题思路&#xff1a; 数组有序查找指定元素使用二分法L指针初始值设为0&#xff0c;R指针初始值设为…