多模态大模型综述: LLaVA, MiniGPT4

文章目录

  • LLaVA
    • 一. 简介
      • 1.1. 摘要
      • 1.2. 引言
    • 二. 相关工作
    • 三. 基于GPT辅助的视觉指令数据生成
    • 四. Visual Instruction Tuning
      • 4.1 网络结构
      • 4.2 训练


LLaVA

一. 简介

题目: Visual Instruction Tuning
机构:微软
论文: https://arxiv.org/pdf/2304.08485.pdf
代码:https://github.com/haotian-liu/LLaVA
任务:
特点:
方法:
前置相关工作:

1.1. 摘要

用机器instruction-following的数据来instruct tuning LLMs已经在NLP领域被证明能够提升模型在未见任务上的zero shot能力,但是这个想法在多模态领域极少被探索。在这篇文章中,第一个提出了利用GPT4生成多模态language-image instruction-following数据。通过在这样的数据上进行instruct tuning,本文提出了LLaVA: Large Language and Vision Assistant,一个端到端训练的大规模多模态模型,其将视觉encoder与LLM连接起来实现更加广义上的视觉语言理解。我们初步的实验表明,LLaVA展现了令人印象深刻的多模态对话能力,有时保留了多模态GPT4在未见过的图像/指令下的一些行为,在一个构建的多模态指令数据集上,取得了相比于GPT4 85.1%的相对分数。当在science QA数据集上面进行finetune时,LLaVA与GPT4进行协同时,能够取得92.53%的SOTA结果。GPT4生成的视觉指令微调数据,模型,以及代码我们都进行了开源。

1.2. 引言

人类通过许多渠道来与世界进行交互,比如视觉以及语言,每一种渠道在表征以及交流某个特定的世界概念时都有属于它独特的优势,因此能够促进人类对世界一个更好的理解。人工智能领域一个核心的愿景就是希望能够建立起一个通用目的的助手,它能够很有效地遵循多模态视觉语言的指令,理解人类的意图并且完成各种各样的现实世界的任务。

到目前为止,人工智能社区已经见证了致力于建立语言增强的视觉模型,让它具备开放世界的强大视觉理解能力,比如分类,检测,分割以及caption,视觉生成以及编辑。我们推荐读者在**Computer Vision in the Wild**这个阅读清单里面去了解更多最新的文献汇总。在这一系列的工作当中,每一个任务都被一个独立的视觉大模型所解决,模型在设计的时候也显式地考虑了任务的指令,除此之外,语言仅仅用来描述以及刻画图像的内容。尽管这使得语言在将视觉信号映射到语言意义上扮演了一个重要的角色,即:一个人类交流的公共渠道,但是它也使得这些视觉模型往往只能拥有一个固定的接口,这样的接口对用户的指令往往在交互性以及适用性上都是受限的。

LLM,另一方面,以及证明语言能够发挥更大的作用(play a wider role),一个通用目的的统一接口,各种各样的任务指令都能够被明确地(explicitly)用语言表征以及指引端到端训练的神经网络助手来进行任务的转换,并且处理。比如,最近取得成功的ChatGPT以及GPT4已经表现出LLMs能够对齐人类指令的能力,这也激起了建立开源的LLMs的极大的兴趣。比如LLaMA就是其中的一个开源模型,它能够对标GPT3的能力。Alpaca, Vicuna, GPT4-LLM使用了各种各样机器生成的高质量的遵循指令(instruction-following)样本,用以提升LLM的对齐能力,与专有的(proprietary)LLMs相比,取得了令人印象深刻的表现。但,这一系列的工作都仅仅是基于文本的。

在这篇文章当中,我们提出了视觉指令微调(visual instruction tuning),这是第一次尝试将文本领域的instruction-tuning拓展到多模态领域,旨在为建立通用目的的视觉助手铺平道路。具体而言,我们的文章做了如下的贡献:

  • 多模态遵循指令数据(multimodal instruction-following data). 一个关键的挑战是缺乏视觉语言遵循指令的数据,我们提出了一个数据改造(data reformation)视角以及流水线(pipeline),利用chatgpt/GPT4来将图文对转化成合适的遵循指令格式。
  • 大多模态模型. 我们建立起了一个大的多模态模型(LMM),通过连接开放域的视觉encoder CLIP以及语言的coder LLaMA,并在构建的基于指令的视觉语言数据上进行端到端finetune。我们的实证研究(empirical study)验证了用生成的数据来进行LMM instruction tuning的有效性。并且提出了切实可行的一些建议用于建立一个通用目的的遵循指令的视觉代理。在GPT4的加持之下,我们在多模态推理数据集Science QA上取得了SOTA的结果。
  • 开源. 我们开放了数据集,代码(数据构建,模型训练),模型文件以及视觉对话的demo.

