【AIGC】2、Visual ChatGPT

2023-10-30

在这里插入图片描述

论文:Visual ChatGPT :Talking, Drawing and Editing with Visual Foundation Models

代码:https://github.com/microsoft/visual-chatgpt

出处:Microsoft Research Asia

时间:2023.03

Visual ChatGPT 是一个能够调动多个不同基础视觉模型来理解视觉信息并生成对应回答的系统。

一、背景

近期, Large Language models(LLMs)发展非常快,如 T5[32]、BLOOM[36]、GPT-3[5] 等。

尤为引起人们注意的是 ChatGPT(基于 Instruct-GPT[29] 而来),能够以真实对话的方式实现和人类的交互。

但是 ChatGPT 是使用语言模型训练的,不适用于图像方面的生成任务。

图像方面,Visual Foundation Models (VFMs) 也有很好的效果,BLIP[22] 能够很好的理解图像并输出对图像的描述, Visual Transformer 和 Stable Diffusion[35] 在图像理解和生成方面有很好的效果。

但上述的先进的语言模型和图像模型只能接收特定模态的输入和输出。而且图像模型有较高的固定输入输出格式,使得图像模型没有语言模型灵活。

能否构建一个类似于 ChatGPT 的系统来实现图像的理解和生成呢?

本文作者提出了一种 Visual ChatGPT,不需要从头开始训练多模态 ChatGPT,而是基于 ChatGPT 和多种 VFMs。

为了弥补 ChatGPT 和这些 VFMs 的 gap,作者又构建了一个提示管理器(Prompt Manager)来支持如下的功能,通过 Prompt Manager 来指导 ChatGPT 使用这些 VFMs,并迭代反馈 :

  • 直观的告诉 ChatGPT 这些 VFMs 的能力和输入输出形式
  • 将不同的视觉信息,如 png 图像、深度图像、掩码矩阵转换为语言形式的信息帮助 ChatGPT 进行理解
  • 处理不同 VFMs 的优先级和冲突

Visual ChatGPT 能够通过如下三步来实现图像模型和语言模型的交互:

  • 能够同时接收语言和图像作为输入
  • 提供需要多个人工智能模型与多个步骤协作的复杂视觉问题或视觉编辑指令
  • 提供反馈意见并告诉系统纠错后的结果,即可以将视觉模型信息注入到 ChatGPT 中,并考虑多个输入/输出的模型和视觉反馈的模型

示例如图 1 所示:

  • 用户上传一张黄色花的图片并输入:“请根据预测的图像深度,生成一朵红色的花,然后逐步变成卡通的样子”
  • Prompt Manager 可以帮助 Visual ChatGPT 启动相关 VFMs 的执行链,首先使用深度估计模型来检测深度信息,然后利用深度图像模型生成一个红花的深度信息,最后使用风格迁移模型将风格转换为卡通
  • Prompt Manager 通过提供可视化的类型和记录信息来记录转换过程,当获得 “卡通” 的提示后,结束整个过程

在这里插入图片描述

本文贡献:

  • 提出了 Visual ChatGPT,打开了 ChatGPT 和 VFMs 结合的大门,让 ChatGPT 能够处理更复杂的视觉问题
  • 设计了一个 Prompt Manager,包含 22 个不同的 VFMs 并且定义了它们之间的内部相关性,以便更好的互动和结合
  • 验证了 Visual ChatGPT 对视觉的理解和生成能力

二、Visual ChatGPT

假设一个有 N N N 个 question-answer pairs 的对话系统为 S = { ( Q 1 , A 1 ) , ( Q 2 , A 2 ) , . . . , ( Q N , A N ) } S=\{(Q_1, A_1),(Q_2, A_2),...,(Q_N, A_N) \} S={(Q1,A1),(Q2,A2),...,(QN,AN)}

为了从第 i i i 轮对话中得到响应 A i A_i Ai,需要使用一系列的 VFM 和这些模型的中间输出 A i ( j ) A_i^{(j)} Ai(j) j j j 表示第 j j j 个 VFM ( F F F) 的输出。

也就是说在时域 Prompt Manager M M M 协调时, A i ( j ) A_i^{(j)} Ai(j) 的形式需要不断修改来满足每个 F F F 的输入。

最后,如果表示为最终响应,则系统输出 A i ( j ) A_i^{(j)} Ai(j) ,不再执行 VFM。

Visual ChatGPT 的表达形式如下:

在这里插入图片描述

  • System Principle P P P:系统规则为 Visual ChatGPT 提供了基础规则,需要对图像文件名敏感,能够使用 VFM 来处理图像。
  • Visual Foundation Model F F F:Visual ChatGPT 能够很好的组合不同的 VFM( F = { f 1 , f 2 , . . . , f N } F=\{f_1, f_2, ..., f_N\} F={f1,f2,...,fN}),每个基础模型 f i f_i fi 都是具有显式输入和输出的确定函数
  • History of Dialogue H < i H_{<i} H<i:定义第 i i i 轮对话的历史为前面 “问题-回答” pairs 的串联形式,即 { ( Q 1 , A 1 ) , ( Q 2 , A 2 ) , . . . , ( Q i , A i ) } \{(Q_1, A_1),(Q_2, A_2),...,(Q_i, A_i) \} {(Q1,A1),(Q2,A2),...,(Qi,Ai)}。此外,还有一个最大长度阈值来截断历史信息,来满足 ChatGPT 模型的输入长度
  • User Query Q i Q_i Qi:Visual ChatGPT 的用户查询包括语言查询和视觉查询
  • History of Reasoning R i < j R_i^{<j} Ri<j:为了解决复杂的问题,Visual ChatGPT 需要多个 VFM 的合作,对第 i i i 轮对话, R i < j R_i^{<j} Ri<j 是调用第 j j j 个 VFM 之前的所有推理历史
  • Intermediate Answer A ( j ) A^{(j)} A(j):复杂查询问题中,Visual ChatGPT 会调用多个不同的 VFM 来逐步获得中间答案,也就会产生多个中间答案
  • Prompt Manager M M M:提示管理器会将所有视觉信号转换为语言以便于 ChatGPT 的理解

Visual ChatGPT 的基础视觉模型如下,共 22 个:

在这里插入图片描述

2.1 对系统规则的提示管理

Prompt Managing of System Principles M ( P ) M(P) M(P)

Visual ChatGPT 是一个能够调动多个不同 VFMs 来理解视觉信息并生成对应回答的系统。故此,需要很多准则来指导管理器将信息转换为 ChatGPT 能理解的信息。

Prompt Managing (提示管理器)有如下几个作用:

  • Visual ChatGPT 的作用:协助完成一系列文本和视觉相关的任务,如视觉问答、图像生成和编辑等
  • VFMs 的易用性:Visual ChatGPT 可以访问 VFM 的列表来解决各种 VL 任务。决定使用哪个基础模型完全由 ChatGPT 模型本身决定,因此很容易支持新的 VFM 和 VL 任务。
  • 文件名敏感性:Visual ChatGPT 根据文件名访问图像文件,所以,使用精确的文件名很重要,可以避免歧义,因为一轮对话可能包含多个图像及其不同的更新版本和文件名的滥用将导致混乱。因此,Visual ChatGPT 需要使用严格的文件名,以确保它检索和操作正确的图像文件。
  • 链式思想:如图 1 所示,要处理一个看似简单的命令,可能需要多个 VFM,例如,查询 “根据预测的图像深度生成一朵红花,然后使其像卡通一样” 需要深度估计、深度到图像和风格转移 VFM。为了通过将查询分解为子问题来解决更具挑战性的查询,在 Visual ChatGPT 中引入了 CoT,以帮助决定、利用和分派多个 VFM。
  • 推理格式严格:Visual ChatGPT 必须遵循严格的推理格式。因此,需要用复杂的正则表达式匹配算法来解析中间推理结果,并为 ChatGPT 模型构造合理的输入格式,以帮助它确定下一次执行,例如,触发一个新的 VFM 或返回最终的响应
  • 可靠性:作为一种语言模型,Visual ChatGPT 可能会伪造虚假的图像文件名或事实,从而使系统不可靠。为了处理这些问题,Visual ChatGPT 忠实于视觉基础模型的输出,而不是制作图像内容或文件名。此外,多个 VFM 的协作可以提高系统的可靠性,因此构建的提示将指导 ChatGPT 优先利用 VFM,而不是基于对话历史生成结果。

在这里插入图片描述

2.2 基础模型的提示管理

Prompt Managing of Foundation Models M ( F ) M(F) M(F)

Visual ChatGPT 中有多个 VFM 来处理各种 VL 任务。这些不同的 VFM 有相似之处,例如:

  • 替换图像中的目标可以被视为生成一个新的图像
  • Image-to-Text(I2T)任务和图像问题回答(VQA)任务可以理解为根据输入的图像来产生对应的响应

如图 3 所示,提示管理器明确定义了以下各个子提示符,以帮助 Visual ChatGPT 准确地理解和处理 VL 任务:

  • Name:名称提示符为每个 VFM 提供了全局函数的抽象,例如,回答关于图像的问题,它不仅能够帮助 Visual ChatGPT 以简洁的方式理解 VFM 的目的,而且也是 VFM 的 entry。
  • Usage:使用提示符描述了应该使用 VFM 的特定场景。例如,Pix2Pix 模型[35] 适合于更改图像的样式。提供这些信息有助于Visual ChatGPT 对特定任务使用哪个 VFM 做出决定。
  • Inputs/Outputs:输入和输出提示反应了每个 VFM 所需的输入和输出的格式,因为格式可能变化很大,对 Visual ChatGPT 能否正确执行 VFM 有很重要的指导作用
  • Example(可选):示例提示符是可选的,但它有助于 Visual ChatGPT 更好地理解如何在特定的输入模板下使用特定的 VFM 并处理更复杂的查询

在这里插入图片描述

2.3 . 用户提问的提示管理

Prompt Managing of User Querie M ( Q i ) M(Q_i) M(Qi)

Visual ChatGPT 能够支持多种的查询,包括语言和图像的,简单的和复杂的,Prompt 通过如下两个方面来处理用户的查询:

  • Generate Unique Filename

    Visual ChatGPT 可以处理两种与图像相关的查询:一种涉及新上传的图像,另一种涉及对现有图像的引用。

    对于新上传的图像,Visual ChatGPT 生成一个具有普遍唯一标识符(UUID)的唯一文件名,并添加一个表示相对目录的前缀字符串 “image”,例如,“image/{uuid}.png”。

    虽然新上传的图像不会被输入 ChatGPT,但会生成一个虚假的对话历史,其中有一个问题说明图像的文件名,还有一个答案表明图像已经收到。这段虚假的对话历史有助于之后的对话。

    对于涉及引用现有图像的查询,Visual ChatGPT 会忽略文件名检查。这种方法已经被证明是有益的,因为 ChatGPT 能够理解用户查询的模糊匹配,如 UUID 名称。

  • Force VFM Thinking

    为了确保 Visual ChatGPT 的成功触发 VFM ,在(Qi)中添加了一个后缀提示:“由于 Visual ChatGPT 是一种文本语言模型,Visual ChatGPT 必须使用工具来观察图像,而不是想象。这些思想和观察只在 Visual ChatGPT 中可见,Visual ChatGPT 应该记住在人类的最终反应中重复重要的信息。也会反复思考:我需要使用一个工具吗?”。

    这个提示有两个目的:

    • 它提示 Visual ChatGPT 使用基础模型,而不是仅仅依赖于它的想象力;
    • 它鼓励 Visual ChatGPT 提供由基础模型生成的特定输出,而不是像 “你在这里” 这样的通用响应。

2.4 基础模型输出的提示管理

Prompt Managing of Foundation Model Outputs M ( F ( A i ( j ) ) ) M(F(A_i^{(j)})) M(F(Ai(j)))

对于来自不同 VFM F ( A i ( j ) ) F(A_i^{(j)}) F(Ai(j)) 的中间输出,Visual ChatGPT 能够隐式地总结并将它们提供给 ChatGPT 进行后续交互,即调用其他 VFM 进行进一步的操作,直到达到结束条件或反馈给用户。内部的步骤可以总结如下:

  • Genarete Chained Filename:

    由于 Visual ChatGPT 的中间输出将成为下一轮隐式对话的输入,故应该使这些输出更合乎逻辑,以帮助 LLMs 更好地理解推理过程。

    具体来说就是从视觉基础模型生成的图像被保存在路径 “image/” 文件夹下。

    之后,image 的命名为 :“{Name} {Operation} {Prev Name} {Org Name}”

    例如 “image/ui3c_edge-of_o0ec_nji9dcgf.png” 表示输入 o0ec 的一个名为 ui3c 的 canny edge image,且该图像的元素名称为 nji9dcgf。

    这样的命名规则可以让 ChatGPT 了解是如何生成的这个图像

  • Call for More VFMs:

    Visual ChatGPT 的一个核心是可以自动调用更多的 VFMs 来完成用户的命令。也就是 ChatGPT 会不断询问自己,它是否需要 VFM 来解决当前的问题,在每一阶段结束时扩展一个 VFMs 的后缀。

  • Ask for More Details:

    当用户的命令模棱两可时,Visual ChatGPT 应该向用户询问更多的细节,以帮助更好地利用 VFM。这种设计是为了安全考虑,因为 LLMs 不允许毫无根据地任意篡改或推测用户的意图(特别是当输入信息不足时)。

三、实验

3.1 实验设置

使用 ChatGPT [29](OpenAI“文本-数据-003”版本)实现 LLM(Large Language Model),并用 LangChain[7] 指导 LLM。

从 HuggingFace Transformers [43], Maskformer [10] 和 ControlNet [53] 来收集基础模型。

所有 22 个 VFM 全部部署需要 4 个 Nvidia V100 GPU,但用户可以部署更少的基础模型,以灵活地节省 GPU 资源。

聊天历史记录的最大长度为 2000,多余的令牌被截断以满足 ChatGPT 的输入长度。

3.2 多轮对话的完整案例

如图 4 所示,展示了 Visual ChatGPT 的 16 轮多模态对话

在这里插入图片描述

3.3 Case Study of Prompt Manager

图 5 展示了 Prompt Manager 相关案例研究

为了验证系统的效率,会从中删除不同的部分来比较模型的性能,每次去除都会导致不同的容量退化。

在这里插入图片描述

1、Case Study of prompt managing of foundation models

VFM 的名称是最重要的:

名称需要有明确的定义,当名称缺失或不明确时,Visual ChatGPT 会多次猜测,直到它找到一个现有的 VFM,或遇到一个错误,如图 6 的左上部分所示。

VFM 的使用:

应该清楚地描述应该使用模型以避免错误响应的特定场景。右上角显示了样式转换对替换对象的处理不当。

应准确提示输入和输出格式,以避免参数错误,如左下角所示。

虽然右下角删除了示例提示,但 ChatGPT 也可以总结对话历史和人类意图来使用正确的 VFM,如右下角所示。

在这里插入图片描述

2、 Case Study of prompt managing of user query

图 7 上半部分分析了用户查询的提示管理器案例

输入的图像需要有唯一的命名,以避免被覆盖

3、Case Study of prompt managing of model outputs

如图 7 下半部分所示

左下角的图片比较了删除和保留链式命名规则的性能。使用链式命名规则,Visual ChatGPT 可以识别文件类型,触发正确的VFM,并得出文件依赖关系命名规则。

链式命名规则确实有助于 Visual ChatGPT 的理解。

右下角的图片给出了一个当项目推断不明确时要求更多细节的例子,这也表明了系统的安全性

在这里插入图片描述

四、当前的局限性

1、强依赖于 ChatGPT 和 VFMs

2、需要不断的提示,会比较耗时,并且学专业的语言和图像的知识

3、实时能力有限

