前言
常见的MLLM结构
作者团队是谁
代表性工作都在计算机视觉预训练领域,MoCo和MAE等,所以本篇paper重视的一个问题是"visual侧特征学得好不好",和一些MLLM代表作关注的视角并不一样
理解Related Work
Related work章节的信息浓度很高,分为6个section,同时也交待了paper & 做好MLLM要关注的6大问题
问题 | 讨论 |
---|---|
LLM | LLM是MLLM模型的基础,LLM可以基于prompt和visual encoder的输出,完成复杂的多模态任务。近期有很多工作是通过强化LLM,进而优化MLLM的性能。但是这也引出了一个问题,目前对于MLLM的评估是非常容易被LLM的性能影响的,很少有人对MLLM的视觉感知能力做评估。 |
Vision encoder | 大多数MLLM的vision encoder都是CLIP预训练的,但是除了文本监督的预训练方式,还有各种各样的视觉模型(自监督、分割、深度估计、扩散)。最近有一些工作探索了如何在MLLM引入多样的视觉模型。本文也会系统性探索MLLM中视觉模型的选择。 |
Multimodal connector | 视觉模型输出的特征无法直接被LLM处理,大多数MLLM会引入一个projector把视觉特征映射到LLM的token空间。目前最主流的projector是MLP:- MLP的问题:visual token的数量会随着分辨率平方增长,极大限制了视觉context的长度(例如LLaVa-Next需要2880个token去处理672分辨率的图片)。本文为了解决这个问题,设计了一种处理高分辨率图片的projector |
Instruction tuning data | 视觉指令微调的数据很重要,但是难收集,相比于文本instruction数据来说,获取成本非常高。本文收集了尽可能多的VQA数据&视觉互动数据,探究数据平衡&数据类别配比等问题; |
Instruction tuning | 大部分MLLM,都用预训练的LLM和vision encoder进行初始化;基于视觉指令微调数据,对LLM&projector进行finetune。但是最合适的finetune策略一直是悬而未决的,比如:- 是否需要在同时finetune LLM&projector前,对projector进行pretrain finetune的过程中是否freeze住vision encoder关于这些问题,本文也提供了系统性的实验。 |
Evaluation & benchmark | 现有MLLM benchmark的合理性存疑 |
MLLM x 视觉模型
怎么评:MLLM的benchmark合理吗?
Finding1:大多数benchmark并无法反映MLLM的视觉能力,能反映的benchmark自身的样本数又很少
-
左上图:MLLM在下游benchmark上做测评
- 训练设置:基于2阶段训练,第一阶段用1.2M (来自ShareGPT-4V)数据训练connector,第二阶段用0.74M数据同时训练connector和LLM;
- 测试设置:绿色label代表"使用文本+视觉特征",红色label代表"只用文本特征",蓝色实心label表示"绿色和红色的diff",黄色实心表示"random guess"的结果
-
结论:
- 大多数数据集上,有没有visual侧特征,对最终的结果影响不大
- 缺少visual侧特征影响较大的任务,自身的样本数很少
-
解决方案:本文提出CV-Bench,把CV任务给自然语言化,用来评测MLLM在视觉侧的能力
- 空间关系
- 物体数量
- 深度关系
- 相对距离
怎么训:MLLM的训练方法
Finding2:两阶段的训练是必要的,并且一阶段projector的训练数据越多效果越好;Unfreeze视觉backbone训练大部分情况下有益;
表格纵轴的含义:
- 0M❄️:freeze视觉backbone,不用数据pretrain projector
- 0.5M❄️:freeze视觉backbone,用0.5M数据pretrain projector
- 1.2M❄️:freeze视觉backbone,用1.2M数据pretrain projector
- 1.2M🔥:unfreeze视觉backbone,用1.2M数据pretrain projector
表格的结论:
- 不可以跳过projector的训练,两阶段训练是有用的;
- 越多的数据训练projector,最终的效果越好;
- 在projector的训练阶段,unfreeze视觉backbone大多数情况下有收益,但是可能会被计算资源限制可行性,资源充足的情况下可以尝试;
怎么选vision encoder:MLLM的视觉backbone选择
Finding3:VL预训练的视觉backbone比视觉SSL预训练的backbone效果好。
- 图6:所有蓝色的点,在红色&绿色的点上方。蓝色点代表使用VL预训练的backbone,红色代表视觉SSL的backbone,绿色代表其他任务(如分割)预训练的backbone;总体来看,VL预训练的backbone最适合当做MLLM的视觉基座;
- 其中效果最好的是SigLIP的模型,比较惊喜的是,ConvNext-L的效果也不错;
Finding4:高分辨率的视觉backbone对表格理解、重视觉侧的任务都很有帮助。基于CNN的backbone天然对上述任务友好。
结论有点牵强,看图6即可;
怎么进一步提升视觉能力:MLLM x 多个视觉backbone
Finding5:结合多个视觉backbone的特征,可以增强MLLM的性能。
由图6可以看出,不同pre-train、不同architecture的视觉backbone擅长的任务不同,可以将他们进行结合获取更好的效果。
结合的逻辑是,从每个backbone输出的visual tokens中,插值出固定个数的visual tokens;多个backbone输出的特征在channel维度进行concat,再用MLP projector到LLM的token space,继而送进后面的LLM中;
比如,encoder 1的特征维度是196x1024,encoder 2的特征维度是256x2048,那做法就是,从每个encoder的特征中插值出来64个,得到一个64x1024和一个64x2048的特征,再从channel维度concat起来,变成64x3072,再用一个FC把维度降下来,对齐后面的LLM;
提出解法:多个视觉模型特征聚合模块 SVA
Finding6:特征聚合的关键点是空间归纳偏置、LLM&视觉特征的深度交互
用cross attention layer,处理多个visual encoders的特征
-
先定义一个learnable query token <math xmlns="http://www.w3.org/1998/Math/MathML"> X ∈ R L 2 × C X \in \mathbb{R}^{L^2 \times C} </math>X∈RL2×C,L代表feature map的长宽,C代表feature的dimension;
-
Given图片里3个encoder的特征,由于可能是3种不同的feature map大小,需要对同一个spatial position上的特征做对齐;
- Given一个query vector <math xmlns="http://www.w3.org/1998/Math/MathML"> x i , j x_{i,j} </math>xi,j,对于同大小feature map,则感知固定位置的feature vector <math xmlns="http://www.w3.org/1998/Math/MathML"> F 1 i , j F_{1_{i,j}} </math>F1i,j,作为KV;
- 如果feature map的长宽是L的 <math xmlns="http://www.w3.org/1998/Math/MathML"> m k m_k </math>mk倍,则感知一个区域内的feature <math xmlns="http://www.w3.org/1998/Math/MathML"> F k [ m k ⋅ i : m k ⋅ ( i + 1 ) , m k ⋅ j : m k ⋅ ( j + 1 ) ] F_{k}[m_k·i:m_k·(i+1), m_k·j:m_k·(j+1)] </math>Fk[mk⋅i:mk⋅(i+1),mk⋅j:mk⋅(j+1)]作为KV;
-
总的来说,一个query会负责聚合"多个encoder、同一spatial region"内的特征,聚合多个encoder的visual tokens,产出固定个数(L*L)visual tokens作为聚合后的结果;
具体指标:从结果来看,也没有比concat领先太多,感觉形式大于作用,多个source的encoders才是涨点的本质原因;
MLLM x 数据
- 如图9所示,paper收集了非常多的多模态数据,包括OCR数据、VL数据、纯文本数据等;除了以上7M的开源数据,作者还从Internet定向增补了3M的数据,主要手段是用搜索引擎+wiki+大模型生成prompt;这里所有的数据加起来产出了Cambrain-10M数据集;
- 基于Cambrain-10M,调整了垂类的配比,得到了更精简、更高质量的数据集Cambrain-7M;和10M版本的对比如下,7M训出来的模型效果更好;
- 对于答案非常短的训练数据,增加一些system语句,不同的数据集适用的prompt不同;这一操作非常有利于提升模型的对话能力,防止模型退化到"answer machine"只会以很短的文案回答问题;
和SOTA的比较
-
cambrain-1的训练setting:
- stage1 数据:用2.5M数据预训练projector,1.2M captioning data from shareGPT4V and 1.2M captioning data used in MiniGemini; 1e-4学习率,bs 512;
- stage2数据:Cambrain-7M数据做SFT;2e-5学习率,bs512;
- 模型侧:4个visual encoders通过SVA聚合;
- 结论:cambrain超过了开源sota(mini-gemini和llava-next),仅用了1/4的视觉token数(但是有SVA聚合多个encoder的结果)
小trick,评估的时候应该使用模糊匹配对output进行后处理;For instance, if the correct answer is "(a) Apple" and the model outputs "Apple", it is crucial to recognize the response as correct.
其余的两个SOTA
再回头看cambrain和其余两个sota不一样的地方,cambrain是通过visual encoder的diversity取胜,其余两个sota在纯怼分辨率