二. 相关工作

Multimodal Instruction-following Agents. 在计算机视觉领域,现有的致力于建立遵循指令的代理(agents)的工作可以从广义的角度上划分为两种类型:

  1. 端到端训练的模型.(在特定的研究领域分别被探索),比如,在视觉语言导航任务以及Habitat需要一个embodied AI agent 来遵循自然语言指令,并且执行一系列的动作来在视觉环境中完成目标。在视觉编辑领域,给定一张输入图像以及一条告诉agent如何去做的指令,InstructPix2Pix通过人类的指令来编辑图像。
  2. 通过LangChain/ LLMs 来协调各种模型系统。比如Visual ChatGPT, X-GPT, MM-REACT. 尽管在建立遵循指令的代理系统上共享一颗北极星,我们致力于建立一个端到端训练的多模态模型来处理各种各样的任务。

Instruction Tuning. 在自然语言处理领域,为了让LLMs(诸如GPT-3, T5, PaLM, OPT)能够遵循自然语言指令并且完成现实世界的任务,研究者已经探索了让LLM进行instruction-tuning的方法,引领了instruction-tuned的conterparts,诸如InstructGPT/ChatGPT,FlanT5,FlanPaLM,OPT-IML。证明了这种简单的方式能够让LLMs有效提升它的zero-shot和few-shot的泛化能力。那么,自然而然,我们可以将NLP的这种观点借鉴到CV领域来。Flamingo可以视作多模态领域的GPT3高光时刻,因为它具备强大的zero-shot迁移能力和上下文学习能力。其他基于图文对训练得到的LMMs,有BLIP2, FROMAGe, KOSMOS-1这些工作。PaLM-E是一个embodied AI的LMM。基于最近的最好开源LLM模型LLaMAOpenFlamingoLLaMA-Adapter这些开源工作都致力于让LLaMA使用图像输入,为构建一个开源的多模态LLMs铺平道路 。尽管有希望的任务迁移泛化能力得以证明,但是这些模型都并不是显式地利用instruction-tuned的视觉语言数据来训练得到的。在这篇文章,我们旨在拉近这条鸿沟,并且研究它的有效性。这儿声明一下,visual instruction tuning不同于visual prompt tunning,前者旨在提升模型的遵循指令的能力,后者旨在提升模型在域适应的参数有效性。

三. 基于GPT辅助的视觉指令数据生成

多模态领域已经见证了公开的图文多模态数据大量井喷的现象,比如CC和LAION数据集都被提出。但是,当涉及多模态遵循指令数据时,有用的资源优势极其有限的,部分原因可能是当众筹人力来进行标注时,这个过程是极其耗时耗力的并且并不是一个很好被定义的任务。受到了最近GPT模型在文本标注任务上成功的启发,我们提出了利用chatGPT/GPT4来收集遵循指令的数据(基于现有广泛存在的图像对数据)。

对于一张图像 X v X_v Xv和它的相应文本描述 X c X_c Xc,天然可以创造一系列的问题 X q X_q Xq来指导这个助手来刻画这张图像的内容。我们提示 GPT-4 并在附录的表 8 中整理了这样的问题列表。因此,一个简单的方式来将现有的图文对扩充为遵循指令数据版本:Human:X_q X_v Assistant:X_c 。尽管很容易构建,这种简单的扩容方式会让指令和回复都缺乏多样性和深度的推理。

为了缓解这个问题,我们利用了仅基于语言的GPT-4以及ChatGPT来作为强大的教师(两者都仅将文本作为输入),来创建基于视觉内容的遵循指令的数据。具体而言,为了让图像编码为text-only GPT的prompt,我们使用了两种方式的符号表征(1)captions: 通常从不同角度来刻画视觉内容
(2)bounding boxes: 通常定位场景里面的目标,每一个框都能编码目标的类别和空间位置,一个代表性的例子如下:

example

有个疑问是:如果GPT看不到视觉的图像的话,岂不是会一本正经胡说八道?(与图像内容无关)

