【论文精读】多模态系列:ALBEF、VLMo、BLIP、CoCa、BeiTv3

系列文章目录

【论文精读】CLIP:Learning Transferable Visual Models From Natural Language Supervision 从自然语言监督中学习可迁移的视觉模型
论文精读】CLIP 改进工作(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso、CLIP4clip、ActionCLIP)


只用transformer的encoder的一些方法:CLIP、ViLT、ALBEF、VLMo
transformer的encoder和decoder一起的一些方法:BLIP、CoCa、BEIT v3、PaLI

一、ALBEF:基于动量蒸馏的视觉语言表示学习

(一)主要贡献

  • 引入了一种对比损失,通过跨模态注意力在融合之前将图像和文本表示对齐(Align before Fuse)
  • 类似ViLT模型采用vision transformer对图像特征进行处理,因此预训练过程也不需要目标检测器,进而不需要边界框注释或高分辨率图像
  • 提出动量蒸馏(从动量模型产生的伪目标中学习的自训练方法),从而解决noisy web data的问题

(二)模型架构

图像处理:
给定任何一张图片,按照vision transformer的方法,打成patch,然后通过patch embedding layer,送进vision transformer,图像这边对应的编码器就是一个标准的12层的vision transformer的base模型

文本处理:
将12层的bert model拆分成了两个部分,前6层用于做文本编码器,后6层用于做多模态融合的编码器。

momentum model: 不仅用于完成momentum distillation,而且能够生成更多的negatives
在这里插入图片描述

(三)损失函数

损失函数:ITC Loss、ITM Loss、MLM Loss

  • ITC Loss: Image-text 对比学习损失
    在这里插入图片描述

  • ITM Loss: Image-Text 匹配损失
    在这里插入图片描述

  • MLM Loss:遮蔽语言模型交叉熵损失
    在这里插入图片描述

最终的损失函数为:
在这里插入图片描述

(四)动量蒸馏

提出动量蒸馏的动机:

  • 用于预训练的图像文本对主要是从网络上收集的,并且它们往往是有噪声的。正对通常是弱相关的:文本可能包含与图像无关的单词,或者图像可能包含文本中未描述的实体。
  • 对于 ITC 学习,图像的否定文本也可能与图像的内容匹配。
  • 对于 MLM,可能存在与同样好(或更好)描述图像的注释不同的其他词。
  • 然而,ITC 和 MLM 的独热标签会惩罚所有负面预测,无论其正确性如何。

动量蒸馏的思想: 从动量模型生成的伪目标中学习(自训练模式)

  • 这里的伪标签其实就是一个softmax score,它不再是一个one hot label了
  • 动量模型的构建其实就是在已有的模型之上,去做指数移动平均(EMA)
  • 训练的目的不仅仅是使得预测结果与ground truth的one hot label尽可能的接近,而且能够与动量模型生成的伪标签尽可能的匹配。

在这里插入图片描述
在这里插入图片描述

二、VLMo:混合模态专家的统一视觉语言预训练

(一)主要贡献

  • 模型结构上的改进:Mixture of experts,其实就是自注意力中所有的模态都是共享的,但是在feed forward FC层,每个模态会对应自己不同的expert。
  • 训练方式上的改进:考虑到视觉领域和nlp领域都有自己各自的大规模数据集,而多模态领域当时还缺乏较大的数据集,作者提出了分阶段的模型预训练方法,利用视觉数据集训练好vision expert,然后把language expert在language数据集上训练好,然后再在多模态的数据集上做pre-training

(二)模型架构

VLMo实际上也是一个transformer encoder的结构,但是在每个transformer block里做了一些改动:

  • 一个标准的transformer block:一个Layer Norm+一个MSA(multi-head self-attention)+一个Layer Norm+一个FFN(feed-forward network)+一个residual
  • 改动之后的transformer block的feed-forward network不是一个,而是根据不同的输入不同的模态有对应的vision FFN、language FFN、vision language FFN

VLMo的损失函数也是ITC、ITM和MLM
在这里插入图片描述

(三)训练方式(分阶段的训练策略)

使用纯图像和纯文本语料库进行阶段性预训练。

  • vision pre-training:在大规模纯图像数据上预训练视觉专家(V-FFN)和自注意力模块,如 BEIT中所示。
  • language pre-training:冻结视觉专家和自注意力模块的参数,并通过对大量纯文本数据进行掩码语言建模来训练语言专家(L-FFN)。
  • vision-language pre-training:通过视觉语言预训练来训练整个模型。

在这里插入图片描述

三、BLIP:用于统一视觉语言理解和生成的引导语言图像预训练

(一)主要贡献

  • Bootstrapping:如果你有一个从网页上爬取下来的很嘈杂的数据集,先用它去训练一个模型,然后通过一些方法得到一些更干净的数据,然后用这些更干净的数据能不能训练得到更好的模型
  • unified:统一了视觉语言理解和生成的任务

(二)模型架构

