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

多模态串讲的上篇是比较传统的多模态任务
多模态最后的模态交互很重要
传统的缺点是都用了预训练的目标检测器,训练和部署都很困难。
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 等操作。
- 所以这里有个问题:图片是怎么加上 [CLS] token 的?
- 这里是将文本转化成的图片与 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 更好的文本。
- noisy web data
- self-training
- 具体模型构建:在已有模型之上做 exponential-moving-average
- 目的:跟 one-hot 尽可能接近之外,让它跟动量模型出来的 pseudo-targets 尽可能 match。
- 对原 Loss 的改进,都对两者加入了动量蒸馏后的向量:
- ITC:见式 6.
- MLM:式 7.
实验
预训练
四个数据集:
- Conceptual Captions
- SBU Captions
- COCO:图片对多文本
- 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 全线更强
一些未来的工作已被验证
- 更大模型 —— BeiTv3
- vision-language generation ——VL-BeiT
- 单模态可以帮助多模态,多模态也可以帮助单模态——BeiTv3
- 更多模态,如视频等——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
- 第一个模型:Text Encoder 做分类任务
- 共享参数
- 同样颜色代表同样的参数
- 训练很费时间,原因要做四个
forward()
Captioner 和 Filter

可以认为爬下来的数据有很大概率不匹配(如 CC12M),但是手工标注的数据很可能匹配(如COCO)
- Filter
- 利用 ITC&ITM 的模型在 COCO 上 finetune。然后利用该模型筛选
- Captioner
- BLIP 性能很强,于是生成的文本有时候比原始文本都好。
- 利用 LM 后的模型做微调。
- 有了这两个模型后,有了相当大的提升
结果
- 常识性结论:
- 数据集更高,有所提升
- 模型变大,有所提升
- Captioner & FIlter:
- 用了哪个都会有提升。
- 用了 Captioner 提升更加显著
- 而且完全可以利用这两个去训练其他模型
使用例
- 有位同学想要利用 Stable Diffusion 做一个生成宝可梦风格的模型,得到了宝可梦的图片但是没有描述。
- 利用 BLIP 生成描述。
- LAION COCO 数据集
- 用一个 BLIP 和 2 个 CLIP 模型不停做 Caption & filter 的过程
- 用 BLIP 生成 40 个描述
- 再利用一个 CLIP 排序,选最好的 5 个描述
- 再用另一个 CLIP(最大的模型) 得到最好的一个。
- 最后得到了 600 Million 数据集
- 用一个 BLIP 和 2 个 CLIP 模型不停做 Caption & filter 的过程
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 模型简要介绍的更多相关文章
- 视频+图文串讲:MySQL 行锁、间隙锁、Next-Key-Lock、以及实现记录存在的话就更新,如果记录不存在的话就插入如何保证并发安全
导读 Hi,大家好!我是白日梦!本文是MySQL专题的第 27 篇. 下文还是白日梦以自导自演的方式,围绕"如何实现记录存在的话就更新,如果记录不存在的话就插入."展开本话题.看看 ...
- CLIP改进工作串讲(上)学习笔记
看了跟李沐学AI系列朱毅老师讲的CLIP改进工作串讲,这里记录一下. 1.分割 分割的任务其实跟分类很像,其实就是把图片上的分类变成像素级别上的分类,但是往往图片上能用的技术都能用到像素级别上来.所以 ...
- 0607pm克隆&引用类&加载类&面向对象串讲&函数重载
克隆class Ren{ public $name; public $sex; function __construct($n,$s) { $this->name=$n; $this->s ...
- 工厂模式(整理自李建忠<C++设计模式>视频)
整理自李建忠<C++设计模式>视频 一.导入:"对象创建"模式和工厂模式 工厂模式只是该模式下的一种. 二.举例说明 有这样一个场景:需要在MainForm中设计一个按 ...
- rsync服务精讲 -- 视频
rsync服务 开源数据同步工具rsync视频(老男孩分享) 浏览网址 01-rsync基础介绍 http://oldboy.blog.51cto.com/2561410/1216550 11-rsy ...
- 集成学习-Boosting 模型深度串讲
首先强调一下,这篇文章适合有很好的基础的人 梯度下降 这里不系统讲,只介绍相关的点,便于理解后文 先放一个很早以前写的 梯度下降 实现 logistic regression 的代码 def tidu ...
- CLIP 改进工作串讲(下)学习笔记
1.图像生成 1.1CLIPasso(semantically-aware object sketching) 将物体的照片变成简笔画的形式,希望即使有最少的线条,也能识别出来物体. 问题定义,在纸上 ...
- getElementById返回的是什么?串讲HTML DOM
1. getElementById()返回的是什么? 这个函数使用的最普遍,但是你有没有深入探究下,这个函数究竟返回的是什么么?我们来一起看看. var mydivEle = document.get ...
- .NET 基础串讲
C#基础 .NET介绍 计算机发展史 第一代语言:机器语言 0101 第二代语言:汇编语言, 用一些简洁的英文字母.符号串来替代一个特定指令的二进制串 第三代语言:接近于数学语言或人的自然语言,同时 ...
- Java与编码问题串讲之二–如何理解java采用Unicode编码
Java开发者必须牢记:在Java中字符仅以一种形式存在,那就是Unicode(不选择任何特定的编码,直接使用他们在字符集中的编号,这是统一的唯一方法).由于java采用unicode编码,char ...
随机推荐
- Jetpack Compose(6)——动画
目录 一.低级别动画 API 1.1 animate*AsState 1.2 Animatable 1.3 Transition 动画 1.3.1 updateTransition 1.3.2 cre ...
- 012_DRC检查与处理
Check entire design:DRC检查整个原理图: Check Selection:DRC检查选择的部分电路: Use occurrences:选择所有事件进行检查: Use instan ...
- Linux grep根据关键字匹配前后几行
在Linux环境下,查看文件内容时,很多时候需要查看指定关键字的前后几行,如查看日志文件时,如果日志文件太大,想直接在Linux 终端中查看,可以grep 'partten' filename 进行过 ...
- 几种常见Ruby on Rails内置方法介绍
Ruby on Rails是一个功能强大的WEB开发框架,在这里我们将会学到一些经常用到的Ruby on Rails内置方法,帮助大家熟练掌握其应用技巧. Ruby on Rails自动生成文档技巧大 ...
- 网络安全—PGP8.1软件应用
文章目录 安装PGP8 了解 工作原理 PGP使用 准备工作 加密与解密 加密者视角(发送方) 接收者视角(接收方) 签名 签名方(发送方) 验证签名方(接收方) 补充 加密签名一段文字 签名后的格式 ...
- Java面试题:Spring框架除了IOC和AOP,还有哪些好玩的设计模式?
Spring是一个基于Java的企业级应用程序开发框架,它使用了多种设计模式来实现其各种特性和功能.本文将介绍一些在Spring中使用的常见设计模式以及相应的代码示例和说明. 单例模式 单例模式是Sp ...
- Android 13 - Media框架(21)- ACodec(三)
关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们一起来了解 ACodec 是如何通过 configureCodec 方法配置 OMX 组件的,因为 configureCodec 代码比较 ...
- 7款优秀的AI搜索引擎工具推荐
AI搜索引擎不仅能够理解复杂的查询语句,还能够通过学习用户的搜索习惯和偏好,提供更加个性化的搜索结果.本篇文章将介绍7款在这一领域表现出色的AI搜索引擎工具,它们各有特色,但都致力于为用户提供更加智能 ...
- 高精度离线免费 的C#文字识别PaddleOCR库
随便打开一个Microsoft Visual Studio,新建一个WinForms项目,从下面列表中随便选择一个NET框架.目标平台要设置成X64,该OCR仅支持64位. net35;net40;n ...
- CSS3 超实用属性:pointer-events (可穿透图层的鼠标事件)
1.是什么 pointer-events 直译为指针事件,该属性指定在什么情况下某个DOM可以成为鼠标事件的 target. 简而言之,就是允许/禁止DOM的鼠标事件(click事件.hover事件. ...