多模态 ——LLaVA 集成先进图像理解与自然语言交互GPT-4的大模型
概述
提出了一种大型模型 LLaVA,它使用 GPT-4 生成多模态语言图像指令跟随数据,并利用该数据将视觉和语言理解融为一体。初步实验表明,LLaVA 展示了出色的多模态聊天能力,在合成多模态指令上的表现优于 GPT-4。 在科学质量保证中进行微调时,LLaVA 和 GPT-4 的协同作用实现了新的一流准确性。
论文链接:http://arxiv.org/abs/2304.08485
代码链接:https://github.com/haotian-liu/LLaVA
demo链接:https://llava-vl.github.io/
导言
本文的重点是开发结合视觉和语言的人工智能助手。在传统模型中,每项任务都是独立解决的,语言只能描述图像内容。然而,随着大规模语言模型(LLM)的发展,语言能够指导各种各样的任务。本文介绍了一种名为视觉指令调整的新技术,该技术可生成视觉数据来构建大规模多模态模型(LMM)。生成的数据用于微调 LMM,并构建通用的指令跟随视觉代理。 使用 GPT-4 在科学 QA 多模态推理数据集上实现卓越性能。
相关研究
本文将重点讨论如何构建能够遵从视觉和语言指令的代理。现有工作大致可分为端到端训练模型和通过 LangChain 等系统调整不同模型的模型。我们还将自然语言处理(NLP)研究中提出的 LLM 指令调整方法应用于视觉任务,目的是建立一个通用的指令遵循视觉代理。我们认为,这将提高对指令的有效理解和概括,并可能适用于新的多模态任务。
GPT 辅助生成视觉指示数据
虽然社会上公开的图像和文本数据激增,但多模态教学数据却很有限。为了应对这一挑战,有人提议使用 ChatGPT/GPT-4 从大量图像对数据中收集多模态教学数据。
我们提出了一种使用 GPT-4 生成基于图像-文本对的自然问题的方法。由于通常的扩展方法缺乏多样性和深度推理,因此提出了一种方法,利用纯语言 GPT-4 和 ChatGPT 作为教师,生成遵循视觉指令的数据。使用符号表示法对图像进行编码,生成不同类型的指令遵循数据。研究表明,GPT-4 可以提供高质量的指令跟随数据,而且比普通的数据增强方法效果更好。
视觉指令的调整
模型架构
主要目标是有效利用预训练 LLM 和视觉模型的能力。 网络架构如图 1 所示。
LaMA(Large Language Model for Instructions Following)即大型语言模型fφ(⋅),由参数 φ 参数化。这是因为它在仅针对开源语言的指令调整工作中被证明是有效的。ViT-L/14 提供视觉特征 Zv=g(Xv),并使用可训练的投影矩阵 W 将图像特征转换为语言嵌入标记 Hq。这确保了图像和语言模型具有相同的维度。
因此,从图像中得出的视觉标记 Hv 过程序列既轻便又高效,可以快速迭代以数据为中心的实验。其他模型,如 Flamingo’s Gate Cross Attention 和 BLIP-2’s Q-former 或 SAM,都提供了对象级功能。未来的研究仍将探索更有效、更复杂的架构设计。
模型训练
对于每幅图像,对话数据由若干个轮次(X1q、X1a、…)组成。XTq, XTa)。其中 T 代表回合总数。所有助手的回答都会被汇总,每个回合中的指令都会被整理为 Xtinstruct。这种方法产生的多模态指令统一格式如表 2 所示。利用原始的自回归训练目标,对预测标记进行 LLM 指令调整。具体来说,就是计算在长度为 L 的序列中生成目标答案 Xa的概率。
在训练模型时,我们考虑了两阶段的指令调整程序。其中,θ 是可训练参数,Xinstruct < i 和 Xa < i 分别是当前预测标记 xi之前所有回合中的指令和答案标记。在条件语句中,明确添加了 Xv,以强调图像是以所有答案为基础的,并且跳过了 Xsystem 消息和之前的所有
该方法也包括两个阶段。在第一阶段,从 CC3M 中选取 595K 对图像-文本,并使用简单的扩展方法将其转换为符合指令的数据,以便将其视为单轮对话。在此,随机抽样的问题被用作图像的指令,而原始标题则被训练为预期答案。在这一阶段,视觉编码器和 LLM 权重是固定的,只有投影矩阵 W 用于最大化可能性。
第二步,固定视觉编码器的权重,更新 LLaVA 的投影层和 LLM 的权重。换句话说,可训练参数就是投影矩阵 W 和 φ。聊天机器人的训练使用收集到的语言图像指令跟踪数据,并对多转和单转回答进行均匀采样;在 ScienceQA 基准中,问题以自然语言或图像的形式提供上下文,助手负责推理过程,推理过程包括在 ScienceQA 基准中,问题以自然语言或图像的形式提供上下文,助手负责推理过程,从多个选项中选择一个答案
安装与部署
获取代码:
git clone https://github.com/haotian-liu/LLaVA.git
cd LLaVA
安装软件包:
conda create -n llava python=3.10 -y
conda activate llava
python -mpip install --upgrade pip # enable PEP 660 support
pip install torch==2.0.1+cu117 torchvision==0.15.2+cu117 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu117
pip install -e .
pip uninstall bitsandbytes
如果想在本地启动 Gradio ui 演示,请依次运行以下命令。如果计划启动多个模型工作器以比较不同检查点之间的差异,只需要一次启动控制器和Web服务器。
启动项目:
python -m llava.serve.controller --host 0.0.0.0 --port 10000
试验
多模态聊天机器人
研究人员开发了一种名为 LLaVA 的新型多模态人工智能模型,并制作了一个聊天机器人演示,展示了它的图像理解和对话能力;LLaVA 仅在 80,000 张图像上进行了训练,并显示出与 GPT-4 相似的推理结果。这表明,LLaVA 可以遵循指令、理解场景并做出适当的回应。其他模型(BLIP-2 和 OpenFlamingo)则侧重于描述图像,对指令的反应有限。定量评估还比较了 LLaVA 和 GPT-4 在 COCO 验证集所选图像上的答题能力,试图从 GPT-4 的评分中了解 LLaVA 的表现。具体结果见表 3。
对说明的调整使模型遵循用户说明的能力提高了 50 多个百分点。增加详细说明和复杂推理问题后,模型的整体性能提高了 7 个百分点。模型在会话问题上的表现也有所提高,这表明推理能力与会话能力相辅相成。最后,将三种数据类型结合在一起取得了 85.1% 的最佳性能。该评估方案为全面评估和了解大型多模态模型的功能提供了一个基准。
在研究中,使用新适配器的 LLaVA 在 ScienceQA 数据集上达到了 90.92% 的高准确率,而 GPT-4 的结果为 82.69%。与 LLaVA 和 GPT-4 相结合,则能保持 90.97% 的高准确率。此外,还提出了一种通过再次提示 GPT-4 来生成唯一答案的方案,从而达到了 92.53% 的新的最高准确率。这项研究为利用 LLM 的模型组合提供了新的可能性。通过比较不同条件下的模型性能,我们对科学质量保证任务的适当模型配置有了更好的了解。
结论
本文展示了使用 GPT-4 语言模型进行视觉指令调整的有效性。本文引入了一个新的数据生成管道,以生成遵循语言和图像指令的数据,并在此基础上训练多模态模型 LLaVA。通过微调,ScienceQA 实现了新的 SoTA 准确率,多模态聊天数据实现了卓越的视觉聊天体验。未来的前景包括在更大的数据规模上进行预训练,并与其他视觉模型连接。这有望实现新的功能并提高性能。
相关文章:

多模态 ——LLaVA 集成先进图像理解与自然语言交互GPT-4的大模型
概述 提出了一种大型模型 LLaVA,它使用 GPT-4 生成多模态语言图像指令跟随数据,并利用该数据将视觉和语言理解融为一体。初步实验表明,LLaVA 展示了出色的多模态聊天能力,在合成多模态指令上的表现优于 GPT-4。 在科学质量保证中…...

文献学习-33-一个用于生成手术视频摘要的python库
VideoSum: A Python Library for Surgical Video Summarization Authors: Luis C. Garcia-Peraza-Herrera, Sebastien Ourselin, and Tom Vercauteren Source: https://arxiv.org/pdf/2303.10173.pdf 这篇文章主要关注的是如何通过视频摘要来简化和可视化手术视频,…...
Unity Android 2021 Release-Notes
🌈Unity Android 2021 Release-Notes 版本更新内容2021.3.34Android: Google play.core package is replaced with separate plugins including play.asset-delivery 2.1.0 to solve PAD related compatibility problem with Android 14.(UUM-54157)2021.3.34Androi…...
Java8新特性--lambda表达式
lambda表达式本质上是一个匿名函数,在lambda表达式中我们只需要关心参数列表以及方法体。优点是可以减少代码量。 1.语法 基本语法:(参数)->表达式 或 (参数) -> {语句;} 2.函数式接口 要了解lambda表达式,首先要了解什么是函数式接口…...
C/C++中设置随机数
前言 我们通常在写一个数据结构后,需要去测试其正确性和性能比较,那在平常手动输入数据的方式太鸡肋,并且不具有普遍性和随机性。基于这个原因,我们必须要掌握设置随机数,不但可以给我们提供更多的数据,还可…...
ARM 三个小灯闪烁
.text .global _start _start: 使能GPIOE的外设时钟 LDR R0,0x50000A28 指定基地址 LDR R1,[R0] 读取r0中的数据保存到r1中 ORR R1,R1,#(0X3<<4) [4]设置为1,表示 STR R1,[R0] 将修改之后的值放回去 设置PE10,PE8为输出 LDR R0,0X50006000…...
创业之路:从市场洞察到产品实现的全方位指南
创业是一项挑战性的旅程,需要综合考虑市场、产品、技术、团队等多个方面。在这篇文章中,我们将深入探讨如何更好地进行创业,从市场分析到产品实现的各个环节。 深入市场洞察 在创业之前,深入了解目标市场是至关重要的。我们需要…...