4、token 长度限制可能会限制可使用的语言模型的数量

5、因为 Visual ChatGPT 能够方便的使用基础模型,可能还包括一些远程模型,可能会导致敏感数据泄露

五、总结

本文算是首次将 ChatGPT 和多种计算机视觉基础模型进行结合的案例,通过设计一系列的提示,能够逐步将视觉信息注入 ChatGPT 中,实现对视觉输入的理解和生成。但也有很多限制,比如耗时较长,很依赖于基础模型,执行结果和人类期望是否一致等。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【AIGC】2、Visual ChatGPT 的相关文章

  • Pycharm安装go插件,开始go之旅

    在PyCharm Idea一样 装GO插件 相当容易 PyCharm左上角 File gt Settings gt Plugins 点击 Browse repositories 输入go查询 看右侧说明确认是正确的go插件即可安装 PyCh
  • Java常见异常总结

    1 java lang NullPointerException 空指针异常 调用了未经初始化的对象或者是不存在的对象 经常出现在创建图片 调用数组这些操作中 比如图片未经初始化 或者图片创建时的路径错误等等 对数组操作中出现空指针 即把数
  • 移动通信关键技术-多址技术和复用技术

    移动通信网络简介 现在是2017年 4G已经使用很多年了 那么回顾一下移动通信的历史发展 1G 以AMPS ATCS为代表的模拟通信系统 主要技术是FDMA 主要业务是语音业务 2G 以GSM为代表的数字通信 主要技术TDMA是 IS 95
  • android任意函数绘制_Android布局优化技巧大盘点

    欢迎关注专栏 里面定期分享Android和Flutter架构技术知识点及解析 还会不断更新的BATJ面试专题 欢迎大家前来探讨交流 如有好的文章也欢迎投稿 Android高级进阶 zhuanlan zhihu com 开始 继上一篇卡顿优化

