VILT算法解读

VILT是一种典型的单塔结构,不同于双塔结构由两个独立的Image Encoder以及Text Encoder组成(比如clip),单塔结构的模型一般只有一个共用的编码器,称为Multi-Modal Encoder。 

1、VILT算法原理
    VILT被认为是最简单的单塔结构,它用统一的方式处理视觉和文本两种模态的输入,利用Transformer结构来作为共用的编码器学习模态间的信息交互(多模态融合)。其具体结构如下所示:


(1)数据输入处理

    既然是图文多模态,输入数据必然包含成对的图像和文本(图文pair)。

首先是文本输入,原始的文本输入可以看成是一个单词序列(比如图中的a,stone,statue等等),然后通过Word Embedding算法处理为词嵌入向量,所谓词嵌入向量就是一个高维的向量表征,同一个单词具有相同的嵌入表征,同时同义词的表征距离越近(具体词嵌入的过程可以参考NLP的一些资料,简单来说就是需要一个词汇表(vocabulary dict),然后将单词分词后转化为词汇表中的索引,再将数字索引变为高维向量)。注意到除了词嵌入向量外,每个单词最后的嵌入向量还添加了位置嵌入向量和模态类别嵌入向量(三种向量进行concat)。

然后是图像输入,与文本不同,原始的图像需要分块处理,变成一个图像块的序列,然后每个图像块会通过一个Linear Projection层投影成一个高维视觉特征图,然后将二维特征图展开变成一位特征向量,这样每个图像块就都变成了一个视觉特征向量,同时特征维度和词嵌入向量的特征维度一致。同时每个图像块除了视觉特征向量外,也会添加位置嵌入向量和模态类别嵌入向量(三种向量进行concat)。

    此外,两种模态分别都嵌入了一个额外的可学习[class] embedding,方便和下游任务对接。通过对两种输入的处理,最后不管是文本单词,还是图像块,都被embedding为了同样维度的token特征。

(2)模型结构

    由于视觉和文本输入被转化为了相同的token特征,所以后续的处理方式就可以统一了。因此VILT仅通过一个Transformer的结构就可以进行建模,它使用了一个预训练的ViT来初始化这个Transformer。

(3)预训练任务(损失函数)

    VILT在预训练阶段主要使用了两种较典型的优化目标,分别为Image Text Matching(ITM)和Masked Language Modeling(MLM)。

Image Text Matching(ITM)

    图像-文本匹配(ITM)可以预测一对图像和文本是正例(匹配)还是负例(不匹配)。使用多模态编码器输出嵌入的[CLS] token作为图像-文本对的联合表示,并附加一个全连接(FC)层,最后使用Softmax来预测一个二分类概率


    其中,y是一个表示ground truth标签的二维one-hot向量。

    ITM在使用时候的关键在于如何构造正负例样本,ITM 本质上是二分类,正样本就是匹配的图文对,负样本需要在训练的过程中进行采样,对每个图像一般在数据集中随机采样一个不匹配的文本作为负样本;对每个文本在数据集中随机采样1个不匹配的图像作为负样本。

Masked Language Modeling(MLM)

    MLM是训练NLP中Bert模型所使用的预训练任务,通常屏蔽(或随机替换)给定句子中特定百分比(15%)的单词,模型期望基于该句子中的其他单词预测这些被屏蔽的单词。这样的训练方案使这个模型在本质上是双向的,因为掩蔽词的表示是根据出现的词来学习的,不管是左还是右。你也可以把它想象成一个填空式的问题陈述。


    在单塔多模态中的MLM与Bert中的稍有不同,主要区别还是在输入信息,VILT中的MLM在预测被MASK的单词时,除了依赖上下文还可以依赖视觉模态的信息。

    另外,VILT在使用MLM时还结合了whole word masking技巧。所谓whole word masking是将连续的子词tokens进行mask的技巧,因为大部分的分词算法可能会将一个单词分为多个文本token,因此普通的MLM不能做到基于单词粒度的MASK,只能基于文本token这个粒度进行MASK。

2、VILT适合的下游任务
    VILT这种单塔的多模态结构由于在预训练的时候进行了充分的模态交互(模态融合),因此适合下游诸如VQA(视觉问答),NLVR(自然语言视觉推理 )等等。

(1)VILT进行VQA

    VQA任务就是根据一张图片来提问,希望模型能正确回答对应的问题。比如下面有一张图片,图片里有两只猫,问题Question是“How many cats are there?”,希望模型给出的答案Answer是“2”


(2)VILT进行NLVR

    VILT还可以用来进行NLVR任务,NLVR判断两张图片和一条文本的语义是否匹配,比如准备两张图片,对应的文本内容是text,如果图片和文本内容匹配则模型输出True,否则输出False。


3、小结
     VILT作为多模态单塔(单流)结构中的代表工作,虽然其在检索上的效率偏低,但是其在下游许多需要强交互的多模态理解任务上表现出了比双塔结构更强劲的性能!

ViLT (Visual and Language Transformer) 是一种视觉和语言模型,它将图像和文本表示结合在一起,用于多种视觉问答任务。微调(fine-tuning)ViLT通常涉及以下几个步骤[^4]: 1. **预训练模型加载**[^4]: 使用ViLT的预训练权重,这些权重是在大规模图像和文本数据集上训练得到的,如Conceptual Captions。 2. **任务特定的数据准备**[^4]: 对于VQA任务,需要一个包含问题和对应图像对的数据集,如VQA v2.0。图像可能需要经过适当的预处理,如缩放和归一化。 3. **输入编码**[^4]: 将图像通过视觉编码器(如CLIP或ResNet)转换成嵌入向量,同时将问题作为文本序列通过Transformer编码器处理。 4. **联合表示**[^4]: 结合视觉和语言嵌入,通常是通过逐层加权融合或者直接拼接,生成跨模态的表示。 5. **任务层添加**[^4]: 在模型顶部添加一个或多个全连接层,针对VQA任务可能是分类层,用于预测答案。 6. **微调**[^4]: 用预先准备好的VQA数据集训练整个模型,目标是调整所有参数以优化VQA任务的性能。 7. **评估与调整**[^4]: 在验证集上评估模型性能,可能需要调整超参数或进行更多迭代来提升性能。 请注意,实际微调过程会涉及到具体的代码实现,通常使用深度学习框架如PyTorch[^5]: ```python # 示例代码片段 model = ViLT(pretrained=True) optimizer = torch.optim.Adam(model.parameters(), lr=1e-5) for epoch in range(num_epochs): model.train() # ...执行训练步骤... model.eval() # ...执行验证和评估... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值