这样的符号表征能够让我们编码图像为LLM可识别的序列,我们使用COCO图像,然后生成了三种类型的遵循指令数据。每一种类型的一个范例都可以在上图上看到,对于每一种类型,我们人工定义了几个范例。它们是数据收集过程中唯一用到的人工标注,并且用于query GPT4上下文学习的种子样例。

  • 对话. 我们设计了设计了助手和人之间对图像提问的对话,这些答案的口气就像是助手看见了这张图像并且回到了这个问题。一些列各种各样关于这张图像的视觉内容的问题都会被问到,包括目标的类别,目标的数量,目标的动作,目标的位置,目标之间的相对关系。只有确定性答案的问题才会被考虑,具体的prompt可以参见下表。
  • 详细描述. 为了包含对一张图像充分全面的描述,我们创造了一系列的问题,我们提示GPT4并且策划了如表9所示的列表。每一张图像,我们随机采样了从这个列表里面采样了一个问题,并且让GPT4生成尽可能详细的描述。
  • 复杂推理. 上面两种类型主要关注的是视觉内容本身,在此基础之上,我们进一步创造了深度推理的问题,答案通常需要遵循严格的逻辑逐步推理。
table10 table11 table12 caption

最终我们收集了158K的遵循指令的数据集,其中58K是对话的,23K是详细描述的,77K是复杂推理的。我们在早期的实验中,对chatGPT和GPT4做了消融实验,发现GPT4能够更稳定地提供高质量的指令遵循数据,比如关于空间推理的。

四. Visual Instruction Tuning

4.1 网络结构

我们基本(primary)的目标就是利用现有训练好的LLM和视觉encoder的能力。网络的框架图如下所示,我们采用了LLaMA作为我们的LLM f ϕ ( . ) f_{\phi}(.) fϕ(.),因为它的有效性已经被好多个开源的纯语言的instruction-tuning的工作所证明,比如alpaca, Vicuna, Instruction tuning with GPT-4。
caption
对于一张输入的图像 X v X_v Xv,我们采用预训练好的CLIP ViT-L/14作为视觉encoder, 其提供视觉特征 Z v = g ( X v ) Z_v = g(X_v) Zv=g(Xv)。在最后一个transformer层之前和之后的格子特征都有在我们的实验中被用到。我们采用了一个简单的线性层来将视觉特征映射到词向量空间。具体而言,我们采用了一个可以训练的映射矩阵 W W W来将 Z v Z_v Zv转化为词向量token H q H_q Hq,这样就能与LLM中的词向量拥有相同的特征为度。

这样我们就有了一系列的视觉tokens H v H_v Hv. 值得注意的一点是这样一种简单的映射方式是轻量且低成本的,这样允许我们能够快速的进行以数据为中心的系列实验,更多复杂的设计来连接图像和语言表征后续也会被考虑,比如Flamingo中的gated cross-attention以及BLIP2种的Q-former,SAM中的目标级别的特征。我们将这些留在未来的工作,进行探索。

4.2 训练

对于每一张图像 X v X_v Xv,我们生成了多轮的对话数据 ( X q 1 , X a 1 . . . , X q T , X a T ) (X_q^1,X_a^1...,X_q^T,X_a^T) (Xq1,Xa1...,XqT,XaT),其中T是总共的轮数,我们将其组织成序列,将所有的answer视作助手的答复,那么第t轮的指令就形如:

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

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

相关文章

大数据大作业(课程设计)

题目:信息爬取字数统计及可视化 内容及要求: 配置Hadoop平台;利用爬虫技术爬取任一门户网站新闻栏目一定时间段内的新闻信息,保存为一个或多个文件并上传到Hadoop平台以本人学号命名的文件夹下;利用MapReduce框架编程完…

【java】JDK21 要来了

文章目录 前言更丝滑的并发编程模式虚拟线程(Virtual Threads)结构化并发(Structured Concurrency)作用域值(Scoped Values) 试验一下虚拟线程的例子结构化编程的例子Scoped Values 的例子 前言 不过多久&…

大数据分析案例-基于LightGBM算法构建航空公司满意度预测模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

Nexus搭建Maven私有库介绍

为什么需要Maven私有库? 使用Maven获取Java依赖包的时候, 默认是从Maven的中央库下载 jar文件, 中央库的地址是: https://repo.maven.apache.org/maven2 。 如果下载速度慢, 可以使用阿里的镜像, 地址如下…

【服务器数据恢复】HP LeftHand存储raid5不可用的数据恢复案例

