Visual ChatGPT(可處理圖片的對話系統(tǒng))原理簡介和環(huán)境搭建
????????visual-chatgpt可以通過對話讓AI對圖片進行分析和處理,對圖片進行解釋、按文字生成或修改圖片等操作。本質(zhì)上其實是ControlNet+ChatGPT,并不是一個能夠直接對圖片進行處理的多模態(tài)語言模型,而是ChatGPT在現(xiàn)有的AI圖片處理技術(shù)上的一個應(yīng)用。
? ? ? ??完整將模型全部加載要幾十G的顯存,但其實沒有必要,每次只要加載需要用到的部分即可,通過修改代碼可以在十幾G的顯存上運行。
原理簡介

參數(shù)介紹
User Query,符號Qi,用戶第i輪提問,可以是文字或者圖片
Ouput,符號Ai,模型第i輪回答
Prompt Manager,符號M,提示詞管理器,將圖片信息轉(zhuǎn)換為文本,使得ChatGPT能夠理解
Visual Foundation Models,符號F,視覺基礎(chǔ)模型,簡寫VFM
System Principle,符號P,系統(tǒng)的基本規(guī)則,例如,如果發(fā)現(xiàn)了輸入內(nèi)容是圖片的文件名,此時應(yīng)該使用VFM來處理圖片,而不是根據(jù)聊天記錄生成文本
History of Dialogue,符號H<i,對話歷史,第i輪對話之前的問題答案對的串聯(lián),并且會用最大長度進行截斷
History of Reasoning,符號Ri(<j),推理歷史,第j輪之前之前的推理歷史(即右邊的中間過程)
Intermediate Answer,符號Ai(j),第j輪中間的回答,Visual ChatGPT會通過邏輯調(diào)用不同的VFM逐步回答
圖片左邊是示例對話,分為三輪:
1、用戶發(fā)送一張圖片。
模型:收到。
2、用戶:將圖片中的沙發(fā)換成桌子,并使用水彩畫的風格
模型返回兩張照片,第一張是將沙發(fā)換成桌子,第二張是換成水彩畫風格
3、用戶:圖片中的墻是什么顏色(這里的圖片應(yīng)該是指處理后的圖片)
模型:圖片中的墻是藍色
圖片中間的部分是處理流程,核心是Prompt Manager部分,負責接收參數(shù)后,整理成合適的提示詞,然后送給ChatGPT,讓ChatGPT決定:是否需要用到圖片模型、使用什么樣的模型、以及最終的輸出。
如果不需要用到VFM,則M接收P、F、H<i,Qi四個參數(shù);如果需要用到VFM,則M額外接收Ri(<j)和Ai(j)兩個參數(shù)。
圖片右邊的部分,是對需要用到VFM的第二輪對話的中間流程示例,也就是將六個參數(shù)通過M送給ChatGPT的處理結(jié)果。這里推理共有三步:
1、ChatGPT認為需要用VFM,并且使用【Replace Something From The Photo】這個模型,然后將圖片中的一個部分替換掉,即把沙發(fā)換成桌子,生成一張新照片。
2、ChatGPT認為需要用VFM,并且使用【Instruct Image Using Text】這個模型,然后將圖片的風格進行轉(zhuǎn)換,即把風格換成水彩畫,生成一張新照片。
3、ChatGPT認為不需要用VFM,輸出圖片。
下圖示Prompt Manager的原理圖,簡單概括就是設(shè)定各種各樣的規(guī)則,使得輸入的內(nèi)容能夠讓ChatGPT看懂:

環(huán)境搭建
測試過Windows和Linux兩個系統(tǒng),Linux是在Docker中的,都可以搭建,只是有些許差別。
1、安裝git
Linux系統(tǒng):
1)apt update
2)apt install git
3)apt install git-lfs
4)git lfs install?
Windows系統(tǒng):
1)官網(wǎng)下載windows版本并安裝git:https://git-scm.com/
2)官網(wǎng)下載windows版本并安裝git-lfs:https://github.com/git-lfs/git-lfs/releases
3)控制臺執(zhí)行: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系統(tǒng):
1)執(zhí)行 ./download.sh即可

windows系統(tǒng):
1)將ControlNet中的annotator、cldm、ldm三個目錄復制到visual-chatgpt
2)創(chuàng)建image目錄
3)手動把download.sh中的8個pth文件下載下來,并放到ControlNet/models目錄下

windows系統(tǒng)目錄結(jié)構(gòu)
4、安裝python環(huán)境
1)根據(jù)操作系統(tǒng)下載并安裝anaconda:https://www.anaconda.com/
2)創(chuàng)建環(huán)境:conda create -n visgpt python=3.8
3)激活環(huán)境: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、設(shè)置環(huán)境變量
在系統(tǒng)中將openai的api_key加入環(huán)境變量:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxx
6、修改代碼
????????將visual_chatgpt.py的如圖這兩個部分全部注釋掉,需要用的時候再打開。如果只有一個顯卡的話,將cuda:x全部改成cuda:0,多顯卡可以根據(jù)個人配置增加。


? ? ? ? ?取消注釋的時候,上面的模型取消了,下面的tools部分也要相應(yīng)取消注釋。例如這里開啟了edit和i2t兩個模型,則tools中也要將這兩個模型對應(yīng)的部分注釋取消。
????????如果不知道需要用到什么模型,可以先把流程跑通,到時候ChatGPT判斷出需要什么模型但沒有的時候會有報錯提示,再把對應(yīng)的打開即可。
7、啟動程序
python visual_chatgpt.py
注意:初次執(zhí)行時,可能會從huggingface下載模型,可以先把代理關(guān)了,等服務(wù)完全啟動后,需要訪問到api.openai.com,再開啟代理。

8、瀏覽器訪問
打開http://127.0.0.1:7860/,如果端口號沖突,代碼最后一行可以改這個端口號。
然后就可以上傳圖片并進行操作了,例如我這里上傳了我現(xiàn)在的頭像,上傳圖片后控制臺的輸出:

然后輸入提示詞讓他描述一下這個人:Describe the person??刂婆_輸出如下圖:

網(wǎng)頁上的情況:

????????這里我只加載了edit和i2t模型,沒有加載t2i模型(即text to image),并不能生成圖片,只是將流程走通(測試的這臺機器只有11G顯存不夠了,要換另一臺顯存大的)。如果需要加載別的模型只要把相應(yīng)的注釋去掉即可。
????????小結(jié)一下,只是看官網(wǎng)演示的話,會覺得這個很神奇,但是其實就是已經(jīng)有了一大堆圖片模型后,讓ChatGPT幫我們選擇模型進行處理。即使沒有ChatGPT,也可以做這些事情,人工去選擇模型而已。目前最大的問題在于,模型占用的顯存太大,如果能優(yōu)化到全部模型只占10G以內(nèi),那還是很不錯的。
????????不過多模態(tài)版的ChatGPT很快也要出了,這些AI圖片處理技術(shù)會不會逐漸被替代,也未可知。