C++ 红黑树模拟实现
💓博主CSDN主页:麻辣韭菜💓 ⏩专栏分类:C知识分享⏪ 🚚代码仓库:C高阶🚚 🌹关注我🫵带你学习更多C知识 🔝🔝 前言 前面我们实现了AVL树,发明AVL树…...

【数据结构】第三节:单链表
前言 本篇要求掌握的C语言基础知识:指针、结构体 目录 前言 单链表 概念 对比链表和顺序表 创建链表 实现单链表 准备工作 打印链表 创建节点并初始化 尾插 二级指针的调用 尾插代码 头插 尾删 头删 查找(返回节点) 在指定位…...
Python中操作Excel表对象并打包为脚本
一、准备工作 pip install pandas pip install openpyxl pip install pyinstaller 数据表格: 数据表下载 二、执行写入操作 import pandas as pd # pyinstaller --onefile attendance_records_score.py # 打包 # 读取源Excel文件(假设源表有列A…...

Python学习笔记23 - 目录操作
os模块操作目录相关函数 os.path模块操作目录相关函数 案例1 —— 列出指定目录下的所有.py文件 案例2 —— walk()...

今天你学langchain了吗?
langchain的重重难关 学习langchain也有一段时间了,从最初的0.0339版本到现在的稳定版本,langchain走了很长的路.在学习的路上也遇到了很多的困难. api_key难关 学习langchain最大的困难就是openai的API_KEY,国内无法申请到官方账号,申请到了也无法进行充值.好在有几美元的免…...
插值算法-代码实现
1、 import java.util.HashMap; import java.util.Map;public class Interpolation {public static void main(String[] args) {// 定义给定的 XML 字段值Map<String, double[]> xmlValues new HashMap<>();xmlValues.put("faceSize", new double[]{10…...

113.PyQt5_QtPrintSupport_打印操作
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…...
在vue中使用bing map 的小demo
1.注意事项(关于经纬度) 如果不转换成WGS84 标准的经纬度 bing map会报错 如果要在 Bing Maps 中使用中国地区的经纬度,需要先将其转换为 WGS84 标准的经纬度。你可以使用第三方的坐标转换服务,或者使用相关的 JavaScript 库进行…...
基于uni-app的埋点sdk设计
一、统计app激活状态 在App.vue 中 利用onShow生命周期验证 或者操作 onShow: function () { uni.showToast({ title: onShow }) }, 二、页面级别的统计 (进入页面、停留时长、手机系统信息、网络状态、页面路径、标题) 需要收集的数据 { &quo…...
Python学习笔记(三)
一、使用朴素贝叶斯制作鸢尾花数据模型 from sklearn.preprocessing import StandardScaler from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.feature_extraction…...

Python办公自动化之Excel做表自动化:全网最全,看这一篇就够了!
0 Python Excel库对比 我们先来看一下python中能操作Excel的库对比(一共九个库): 1 Python xlrd 读取 操作Excel 1.1 xlrd模块介绍 (1)什么是xlrd模块? python操作excel主要用到xlrd和xlwt这两个库&…...

【学习笔记】R语言入门与数据分析1
数据分析 数据分析的过程: 数据采集 数据存储 数据分析 数据挖掘 数据可视化 进行决策 数据挖掘 数据量大 复杂度高,容忍一定的误差限 追求相关性而非因果性 数据可视化 直观明了 R语言介绍 R是免费的(开源软件、扩展性好)…...

MyBatis-Spring整合
引入Spring之前需要了解mybatis-spring包中的一些重要类; http://www.mybatis.org/spring/zh/index.html 什么是 MyBatis-Spring? MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 知识基础 在开始使用 MyBatis-Spring 之前&#x…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...