BLIP模型主要包括了四个部分:

  • 图像方面:一个完整的ViT模型
  • 文本方面:三个模型,分别用于计算三个目标函数
    • 第一个文本模型:根据输入的文本去做understanding的分类任务,因此当得到文本特征之后,与视觉特征做ITC Loss
    • 第二个文本模型:是一个多模态编码器(image-grounded text encoder),借助了图像的信息,然后去完成多模态的任务,对应ITM Loss
    • 第三个文本模型:(image-grounded text decoder),第一层采用的是causal self-attention(因果关系的自注意力),从而完成生成任务,目标函数基于GPT系列的language modelling,给定一些词去预测剩下的词
      在这里插入图片描述

三个文本模型对应的token不一样:cls token、encode token、decode token

(三)Bootstrapping

采用标题和过滤策略(Captioning and Filtering, CapFilt)来提高文本语料库的质量,包含了两个模块:一个是给定网络图像生成字幕的Captioner,另一个是去除噪声图像-文本对的Filter。Captioner和Filter都是从同一个预训练的MED模型初始化的,在COCO数据集上单独进行微调。

  • Captioner以LM为目标进行微调,对给定的图像进行文本解码生成caption;
  • Filter以ITC和ITM的目标进行微调,以学习文本是否与图像匹配,该Filter去除原始网络文本和合成文本中的噪音文本,如果ITM头预测一个文本与图像不匹配,则该文本被认为是噪音。

将最终获得的新的干净的数据集拿来再次训练BLIP,获得的模型效果提升非常显著

在这里插入图片描述

四、CoCa:对比字幕是图像文本基础模型

CoCa模型结构与ALBEF模型很像,因为想做caption的文本生成,因此文本端使用的decoder

CoCa模型的两个loss:

  • contrastive loss:就是ITC loss
  • captioning loss:其实就是BLIP里用的language modeling loss,也就是GPT用的loss

在这里插入图片描述

五、BeiTv3:把图像作为一种语言

通过对海量数据进行大规模预训练,可以轻松地将模型转移到各种下游任务中。有吸引力的是,我们可以预训练一个处理多种模式的通用基础模型。以下三个方面推进了视觉-语言预训练的融合趋势:

  • transformer适用于各种modality,从语言领域渗透到了视觉和多模态等领域
    • dual-encoder:双编码器架构(CLIP),适合做高效检索(retrieval)任务
    • encoder-decoder:编码器-解码器架构(BLIP,CoCa),适合做生成任务
    • fusion-encoder:融合编码器架构(ALBEF,VLMo),适合做图像文本编码
  • 预训练目标函数:masked data modeling已经成功的应用到了各类模态当中了
    • 当前的视觉语言基础模型通常会同时处理其他预训练目标(例如图像文本匹配),导致扩展不友好且效率低下。
    • 相比之下,文章提出的BeiTv3仅使用一项预训练任务,即“mask-then-predict”来训练通用的多模态基础模型。通过将图像视为外语(即 Imglish),以相同的方式处理文本和图像,而没有基本的建模差异。因此,图像-文本对被用作“平行句子”,以学习模态之间的对齐。
  • 扩大模型规模和数据规模

在这里插入图片描述
BEIT3使用了多路Transformer来作为图像,文本和多模态数据的统一架构,之前大部分的工作都是各个部分有独立的子模型。这个多路Transformer其实也是微软之前的工作VLMo,多路Transformer的核心是模型的MHSA模块是共享的,而设置不同的FFN来分别处理图像(V-FFN),文本(L-FFN)和多模态数据(VL-FFN)。

在这里插入图片描述

这种设计让不同的数据共享了模型架构,而且还可以灵活地应用在各种下游任务中:比如对纯视觉任务,只需要用MHSA+V-FFN部分就好,而纯文本任务只用MHSA+L-FFN,而对于多模态任务和灵活地组合不同的FFN。

在这里插入图片描述

相关推荐

  1. 相关论文笔记

    2024-04-29 12:08:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 12:08:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 12:08:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 12:08:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 12:08:03       18 阅读

热门阅读

  1. C++——数据类型笔记

    2024-04-29 12:08:03       8 阅读
  2. python常用库函数

    2024-04-29 12:08:03       10 阅读
  3. HTTP状态码详细解读

    2024-04-29 12:08:03       11 阅读
  4. C语言真题20套

    2024-04-29 12:08:03       9 阅读
  5. Python医院挂号脚本

    2024-04-29 12:08:03       12 阅读
  6. 蓝桥杯每日一题:空调(差分)

    2024-04-29 12:08:03       12 阅读
  7. 学习 Rust 的第五天:了解程序的基本控制流程

    2024-04-29 12:08:03       8 阅读
  8. 冷热数据分离方案

    2024-04-29 12:08:03       9 阅读
  9. typedef,#define,asserr,exit函数,free函数

    2024-04-29 12:08:03       10 阅读
  10. 探索Vue 3 reactive()原理及其实现步骤

    2024-04-29 12:08:03       9 阅读
  11. vue 的 keep-alive 详解

    2024-04-29 12:08:03       11 阅读
  12. 算法基础一

    2024-04-29 12:08:03       10 阅读
  13. wps用js宏给文档增加用户名密码验证

    2024-04-29 12:08:03       11 阅读
  14. 每天学习一个Linux命令之ncdu

    2024-04-29 12:08:03       11 阅读