论文笔记 mPLUG-2:A Modularized Multi-modal Foundation Model Across Text, Image and Video

本文最后更新于:2023年3月21日 上午

mPLUG-2: A Modularized Multi-modal Foundation Model Across Text, Image and Video

论文链接:mPLUG-2: A Modularized Multi-modal Foundation Model Across Text, Image and Video (arxiv.org)

代码链接:(即将开源在这里,和前作在同一个库)alibaba/AliceMind: ALIbaba’s Collection of Encoder-decoders from MinD (Machine IntelligeNce of Damo) Lab (github.com)

我的介绍其前作mPLUG模型的博客:论文笔记 mPLUG Effective and Efficient Vision-Language Learning by Cross-modal Skip-connections - Kamino’s Blog

阿里巴巴达摩院于23年2月发布的大规模视觉-语言预训练模型——mPLUG-2,相较于前作mPLUG,本次将模型拓展到了视频领域,总共在30多个下游任务上进行试验,并取得很多SOTA。并且本作没有像前作那样突出减少运算时间,而是在训练效率和有效性上有长进。mPLUG2是一个多模块结合的模型,通过不同的模块能够应对“模态纠缠”的问题,不同任务可以选择性地使用部分模块。

mPLUG-2整体框架

简介

之前的foundation模型(如下图的Flamingo模型,用一个统一的解码器)使用单个网络来处理多模态数据,企图达到多模态间的合作,然而这样会因为不同模态任务之间的差异而造成“模态纠缠(modality entanglement)”,模态纠缠指的是不同模态的信息会互相干扰,单模块的网络很难做到权衡不同模态对某个特定任务的影响。

不是很理解模态纠缠,但是至少人家是这么说的,并且有一篇相关文献,假如我读懂了会更新到博客上:What makes joint training of multi-modal network fail in deep learning?(provably).

Flamingo

mPLUG2相较于Flamingo的话,就是把不同模块分开了,有共享参数的编码器Universal Layer,也有多模态融合的Fusion Layer,还有用来做生成任务的解码器。这个灵活的框架使该模型比其他模型涵盖的任务更加广泛:

mPLIG2能做的任务

最终作者在保证模型大小和数据量大小还算正常的情况下,打败了各路之前的SOTA,作者特别吹了一下在Video Caption任务和Video QA任务上的成果,由于我是做Video Caption的,他这个成果可以说是非常SOTA了,超过了之前我在另一篇博客介绍的GIT模型。

方法

整体框架

图2

图2是mPLUG更详细的整体框架图,从下往上看:首先文本侧有一个比较普通的编码器(基于BERT),视觉侧为了适配视频进行了改进,是一个Dual-vision编码器,这个编码器会建模视频的空间和局部时序信息。之后,两个模态的表征会送到Universal Layers Module中,这个模块将不同模态通过编码映射到共享的语义空间中,并在此处进行多模态语义对齐,这个模块还没有进行特征融合,所以可以用在各种单模态的任务上。对于多模态任务,则需要一个额外的融合模块来融合不同模态的信息。要做生成任务时,无论是融合了的还是没融合的特征都可以通过Shared Decoder Module进行解码。

这种搭积木式的网络能够适应多个任务,下面据一些例子:

  1. 语义情感分类:只需要文本的单模态任务,将文本通过文本编码器进行编码,然后通过Universal模块进行再次编码,然后接分类器得到结果。
  2. 图像分类:只需要视觉的单模态任务,将图像送到视觉编码器进行编码,然后通过Universal模块再次进行编码,然后接分类器得到结果。
  3. Video Captioning:多模态任务,视觉和文本各自送进自己的编码器,然后通过Universal模块再次编码,然后送入Fusion模块进行融合,最后作为Decoder的Cross Attention的输入进行解码。在推理阶段则是自回归式生成,会使用“”What does the video describe?”来作为prompt。

Dual-vision Encoder

这个模块把视频和图像先分成L长的不重叠的token,然后额外添加[CLS],并加上可学习的空间位置编码。要对时空token进行建模需要大规模数据支持,所以作者这里简化了问题,将其解耦为分别学习空间和时间,并提出了一个Local Temporal模块来对局部时序进行建模。

