思考:
多模态本质就是alignment(对齐),那么问题就在于如何做对齐。有用entity的,有用attention的,有用event做alignment,然后再做fusion(融合)。融合有多种方法,例如Linking、Grounding、Structure等。
感觉很多是简单粗暴的把representation concat再接个attention,怎样结构化的更高效对齐不同模态的信息或者哪些模态在一起更好aid each other这些方面没有什么好的insight。
4种不同类型的Vision-and-Language Pretraining(VLP)模型示意图,可以归纳2种模态相互作用方式和3种visual embedding方式。其中每个矩形的高表示相对计算量大小,VE、TE和MI分别是visual embedding、text embedding和modality interaction的简写。
考虑:
- 在参数或者计算上,两种模态是否保持平衡。
- 在网络深层中,两种模态是否相互作用。
- 模态交互部分可以分成两种方式:一种是single-stream(如BERT和UNITER),另一种是dual-stream(如ViLBERT和LXMERT)。其中single-stream是对图像和文本concate然后进行交互操作,而dual-stream是不对图像和文本concate然后进行交互操作,会引入额外的计算量。
- VSE、VSE++和SCAN属于(a)类型。对图像和文本独立使用encoder,图像的更重,文本的更轻,使用简单的点积或者浅层attention层来表示两种模态特征的相似性。
- CLIP属于(b)类型。每个模态单独使用重的transformer encoder,使用池化后的图像特征点积计算特征相似性。
- ViLBERT、UNTER和Pixel-BERT属于(c)类型。这些方法使用深层transformer进行交互作用,但是由于VE仍然使用重的卷积网络进行特征抽取,导致计算量依然很大。
- 作者提出的ViLT属于(d)类型。ViLT是首个将VE设计的如TE一样轻量的方法,该方法的主要计算量都集中在模态交互上。
问题:
现有的VLP模型的text embedding基本上都使用类BERT结构,但是visual embedding存在着差异。在大多数情况下,visual embedding是现有VLP模型的瓶颈。visual embedding的方法总共有三大类,其中region feature方法通常采用Faster R-CNN二阶段检测器提取region的特征,grid feature方法直接使用CNN提取grid的特征,patch projection方法将输入图片切片投影提取特征。
ViLT成功将BERT和ViT应用于多模态Transformer。总体上来看基于patch projection的多模态方法速度优势非常大,但是整体上性能还是略低于region feature的方法,期待未来会有更强的基于patch projection的多模态方法出现。
‘’文本编码器可大可小,可以是一个bert结构,也可以是一到两层的embedding(nn.embedding)结构。图像编码器用于对图像进行特征提取,这里对图像进行特征提取有些论文会先过一个目标检测,然后对目标框进行特征提取,也可以直接对图像进行分块进行特征提取,至于图像编码器本身可以是resnet类结构也可以是VIT类结构。多模态编码器一般选择是bert结构,在单流模型中,先将文本特征和图像特征连接后统一输入到多模态编码器,而在双流结构中,文本特征和图像特征分别输入到多模态编码器,而且多模态编码器中包含单模态的self- attentio,还包含跨模态的cross-attention计算。”
1)图像特征提取部分,有些过检测器之后利用resnet或vit进行特征提取,有些直接利用VIT进行特征提取,还有一些会利用类似d-VAE先将图像进行一定的处理等等;
2)文本特征提部分,这里主要区别是利用一个简单的embedding层还是利用目前大家常用的bert结构;
3)多模态融合部分,无非就是单流模型或者双流模型,对于单流模型而言,可能多模态的拼接方式以及类别embedding会有区别,而对于双流模型而言,cross-attention实现方式可能也会有所区别
4)选取的预训练任务不同,截止到今天,预训练任务可以说是多种多样,下面也会重点讲一下自己尝试过的一些比较流行的预训练任务。
从模型结构上来说,cv特征提取器越强肯定效果会越好,从最初的resnet到VIT再到swin transforer,而且采用transformer结构之后,基本上目标检测器也可以省略了,可以直接输入原始图像。对于文本特征提取器而言,由于最开始的没有采用类似CLIP的对比损失预训练任务,所以一般就用简单的embedidng就可以。对于多模态编码器来说,我这边实验结果是单流模型效果更好,其实这个结论不一定solid,但是单流模型结构简单,pretrain、finetune也容易收敛,简言之就是容易训练出来不错的效果,而双流模型并不容易训练,所以也可能是我参数没有调好。
多模态预训练损失函数
多模态预训练任务最初常用的就是MLM、MRM和ITM,经过两年左右时间的发展,不仅MRM有不同的版本,还可以用LM和IMC(对比损失函数)。
MLM 与bert 的MLM一致,即将文本随机mask一部分(15%),利用输入的多模态特征进行预测,在我的实验中MLM loss 效果是比较明显的。
ITM:由于输入的数据是图像-文本pair对,那么对于多模态编码器而言,输入的特征对可以是匹配的pair,也可以是不配配的pair,这样可以再最终输出的特征层面增加一个分类器判断图像、文本是否匹配。在我的实际应用中,ITM 对效果的提升很微弱。
MRM(Mask region modeling):MRM与MLM 类似,是对输入的图像块(可以是检测框,也可以是直接图像分块)对一部分进行mask,然后利用输入的多模态特征进行预测。MRM有不同的实现方式,对于有目标检测器的方案而言,由于有检测器的类别信息,所以可以直接利用分类器进行分类,对于没有目标检测器的方案来说,可以直接回归特征或者计算预测特征与真实特征之间的kl散度。未采用目标检测器,无论是重构特征还是计算kl散度,效果提升都很小。最近,也有人利用d-VAE首先对图像块进行编码,得到一个one-hot特征(其实就是label),而后在MRM中即使没有目标检测器的情况下也可以预测类别,猜测这种实现方式效果可能会好一些。
LM:与GPT中的LM一致,只不过在输入的时候多了图像特征。
IMC:对比损失函数在图像无监督领域内用得已经很广泛了,其中最著名的要属Moco系列和Simclr系列了。在多模态领域中,CLIP论文可以说是将对比损失函数成功应用了起来,并且取得了相当炸裂的效果(当然跟亿级别训练数据也有关系)。IMC其实实现起来也比较简单,即计算图像特征与文本特征的cosine相似距离,正样本对label为1,负样本对lable为0。比如ALBEF用的loss就用到了IMC,个人感觉这个loss的贡献要高于ITM和MRM。
最优运输:
最优传输问题的定义来说,就是将概率分布 以最小的成本转换到概率分布 。这就需要我们求得一个分配方案,由矩阵表示,其解空间可以做如下定义:
如前面所述,我们希望最小化转换成本,可以简单地反转偏好矩阵M的符号,就可以得到成本矩阵(cost matrix)。于是就有了最优传输问题的公式化表示:
Sinkhorn距离是一种改进,在其基础上引入了熵正则化项:
熵正则化参数 λ 负责调整信息熵的影响程度,λ 越大,信息熵的影响越小,最终结果受成本矩阵的影响更大,即更多地考虑个体的喜好;反之,最终结果则更倾向于均匀分配。
文章出处登录后可见!