多模态方法总结

news2024/10/9 6:49:47

多模态方法总结

架构分为Transformer Encoder的方法和基于Transformer Encoder和Decoder的方法

Transfomer Encoder方法

在这里插入图片描述

这张图来源于VILT,基本概括了多模态领域的模型架构。

图a是VSE或VSE++的架构,文本端进行一个轻量的word embedding,视觉端经过一个目标检测器提取区域性特征,最后多模态进行一个少量的交互。

图b是CLIP的架构,典型的双塔模型,CLIP采用BERT提取文本特征,采用分类网络(ViT or ResNet)提取视觉特征,最后经过简单的点乘操作完成模态交互。

图c是ViLBERT,UNITER等模型的架构,从效果上来看,这一类的架构性能是最好的,从过去的方法总结来看,通过视觉端总是需要一个相对厚重的特征提取,而文本端只需简单的tokenize,最后,一个充分的多模态交互被认为是有效的。

图d是VILT模型的架构,ViLT考虑视觉端是否可以向文本一样,不要做过多的特征提取,进行做一个patch embedding即可。同时由于文本和图像都没有过多的特征处理,那么交互就变得及其重要,因此参考UNITER等模型,设计了厚重的模态交互。

特别的说,不同的架构设计都存在其各自的优势。例如一个轻量的模态交互的架构会比较有利于文本检索的任务,例如CLIP。因为在检索的时候只需要提取一次外部图像或文本的特征并做一个简单的点乘交互,而内部的数据特征我们可以提前提取出来保存。而一个厚重的模态交互的架构则比较有利于VQA任务,因为VQA任务需要模型对视觉、文本具有更深刻的理解,简单的模态交互通常无法很好的完成任务。

ALBEF

动机

ALBEF的贡献主要在两个地方,第一个是引入了ITC loss(Image-Text Contrastive)来进行align before fuse,并且引入了ITM loss(Image-Text Matching)和MLM loss(Masked Language Modeling)进行多任务训练。第二个是提出了momentum distillation的方式进行自训练学习。

ALBEF属于c类架构,尽管ALBEF和VILT一样认为视觉端不需要目标检测器,但是VILT是从推理时间考虑,而ALBEF则是认为目标检测器会导致文本和视觉特征的不对齐。因此作者依然使用了目标检测器提取特征,但是增加一个对齐操作,也就是本文的名字Align Before Fuse。同时,尽管遵循C类架构的设计,但ALBEF相对巧妙。ALBEF在视觉端采用12层的Transformer Encoder,使用ViT初始化,文本端和模态交互将BERT模型拆分各自采用6层的Transformer Encoder并且采用BERT模型进行初始化。这样就刚好达成了最优配比。

momentum distillation的动机来源于noise data。因为我们从网上爬下来的数据呢通常不是很匹配,就是说很多图像文本对中的文本并不能很好的描述图像中的内容。并且,有的时候模型生成的文本可能比GT的描述更加的匹配。基于这种情况呢,就比较适合基于自训练的方式进行模型训练。其实当前大数据、大模型的火爆之下一个很关键的点是高质量的数据支撑。而高质量的数据通常并不是天然的。我们可以发现有不少方法不约而同的采用了自训练的方式进行数据和模型的交互迭代,例如SAM模型的数据引擎,ALBEF的momentum distillation,blipv2的capfilter等等。

方法

在这里插入图片描述

在这里插入图片描述

momentum distillation的思路呢是说原本计算MLM和ITC loss的时候呢,如果本身图像文本对不是那么匹配的,而根据图像生成的文本实际是更匹配的,这样一味去惩罚生成的样本会影响模型的学习。因此我们保存一个momentum model。这个模型采用EMA(指数移动平均,sigma=0.995)的方式进行更新,这个模型更新会非常缓慢,**从而可以获得相对稳定的文本caption预测pseudo-targets。(这里的疑问在于这个caption是如何得到的,因为这里所有的模型都是encoder)**然后我们在计算ITC和MLM Loss的时候,就不单单只考虑之前基于gt的one-hot loss,同时也考虑基于pesudo-targets的soft loss。
p m i 2 t ( I ) = exp ⁡ ( s ( I , T m ) / τ ) ∑ m = 1 M exp ⁡ ( s ( I , T m ) / τ ) , p m t 2 i ( T ) = exp ⁡ ( s ( T , I m ) / τ ) ∑ m = 1 M exp ⁡ ( s ( T , I m ) / τ ) \begin{aligned}p_m^{\mathrm{i}2\mathrm{t}}(I)&=\frac{\exp(s(I,T_m)/\tau)}{\sum_{m=1}^M\exp(s(I,T_m)/\tau)},\quad p_m^{\mathrm{t}2\mathrm{i}}(T)=\frac{\exp(s(T,I_m)/\tau)}{\sum_{m=1}^M\exp(s(T,I_m)/\tau)}\end{aligned} pmi2t(I)=m=1Mexp(s(I,Tm)/τ)exp(s(I,Tm)/τ),pmt2i(T)=m=1Mexp(s(T,Im)/τ)exp(s(T,Im)/τ)

L itc = 1 2 E ( I , T ) ∼ D [ H ( y i 2 t ( I ) , p i 2 t ( I ) ) + H ( y t 2 i ( T ) , p t 2 i ( T ) ) ] \mathcal{L}_{\text{itc}} = \frac{1}{2} \mathbb{E}_{(I,T) \sim D} \left[ \mathcal{H}\left(\mathbf{y}^{i2t}(I), \mathbf{p}^{i2t}(I)\right) + \mathcal{H}\left(\mathbf{y}^{t2i}(T), \mathbf{p}^{t2i}(T)\right) \right] Litc=21E(I,T)D[H(yi2t(I),pi2t(I))+H(yt2i(T),pt2i(T))]

L m l m = E ( I , T ^ ) ∼ D H ( y m s k , p m s k ( I , T ^ ) ) \mathcal{L}_{\mathrm{mlm}}=\mathbb{E}_{(I,\hat{T})\thicksim D}\mathcal{H}(\boldsymbol{y}^\mathrm{msk},\boldsymbol{p}^\mathrm{msk}(I,\hat{T})) Lmlm=E(I,T^)DH(ymsk,pmsk(I,T^))

L i t c m o d = ( 1 − α ) L i t c + α 2 E ( I , T ) ∼ D [ K L ( q i 2 t ( I ) ∥ p i 2 t ( I ) ) + K L ( q t 2 i ( T ) ∥ p t 2 i ( T ) ) ] \mathcal{L}_{\mathrm{itc}}^{\mathrm{mod}}=(1-\alpha)\mathcal{L}_{\mathrm{itc}}+\frac{\alpha}{2}\mathbb{E}_{(I,T)\thicksim D}\left[\mathrm{KL}(\boldsymbol{q}^{\mathrm{i}2\mathrm{t}}(I)\parallel\boldsymbol{p}^{\mathrm{i}2\mathrm{t}}(I))+\mathrm{KL}(\boldsymbol{q}^{\mathrm{t}2\mathrm{i}}(T)\parallel\boldsymbol{p}^{\mathrm{t}2\mathrm{i}}(T))\right] Litcmod=(1α)Litc+2αE(I,T)D[KL(qi2t(I)pi2t(I))+KL(qt2i(T)pt2i(T))]

L m l m m o d = ( 1 − α ) L m l m + α E ( I , T ^ ) ∼ D [ K L ( q m s k ( I , T ^ ) ∥ p m s k ( I , T ^ ) ) ] \mathcal{L}_{mlm}^{mod} = (1 - \alpha) \mathcal{L}_{mlm} + \alpha \mathbb{E}_{(I, \hat{T}) \sim D} [ KL( q^{msk}(I, \hat{T}) \parallel p^{msk}(I, \hat{T}) ) ] Lmlmmod=(1α)Lmlm+αE(I,T^)D[KL(qmsk(I,T^)pmsk(I,T^))]

这是一个加权的多任务学习损失函数公式,结合了基础的 MLM(Masked Language Modeling)损失 L m l m \mathcal{L}_{mlm} Lmlm和带有 KL 散度的掩码相关部分 q m s k q^{msk} qmsk p m s k p^{msk} pmsk的损失。

这里使用的是KL散度,其实一般衡量两个概率分布的距离多用KL散度。原始的ITC Loss虽然是基于交叉熵的,但是也可以是KL散度,因为标签是ont-hot分布,交叉熵和KL散度此时是等价的。
H ( P , Q ) = H ( P ) + D K L ( P ∥ Q ) H(P, Q) = H(P) + D_{KL}(P \parallel Q) H(P,Q)=H(P)+DKL(PQ)

实验设置

训练集1:【Conceptual Captions(4M),SBU Captions(1M)】,【Coco(10万),Visual Genome(10万)】

训练集2:【Conceptual Captions(14M),Conceptual Captions(4M),SBU Captions(1M)】,【Coco(10万),Visual Genome(10万)】

下游任务

图像文本检索,topk召回率

VQA,分为开卷(分类),闭卷(生成)

visual entailment(视觉蕴含,三分类问题)

Natural Language for Visual Reasoning(视觉推理)

VLMO

动机

双塔架构的模型(如CLIP)适合图像文本检索任务,但对于复杂的VL任务则失效,而fusion encoder的模态交互在复杂任务上表现良好,但对于文本检索又显得过于笨重,因为模型需要把所有的数据都输入模型计算一遍才能检索出合适的数据。那么有没有一种办法可以结合两种架构的优势呢?MoME(混合模态专家模型)应运而生。

VLMO的第二个动机是数据规模问题。因为当时多模态领域还没有足够大的开源数据,但此时大家的一个共识是有更多的训练数据可能会取得更好的结果。因此VLMO提出了一种叫做stage-wise pretraining的解决思路。因为单个模态领域不管是视觉也好,还是NLP也好,都已经有各自的超大规模数据集,如果我们可以先各自训好两个单模态的模型后再在多模态数据集上训练,可能会有更好的效果。实验证明确实如此。

方法

在这里插入图片描述

在这里插入图片描述

这两个图已经把动机对应得方法解释得很清楚了。值得一提的是呢,这个作者团队还推出了BEIT的系列工作,BEIT,BEITv2都是视觉领域的工作,而BEITv3则继承了该团队在各个领域的探索,并应用在多模态领域。

Transformer Encoder-Decoder方法

BLIP

动机

BLIP这个工作跟ALBEF是同一个作者,所以继承并发展了ALBEF的一些思路,比如对noise data的处理,比如3个损失函数。另一方面呢,BLIP同时又借鉴了VLMO的专家混合的想法,不同的任务经过不同的模块。

BLIP的动机也很简单,分别从数据层面和模型层面来说

数据层面,作者延续了之前使用模型生成的caption作为pesudo targets的思路,但是此时还是会将原本noise的data考虑在损失内。既然noise data会影响模型的学习,那么我们能不能过滤掉这些这些noise的data呢?因此作者提出了CaptionFilter,Caption生成文本,Filter判别是否配对从而过滤掉不配对的数据。

模型层面,跟VLMO出发点有些类似。他是说现有多模态的模型一般就两类架构,一个基于Transformer Encoder的,一个基于Transformer Encoder-Decoder的。第一类架构在生成任务上有所缺陷,需要额外的模块辅助;第二类架构则在检索任务上至今都还没有得到有效应用。因此,作者提出一个多模态混合架构,既可以作为unimodel encoder,也可以作为image-grounded text encoder,还可以作为image-grounded text decoder。

方法

在这里插入图片描述

上面这个是他的基础架构,其实已经一目了然了,需要强调的是呢,原本的MLM loss现在已经换成了LM loss,因为我们现在做的不是增加了一个文本生成的任务,并且由于三部分任务(ITC,ITM,LM)共享参数(除去self attention之外)因此我们在text-encoder的部分呢也没有必要继续使用MLM,只留下ITM即可。此外,BLIP的一个缺点呢可能是因为多任务的原因,三个任务各自需要一次前向操作。

BLIP的第二点贡献,这个CapFilter是我们需要更加关注的。下面这个图的意思呢,大概就是我们先在原始noise data上预训练一个模型,这个模型因为MMoE的结构呢,既能评估图像和文本是否匹配,也能根据图像生成caption。但是呢,因为是在noise data上训练的,所以我们不够信任它的能力,所以我们对两部分模型呢分别在人工标注的数据集(如COCO)上进行微调加强这一方面的能力。然后我们就得到了Captioner和Filter,对于给定的Iw,Tw,captioner会生成一个新的Ts,(Iw,Tw)和(Iw,Ts)都会送到Filter去过滤掉不匹配的样本对。最后我们就得到一个数据集D如图。

在这里插入图片描述

在这里插入图片描述

CoCa

在这里插入图片描述

CoCa这篇文章基于ALBEF和SimVLM改进而来

首先,ALBEF是基于掩码自编码(MLM)预训练的,不适合生成式任务。CoCa的第一个想法就是将Multimodel Text Encoder换成Decoder,使用LM进行预训练。这篇文章里叫做captioning loss。

其次,在之前的Encoder-Decoder类模型(如BLIP),因为不同的任务架构不同,通常需要进行多次前向操作。CoCa思考的是能不能只用一次前向过程,这样可以省掉一半或2/3的计算量。因此CoCa把ALBEF的Text Encoder也换成了Decoder,引入cls token作为文本特征的embedding,从而与image embedding计算ITC loss。此外呢,为了避免多次前向,CoCa直接取消了ITM loss,仅仅使用captioning loss进行预训练。

其实我们发现直接多模态模型越来越趋向于简单大一统的架构,简单的训练损失并获得大的提升。这是我们追求的目标

BeiTv3

BeiTv3这个方法动机很简单,就是大一统。BeiTv3希望仅仅使用一个模型,使用一个损失然后达到最好的效果,事实他做到了

模型结构也极其简单,就是Multiway Transformer,是纯Encoder架构的模型。损失函数只有一个,就是MLM。这种结构可以广泛的应用到各类下游任务,如检索,image caption,视觉问答,视觉推理等等,并且完全不需要其他的模块。

这里指的一提的是为什么仅仅使用一个模型接受不同类型的输入呢,这个就是Transformer的优势,只要输入是序列数据那么它就可以提取其特征,并且非常具有通用性。因此呢,BeiTv3将图像patch成序列之后也视为一种语言,叫做imglish。image-text pairs就是将imglish 和 text两个序列拼起来即可。

当然,简单归简单,但是在下游任务如何使用应该还是有很多细节。这一点还需要进一步去探索。

总结

总的来说,多模态几乎都是基于Transformer的工作,并且正在向更大一统的方向前进。BeiTv3尽管只有一个模型,但依然有不同的子模块FFN。一个方向是language interface,类似通过prompt指定任务类型,把所有的任务都当成文本生成任务。

另外,在最后总结一下我目前遇到的一些问题,第一个是ALBEF论文里的伪标签文本是如何生成的。我这里说的是伪标签文本而不是伪标签。对于ITC来说,生成的伪标签是一个相似度,对于MLM来说,生成的伪标签是词表概率分布。这些都不需要文本。但是奇怪的是论文中给出了ITC的top5 伪标签文本示例。

