位置: 首页 > 热点 > > 正文

Visual ChatGPT(可处理图片的对话系统)原理简介和环境搭建

2023-03-13 20:53:16 来源:哔哩哔哩

visual-chatgpt可以通过对话让AI对图片进行分析和处理,对图片进行解释、按文字生成或修改图片等操作。本质上其实是ControlNet+ChatGPT,并不是一个能够直接对图片进行处理的多模态语言模型,而是ChatGPT在现有的AI图片处理技术上的一个应用。

完整将模型全部加载要几十G的显存,但其实没有必要,每次只要加载需要用到的部分即可,通过修改代码可以在十几G的显存上运行。


(相关资料图)

原理简介

参数介绍

User Query,符号Qi,用户第i轮提问,可以是文字或者图片

Ouput,符号Ai,模型第i轮回答

Prompt Manager,符号M,提示词管理器,将图片信息转换为文本,使得ChatGPT能够理解

Visual Foundation Models,符号F,视觉基础模型,简写VFM

System Principle,符号P,系统的基本规则,例如,如果发现了输入内容是图片的文件名,此时应该使用VFM来处理图片,而不是根据聊天记录生成文本

History of Dialogue,符号H<i,对话历史,第i轮对话之前的问题答案对的串联,并且会用最大长度进行截断

History of Reasoning,符号Ri(<j),推理历史,第j轮之前之前的推理历史(即右边的中间过程)

Intermediate Answer,符号Ai(j),第j轮中间的回答,Visual ChatGPT会通过逻辑调用不同的VFM逐步回答

图片左边是示例对话,分为三轮:

1、用户发送一张图片。

模型:收到。

2、用户:将图片中的沙发换成桌子,并使用水彩画的风格

模型返回两张照片,第一张是将沙发换成桌子,第二张是换成水彩画风格

3、用户:图片中的墙是什么颜色(这里的图片应该是指处理后的图片)

模型:图片中的墙是蓝色

图片中间的部分是处理流程,核心是Prompt Manager部分,负责接收参数后,整理成合适的提示词,然后送给ChatGPT,让ChatGPT决定:是否需要用到图片模型、使用什么样的模型、以及最终的输出。

如果不需要用到VFM,则M接收P、F、H<i,Qi四个参数;如果需要用到VFM,则M额外接收Ri(<j)和Ai(j)两个参数。

图片右边的部分,是对需要用到VFM的第二轮对话的中间流程示例,也就是将六个参数通过M送给ChatGPT的处理结果。这里推理共有三步:

1、ChatGPT认为需要用VFM,并且使用【Replace Something From The Photo】这个模型,然后将图片中的一个部分替换掉,即把沙发换成桌子,生成一张新照片。

2、ChatGPT认为需要用VFM,并且使用【Instruct Image Using Text】这个模型,然后将图片的风格进行转换,即把风格换成水彩画,生成一张新照片。

3、ChatGPT认为不需要用VFM,输出图片。

下图示Prompt Manager的原理图,简单概括就是设定各种各样的规则,使得输入的内容能够让ChatGPT看懂:

环境搭建

测试过Windows和Linux两个系统,Linux是在Docker中的,都可以搭建,只是有些许差别。

1、安装git

Linux系统:

1)apt update

2)apt install git

3)apt install git-lfs

4)git lfs install 

Windows系统:

1)官网下载windows版本并安装git:https://git-scm.com/

2)官网下载windows版本并安装git-lfs:https://github.com/git-lfs/git-lfs/releases

3)控制台执行:git lfs install 

2、下载代码

这里有两个仓库都叫ControlNet,重名了,先在两个目录下载,然后把两个ControlNet文件夹一起复制到visual-chatgpt目录下即可。(第三个仓库包含了一些模型,需要多下载一些时间。)

git clone https://github.com/microsoft/visual-chatgpt

git clone https://github.com/lllyasviel/ControlNet

git clone https://huggingface.co/lllyasviel/ControlNet

3、下载模型,共42.5G

linux系统:

1)执行 ./download.sh即可

windows系统:

1)将ControlNet中的annotator、cldm、ldm三个目录复制到visual-chatgpt

2)创建image目录

3)手动把download.sh中的8个pth文件下载下来,并放到ControlNet/models目录下

4、安装python环境

1)根据操作系统下载并安装anaconda:https://www.anaconda.com/

2)创建环境:conda create -n visgpt python=3.8

3)激活环境:conda activate visgpt

4)安装依赖:pip install -r requirement.txt

如果运行的时候报错:openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host='api.openai.com', port=443): Max retries exceeded with url: /v1/chat/completions (Caused by ProxyError('Cannot connect to proxy.', OSError(0, 'Error')))

原因是urllib3的版本1.26.0以上可能会导致无法连接api.openai.com,安装一个低版本的即可,例如pip install urllib3==1.25.11。

5、设置环境变量

在系统中将openai的api_key加入环境变量:

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxx

6、修改代码

将visual_chatgpt.py的如图这两个部分全部注释掉,需要用的时候再打开。如果只有一个显卡的话,将cuda:x全部改成cuda:0,多显卡可以根据个人配置增加。

取消注释的时候,上面的模型取消了,下面的tools部分也要相应取消注释。例如这里开启了edit和i2t两个模型,则tools中也要将这两个模型对应的部分注释取消。

如果不知道需要用到什么模型,可以先把流程跑通,到时候ChatGPT判断出需要什么模型但没有的时候会有报错提示,再把对应的打开即可。

7、启动程序

python visual_chatgpt.py

注意:初次执行时,可能会从huggingface下载模型,可以先把代理关了,等服务完全启动后,需要访问到api.openai.com,再开启代理。

8、浏览器访问

打开http://127.0.0.1:7860/,如果端口号冲突,代码最后一行可以改这个端口号。

然后就可以上传图片并进行操作了,例如我这里上传了我现在的头像,上传图片后控制台的输出:

然后输入提示词让他描述一下这个人:Describe the person。控制台输出如下图:

网页上的情况:

这里我只加载了edit和i2t模型,没有加载t2i模型(即text to image),并不能生成图片,只是将流程走通(测试的这台机器只有11G显存不够了,要换另一台显存大的)。如果需要加载别的模型只要把相应的注释去掉即可。

小结一下,只是看官网演示的话,会觉得这个很神奇,但是其实就是已经有了一大堆图片模型后,让ChatGPT帮我们选择模型进行处理。即使没有ChatGPT,也可以做这些事情,人工去选择模型而已。目前最大的问题在于,模型占用的显存太大,如果能优化到全部模型只占10G以内,那还是很不错的。

不过多模态版的ChatGPT很快也要出了,这些AI图片处理技术会不会逐渐被替代,也未可知。

标签: