草庐IT

李沐多模态串讲视频总结 ALBEF VLMo BLIP CoCa BEITv3 模型简要介绍

bringlu 2023-03-28 原文

开场

  • 多模态串讲的上篇是比较传统的多模态任务

  • 多模态最后的模态交互很重要

  • 传统的缺点是都用了预训练的目标检测器,训练和部署都很困难。

  • ViLT 把预训练的目标检测器换成了一层的 Patch Embedding。

    • 因此容易比不过 c 类的方法
  • ViLT 训练很慢

  • 认为未来是 c 类的模型结构

  • Loss:

    • b 类(CLIP)仅用对比学习的 loss(Image Text Contrastive),比较简单。
    • c 类由于有目标检测,因此提了 Word Patch Alignment
    • ViLT 中发现 WPA Loss 非常慢
    • MLM 的 Loss
    • Image Text Matching 效果也很好
    • 认为目标函数应该是 ITC + ITM + MLM 的合体

回顾 CLIP

  • 双塔模型
  • 让已有的(图像,文本)对在空间上更近,不是一个对的空间上更远。
  • 最后仅做了点乘。
  • 缺陷:
    • VQA 等任务不太好

ALBEF

论文:Align before Fuse: Vision and Language Representation Learning with Momentum Distillation

亮点:

  • 图像部分 12 层 transformer encoder
  • 文本部分前 6 层文本编码器,后 6 层做多模态融合的编码器。
  • 没有目标检测模型
  • 使用了 Image Text Contrastive loss
  • 自训练,用伪标签标上网上爬下来的有噪数据。 伪标签(pseudo-target)由一个 momentum model 提供。
    • 原因在于搜索引擎爬下来的(图像,文本)对,非常高噪。文本被称作 Alt text,并没有很好地描述图像,而是提供了搜索引擎需要便于检索的关键词。
  • 互信息最大化的方式:文章里所提到的目标函数是为了同一个图像文本对提供不同的视角。变相的数据增强。
  • 速度很快:4e6 的数据 8 卡机训练 3、4 天可以跑出来(这也很久了)

作者来自 SalesForce,有一系列多模态工作,很厉害。

文章提到:由于大多数方法使用 transformer 的多模态编码器来同时编码视觉和文本特征,由于目标检测器是提前训练好的,因此视觉和文本特征并不是对齐的。由于没经过端到端的训练,因此可能这两个特征有很远的距离。

模型

image Embedding 部分

  • 使用了标准的 ViT 模型
  • 预训练参数用了 DEiT。

文本部分

  • 只用前 6 层做文本编码

Loss 函数

  • ITC loss
    • 文本和图片的 [CLS] token 经过 encoder 后,被当作文本的全局特征,然后丢尽 ITC loss 里作比较。
      • 所以这里有个问题:图片是怎么加上 [CLS] token 的?
        • ViT 中将图片分成若干个 patch,然后把 patch 作为 token,然后直接加上 [CLS] token 后,再进行 embedding 等操作。
    • 这里是将文本转化成的图片与 ground-truth 做交叉熵,反之亦然。
    • 但是这样就没办法得到中间状态了?
  • ITM Loss
    • 给定图片和文本,然后经过 ALBEF 的模型后,得到特征,再过一个FC层,以此做二分类,判断是否为一对。
    • 但是判断正样本有点难,但是判断负样本很容易,因此准确度会上升得很快。
    • 为解决上面的问题,这里通过某种方式选择最接近正样本的负样本。
      • hard negatives :ITM 利用 ITC 把同一 batch 中图片和所有文本都算一遍余弦相似度。 利用最相似的做负样本。
  • Masked Language Modeling
    • mask 掉一些文本,然后将 mask 过后的句子和图片一起通过 ALBEF 模型,最后把之前完整的句子预测出来。
    • 输入与前两个 Loss 不同是 \((I, T_{mask})\),说明模型用了两次 forward() 函数。

然后三者简单加和即可。

Momentum Distillation(动量蒸馏)

  • 原因
    • noisy web data
      • ITC:可能文本已经描述得很好了,但是由于 data noisy,导致了其为负样本。
      • MLM:有时候可能比填 ground-truth 更好的文本。
  • self-training
  • 具体模型构建:在已有模型之上做 exponential-moving-average
    • 目的:跟 one-hot 尽可能接近之外,让它跟动量模型出来的 pseudo-targets 尽可能 match。
  • 对原 Loss 的改进,都对两者加入了动量蒸馏后的向量:
    • ITC:见式 6.
    • MLM:式 7.

实验

预训练

四个数据集:

  1. Conceptual Captions
  2. SBU Captions
  3. COCO:图片对多文本
  4. Visual Genome:图片对多文本

第五个数据集更 noisy,但是数量也更大, 对性能也有提升。

下游任务

  • Image-Text Retrieval
  • Visual Entailment
  • VQA
  • Visual Reasoning
  • Visual Grounding