随机推荐

  • mysql leave iterator_c++迭代器(iterator)详解

    1 迭代器 iterator 是一中检查容器内元素并遍历元素的数据类型 1 每种容器类型都定义了自己的迭代器类型 如vector vector iterator iter 这条语句定义了一个名为iter的变量 它的数据类型是由vector定
  • 自作JavaScript飞机大战小游戏

    不会canvas画板标签小朋友们的福音来啦 用标签也能制作简单小游戏哦 飞机大战GitHub源码链接 https github com shunyue1320 fjdz git 做游戏就要有素材的啦 以下是在爱给网找到的素材 首先3个页面的
  • MobileNet(二)

    MobileNets MobileNetv1 深度可分离卷积 深度学习的经典网络模型 如ResNet VGG GooogleNet等已经达到了不错的效果 但存在一个问题 即模型庞大 参数较多 计算量较大 在一些实际的场景如移动或嵌入式设备中
  • git 查看远程地址 与 远程地址的设置

    一 查看远程地址 git remote v 如果绑定好远程地址的话 会有两条地址 fetch 和 push 那么 fetch 表示我们要获取到的地址 push则表示我们要推送的地址 二 远程地址的设置 1 添加远程地址 git remote
  • Prometheus 集成 Node Exporter

    文章首发于公众号 程序员果果 地址 https mp weixin qq com s 40ULB9UWbXVA21MxqnjBxw 简介 Prometheus 官方和一些第三方 已经把一些常用数据库 系统 中间件等的指标数据的采集做成了一个
  • 图像处理常用插值方法总结

    常用的插值方法 1 最邻近元法 这是最简单的一种插值方法 不需要计算 在待求象素的四邻象素中 将距离待求象素最近的邻象素灰度赋给待求象素 设i u j v i j为正整数 u v为大于零小于1的小数 下同 为待求象素坐标 则待求象素灰度的值
  • 矩阵运算库

    gt Android Java矩阵计算的架包Jama Jama是一个基本的线性代数Java包 包括一个基本的Matrix类和5个矩阵分解类 Matrix类提供了基本的线性代数数值运算的功能 不同的构造函数可以构造双精度和浮点精度的二维数组
  • 什么是DHCP?有什么优缺点

    DHCP 代表动态主机配置协议 它是存在于应用层的网络管理协议 在它的帮助下 可以将 Internet 协议 IP 地址动态分配给网络上的任何设备或节点 以便它们可以使用该 IP 进行通信 网络管理员的任务是为网络中的所有设备手动分配大量
  • STM32组合设备实现USB转双串口

    USB转双串口 核心技术就在于组合设备 USB Composite 的实现 组合设备的实现 其核心技术在于描述符的实现 下面我们先给出描述符 设备描述符 C 纯文本查看 复制代码 00001 00002 00003 00004 00005
  • IDEA 获取类的相对路径和绝对路径

    1 相对路径 结果 action HelloAction 2 绝对路径 结果 E javaProject JavaEEProject day08 Struts2 test01 src action HelloAction java 转载于
  • 登录注册与Cookie

    很多时候 我们登录一个网站的第一步是注册用户 然后登录 这个高频次的操作前端与后端是如何交互完成登录成功页面跳转的呢 今天我们来聊一聊登录注册的那些事 登录注册的流程 如上图 第一步 用户在注册页面将自己的账号密码邮箱等等信息传给服务器 第
  • 小熊派STM32-OTA+IOT教程

    近期在准备一个物联网课程 主要是针对STM32OTA升级 这次使用的是小熊派物联网开发板 项目地址 https gitee com wenzhengclub bearpi iot ota 其实这个开发板去年我就拿到手了 只是一直没有机会和时
  • Colaboratory下载Kaggle数据

    快捷链接 Colaboratory网址 Kaggle网址 Kaggle获取不了验证码的可以留言 进入Kaggle的账户 新建一个API Token 就会下载一个kaggle json文件 同时出现下面提示 这个在本地运行的时候 需要将kag
  • SQL: STUFF()和FOR XML PATH的使用

    STUFF param1 startIndex length param2 将param1中自startIndex SQL中都是从1开始 而非0 起 删除length个字符 然后用param2替换删掉的字符 示例 select STUFF
  • Gcov/Lcov生成覆盖率遇到的一系列问题(ubuntu18.04)

    1 lcov安装 sudo apt get install lcov 此时安装的lcov版本号是1 13 2 lcov使用 生成覆盖率关联的库在编译时需要加上以下标志位 set CMAKE CXX FLAGS CMAKE CXX FLAGS
  • Docker 使用及常用命令(一)

    一 Docker 基本概念 Docker 是一个开源的应用容器引擎 依赖于已存在并运行的 Linux 内核环境 它允许开发者将应用及其依赖包打包到一个轻量级 可移植的容器中 发布到任何流行的 Linux 机器上 容器相互之间不存在任何接口
  • 稳压二极管串联电阻计算

    稳压二极管是稳压电路的一种方式 但是提供负载的动力与二极管自身的功率有关 例如ZMM 5V 功率1W 最小的反向稳压管的电流5mA 最大的反向稳压管电流 Izmax P U 1W 5v 200mA 当稳压管流向最大电流200mA 则流过串联
  • 自动驾驶仿真平台Carla从入门到放弃

    一 Carla的基本概念 人工智能 5G和V2X技术的不断发展使得自动驾驶成为可能 近几年 自动驾驶发展迅速 在科技新闻上经常可以看到自动驾驶的身影 而从事自动驾驶相关软 硬件研究的高效研究所和公司也越来越多 既有传统的汽车巨头 也有新兴的
  • Angular4.0_环境搭建

    1 百度Node js下载并安装 2 检查npm版本 npm v 3 安装angular cli sudo npm install g angular cli 4 检查版本 ng v 5 在当前目录下创建angular项目 ng new a
  • 【AIGC】2、Visual ChatGPT

    文章目录 一 背景 二 Visual ChatGPT 2 1 对系统规则的提示管理 2 2 基础模型的提示管理 2 3 用户提问的提示管理 2 4 基础模型输出的提示管理 三 实验 3 1 实验设置 3 2 多轮对话的完整案例 3 3 Ca