前言
多模态大模型发展至今,产生了CLIP、BLIP、BLIP2、InstructBLIP,LLaVA、miniGPT4,等经典模型。以及国内清华的VisualGLM、阿里的Qwen-VL,ailab的InternVL等。每个模型后续还有迭代更新,本文对上述模型做原理解释,以及相关数据支持。
1. 多模态模型
1.1 CLIP
Contrastive Language-Image Pretraining
OpenAI 2021年的工作
paper: https://arxiv.org/abs/2103.00020
github: https://github.com/openai/CLIP
基本思想: CLIP通过大规模的图像和文本对进行对比学习,学习在特征空间中对齐文本和图像,从而理解图像内容和文本描述之间的关联。
模型结构:
- 图像编码器:通常使用Vision Transformer (ViT) 或者其他卷积神经网络 (CNN) 如ResNet作为backbone。
- 文本编码器:通常采用BERT或类似基于Transformer的模型。
- 特征提取后,图像和文本特征通过归一化处理,然后通过点积计算余弦相似度,使用对比损失(info-NCE loss)进行训练。
参考:
https://www.bilibili.com/video/BV1SL4y1s7LQ 【未看完】
1.2 BLIP
Salesforce Research
Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
paper: https://arxiv.org/abs/2201.12086
github: https://github.com/salesforce/BLIP
基本思想: BLIP旨在通过自举方法来提升模型在视觉-语言理解和生成任务上的性能。BLIP还可以通过生成合成图像描述并使用过滤器去除噪声描述,有效地利用了网络上收集的噪声图像-文本对。
统一了理解与生成
模型结构: BLIP模型采用了多模态混合编码器-解码器(Multimodal Mixture of Encoder-Decoder, MED)架构,该架构可以作为单模态编码器、图像引导的文本编码器或图像引导的文本解码器来操作。MED模型通过三种视觉-语言目标进行联合预训练:图像-文本对比学习(image-text contrastive learning)、图像-文本匹配(image-text matching)和图像条件语言建模(image-conditioned language modeling)。
- 图像编码器:使用视觉Transformer(如ViT)作为图像编码器,将输入图像分割成多个小块(patches),并将其编码为一系列嵌入向量,同时使用额外的[CLS]标记来表示整个图像的特征。
- 文本编码器:采用BERT或类似的基于Transformer的模型作为文本编码器,在文本输入的开始处附加[CLS]标记,以汇总句子的表示。
- 图像引导的文本编码器:在文本编码器的基础上,通过在自注意力(self-attention)层和前馈网络(feed-forward network)之间插入额外的交叉注意力(cross-attention)层来注入视觉信息。
- 图像引导的文本解码器:替换了图像引导的文本编码器中的双向自注意力层为因果自注意力层,并使用[Decode]标记来指示序列的开始和结束。
Bootstrapping/自举法
自举法(Bootstrapping)是一种重采样技术。
Bootstrapping基本思想是对现有的数据,不断再随机取小的样本,对每个小样处理数据,得到estimator.从而来了解estimator 的分布。
步骤:
- 在原有的样本中通过重抽样(有放回的抽取,即一个数据有可以被重复抽取超过一次) 一定数量(比如100)的样本。
- 基于产生的新样本,计算需要的估计量,均值,方差,协方差。
真实的α分布,和基于bootstrap方法得到的1000个α的分布,二者是比较相近的,也就是说Bootstrap有着不错的估计效果。而且当重复次数增多,Bootstrap的估计效果会更好。
1.3 BLIP2
Salesforce Research
paper: https://arxiv.org/abs/2301.12597
github: https://github.com/salesforce/LAVIS/tree/main
Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
Based on BLIP and ALBEF
核心原理:
图像(Image)输入了图像编码器(Image Encoder),得到的结果与文本(Text)在 Q-Former(BERT初始化)里进行融合,最后送入LLM模型。
结构:
- 冻结的 视觉编码器:(如ViT-L/14或ViT-g/14)
- 冻结的 LLM:如OPT和FlanT5
- Q-Former(Querying Transformer):BLIP2中可训练的模块,轻量的transformer,用于融合特征。熟悉ALBEF或者BLIP的同学或许发现,Q-Former的结构和ALBEF其实很像,如果看代码的话,可以发现就是在ALBEF基础上改的。
相较于ALBEF,最大的不同,就是Learned Query的引入。
这些query通过cross-attention与图像的特征交互,通过self-attention 与文本的特征交互。
Query是基于两种模态信息得到的;
不管多大的backbone,最后都是Query长度的特征输出,大大降低计算量。
比如在实际实验中,ViT-L/14的模型的输出的特征是257x1024的大小,最后也是32x768的Query特征。
training:
stage1:
三个task: Image-Text Contrastive Learning (ITC),Image-grounded Text Generation (ITG),Image-Text Matching (ITM)
stage2:
针对两类不同LLM设计了不同的任务:
- Decoder类型的LLM(如OPT):以Query做输入,文本做目标;
- Encoder-Decoder类型的LLM(如FlanT5):以Query和一句话的前半段做输入,以后半段做目标;
FC 层:适应模型的不同embedding维度。
参考:
https://zhuanlan.zhihu.com/p/606364639
1.4 InstructBLIP
通过指令调整(instruction tuning)来构建通用的视觉-语言模型。
Salesforce Research
paper: https://arxiv.org/abs/2305.06500
github: https://github.com/salesforce/LAVIS/tree/main/projects/instructblip
模型结构:InstructBLIP的模型结构基于BLIP2,介绍了如何把指令微调的范式做在 BLIP-2 模型上面。
和BLIP2 类似,InstructBLIP 由图像编码器、LLM 和 Q-Former 组成。
在指令微调期间只训练 Q-Former,冻结图像编码器和 LLM 的参数。
contribution:
- 引入 Instruction Tuning (BLIP2中的prefix text换成了 instruction),文本指令不仅提供给冻结的LLM,还提供给Q-Former。
- LLM换做Vicuna
BLIP -> BLIP2 -> InstructBLIP 是一条线,都是 来自 Salesforce Research的团队做的。
1.5 Flamingo🦩
paper: https://arxiv.org/pdf/2204.14198
DeepMind 2022 年的工作,比较老了,没有开源
Challenge:
BLIP2工作中由于只采用了图文对(Image-Text Pair)数据,因此其 in-context 能力欠缺,few-shot 效果不佳。Flamingo 工作中,作者从互联网数据中收集了大量的图文交织(Image-Text Interleaving)数据。
Perceiver Resampler: from varying-size large feature maps to few visual tokens。从视觉编码器(从图像或视频中获得)接收时空特征,并输出固定数量的视觉token。
Vision Encoder: from pixels to features。我们的视觉编码器是一个预训练且参数被固定的NormalizerFree ResNet (NFNet)
Image-Text Interleaving
1.6 LLaVA
llava -> llava1.5 -> llava-next
1.7 Qwen-VL
Qwen-VL -> Qwen-VL 1.5 -> Qwen-VL2
Alibaba
Qwen-VL 在图像描述、问题回答、视觉定位和灵活互动等任务中表现出色。
模型架构:
- LLM:直接使用了Qwen-7B模型的预训练权重
- vision encoder:Openclip的ViT-bigG模型。
- Position-aware Vision-Language Adapter:
为了缓解由于长图像特征序列而产生的效率问题而提出的。
适配器包括一个单层的交叉注意力模块,随机初始化。模块使用一组可训练的向量(嵌入)作为查询向量,使用来自视觉编码器的图像特征作为键进行交叉注意力操作。将图像特征序列压缩成了固定长度的256。
- 为了区分图像特征输入和文本特征输入,作者引入了两个特殊的标记:
<img>
和</img>
。
- 任务:
- 区域描述(Region Descriptions):这是描述图像中特定区域的文本,通常包括了区域的位置、特征或属性等信息。
- 问题(Questions):与区域描述相关的问题,模型需要理解问题并生成相应的回答。
- 检测(Detections):这些是图像中的检测结果,通常与区域描述和问题相关联。
training
Qwen2-VL
- 支持 context length已经达到128K token
- 支持任意分辨率、比例的素材(img + video + text)输入,在视觉评测集(DocVQA, InfoVQA, RealWorldQA, MTVQA, MathVista等)上取得SoTA结果。
- 2D Rotary Position Embedding 引入。
- 支持img + video + text等多种模态的输入,支持20分钟以上视频输入
- 方法:
- 资源使用
- 目前我在8张a100上训练Qwen2-vl-72b,用deepspeed zero_3勉强能训练起来。
1.8 Intern-VL
Intern-VL -> Intern-VL1.5 -> Intern-VL2
Shanghai AI Lab & SenseTime
1.9 Yi-vision
https://huggingface.co/01-ai/Yi-VL-34B
01.AI
Yi-VL采用 LLaVA 架构,由三个主要组件组成:
- Vision Transformer (ViT):使用 CLIP ViT-H/14 模型 初始化并用于图像编码。
- 投影模块:它旨在将图像特征与文本特征空间对齐,由具有层归一化的两层多层感知器 (MLP) 组成。
- 大型语言模型(LLM):使用 Yi-34B-Chat Yi-34B-Chat 或 Yi-6B-Chat进行初始化,在理解和生成英文和中文方面表现出非凡的熟练程度。
2. 分类
多模态模型总体分为两类:
- 基于双编码器 dual encoder 对图像和文本分别编码
- 基于融合编码器 fusion encoder 除了图像和文本encoder之外,还有额外的transformer 结构用来融合图像和文本。
3. Pretraining
3.1 tasks
Masked Language Modeling (MLM)
Masked Image Modeling (MIM)
Image-Text Matching (ITM)
Image-Text Contrastive Learning (ITC)
4. 评测
VQA
captioning
reasoning
grounding
img-text retrieval
其他的经典论文
- ViT vision transformer
- ALBEF
- transformer