消融实验

  • 去掉 ITC 掉的多 。
  • hard negative 其二。
  • Momentum Distillation 提升反而没有那么大,但是是很有趣的研究方向。

VLMo

题目:VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts

微软的组发的

亮点:

  • 模型结构上的改进 Mixture-of-Modality-Experts
  • 训练方式改进:分阶段模型预训练

作者认为前人缺点

  • CLIP、ALIGN:
    • 双塔结构(比较大的文本模型和图片模型),最后只做了一个余弦相似度,余弦过于简单。
  • 单塔结构(即有一个比较大的模态融合模型)
    • 分类任务上 superior performance
    • 检索任务数据集大的时候,推理时间会非常慢

因此作者融合前两者。简单地说,自注意力中所有的模态都是共享的,但是在 FC 层中,每个模态会对应自己不同的 Expert。训练时,哪个模态的数据来了就训练对应模态的 Expert。

训练 Loss 函数同样是 ITC、ITM、MLM。

多模态数据集可能不够,因此采用了单模态的其他数据,分阶段训练。

  • 把 vision expert 在 vision 数据集上训练
  • 把 language expert 在语言数据集上训练
  • 再在多模态数据集上训练

模型

模型亮点

  • MoME Transformer
    • 前面的多头注意力层共享参数
    • Switching Modality Expert:每个模态一个 FFN 层,不共享参数
  • 灵活
  • 在不同的下游任务上可以采用不同的结构以及相同的参数

Loss

  • ITC
  • ITM
  • MLM

实验

训练过程

  • 自注意力在视觉上训练了,然后会在文本部分冻住。
    • 反过来反而没那么有效。
  • 最后一步全部解冻

结果

数据集:

VQA、NLVR2

简要结果

比 ALBEF 全线更强

一些未来的工作已被验证

  1. 更大模型 —— BeiTv3
  2. vision-language generation ——VL-BeiT
  3. 单模态可以帮助多模态,多模态也可以帮助单模态——BeiTv3
  4. 更多模态,如视频等——MetaLM

BLIP

论文:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding Generation

基于 Transformer Encoder Decoder 的工作

作者来自 Salesforce

亮点:

  • Bootstrap:从数据集角度出发的
    • 先用嘈杂数据训练模型,再用比较干净的数据训练模型
  • Unified:
    • 统一了图像-语言的理解与生成任务

引言

  • 模型:以前的模型一般是 encoder 或者 encoder-decoder
    • 但是 only-encoder 模型没法应用到生成任务中
    • encoder-docoder 模型,由于没有统一框架,也不能做 VL retrieval 的任务
  • 数据:
    • 以前的模型都是在大规模的 noisy 数据训练
    • 因此本文要更好地 clean 数据
      • Captioner:利用 Captioner 生成图片相应文本
      • Filter:利用 Filter 筛掉不匹配的 VL 对
  • 因此结合了 ALBEF 和 VLMo,做出BLIP

方法

模型

  • 图片部分
    • 标准 ViT
  • 剩下部分有三个模型,分别算三个不同的目标函数
    • 第一个模型:Text Encoder 做分类任务
      • 得到文本特征与图片特征做 ITC
    • 第二个模型:Image-grounded Text encoder
      • 多模态编码器
      • 借助图像信息
      • ITM Loss
    • 第三个模型 Image-grounded Text decoder
      • 用于做生成任务
      • 不能看到完整的句子
      • 类似GPT,从前面推测后面的句子
      • 第一层是 Causal Self-att,因果关系的自注意力
      • LM Loss
  • 共享参数
    • 同样颜色代表同样的参数
  • 训练很费时间,原因要做四个 forward()

Captioner 和 Filter

可以认为爬下来的数据有很大概率不匹配(如 CC12M),但是手工标注的数据很可能匹配(如COCO)

  • Filter
    • 利用 ITC&ITM 的模型在 COCO 上 finetune。然后利用该模型筛选
  • Captioner
    • BLIP 性能很强,于是生成的文本有时候比原始文本都好。
    • 利用 LM 后的模型做微调。
  • 有了这两个模型后,有了相当大的提升

结果

  • 常识性结论:
    • 数据集更高,有所提升
    • 模型变大,有所提升
  • Captioner & FIlter:
  • 用了哪个都会有提升。
  • 用了 Captioner 提升更加显著
  • 而且完全可以利用这两个去训练其他模型

使用例

  1. 有位同学想要利用 Stable Diffusion 做一个生成宝可梦风格的模型,得到了宝可梦的图片但是没有描述。
    • 利用 BLIP 生成描述。
  2. LAION COCO 数据集
    • 用一个 BLIP 和 2 个 CLIP 模型不停做 Caption & filter 的过程
      • 用 BLIP 生成 40 个描述
      • 再利用一个 CLIP 排序,选最好的 5 个描述
      • 再用另一个 CLIP(最大的模型) 得到最好的一个。
    • 最后得到了 600 Million 数据集

CoCa

论文标题:CoCa: Contrastive Captioners are Image-Text Foundation Models

作者来自 google

亮点:

  • 两个 loss
    • contrastive loss
    • caption loss
  • 模型更大
  • 多模态&单模态都取得了非常强劲的效果

方法

模型

  • CoCa 是 ALBEF 的后续工作,一些过程继承了 ALBEF 的过程,详细过程如下:
    • 左边是 Image Encoder,右边是 Text Decoder
    • 图像的 [CLS] token 和文本的 [CLS] token 做一个 contrastive loss,然后剩下的图像 token 做一下 Attention pooling,然后再传到 多模态的 Text Decoder 里做 Cross-Attention ,这样就把 V&L 的特征融合到一起了。
    • 最后用了 Captioning Loss
  • 与 ALBEF 的区别
    • 图像的 attention pooling 是可学的,能针对不同任务学到更好特征。
    • 文本这一端,不论是单文本还是多模态用的都是 Decoder。
      • 采用 Captioning Loss 与 Decoder 结构目的是加快运算速度。
  • 模型参数 2.1B
  • 数据集:
    • GFT 3B 转化成了多模态数据集
    • 还有一个之前训练 Align 的数据集

结果

(我所见过最离谱的图)

BEITv3

论文题目:Image as a Foreign Language: BEIT Pretraining for All Vision and Vision-Language Tasks

作者来自微软

亮点:

  • 模型要统一
  • 训练目标函数要统一
  • 数据集大小要统一
  • 独特的命名
    • images -> Imglish
    • texts -> English
    • image-text pairs -> parallel sentence
  • 目标函数 Masked Modeling loss
  • 模型为之前 VLMo 提出的 MoME,然后这篇论文重新起了名字 Multi-way Transformers
    • 由于模型结构灵活,因此推理时可以拆成许多部分做许多下游任务。
  • 预训练数据集都是公开数据集
  • 引言写的很好(如果要研究多模态要去看一下)

这篇论文证明了:

  • 不是目标函数越多越好,要看目标函数是否有互补的特性
  • 数据也不一定越多越好,质量也很关键

模型

预训练

  • VLMo

    微调

结果

总结

有关李沐多模态串讲视频总结 ALBEF VLMo BLIP CoCa BEITv3 模型简要介绍的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  3. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  4. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  5. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  6. ruby - 如何更改此正则表达式以从未指定 v 参数的 Youtube URL 获取 Youtube 视频 ID? - 2

    目前我正在使用这个正则表达式从YoutubeURL中提取视频ID:url.match(/v=([^&]*)/)[1]我怎样才能改变它,以便它也可以从这个没有v参数的YoutubeURL获取视频ID:http://www.youtube.com/user/SHAYTARDS#p/u/9/Xc81AajGUMU感谢阅读。编辑:我正在使用ruby​​1.8.7 最佳答案 对于Ruby1.8.7,这就可以了。url_1='http://www.youtube.com/watch?v=8WVTOUh53QY&feature=feedf'url

  7. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  8. H2数据库配置及相关使用方式一站式介绍(极为详细并整理官方文档) - 2

    目录H2数据库入门以及实际开发时的使用1.H2数据库的初识1.1H2数据库介绍1.2为什么要使用嵌入式数据库?1.3嵌入式数据库对比1.3.1性能对比1.4技术选型思考2.H2数据库实战2.1H2数据库下载搭建以及部署2.1.1H2数据库的下载2.1.2数据库启动2.1.2.1windows系统可以在bin目录下执行h2.bat2.1.2.2同理可以通过cmd直接使用命令进行启动:2.1.2.3启动后控制台页面:2.1.3spring整合H2数据库2.1.3.1引入依赖文件2.1.4数据库通过file模式实际保存数据的位置2.2H2数据库操作2.2.1Mysql兼容模式2.2.2Mysql模式

  9. ruby-on-rails - Rabl 多模合集 - 2

    我正在使用RABL输出Sunspot/SOLR结果集,搜索结果对象由多种模型类型组成。目前在rablView中我有:objectfalsechild@search.results=>:resultsdoattribute:id,:resource,:upccodeattribute:display_description=>:descriptioncode:start_datedo|r|r.utc_start_date.to_iendcode:end_datedo|r|r.utc_end_date.to_iendendchild@search=>:statsdoattribute:to

  10. 【动态规划】背包问题(详细总结,很全) - 2

    【动态规划】一、背包问题1.背包问题总结1)动规四部曲:2)递推公式总结:3)遍历顺序总结:2.01背包1)二维dp数组代码实现2)一维dp数组代码实现3.完全背包代码实现4.多重背包代码实现一、背包问题1.背包问题总结暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!背包问题是动态规划(DynamicPlanning)里的非常重要的一部分,关于几种常见的背包,其关系如下:在解决背包问题的时候,我们通常都是按照如下五部来逐步分析,把这五部都搞透了,算是对动规来理解深入了。1)动规四部曲:(1)确定dp数组及其下标的含义(2)确定递推公式(3)dp数组的初始化(4)确定遍历顺

随机推荐