当LLMs已经拥有了极强的对话能力后,如何使其拥有视觉和语音等多模态能力是紧接而来的热点(虽然GPT4已经有了),这个系列将不定期更新一些利用LLMs做多模态任务的文章。
直觉上,如果直接训练一个类似chatgpt架构的多模态框架一定会消耗非常大的数据和计算量,此外如果每次增加一个新的模态,那现有框架都需要重新训练,这无论是对高校还是企业来说都是很难承担的代价。因此目前的文章都尝试利用一些策略或者适配的方法来连接语言模型和其他模型,特别是visual and language。
本篇博文首先整理一些不训练视觉模型的文章们,这些文章主要是利用一些策略使得LLMs能够完成多模态任务。
Visual ChatGPT
Visual ChatGPT是一个利用LLMs做agent,即利用LLMs作为语言中枢,通过告诉它每个视觉基础模型(Visual Foundation Models,VFMs)的输入输出格式,然后让ChatGPT针对用户提出的需求、进行模型的调用和选择。
- 如上图所示,用户上传一张图像+指令(如请根据该图像的深度生成红花,然后风格变为卡通step by step)。
- 于是PromptManager分解用户指定为多个可执行的捕捉,然后调用它的基础模型库(22个)。
- 即先根据深度估计预测图像深度,然后利用深度生成红花,最后利用stable diffusion进行风格迁移。
由于是利用chatGPT当基座,所以这注定是一个多轮对话的框架。如图所示,在图上中部,可以看到输入prompt manager的有四个部分:
- system principles P:指定一些系统规则得到chatgpt可以理解的prompt,以帮助集成多个基础视觉模型。如对访问VFMs,根据文件名访问图像,cot以分解用户的命令(如上图拆解query为多个可供调用的步骤)。此外还有一些约束推理和系统可靠性的system principles。
- visual foundation models F:一堆可供调用的基础视觉模型VFMs。为了方便模型调用,因此还需要定义名称、用法、输入/输出、例子(可选的)。
- user query Q:当前时刻的用户查询。
- history of dialogue H:所有的对话历史,但这里会按照chatgpt的最大输入来做截断。
所以对于一个对话 S = ( Q 1 , A 1 ) , ( 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轮对话中,所得到的回复 A i j + 1 A^{j+1}_i Aij+1是通过调用了j次基础视觉模型工具的结果,即 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^{j+1}_i=ChatGPT(M(P),M(F),M(H_{<I}),M(Q_i),M(R_i^{<j}),M(F(A^{(j)}_i))) Aij+1=ChatGPT(M(P),M(F),M(H<I),M(Qi),M(Ri<j),M(F(Ai(j))))M即prompt manager,用于把各个功能变成合理的prompt交由chatgpt处理。
paper:Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Models
arxiv:https://arxiv.org/abs/2303.04671
github:https://github.com/microsoft/TaskMatrix
PICa
总调openai的接口也不是长久之道,如果有一些策略可以让视觉变成一种prompt的输入的话,便可以避免掉很多的计算量。一种最最直观的思路是,先将视觉转化为文本,然后再将文本输入到LLMs即可。
因此PICA这篇文章主要就是将视觉转化为文本(in-context learning的方式),然后执行一种Knowledge-based QA的工作。如上图的左下角所示,模型的输入是
- 【N-shot VQA examples】【Question】【Image textual descriptions】,然后输入到冻结的LLMs(GPT3)中来利用大模型的能力。
具体来说,图片所转化为的文本将直接和问题拼在一起,然后作为LLM的输入。此处所使用in-context learning的思路需要保证质量和数量,因此作者提出了In-context example selection和Multi-query ensemble两个策略。
- In-context example selection。适合当前问题的样本应该和当前问题相似,因此利用CLIP(ViT-B/16)来挑选跟问题最相似的n个样本作为few-shots(16个),以尝试让LLMs直接生成回答。
- Multi-query ensemble。此处是针对n个样本再生成k个prompts,最后用k个答案中的最高值作为输出。
paper:An Empirical Study of GPT-3 for Few-Shot Knowledge-Based VQA
arxiv:https://arxiv.org/abs/2109.05014
code:https://github.com/microsoft/PICa
但由于图像转成caption的过程中会损失一些视觉信息,因此目前一些模型都会先得到跟query更相关的视觉信息,比如加一个Image-Question Matching模块,比如使用attention如Q-former,这些模型将在下一篇博文:基于LLMs的多模态大模型(Flamingo, BLIP-2,KOSMOS-1)中进行整理。
此处略补一篇使用question generation的模型生成相应的问题来迁就图像的文章。
From Images to Textual Prompts: Zero-shot VQA with Frozen Large Language Models
思路较为直观,如上图所示,首先用caption模型生成图片的caption,然后抽取出其中的名词、形容词等,因为他们很有可能会是答案中的关键词,然后再根据这些词通过一个question generation的模型来生成相应的问题,以优化(question, answer) pair。
paper:https://arxiv.org/abs/2212.10846
code:https://github.com/salesforce/LAVIS/tree/main/projects/img2llm-vqa (LAVIS的实现版本)
MM-REACT
这个模型可说是以上两个模型思路的综合,其一方面通过一个caption模型将图像变为文本后再输入到大模型,另一方面它会调用chatgpt来调用各种视觉模型以实现多种多模态任务。
如上图所示,具体来说,对于用户输入的query将首先交给chatgpt来判断是否需要调用视觉模型(如caption、ocr、bing search等模型),对于需要调用情况来执行相应的action,否则直接拿chatgpt的输出结构返回给用户就行。
paper:MM-REACT: Prompting ChatGPT for Multimodal Reasoning and Action
arxiv:https://arxiv.org/abs/2303.11381
code:https://github.com/microsoft/MM-REACT
MAGIC
最后再补一篇MAGIC(iMAge-guided text GeneratIon with CLIP),它的优势在于无需多模态的训练数据,只需利用现成的语言模型(例如GPT-2)和图文匹配模型(例如CLIP)就能够以zero-shot的方式高质量地完成多模态生成任务。
为什么它连多模态数据都不要就能训练呢?原因在于它直接使用视觉信息来指导预训练语言模型的生成过程即可,如下图所示,视觉特征参与到语言模型的解码过程即可,即MAGIC Search解码算法。
既然MAGIC的思路是在LLMs进行生成的时候添加视觉约束,从而使生成的词更贴近视觉,所以最关键的部分在于如下公式,
该公式由三项组成:
- model confidence:LLM预测词的概率,就是正常LLMs的输出loss。
- degeneration penalty:退化惩罚, h v h_v hv是 [ x < t : v ] [x_{<t}:v] [x<t:v]拼接后的特征,而 h x j h_{x_j} hxj是 x < j + 1 x_{<j+1} x<j+1序列的特征,通过计算两者的cosine以鼓励每次生成的词会带来一些新的信息量。
- magic score:视觉相关性,基于CLIP计算所有候选词和图片的softmax相关性,即f函数。
paper:Language Models Can See: Plugging Visual Controls in Text Generation
arxiv:https://arxiv.org/abs/2205.02655
code:https://github.com/yxuansu/MAGIC
下一篇博文将继续整理一些需要训练视觉模型来适配多模态大模型的文章们,这也是目前的主流方向:
-
基于LLMs的多模态大模型(Flamingo, BLIP-2,KOSMOS-1,ScienceQA)
-
基于LLMs的多模态大模型(MiniGPT-4,LLaVA,mPLUG-Owl,InstuctBLIP,X-LLM)
-
基于LLMs的多模态大模型(PALM-E,ArtGPT-4,VPGTrans )