Visual ChatGPT(可处理图片的对话系统)原理简介和环境搭建
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图片处理技术会不会逐渐被替代,也未可知。
标签: