这个系列的前一些文章有:
- 基于LLMs的多模态大模型(Visual ChatGPT,PICa,MM-REACT,MAGIC)
- 基于LLMs的多模态大模型(Flamingo, BLIP-2,KOSMOS-1,ScienceQA)
前一篇博文的最后整理到KOSMOS-1,KOSMOS-1已经开始使用Unnatural Instruction进行微调,其能更好的服从用户需求,本篇博文将继续整理一堆最近出的文章们,包括粘合BLIP-2和Vicuna的MiniGPT-4模型,和一些使用Instruction Tuning来训练的文章们。
MiniGPT-4
MiniGPT-4是粘合基于BLIP-2和Vicuna的模型,模型结构比较简明,如下图所示:
具体来说,就是直接将BLIP-2的Qformer和视觉编码器来过来,再拼接用户的query(含多轮对话),再输入到Vicuna中生成句子即可。可以看到大多数模块都是蓝色的,即都会被冻结,只留下视觉端的一个用于映射模态的线性层参与微调,这种做法可微调的参数压缩到only 15M。
微调策略跟KOSMOS-1一样采取两阶段思路:
- 第一阶段:采用CC、SBU、LAION等的图文对作为多模态训练数据集。
- 第二阶段:利用ChatGPT构建一个多模态高质量的数据集。这里高质量数据主要是利用ChatGPT构造出来的,即先利用第一阶段的captino模型对5k个CC的图片生成多个caption(限制最小长度为80,如果不够就让模型继续描述),然后用ChatGPT进行改写、移除重复等以保证质量和扩展丰富度。最后还是人工review一遍这个数据集,共得到3.5k图文对进行训练,这一阶段只训练线性映射层。
paper:MiniGPT-4: Enhancing Vision-Language Understanding with Advanced Large Language Models
arxiv:https://arxiv.org/abs/2304.10592
github:https://minigpt-4.github.io/
LLaVA
LLaVA和MiniGPT-4类似,但它在做完第一阶段的微调后,会再更近一步在多模态指令下进行微调。
模型结构图下图所示,CLIP(ViT-L/14)作为视觉编码器,LLaMA作为文本解码器,外加一个线性映射层将视觉特征映射到文本空间。
LLaVA使用的多模态指令数据跟纯语言模型的LLaMA一样,也主要是通过GPT-4构造的,不过由于GPT-4只开放了文本接口,因此需要先将图片转化为文本,如将COCO数据中的5个caption和bounding box的坐标将作为图像的描述输入给GPT-4,并要求GPT-4输出:
- 1)关于图像中对象的对话;
- 2)针对图片的详细描述;
- 3)和图片相关的复杂的推理过程。
此外作者还额外人工标注了一些数据用于in-context learning。最后得到的数据集主要包括:多轮对话的QA,图像描述、复杂推理等数据,使得模型能够应对各种各样的用户query。
在训练策略上,也采用两阶段的训练策略,即先训gap,然后训instruction:
- 第一阶段:在CC3M中筛出595k条图文对(限制caption中名词词组的最小频率),用language model loss对模型进行微调。其中,冻结视觉和语言编码器,只微调线性层;
- 第二阶段:用GPT-4生成的158k数据进行指令微调,同样用language model loss对模型进行微调。其中,冻结CLIP,微调线性层和LLaMA。另一个版本中也有对Science QA数据集进行微调,该数据集在文末再补充介绍。
paper:Visual Instruction Tuning
arxiv:https://arxiv.org/abs/2304.08485
github:https://llava-vl.github.io/
mPLUG-Owl
mPLUG-Owl是来自阿里达摩院的文章,在论文的开头作者们有对比它们跟其他主要模型的区别(主要是LLaVA、Kosmos-1、MiniGPT4),如下图所示。
- 四个模型都是使用了两阶段训练,其中第一阶段是pre-training,第二阶段是instruction tuning。
- 训练预料在第一阶段都是用的多模态数据集,在第二阶段略有差异,有纯文本也有多模态数据,更有混合数据的训练模式。
- LLaVA、Kosmos-1、MiniGPT4都冻住基础视觉编码器,而mPLUG-Owl没有。作者们认为冻住视觉模块会限制模型关联视觉知识和文本知识的能力,而训练视觉模块可以得到更好的跨模态理解能力。
mPLUG-Owl的具体模型结构如下,结构上采用CLIP ViT-L/14作为视觉模块+LLaMA作为文本模块(和LLaVA的选择一样),但同时融入了Flamingo的Perceiver Resampler结构对重要的视觉特征进行提取,即图中的Visual Abstractor模块,以期望用少量的token来表征更长的序列。
训练过程同样是两阶段:
- 第一阶段: 使用LAION-400M,COYO-700M,CC以及MSCOCO的图文对数据集进行训练,这一阶段只冻住LLM的参数,而CLIP和Visual Abstractor都要训练,以帮助模型学到视觉和语言模态之间的对齐。
- 第二阶段: 采用混合数据进行instruct tuning。即102k的纯文本指令数据( Alpaca和Vicuna的数据)、150k多模态指令数据( LLaVA)。CLIP和Visual Abstractor和LLaMA都被冻住,仅仅训练adapter(如上图左的LoRA,在prefix上训练少部分参数)。
另外文章还提出了一个多模态指令评测集,不过它暂时没有自动化评分也没有人工评分(确实是很难评价,在单文本大模型中很多工作用目前最好的模型即GPT-4来打分,但GPT-4没有开多模态模块接口,确实暂时没有什么公认的metric,也希望达摩院团队能继续这个路线的研究吧)。
paper:mPLUG-Owl: Modularization Empowers Large Language Models with Multimodality
arxiv:https://arxiv.org/abs/2304.14178
github:https://github.com/X-PLUG/mPLUG-Owl
更新一下:mPLUG-2已经可以支持video了,也在上面的网址上。mPLUG-2的模型结构如下图所示:
可以看到,不同的任务将首先通过不同的文本、图像和视频模块,可以在解决模态纠缠问题的同时受益模态协作。随后有一个universal layers,以将不同的模态投影到共享语义空间来对齐。VL fsuion模块需要根据具体任务来适配,对于单模态任务是不需要该层而是直接通过下游的dec来输出结果的,多模态或跨模态任务则需要再fusion一下。
InstuctBLIP
好的,之前还说BLIP2跟chatgpt的训练范式差很远,现在它也来instruct tuning了。
首先看看它所收集到的多模态指令数据集吧,如下图所示,涵盖了以下11个任务类别和28个数据集,再加上LLaVA-Instruct-150K。对于每一项任务的数据集,都为人为设置10-15个不同的指令模板,然后由这些模板来构建指令。
指令模板如下图所示,博主个人理解是加上这些instruction templates之后将普通数据集转换为一个instruction形态的数据集。
模型结构如下所示,整体结构跟BLIP2大差不大,Q-Former仍然充当图像编码器来提取视觉特征,这里直接拿BLIP-2预训练好的模型即可,为了融合instructions,在推理过程中,可以看到instructions被输入给LLM(frozen Vicuna 7B and 13B models)和QFormer中。
paper:InstructBLIP: Towards General-purpose Vision-Language Models with Instruction Tuning
arxiv:https://arxiv.org/pdf/2305.06500.pdf
github:https://github.com/salesforce/LAVIS/tree/main/projects/instructblip
X-LLM
补一篇X-LLM,它有一个中文多模态指令数据集,这个数据集主要包括:
- 图像-文本指令数据,源于MiniGPT-4
- 语音-文本指令数据,源于AISHELL-2
- 视频-文本指令数据,源于ActivityNet
- 图像-文本-语音指令数据。
具体如下图所示,
模型结构也比较明晰,通过一些adapter来映射不同模态到文本空间,然后输入到大模型中,如下图所示。图像接口采用 BLIP-2 中的 Q-Former,视频接口跟图像一样(只是特征不一样),语言接口采用 CIF+Transformer 。
paper:X-LLM: Bootstrapping Advanced Large Language Models by Treating Multi-Modalities as Foreign Languages
arxiv:https://arxiv.org/pdf/2305.04160.pdf
github:https://x-llm.github.io/
下一篇博文继续更新:
- 基于LLMs的多模态大模型(PALM-E,ArtGPT-4,VPGTrans )