既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
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 和中间输出。
将第
i
i
i轮对话中第
j
j
j次的工具调用中间答案记为
A
i
j
A_i^{j}
Aij,就可以定义 Visual ChatGPT 的模型为:
A
i
j
1
=
C
h
a
t
G
P
T
(
M
(
P
)
,
M
(
F
)
,
M
(
H
<
i
)
,
M
(
Q
i
)
,
M
(
R
i
<
j
)
,
M
(
F
(
A
i
j
)
)
)
A_i^{j+1} = ChatGPT(M§, M(F), M(H_{<i}), M(Q_i), M(R_i^{<j}), M(F(A_i^j)))
Aij+1=ChatGPT(M§,M(F),M(H<i),M(Qi),M(Ri<j),M(F(Aij)))
其中:P 是全局原则,F 是各个视觉基础模型,
M
(
H
<
i
)
M(H_{<i})
M(H<i) 是历史会话记忆,$ M(Q_i)$ 是第 i 轮的用户输入,
M
(
R
i
<
j
)
M(R_i^{<j})
M(Ri<j) 是第 i 轮的推理历史,
A
j
A^j
Aj 是中间答案。
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,具体功能如下:
- 首先明确告诉 ChatGPT 每个 VFM 的功能,并指定输入输出格式。
- 然后转换不同的视觉信息(如 png 图像、深度图像和 mask 矩阵)转换为语言格式。
- 最后处理不同 VFM 的历史、优先级和冲突。
通过 Prompt Manager 的帮助,ChatGPT 可以利用这些 VFM,并以迭代方式接收反馈,直到满足用户的需求或达到结束条件。
Visual-GPT 集成了不同 VFM 来理解视觉信息并生成相应答案的系统。因此,Visual-GPT 需要制定一些基本规则,并将其转化为 ChatGPT 可以理解的命令。
这些基本规则包括:
- Visual-GPT 的任务需求:协助完成一系列与文本和视觉相关的任务,例如 VQA、图像生成和编辑。
- VFM 的可访问性:Visual ChatGPT 可以访问 VFM 列表来解决各种 VL( vision-language ) 任务,使用哪种基础模型由 ChatGPT 模型本身决定。
- 文件名敏感度:在对话中可能包含多个图像及不同的更新版本,使用精确的文件名以避免歧义至关重要,滥用文件名会导致混淆图片。Visual-GPT 被设计为严格使用文件名,确保检索和操作图像文件的正确性。
- Chain-of-Thought:一些看似简单的命令可能需要多个 VFM,例如生成卡通图片的过程涉及深度估计、深度到图像和风格转换的 VFM。Visual-GPT 引入了 CoT 以帮助决定、利用和调度多个 VFM,将用户的问题分解为多个子问题来解决更具挑战性需求。
- 推理格式的严谨性:Visual-GPT 必须遵循严格的推理格式。该研究使用精细的正则表达式匹配算法解析中间推理结果,为 ChatGPT 模型构建合理的输入格式,以帮助其确定下一次执行,例如触发新的 VFM 或返回最终响应。
- 可靠性:Visual-GPT 作为一种语言模型,可能会伪造假图像文件名或事实,这会使系统不可靠。为了处理此类问题,需要设计 prompt 使忠于视觉基础模型的输出,而不能伪造图像内容或文件名。此外,prompt 还将引导 ChatGPT 优先利用 VFM,而不是根据对话历史生成结果。
3.5 视觉基础模型(Visual Foundatin Model)
Visual-GPT 支持 22 种视觉基础模型(Visual Foundatin Model):
- 从图像中删除对象(Remove Objects from Image):image path, textual what to remove -> image path
- 替换图像中的对象(Replace Objects from Image):image path, textual what to replace, textual what to add -> image path
- 按文本要求修改图像(Change Image by the Text):image path, textual how to modify -> image path
- 图像问题解答(Image Question Answering):image path, question -> answer
- 从图像生成描述文本(Image-to-Text):image path -> natural language description
- 从描述文本生成图像(Text-to-Image):textual description -> image path
- 对图像进行边缘检测(Image-to-Edge):image path -> edge image path
- 从边缘检测图和文本描述生成新图像(Edge-to-Image):edge image path, textual description -> image path
- 对图像进行直线检测(Image-to-Line):image path -> line image path
- 从直接检测图和文本生成新图像(Line-to-Image):line image path, textual description -> image path
- 对图像进行 HED 边缘检测(Image-to-Hed):image path -> hed image path
- 从HED边缘检测和文本生成新图像(Hed-to-Image):hed image path, textual description -> image path
- 生成分割图像(Image-to-Seg):image path -> segment image path
- 从分割图像和文本生成新图像(Seg-to-Image):segment image path, textual description ->image path
- 从图像生成深度图(Image-to-Depth):image path -> depth image path
- 从深度图和文本生成新图像(Depth-to-Image):depth image path, textual description -> image path
- 从图像生成法线图(Image-to-NormalMap):image path -> norm image path
- 从法线图和文本生成新图像(NormalMap-to-Image):norm image path, textual description -> image path
- 从图像生成草图(Image-to-Sketch):image path -> sketch image path
- 从草图和文本生成新图像(Sketch-to-Image):sketch image path, textual description -> image path
- 对图像进行姿态检测(Image-to-Pose):image path -> pos image path
- 从姿态检测和文本生成新图像(Pose-to-Image):pos image path, textual description -> image path
4. 【Visual-GPT】使用与运行
【本文为删节版,相关内容已删除。】
4.1 clone the repo
4.2 prepare the basic environments
4.3 start local runing
5. 【Visual-GPT】论文简介
5.1 论文获取
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 本文的启发
- 本文开启了 ChatGPT 处理视觉任务的大门。
- NLP —> Natural Language PhotoShop,自然语言文本描述下的图片创作编辑和问答。
- 可以通过系统设计和工具包设计的 Prompt 实现无监督的工具调用,类似于 zero-shot 的 toolformer。
- ChatGPT 本身对仿真场景的能力很强,也能接受图片路径和函数关系,可以很好地使用基础视觉模型。
- Visual ChatGPT 本身是一个语言模型,所谓的两方多轮对话只是一个 Human AI 的多轮特殊形式。
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 模型所需的内存资源很大,推荐的设置选项为:
- CPU 用户:只加载 ImageCaptioning_cpu, Text2Image_cpu
- 1 Tesla T4 15GB 用户:只加载 ImageCaptioning_cuda:0, Text2Image_cuda:0,可以加载 ImageEditing_cuda:0
- 4 Tesla V100 32GB 用户:加载如下
--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 Model | Memory Usage (MB) |
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
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 Model | Memory Usage (MB) |
[外链图片转存中...(img-qfXVtzmF-1715820287190)]
[外链图片转存中...(img-UMCXscew-1715820287190)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**