HP LeftHand存储简介: HP LeftHand存储支持搭建RAID5、RAID6、RAID10磁盘阵列,支持卷快照,卷动态扩容等。服务端和客户端分别如下: LeftHand存储共有三个级别:物理磁盘、基于多个物理磁盘组成的逻辑磁盘(ra…

浏览器渲染流程

解析HTML,生成DOM树,解析CSS,生成CSSOM树 将DOM树和CSSOM树结合,生成渲染树(Render Tree) Layout(回流):根据生成的渲染树,进行回流(Layout),得到节点的几何信息(位置,大小&#x…

Selenium+Pytest自动化测试框架实战

前言 Selenium和Pytest是非常流行的自动化测试框架,二者的配合可以有效地进行Web应用程序的测试。在使用Selenium和Pytest进行自动化测试时,可以实现自动化测试的模块化、重复使用,并且可以在现有的测试项目中方便地集成和调用。 测试框架简…

B树和B+树索引

B树索引 磁盘IO读数据到内存 malloc/new 向 kernel申请4B空间,实际系统可能给2个页面空间即8KB,剩下8KB-4B空间由 lib.so 或libc.so 的 ptmalloc 或tcmalloc管理 。这样就不需要每次去kernel申请内存 磁盘IO同理,我们读一部分数据会把一整…

学了Python后还用学R语言吗?

学习R语言是否有必要取决于你的具体需求和背景。虽然R语言和Python都是数据科学领域广泛使用的编程语言,但它们之间还是存在一些差异。 如果你主要从事数据分析、统计建模或者数据可视化等工作,那么学习R语言可能更为适合。R语言在数据处理和统计分析方…

02_类加载子系统

02_类加载子系统 一、内存结构概述二、类加载器与类的加载过程1、类加载器子系统的作用2、类加载器ClassLoader的作用3、类的加载过程 三、类加载器的分类1、启动类加载器2、扩展类加载器3、应用程序类加载器4、自定义类加载器5、获取ClassLoader的几种方式 五、双亲委派机制1、…

浅谈.NET语言开发应用领域

.NET语言是一种跨平台的开发框架,适用于各种应用程序的开发。以下是一些常见的.NET语言开发应用领域: 桌面应用程序开发:使用.NET框架开发的桌面应用程序可以在Windows操作系统上运行,包括Windows Forms和WPF。这些应用程序可以用…

第二章 进程的描述与控制

目录 一、进程的概念、组成、特征 1.1 进程的概念 1.1.1 程序 1.1.2 进程 1.2 进程的组成 1.3 进程控制块PCB 1.4 进程的特征 二、进程的状态与转换 2.1 进程的状态 2.2 创建态、就绪态 2.3 运行态 2.4 阻塞态 2.5 终止态 2.6 进程状态的转换 2.7 进程的组织 三…

【状态估计】无迹卡尔曼滤波(UKF)应用于FitzHugh-Nagumo神经元动力学研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计

【ProNoC】Chap.1 ProNoC生成2x2的mesh型的4核片上网络系统;实现NoC的RTL设计 0. NoC多核片上网络生成器ProNoCProNoC的功能实现 1. 生成一个叫做Mor1kx SoC的单个Tile(包含NI网络接口)1.1 打开ProNoC用于生成Tile的GUI界面1.2 为Tile添加时钟…

团体程序设计天梯赛-练习集L1篇①

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

【Servlet学习一】认识Servlet 创建第一个Servlet项目

目录 🌟需要知道: 🌈1、Tomcat是什么? 🌈 2、Maven 🌟一、认识Servlet 🌈1、Servlet是什么? 🌈2、实现第一个Servlet项目。 🌈3、简单了解Postman工具…

LTV-6314-ASEMI代理台湾光宝高速光耦LTV-6314

编辑:ll LTV-6314-ASEMI代理台湾光宝高速光耦LTV-6314 型号:LTV-6314 品牌:台湾光宝 封装:LSOP-6 引脚数量:6 类型:光耦 特性:台湾光宝、IGBT驱动器、储能专用光耦\高速光耦 …

云服务器ECS_云主机_服务器托管_弹性计算-阿里云

阿里云服务器ECS(Elastic Compute Service)是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云服务器网分享阿里云服务器ECS详细介…

基于深度学习的高精度鸽子检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度鸽子检测识别系统可用于日常生活中或野外来检测与定位鸽子目标,利用深度学习算法可实现图片、视频、摄像头等方式的鸽子目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

Java8 List集合如何指定打印分隔符

目录 背景方法一:String.join(推荐)方法二:Collectors.joining总结 背景 无论是在学习还是日常的应用开发过程中,我们经常会需要使用分隔符将 List 集合打印出来。 如下所示: import java.util.Arrays;pub…