cv/nlp/多模态 面试准备 ---- BLIP2
BLIP-2通过轻量级两阶段预训练模型Querying Transformer缩小模态之间gap,第一阶段从冻结图像编码器学习视觉语言表征,第二阶段基于冻结语言模型,进行视觉到语言生成学习

1. Vision-and-Language Representation Learning
为了训练 Q-Former 来实现 queries 能够抽取出包含对应文本信息的 visual representation,同时优化三个损失函数:
1、Image-Text Contrastive Learning (ITC):学习将 image 特征和 text 特征进行对齐,使他们的交互信息最大化
· 实现方式:使用对比学习,学习 image-text 的相似度,positive pairs 的相似性大于 negative pairs 的相似性
· t :text transformer 的 [CLS] token 的输出 representation,包含多个输出编码(一个 query 对应一个编码)
· Z:image transformer 的 输出 query representation
计算每个 query output 和 t 的 相似度,选择相似度最高的作为 image-text similarity,为了避免信息泄露,作者还使用了单模态 self-attention mask,queries 和 text 不能看到对方
由于 image encoder 是被冻结的,所以相比于端到端训练,冻结的方式能够在每个 GPU 上放更多的样本,所以本方法使用的 in-batch negatives 而非 momentum queue(BLIP)
2、Image-grounded Text Generation (ITG):训练 Q-Former 来生成 text,输入的图像作为条件
由于 Q-Former 不允许 frozen image encoder 和 text image encoder 的直接交互,但生成 text 的基础信息是来源于 query 抽取到的图像信息。所以,query 需要能够抽取关于 text 内容的所有的图像信息。作者使用多模态 causal self-attention mask 来控制 query-text 的交互,类似于 UniLM,query 可以和其他 query 以及出现在它前面的 text token 进行交换,同时也是要 [DEC] token 替换了 [CLS] token 作为第一个 text toden 来标记 decoding 任务。
3、Image-Text Matching (ITM):用于学习 image-text 之间更细粒度的对齐
该任务时一个二值分类任务,用于预测一个 image-text pairs 是 positive(matched)还是 negative(unmatched)。作者使用 bi-directional self-attention mask,该 mask 的形式允许所有 query 和 text 进行交互,输出 query embedding Z 能够捕捉多模态信息。将每个输出 query embedding 输入二分类的线性分类器,来获得一个 logit,并且将 logit 平均后作为输出的 matching score。此外,作者也使用了负难例挖掘,来提取出难的 negative pairs




# BLIP
动机:
- 缺乏单框架多任务的能力:提出MED
- 预训练数据噪声很大:提出CapFilt
Mixture of Encoder & Decoder
- 参数共享(而且全量参数解耦并不会取得最好的性能)
- Uni-modal Encoder:ITC loss
两个[CLS](text会额外加)做对比学习,没有交互
- Image-text grounded encoder:ITM loss
text额外加[ENC],加cross-attention,就是一个bert最后做二分类(应该就是把[ENC]拿出来进MLP)
- Image-text grounded decoder:LM loss
cross-attention,做生成任务
注意ITM和ITC的区别:
- ITM只推开正负样本;ITC既推开正负样本,又拉进正样本。原文是说关注的粒度不一样
- 感觉另一个方面是需要有一个桥接的过程,因为text self-attention不能看image信息,所以ITC不能引入cross-attention;但这样cross-attention就缺失了正负样本对比学习的过程,ITM相当于一个不完全直接对比的手段去实现这个过程。
CapFilt:
- 一定程度上是ALBEF的momentum distillation做了优化。个人认为MoD基于EMA的方式没办法在训练初期有一个很好的稳定收敛,因为这时模型本身效果都还不太好
- 先训好一组MED(image-text grounded encoder当Filter,image-text grounded decoder当captioner)
- 然后拿高质量文本对数据集(比如COCO)fine-tune一下这俩
- 再重新把预训练数据过一遍captioner出synthetic text,filter去筛选原始文本更好还是生成的文本更好,然后分别保留1个。最后重新预训练的时候采样其中1个。
- CapFilt在BLIP-2里的做法具体为生成10个文本,然后筛完保留最好的1个caption和1个原始文本。
- 重复以上过程直到进一步收敛。
# BLIP-2
动机
- BLIP的预训练成本太高了(尤其CapFilt),需要降参数:引入Q-Former
- 做不了更高级的视觉问答或推理:引入llm的能力
Q-Former
- Learnable queries:
- 大量被使用的成功方法:DETR / perceiver resampler
- DETR中可以认为是一个包含了各种上下文信息的prompt或者abstractor,已经表示了很多关键的上下文和抽象概括,Q-Former中则更是一个同时包含了image和text上下文重要信息的prompt
- image transformer和text transformer;image transformer只进query,text transformer只进text,query和text完全通过self-attention交互;query跟image还是照旧只用cross-attention;相当于query是唯一桥梁。
- ITC:
- attention mask不允许二者交互,然后输出的queries $Z$ 和text [CLS] 做对比学习。具体地,$Z$ 每个token都会算一遍相似度,然后取最大的作为最终的相似度输出。
- 由于image encoder冻住,可以直接使用in-batch negatives,而不需要像BLIP那样用momentum queue。
- ITM:
- query和text在self-attention交互,query必须掌握所有text的信息,然后从ITM头出二分类结果;$Z$ 的每个token都出logits,然后算均值作为最终输出
- 另外,负样本采样采用了与ALBEF相同的策略:在batch内部先算一遍相似度,然后把相似度高的负样本赋予更高的采样概率;另外反过来,每个文本也采样一个hard negative image
- ITG:
- [CLS]换成[DEC]
- query和text在self-attention交互,self-attention变成casual;query必须掌握所有image的信息,然后交给decoder生成。
- CapFilt:仍然使用CapFilt
二阶段(生成阶段)
- decoder-only:只有Q-Former query做prompt
- encoder-decoder:query + 部分文本做prompt
## 为什么SoccerNet的实验结果显示BLIP + Perceiver Resampler的效果比BLIP-2更好?
推测有以下可能:
- 训练参数量差异:在v100条件下,BLIP可以完全放开ViT参数,但BLIP-2放大模型的情况下无法释放视觉编码器更多的参数;
- Q-Former的query长度只能给到32,Perceiver Resampler应该是用的64,也是受到资源分配的影响了;
- Perceiver Resampler的结构其实更简单,可能反而有利于特定场景、数据规模不大的情况,学到更细粒度的特征;
- Q-Former本身要同时固定视觉和文本的上下文知识,直觉上这会损失很多精度。而且BLIP-2的卖点也是扩展能力和zero-shot性能,这符合query过于抽象概括的特性。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