公式上是这样的:

VLTn=LN(LocalTemporal(Vn1)+Vn1)VSAn=LN(SelfAttn(VLTn1)+VLTn1)Vn=LN(FFN(VSAn)+VSAn)V^n_{LT}=LN(LocalTemporal(V^{n-1})+V^{n-1})\\ V^n_{SA}=LN(SelfAttn(V^{n-1}_{LT})+V^{n-1}_{LT})\\ V^n=LN(FFN(V^n_{SA})+V^n_{SA})

直接看图比较清晰:

Dual-vision Encoder

和ViT来说也就是增加了Local Temporal这个模块,这个模块通过对相同位置的token进行分组融合来交换时间信息,该模块公式:

Vg=ReLU(Agϕg(V))RT×CGLocalTemporal(V)=φ(Concat[V1;V2;;VG])V_g=ReLU(A_g\phi_g(V)) \in \mathbb{R}^{T\times \frac{C}{G}}\\ LocalTemporal(V) = \varphi(Concat[V_1;V_2;\dots;V_G])

公式省略的层数的nn,其中AgA_g是组的卷积核,ϕ()\phi(\cdot)是将隐藏维度CC转换到CG\frac{C}{G}的线性映射函数,然后这个卷积的操作论文里没详细说,反正最后每个组的concat在一起再经过一个线性映射层φ()\varphi(\cdot)就得到最后结果了。

这论文也写得太简略了……

Text Encoder

是BERT。

Universal Layers

这里不直接对视觉的token进行self-attention,而是通过k个learnable的query来浓缩信息并提高效率,这一块和BLIP2的结构也很相似。如图,Learnable Query自己之间做self-attention,然后通过Cross-attention来选择性得到Image/Video的信息,然后进入FFN。

Universal Layers

Fusion

这里使用ALBEF的多模态融合模块,如下图红色框框住的部分,视觉侧特征通过Cross Attention进来,文本侧特征则是走Self Attention。

这里原文也很简略,让人不明所以。到底哪个是SA的输入,哪个是CA的输入????

1
Specifically, the fusion module takes the text embeddings from the universal layers module as the input. Then, the text-aware vision embedding cross-attends to the visual-aware text embeddings in language-shared common space. By cascading the Transformer blocks with cross-attention layers, fusion module is able to yield multi-modal vision language representations

ALBEF

Shared Decoder

一个简单的带CA的Transformer Decoder。

Objective

  1. Language Loss

    在图中标注的是在universal layer后面进行MLM作为Language Loss,但是文中又说是text encoder的loss。

  2. Multi-modal Loss

    包括Vision-Language-Matching和Vision-Language Contrastive。都是常规操作。

  3. Instruction-based Language Model Loss

    就是自回归生成语言的loss,在前方通过一些prompt作为Instruction。

实验

本文进行了非常多的任务,实验也自然有非常多,这里挑选几组实验:

Video Caption

视频描述的任务上可以说是非常SOTA了,在CIDEr上又拔高了一点,此前的SOTA是GIT。

但是这里根据附录来看,mPLUG是默认启用了CIDEr optimization(见我这篇博客介绍的SCST方法),但是GIT没有,假如GIT也进行微调的话,感觉这个模型在指标上并不会超越太多。

Video Captioning

Local Temporal Modeling

作者统一了图像和视频的输入时,使用了Local Temporal Modeling作为时序的建模,而像GIT这种模型只有很简单的附加时序编码,作者的消融实验证明这样添加效果是好的。

Learnable Queries

作者使用Grad-CAM方法可视化了learnable queries的attention map。

模型大小分析

暂时没给代码,无法分析大小,只能根据论文来猜测。

文章训练了mPLUG-2-base和mPLUG-2两个版本,base版本使用VIT-base和BERT-base作为编码器,而更大的版本则使用ViT-Large和BERT-Large。后面的维度也随之变化,分别为768和1024,universal layer是2层Transformer,fusion模块则分别是3和6层,解码模块都是12层Transformer(这么一看参数还真多……)。