【ChatGPT】Visual ChatGPT 视觉模型深度解析

说明:
根据有关要求,本文将【Visual ChatGPT】模型简称为【Visual-GPT】。
本文为删节版,进行了大量删改,有些内容比较晦涩,读者可以略过,当然也可以仔细研读…完整版参见文末链接。
更新说明:文末链接已删除。

1. 【Visual- ChatGPT】火热来袭

3月9日,微软亚洲研究院发布了图文版 ChatGPT——Visual ChatGPT,并在 Github 开源了基础代码,短短一周已经获得了 19.7k 颗星。

2022年11月,OpenAI 推出的 ChatGPT,几个月来已经火爆全球,不仅需要候补注册,还要科学上网。ChatGPT 具有强大的会话能力的语言界面进行人机对话,能陪你聊天、编写代码、修改 bug、解答问题…,但是目前还不能处理或生成视觉图像。

Visual ChatGPT 把一系列 Visual Foundation 视觉模型接入 ChatGPT,使用户能够与 ChatGPT 以文本和图像的形式交互,还能提供复杂的视觉指令,让多个模型协同工作。Visual ChatGPT 可以理解和响应基于文本的输入和基于视觉的输入,减少进入文本到图像模型的障碍,增加各种 AI 工具的互操作性。

Visual Transformer 将 ChatGPT 作为逻辑处理中心,集成 Visual Foundation 视觉基础模型,从而实现:

【ChatGPT】Visual ChatGPT 视觉模型深度解析

Visual-GPT 可以用自然语言简单地从模型中键入想要的内容,如题图所示的过程中进行了几轮对话:

  1. 用户要求生成一张猫的图像。Visual-GPT 生成了一幅正在看书的猫的图像。
  2. 用户要求将图像中的猫换成狗,并把书删除。Visual-GPT 将该图像中的猫换成了狗,并删除了图像中的书。
  3. 用户要求对图像进行 Canny 边缘检测。Visual-GPT 理解并执行了 Canny 边缘检测操作,生成了边缘图像。
  4. 用户要求基于指定的网络图像,生成一幅黄狗图像,Visual-GPT 也很好地完成了这个任务。

2. 【Visual-GPT】操作实例

2.1 处理流程

Visual-GPT 的基本处理流程如图所示。

【ChatGPT】Visual ChatGPT 视觉模型深度解析

如图所示,用户上传了一张黄色花朵的图像,并输入一条复杂的语言指令「请根据该图像生成的深度图在生成一朵红色花朵,然后逐步将其制作成卡通图片」。

Visual-GPT 中的 Prompt Manager 控制与 VFM 相关的处理流程。ChatGPT 利用这些 VFMs,并以迭代的方式接收其反馈,直到满足用户的要求或达到结束条件。

在上述 pipeline 中,Prompt Manager 作为 ChatGPT 的管理调度中心,提供可视化格式的类型并记录信息转换的过程,最后输出最终结果图像并显示。


2.2 操作实例

第一轮对话:
Q1:用户文本询问,问题与图像无关。
A1:模型文本回答,回答与图像无关。
Q2:用户要求画一个苹果。
A2:模型图文回答,绘制了一幅苹果图片。

chatgpt_visual13

第二轮对话:
Q3:用户输入图像,是一个苹果和杯子的草图。
A3:模型文本回答,询问用户的意图,并主动提示草图的文件名。
Q4:用户文本输入,要求按草图绘制苹果和杯子。
A5:模型图文回答,按照用户要求绘制了一幅苹果和杯子的图片。

chatgpt_visual13
第三轮对话: Q5:用户输入文本,要求把上图修改为水彩画风格。 A5:模型图文回答,按照用户要求把上图修改为一幅水彩画风格的图片。 Q6:用户文本输入,询问图片的背景颜色。 A6:模型文本回答,回答图片的背景颜色。 chatgpt_visual13
第四轮对话: Q7:用户文本输入,要求去除图片中的苹果。 A7:模型图文回答,按照用户要求从图片中去除苹果——但是没有去除苹果在桌面上的影子。 Q8:用户输入文本,指出上图中的影子还在桌面上,并要求把换一张黑色的桌子。 A8:模型图文回答,按照用户要求把图片中的桌子换成黑色桌子。 chatgpt_visual13

3. 【Visual-GPT】技术原理分析

3.1 技术原理

由于 ChatGPT 是用单一语言模态训练而成,处理视觉信息的能力非常有限。而视觉基础模型(VFM,Visual Foundation Models)在计算机视觉方面潜力巨大,因而能够理解和生成复杂的图像。例如,BLIP 模型是理解和提供图像描述的专家,Stable Diffusion 可以基于文本提示合成图像。然而由于 VFM 模型对输入输出格式的苛求和固定限制,但在人机交互上却不如对话语言模型灵活。

Visual ChatGPT 是在大量文本和图像数据集上训练的。该模型使用不同的视觉基础模型(如 VGG、ResNet和DenseNet)从图像中提取特征,然后将这些特征与基于文本的输入相结合以生成响应。使用有监督和无监督学习技术的组合进行训练,使其能够学习并适应新的场景。

当用户用图像输入问题或陈述时,它分析图像并提取相关特征。然后,它将这些特性与基于文本的输入相结合,以生成与用户查询相关的响应。例如,如果用户上传一辆汽车的图像并询问“这辆汽车的品牌和型号是什么?”,Visual-GPT 将分析图像并根据从图像中提取的视觉特征生成响应。

传统的聊天机器人只依赖基于文本的输入,这限制了它们的能力。Visual-GPT 通过结合计算机视觉扩展了聊天机器人的功能,使其能够基于视觉上下文理解并生成响应。Visual-GPT 的另一个特性是它能够生成创造性的响应。由于它是在GPT-3之上构建的,它可以访问大量文本数据集,这使它能够生成富有创意和多样性的响应。这使得与 Visual-GPT 的交互更具吸引力和人性化。


3.2 系统架构

Visual-GPT 的系统架构如下图所示,由用户查询模块(User Query)、交互管理模块(Prompt Manger)、视觉基础模型(Visual Foundation Models,VFM)、调用 ChatGpt API 系统和迭代交互模块(Iterative Reasoning)、用户输出模块(Outputs)构成。

【ChatGPT】Visual ChatGPT 视觉模型深度解析

上图左图是多轮对话的过程,中图是 Visual-GPT 如何迭代调用 VFMs 并提供答案的流程图,右图是模型针对第2个 Q/A 的详细运行过程。

分析系统架构图,该系统利用 ChatGPT 和 一个Prompt Manager(M) 来做意图识别和语言理解,然后决定后续的操作和产出。

在这个对话的例子中:

  1. 第一轮对话:首先用户输入一张图片 User Query(Q1),模型回答收到 (A1)。
  2. 第二轮对话:(1)用户提出”把沙发改为桌子“和”把风格改为水彩画“两个要求(Q2),模型判断需要使用VFM模型;(2)模型判断第一个要求是替换东西,因此调用 repalce object 模块,生成符合第一个要求的图片;(3)模型判断第二个要求是通过语言修改图片,因此调用 pix2pix 模块,生成符合第二个要求的图片;(4)模型判断完成用户提出的需求,输出第二幅图片(A2)。
  3. 第三轮对话:用户提出问题(Q3),模型判断不需要 VFM,调用 VQA 模块,回答问题得到答案(A3)。

将这个过程抽象出来, 就是一系列系统规则组成的M§和功能模块组成的M(F) :

对于由多个“问题-答案对”所构成的集合 【ChatGPT】Visual ChatGPT 视觉模型深度解析,要从第 【ChatGPT】Visual ChatGPT 视觉模型深度解析 轮对话中得到答案 【ChatGPT】Visual ChatGPT 视觉模型深度解析,需要一系列的 VFM 和中间输出。

将第【ChatGPT】Visual ChatGPT 视觉模型深度解析轮对话中第【ChatGPT】Visual ChatGPT 视觉模型深度解析次的工具调用中间答案记为 【ChatGPT】Visual ChatGPT 视觉模型深度解析,就可以定义 Visual ChatGPT 的模型为:
【ChatGPT】Visual ChatGPT 视觉模型深度解析
其中:P 是全局原则,F 是各个视觉基础模型,【ChatGPT】Visual ChatGPT 视觉模型深度解析 是历史会话记忆,$ M(Q_i)$ 是第 i 轮的用户输入, 【ChatGPT】Visual ChatGPT 视觉模型深度解析 是第 i 轮的推理历史,【ChatGPT】Visual ChatGPT 视觉模型深度解析 是中间答案。

ChatGPT生成最终答案要经历一个不断迭代的过程,它会不断自我询问,自动调用更多VFM。而当用户指令不够清晰时,Visual ChatGPT会询问其能否提供更多细节,避免机器自行揣测甚至篡改人类意图。


3.3 模块说明

M§:

Visual-GPT 为了能让不同的VFM理解视觉信息并生成相应答案,需要设计一系列系统原则,并将其转化为 ChatGPT能够理解的提示。

通过生成这样的提示,Prompt Manager 能够帮助 Visual-GPT 完成生成文本、图像的任务,能够访问一系列VFM并自由选择使用哪个基础模型,提高对文件名的敏感度,进行链式思考和严格推理。

M(F):

Prompt Manager 需要帮助 Visual-GPT 区分不同的VFM,以便准确地完成图像任务。

为此,Prompt Manager对各个基础模型的名称、应用场景、输入和输出提示以及实例给出了具体定义。

M(Q):

Prompt Manager会对用户新上传的图像生成唯一文件名,并生成假的对话历史,其中提到该名称的图片已经收到,这样可以在涉及引用现有图像的查询时忽略文件名的检查。

Prompt Manager会在查询问题之后加上一个后缀提示,来确保成功触发VFM,强制 Visual-GPT 进行思考,给出言之有物的输出。

M(F(A)):

VFM给出的中间输出,Prompt Manager会为其生成链式文件名,作为下一轮内部对话的输入。


3.4 Prompt Manager 功能与规则

Visual-GPT 的核心是 Prompt Manager,具体功能如下:

  1. 首先明确告诉 ChatGPT 每个 VFM 的功能,并指定输入输出格式。
  2. 然后转换不同的视觉信息(如 png 图像、深度图像和 mask 矩阵)转换为语言格式。
  3. 最后处理不同 VFM 的历史、优先级和冲突。

通过 Prompt Manager 的帮助,ChatGPT 可以利用这些 VFM,并以迭代方式接收反馈,直到满足用户的需求或达到结束条件。

Visual-GPT 集成了不同 VFM 来理解视觉信息并生成相应答案的系统。因此,Visual-GPT 需要制定一些基本规则,并将其转化为 ChatGPT 可以理解的命令。

这些基本规则包括:

【ChatGPT】Visual ChatGPT 视觉模型深度解析

3.5 视觉基础模型(Visual Foundatin Model)

Visual-GPT 支持 22 种视觉基础模型(Visual Foundatin Model):


4. 【Visual-GPT】使用与运行

【本文为删节版,相关内容已删除。】

4.1 clone the repo

4.2 prepare the basic environments

4.3 start local runing


5. 【Visual-GPT】论文简介

5.1 论文获取

【ChatGPT】Visual ChatGPT 视觉模型深度解析

Title:Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Models
标题:Visual ChatGPT:使用 Visual Foundation 模型进行对话、绘图和编辑
作者:Chenfei Wu, Shengming Yin, Weizhen Qi, Xiaodong Wang, Zecheng Tang, Nan Duan
机构:Microsoft Researc Asia(微软亚洲研究院)
论文链接: https://arxiv.org/abs/2303.04671
开源代码: https://github.com/microsoft/visual-chatgpt

我已经将本文上传到 CSDN,读者也可以从 arxiv 自行下载。

第一作者:吴晨飞,高级研究员,2020 年加入微软亚洲研究院自然语言计算组,研究领域为多模型的预训练、理解和生成。

通讯作者: 段楠,微软亚洲研究院首席研究员及自然语言计算组研究经理,中国科学技术大学兼职博导,天津大学兼职教授,研究领域为自然语言处理、代码智能、多模态智能和机器推理等。


5.2 主要贡献

(1)提出 Visual ChatGPT,打开了 ChatGPT 和 VFM 连接的大门,使 ChatGPT 能够处理复杂的视觉任务。

(2)设计了一个 Prompt Manager,其中涉及 22 个不同的 VFM,并定义了它们之间的内在关联,以便更好地交互和组合。

(3)进行了大量的零样本实验,并展示了大量的案例来验证 Visual ChatGPT 的理解和生成能力。


5.3 本文的启发


5.4 模型复现

Visual-GPT 的运行步骤如下。

(1)创建 Python3.8 环境并激活新的环境:

# create a new environment
conda create -n visgpt python=3.8

# activate the new environment
conda activate visgpt

(2)安装所需的依赖(详见4.2):

#  prepare the basic environments
pip install -r requirement.txt

(3)clone the repo:

【删除】

clone the repo 所建立的文件夹结构如下:

├── assets
│ ├── demo.gif
│ ├── demo_short.gif
│ └── figure.jpg
├── download.sh
├── LICENSE.md
├── README.md
├── requirement.txt
└── visual_chatgpt.py

(4)设置工作目录:

将工作目录设置为创建的 github repo 的 copy:

# clone the repo
%cd visual-chatgpt

(5)下载基本视觉模型 VFM:

# download the visual foundation models
bash download.sh

(6)输入 OpenAI_API_key:

要开始使用OpenAI API,请访问 platform.OpenAI.com 并使用 Google 或 Microsoft 邮箱注册帐户,获取 API 密钥,该密钥将允许您访问API。——科学上网,势不可挡!

%env OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# prepare your private OpenAI key (for Linux)
export OPENAI_API_KEY={Your_Private_Openai_Key}

# prepare your private OpenAI key (for Windows)
set OPENAI_API_KEY={Your_Private_Openai_Key}

(7)创建图像保存目录

!mkdir ./image

(8)运行 Visual GPT

!python3.8 ./visual_chatgpt.py

注意问题:

(1)可以通过 “–load” 指定 GPU/CPU 分配,该参数设置使用的 VFM 模型及加载位置。可用的 Visual Foundation 模型参见 3.6 节内容。

例如,将 ImageCaptiing 加载到 cpu,将 Text2Image 加载到 cuda:0,则设置为:

python visual_chatgpt.py –load ImageCaptioning_cpu, Text2Image_cuda:0

(2)VFM 模型所需的内存资源很大,推荐的设置选项为:

--load ImageCaptioning_cuda:0,ImageEditing_cuda:0,
    Text2Image_cuda:1,Image2Canny_cpu,CannyText2Image_cuda:1,
    Image2Depth_cpu,DepthText2Image_cuda:1,VisualQuestionAnswering_cuda:2,
    InstructPix2Pix_cuda:2,Image2Scribble_cpu,ScribbleText2Image_cuda:2,
    Image2Seg_cpu,SegText2Image_cuda:2,Image2Pose_cpu,PoseText2Image_cuda:2,
    Image2Hed_cpu,HedText2Image_cuda:3,Image2Normal_cpu,
    NormalText2Image_cuda:3,Image2Line_cpu,LineText2Image_cuda:3

(3)不同 VFM 模型所需内存的参考值。

Foundation ModelMemory Usage (MB)
ImageEditing6.5
ImageCaption1.7
T2I6.5
canny2image5.4
line2image6.5
hed2image6.5
scribble2image6.5
pose2image6.5
BLIPVQA2.6
seg2image5.4
depth2image6.5
normal2image3.9
InstructPix2Pix2.7

5.5 常见错误

  1. RuntimeError: CUDA error: invalid device ordinal
    问题原因:GPU 的数量不够。
    解决方案:将 visual_chatgpt.py 文件中的所有 cuda:\d 替换为 cuda:0。

  2. OutOfMemoryError: CUDA out of memory
    问题原因:没有足够的 GPU 内存来运行 VFM模型。
    解决方案:忽略 download.sh 和 visual_chatgpt.py 文件中不需要的一些模型,只加载必要的模型。


5.6 代码解读

**说明:**本节内容来自外网,博主也在解读和测试。在此贴出相关内容,仅供参考,更多解读详见 【Visua ChatGPT: Paper and Code Review】

with gr.Column(scale=0.15, min_width=0): 
btn = gr.UploadButton(“Upload”, file_types=[“image”])
btn.upload(bot.run_image, [btn, state, txt], [chatbot, state, txt])

