多模态大模型简介
多模态大语言模型(Multimodal LargeLanguageModel)是指能够处理和融合多种不同类型数据(如文本、图像、音频、视频等)的大型人工智能模型。这些模型通常基于深度学习技术,能够理解和生成多种模态的数据,从而在各种复杂的应用场景中表现出强大的能力。
下面两个例子展示了MLLM的能力:

多模态研究的重点是不同模态特征空间的对齐
模态对齐范式
介绍两种对齐范式,分别使用了Q-Former和MLP来做对齐。
Q-Former(BLIP系列)
BLIP系列工作提出了Q-Former结构来对齐视觉和文本两个模态。模型总体的工作流程如下。

对于Q-Former部分,其设计较为复杂,如下:

具体来说,Q-Former类似传统多模态模型,优化了三个loss:
- ITMloss:图文匹配
- LM loss: Predict Next Token
- ITC loss:对比学习
架构设计:
- 共享SelfAttention:模态交融
- 专家FFN:处理差异化模态信息
后来,KAUST的团队利用Q-Former给出了GPT-4的一个开源实现Minigpt-4。

MLP(LLaVA系列)
LLaVA的想法比Q-Former简单很多,就是把CLIP的Vision Encoder用一个线性层(或者MLP)变换后对齐到文本表示中,对齐的时候甚至只学线性层,但是效果却很好。

后面针对高分辨率的图像,给出了处理办法:

为什么用Q-Former的变少了
- 收敛速度慢:Q-Former的参数量较大(例如BLIP-2中的100M参数),导致其在训练过程中收敛速度较慢。相比之下,MLP作为connector的模型(如LLaVA-1.5)在相同设置下能够更快地收敛,并且取得更好的性能。
- 性能收益不明显:在数据量和计算资源充足的情况下,Q-Former并没有展现出明显的性能提升。即使通过增加数据量和计算资源,Q-Former的性能提升也并不显著,无法超越简单的MLP方案。
为什么大家都用LLaVA
- 更强的baselinesetting:LLaVA-1.5通过改进训l练数据,在较少的数据量和计算资源下取得了优异的性能,成为了一个强有力的baseline。相比之下,BLIP2的后续工作lnstructBLIP在模型结构上的改进并未带来显著的性能提升,且无法推广至多轮对话。
- 模型结构的简洁性:LLaVA系列采用了最简洁的模型结构,而后续从模型结构上进行改进的工作并未取得明显的效果。这表明,在当前的技术和数据条件下,简洁的模型结构可能更为有效。
InternVL2简介
模型架构
LLaVA式架构设计(ViT-MLP-LLM):
- InternLM2-20B
- InternViT-6B
- MLP

ViT

Pixel Shuffle

Dynamic High-Resolution

Multitask Output

这部分还是很有意思的,训练了很多针对不同视觉任务的embedding,可以干很多不同的事情。
训练方法

LMDeploy部署多模态模型
我们可以使用UI界面先体验与InternVL对话:
拉取本教程的github仓库https://github.com/Control-derek/InternVL2-Tutorial.git:
git clone https://github.com/Control-derek/InternVL2-Tutorial.git
cd InternVL2-Tutorial
启动demo:
conda activate lmdeploy
python demo.py

进入网页。点击Start Chat即可开始聊天,下方食物快捷栏可以快速输入图片,输入示例可以快速输入文字。输入完毕后,按enter键即可发送。

这个问题大模型回答的不准,等会看看微调后效果如何。

XTuner微调实践
根据指引准备基本的配置文件,包括模型和数据路径,超参数,LoRA算法相关参数等。
我们要使用的数据集路径是/root/share/datasets/FoodieQA,是一个图片问答的数据集。
开始微调,运行命令:
xtuner train /root/xtuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py --deepspeed deepspeed_zero2

微调结束

微调后,把模型checkpoint的格式转化为便于测试的格式:
python xtuner/configs/internvl/v1_5/convert_to_official.py xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py ./work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/iter_640.pth ./work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/lr35_ep10/
微调前后效果对比
到demo.py中修改模型路径为微调好的文件,然后运行,这次正确给出了羊肉串的菜系。

&spm=1001.2101.3001.5002&articleId=143716171&d=1&t=3&u=5590d5e81b6c4f4a84a1fb1e47cb30ac)
1480

被折叠的 条评论
为什么被折叠?