目前来说,这个文本的来源有三种可能。要么是基于image feat输入一个额外的decoder生成的caption,要么是从数据集里面挑出来的跟image feat相似度top5的文本。前者在论文里面没有任何描述,只有在下游VQA任务提到需要一个decoder,但是这个decoder大概是不能完成预训练时的解码任务的。因为这个decoder还需要question文本的特征。后者确实很有可能,毕竟这里仅作展示用途,实际训练的时候完全不需要decoder

第三种可能,大概也是真正的答案,基于MLM的自回归。BeiTv3中基于一个纯encoder架构实现了image caption,就是使用这种方法。大致就是说给定一句话例如this image shows,然后加一个mask标志符,使用Image Grounded的Text Encoder去预测被Mask掉的单词,重复这个过程呢就可以做Image Captioning了。

参考博客:多模态系列论文–BEiT-3 详细解析_beitv3 github-CSDN博客

最后,因为本身对多模态处于一个学习了解的阶段,上述内容有任何表述错误请不吝指出,这将对我产生很大帮助,感谢,也希望上面的内容对一些初学者有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2198369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GNURadio 平台实现FM信号调制解调

一、FM 信号调制信号流图 波形图: 红色是已调制的FM信号,蓝色是调制信号波形。 频谱图: 瀑布图: 二、FM 信号解调信号流图 解调信号波形: 解调信号频谱: 具体可以通过audio sink 模块听音分析是否解调准确…

无人机高精度地形测量技术详解!

一、无人机技术 无人机作为搭载各种高精度传感器的平台,能够在不同高度和角度进行灵活飞行,覆盖各种复杂地形和环境,实现地表信息的全方位获取。 二、高精度传感器技术 GPS/GLONASS等卫星定位系统:无人机通过卫星定位系统实现高…

怎样查局域网里的所有ip?

如果想高效管理网络设备,识别配置、更新和维护各类连接设备,排查网络故障,提升网络安全性,监控异常 IP 活动,发现潜在威胁等需要知道局域网。那么怎样查局域网里的所有ip呢? 一、局域网IP是什么&#xff1…

最新免费GPT4O和Midjourney

一、什么是GPT4O? GPT-4 是 OpenAI 研发的大型语言模型。它具有强大的语言理解和生成能力,在自然语言处理等诸多领域有着广泛的应用和表现。 二、什么是Midjourney? Midjourney 是一款人工智能图像生成工具。它可以根据用户输入的描述或提…

LeetCode-2608. 图中的最短环【广度优先搜索 图,腾讯面试真题】

LeetCode-2608. 图中的最短环【广度优先搜索 图,腾讯面试真题】 题目描述:解题思路一:【一图秒懂】枚举起点跑 BFS解题思路二:背诵版解题思路三: 题目描述: 现有一个含 n 个顶点的 双向 图,每个…

anndata复制问题

感觉这个问题就很复杂哈,摸不清什么规律,只能判断前后的维度变化了 example 1 import scanpy as sc adata1 sc.read(/Users/yxkang/Desktop/dataset/HER2/H5AD_file/ad_H1.h5ad) print(adata1)adata2 sc.read(/Users/yxkang/Desktop/dataset/HER2/H5…

【AI学习】Mamba学习(五):《HiPPO: Recurrent Memory with Optimal Polynomial Projections》

SSM之后,就需要接着学习HiPPO了。 《HiPPO: Recurrent Memory with Optimal Polynomial Projections》 论文地址:https://arxiv.org/abs/2008.07669 摘要 从连续数据中学习的一个核心问题是,随着更多数据的处理,以增量方式表示累…

OWASP发布大模型安全风险与应对策略(QA测试重点关注)

开放式 Web 应用程序安全项目(OWASP)发布了关于大模型应用的安全风险,这些风险不仅包括传统的沙盒逃逸、代码执行和鉴权不当等安全风险,还涉及提示注入、对话数据泄露和数据投毒等人工智能特有的安全风险。 帮助开发者和测试同学更…

面试不是一场遭遇战

引言 Ethan第一次跳槽时,把工作总结搞成简历,丢到BOSS,面了几场,结果都很糟。复盘下来,发现面试过程临场发挥太多,把攻坚战打成了遭遇战。 那面试要如何准备?什么情况下跳槽?有哪些大…

VSCode运行QT界面

VSCode用久了,感觉Qt Creator的写起代码来还是不如VSCode得心应手,虽然目前还是存在一些问题,先把目前实现的状况做个记录,后续有机会再进一步优化。 当前方式 通过QtCreator创建一个CMake项目,然后使用CMake的方式在VSCode中进行编译。 claude给出的建议 左上角的名字会…

springboot实战学习(11)(更新用户基本信息接口主逻辑)

接着继续学习。之前的博客的进度:完成用户模块的注册接口的开发以及注册时的参数合法性校验。在基本完成用户模块的登录接口的主逻辑的基础上,学习了"JWT令牌的组成与使用"、完成了"登录认证"(生成与验证JWT令牌&#xf…

图示详解OpenEuler下 DNS安装、配置与测试

前言 DNS配置内容、步骤、参数较多,初学者很难短时间掌握,另外,理解DNS工作原理也有一定的难度,一次配置成功的概率不大,因此,建议在配置DNS之前,先读一下之前笔者的博文《详解DNS工作原理及实…

AutoDL服务器训练YOLOv8全过程

AutoDL服务器训练YOLOv8全过程 关于作者 作者:小白熊 作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类,姿态识别,语义分割&…

TCP_SOCKET编程实现

文章目录 与UDP_SOCKET的区别第一代Tcp_ServerTcp_Client第二代Tcp_Server第三代Tcp_server多线程版本Tcp_Server线程池版的Tcp_Server使用inet_ntop来解决线程安全问题 业务逻辑编写总结补充说明&&业务代码完成ping的真实作用Translate编写Transform业务代码 整体总结…

基于Web的实时动作捕捉工具

随着Web技术的不断发展,实时动作捕捉已经成为可能。一款名为MiKaPo的基于Web的实时动作捕捉工具应运而生,它能够捕捉视频中的人物动作并将其应用到3D模型上。本文将详细介绍MiKaPo的核心功能、技术栈、工作原理以及其优势和应用场景。 1. 概述 MiKaPo是一款基于Web的实时动…

gaussdb hccdp认证模拟题(单选)

1.在GaussDB逻辑架构中,由以下选项中的哪一个组件来负责提供集群日常运维、配置管理的管理接口、工具?(1 分) A. CN B. DN C. GTM D. OM --D 2.在以下命令中,使用以下哪一个选项中的命令可以以自定义归档形式导出表t1的定义&#xf…

◇【论文_20181020 v6】广义优势估计器 (generalized advantage estimator, GAE)

https://arxiv.org/abs/1506.02438 ICLR 2016 加州伯克利 电子工程与计算机科学系 High-Dimensional Continuous Control Using Generalized Advantage Estimation 文章目录 摘要1 引言2 预备知识3 优势函数估计4 解释为 奖励设计reward shaping5 价值函数估计6 实验6.1 策略优…

计算机毕业设计-自主完成指南

计算机毕业设计通常都涉及到较为复杂的软件系统,许多同学在选定课题之后,往往处于一种懵懂的状态,不知道如何着手开展工作。现在,让我们转换一种视角,把毕设想象成自己逐步开发的一款产品。最终在答辩环节,…

0,Verilog基础专栏说明

给大家推荐一个好用的Verilog基础训练网站HDL Bits,专用于Verilog语言的练习,非常丰富并且包含仿真。 注:本专栏内容涉及到的Verilog相关题目均为HDL Bits网站上内容,解题代码均为原创。 1,章节分类 1,V…

Qt设计登录界面

优化登录框: 将两个按钮连接到槽函数 在构造函数中定义 connect(this->btn1,&QPushButton::clicked,this,&Logon::my_slot);connect(this->btn2,&QPushButton::clicked,this,&Logon::my_cancel); 定义登录按钮连接的槽函数 void Logon::my…