def run_image(self, image, state, txt):
image_filename = os.path.join('image', str(uuid.uuid4())[0:8] + ".png")
print("======>Auto Resize Image...")
img = Image.open(image.name)
width, height = img.size
ratio = min(512 / width, 512 / height)
width_new, height_new = (round(width * ratio), round(height * ratio))
img = img.resize((width_new, height_new))
img = img.convert('RGB')
img.save(image_filename, "PNG")
print(f"Resize image form {width}x{height} to {width_new}x{height_new}")
description = self.i2t.inference(image_filename)
Human_prompt = "nHuman: provide a figure named {}. The description is: {}. This information helps you to understand this image, but you should use tools to finish following tasks, " 
"rather than directly imagine from my description. If you understand, say "Received". n".format(image_filename, description)
AI_prompt = "Received.  "
self.agent.memory.buffer = self.agent.memory.buffer + Human_prompt + 'AI: ' + AI_prompt
print("======>Current memory:n %s" % self.agent.memory)
state = state + [(f"![](/file={image_filename})*{image_filename}*", AI_prompt)]
print("Outputs:", state)
return state, state, txt + ' ' + image_filename + ' '

如上所述,上传图像后,调用run_image函数。此函数通过uuid创建新的图像名称,对图像进行预处理,然后创建添加到缓存的人工旋转。

还可以看出,图像描述与文件名一起被包括作为初始输入。该描述由Blip图像字幕模型生成。

class ImageCaptioning:
def __init__(self, device):
print("Initializing ImageCaptioning to %s" % device)
self.device = device
self.processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
self.model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base").to(self.device)
self.i2t = ImageCaptioning(device="cuda:4")

从上面声明的Human_prompt变量中可以看出,短语“但在根据我的描述直接想象之前,您应该使用工具完成以下任务。设置ChatGPT使用VFM而不是任意提供响应的音调。

Human_prompt = "nHuman: provide a figure named {}. The description is: {}. This information helps you to understand this image, but you should use tools to finish following tasks, " 
"rather than directly imagine from my description. If you understand, say "Received". n".format(image_filename, description)

除了调用提交图像之外,每个调用还具有前缀和后缀,以进一步确保模型不会以特殊方式运行。前缀中列出的一些关键准则如下:

  • 作为一种语言模型,VisualChatGPT不能直接读取图像,但它有一系列工具来完成各种视觉任务。每个图像都将创建一个文件名为“image/xxx.png”,VisualChatGPT可以调用各种工具来间接理解图像。

  • VisualChatGPT 对图像的文件名非常严格,不支持不存在的文件。

  • Visual ChatGPT可以按顺序使用这些工具,并且忠于工具观察结果的输出,而不是伪造图像内容和图像文件名。如果创建了新图像,它将记住上次观察工具时的文件名。

  • Visual ChatGPT可以访问以下工具:

这些声明使Visual ChatGPT能够使用可用的可视化工具,以及如何处理文件名以及如何与用户就VFM模型之一生成的图像进行通信。

代理有一个可以使用的所有工具的列表,在本例中是VFM。每个工具都有详细描述其功能,例如:

Tool(name="Generate Image From User Input Text", func=self.t2i.inference,
description="useful when you want to generate an image from a user input text and save 
it to a file. like: generate an image of an object or something, or 
generate an image that includes some objects. "
"The input to this tool should be a string, representing the text 
used to generate image. "),

所使用的工具之一是VFM,它可以将文本转换为图像,如图所示,为代理提供了有关工具名称的信息,该信息概括了模型的功能、要调用的函数以及详细描述工具和输入。以及仪器输出。

然后,代理使用工具的描述和过去的对话历史来决定下一步使用哪个工具。使用ReAct框架做出决策。

self.agent = initialize_agent(
self.tools,
self.llm,
agent="conversational-react-description",
verbose=True,
memory=self.memory,
return_intermediate_steps=True,
agent_kwargs={'prefix': VISUAL_CHATGPT_PREFIX, 
'format_instructions': VISUAL_CHATGPT_FORMAT_INSTRUCTIONS, 
'suffix': VISUAL_CHATGPT_SUFFIX},

ReAct可以被认为是推理链(CoT)推理范式的扩展。而CoT允许LM生成一系列推理来解决任务,从而减少产生幻觉的可能性。

为了确保ChatGPT以这种格式响应,ChatGPT提示符包含以下内容:

VISUAL_CHATGPT_FORMAT_INSTRUCTIONS = “””To use a tool, please use the following 
format:
"""
Thought: Do I need to use a tool? Yes
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
When you have a response to say to the Human, or if you do not need to 
use a tool, you MUST use the format:
Thought: Do I need to use a tool? No
"""
{ai_prefix}: [your response here]”””

需要注意的是,想法、行动和观察步骤的输出不会显示给最终用户。所有这些信息都是隐藏的,以确保最终用户不会被没有直接解决用户问题的所有中间答案淹没。

相反,当LM认为它已经得到了最终答案或想向用户提问时,只向用户 [此处为您的回答] 字段显示生成的文本的一部分。

ReAct范式的另一个好效果是,我们现在可以结合使用多种工具,因为在看到观察结果后,ChatGPT默认会考虑是否需要使用工具。本质上我必须使用工具吗?是添加到ChatGPT服务生成的每个查询和代理响应的后缀。

从ChatGPT响应格式上方的提示可以看出,对于ChatGPT从可用列表中选择一个工具,可以从前面看到的工具描述中获得工具的输入格式,最后可以从视图中解析VFM输出。

可以通过下面的LangChain库查看行动分析和行动条目:

def _extract_tool_and_input(self, llm_output: str) -> Optional[Tuple[str, str]]:
if f"{self.ai_prefix}:" in llm_output:
return self.ai_prefix, llm_output.split(f"{self.ai_prefix}:")[-1].strip()
regex = r"Action: (.*?)[n]*Action Input: (.*)"
match = re.search(regex, llm_output)
if not match:
raise ValueError(f"Could not parse LLM output: `{llm_output}`")
action = match.group(1)
action_input = match.group(2)
return action.strip(), action_input.strip(" ").strip('"')

在提取要使用的工具和要提供的输入时,进行调用以执行该工具。

每个模型的输出以以下格式保存为文件名:

{Name}_{Operation}_{Previous Name}_{Organization Name}.

title 是唯一的 uuid,操作对应于工具的名称,原名对应于用于创建新图像的输入图像的 uuid,组织的名称对应于用户提供的原始输入图像。按照这种命名约定,ChatGPT可以很容易地导出有关新生成的图像的信息。

def get_new_image_name(org_img_name, func_name="update"):
head_tail = os.path.split(org_img_name)
head = head_tail[0]
tail = head_tail[1]
name_split = tail.split('.')[0].split('_')
this_new_uuid = str(uuid.uuid4())[0:4]
if len(name_split) == 1:
most_org_file_name = name_split[0]
recent_prev_file_name = name_split[0]
new_file_name = '{}_{}_{}_{}.png'.format(this_new_uuid, func_name, recent_prev_file_name, most_org_file_name)
else:
assert len(name_split) == 4
most_org_file_name = name_split[3]
recent_prev_file_name = name_split[0]
new_file_name = '{}_{}_{}_{}.png'.format(this_new_uuid, func_name, recent_prev_file_name, most_org_file_name)
return os.path.join(head, new_file_name)

最后,将所有移动部件组合起来,与Visual ChatGPT进行对话,后者可以使用视觉信息。

这项工作是快速工程重要性的完美例证。提示允许代理使用文件名处理视觉信息,并创建思维链->动作链->观察反应链,帮助确定要使用哪些VFM并处理VFM模型的输出。

为了抽象解决方案的复杂性质,中介响应(包括思想、行动和观察话语)对用户是隐藏的,只有当ChatGPT相信时LM生成的最终响应才会显示给用户。不再需要使用VFM。


6. GPT4 来了

刚刚写完本文,就看到 GPT4 发布的资讯。而且,GPT-4 开始接受图像作为输入介质,也可以开始处理图像了。

下面是 OpenAI 提供的一个示例,GPT-4 针对图像输入回答的问题。

【ChatGPT】Visual ChatGPT 视觉模型深度解析

由于目前图像输入的权限尚未公开,还不清楚 GPT-4 图像处理的技术原理和能力。所以关于 GPT-4,我们后文再讨论吧。

但是,可以预期的是:世界潮流,浩浩荡荡。


版权声明:
欢迎关注
【youcans的GPT学习笔记】,转发请注明原文链接:【ChatGPT】Visual ChatGPT 视觉模型深度解析 (https://youcans.blog.csdn.net/article/details/129546888)
Copyright 2023 youcans, XUPT
Crated:2023-03-15


文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年3月26日 下午5:39
下一篇 2023年3月26日 下午5:43

相关推荐