多模态串讲(上)

article/2025/6/27 10:00:37

多模态的学习在最近几年异常火爆,除了普通的多模态学习,比如视觉问答,图文检索等,其实之前讲的所有这种Language Guided Detection,或者Language Guided Segmentation,这些任务都是多模态的,还有最近火的文本图像生成或者文本视频生成,我们耳熟能详的DALL·E2,Stable Diffusion、Phenaki Video、Imagen Video,以上这些统统属于多模态学习

这次的多模态串讲,可能更多的还是偏向传统的多模态学习,即下游任务是图文检索,即Image Text Retrieval、VQA【视觉问答】、Visual Reasoning【视觉推理】、Visual Entailment【视觉蕴含】,但即使如此,相关工作也是数不胜数。

串讲的第一部分讲一下只用Transformer Encoder的一些方法,比如说之前的ViLT、CLIP,还有我们今天讲解的ALBEF和VLMo。第二部分我们会讲解到用Transformer Encoder和Decoder一起的一些方法,比如说BLIP、CoCa、BEIT V3以及PaLI。

在讲解ALBEF之前,我们先简单回顾一下ViLT、CLIP。

ViLT

以下图片来自ViLT论文的图二。

ViLT这篇论文的研究动机,其实就是为了把目标检测从视觉端拿掉,原因很简单,因为用一个预训练的目标检测器去抽取视觉特征的时候,其就会面临很多很多的局限性,但是直到Vision Transformer(21年之前)出现之前,很难有什么很好的办法能把这个预训练的目标检测器给移除掉,所以说最早期的工作,比如说分类(a)VSE或者VSE++的工作,他们的文本端就是直接抽一个文本特征,但是他们的视觉端就非常大,即需要的计算量非常的多,因为其是一个目标检测器,然后当得到了文本特征和视觉特征之后,最后只能做一个很简单的模态之间的交互,从而去做这种多模态的任务。后续这些工作,即分类(c)里的工作,即我们耳熟能详的OSCAR或者ViLBERT、UNITER,他们发现对于这种多模态 的任务来说,最后这个模态之间的交互非常重要的,只有有了模态之间更深层的交互,对于这种VQA、VR、VE这些任务来说,效果才会非常好,所以他们把最初的这种简单的点乘的,这种模态之间的交互,便变成了一个Transformer的Encoder,或者变成别的更复杂的模型结构,去做这种模态之间的交互,所以这些方法的性能都非常好,但是随之而来的缺点也非常明显,所有这一系列的工作,统统都用了这个预训练的目标检测器,再加上后边这个更大的模态融合的部分,这个模型不论是训练还是部署都非常困难,所以说当Vision Transformer出来之后,ViLT这篇论文也就应运而生了。

因为他们发现,在Vision Transformer里,这种基于Patch的视觉特征,其实跟之前这种基于Bounding Box的视觉特征也没什么太大区别,他也能很好的拿来做图片分类、目标检测的任务,这样,我们就把一个预训练好的目标检测器直接换成了一层的Patch Embedding,就能去抽取这个视觉的特征了,大大降低了计算复杂度, 尤其是在做推理的时候。

但是如果你的文本特征,直接简单的tokenize一下,视觉特征也只是简单的patch embedding一下,那肯定是远远不够的。所以对于多模态任务来说,这个后面的模态融合非常关键,所以ViLt就把之前(c)类里的这些方法,这个模态融合的方法直接借鉴了过来,用一个很大的Transformer encoder 去做模态融合从而达到了还不错的效果。

因为移除了预训练的目标检测器,换成了可以学习的Patch embedding layer,所以说ViLT模型极其简单,虽然作为一个多模态学习的框架,但是其实跟NLP那边的框架没有什么区别,无非就是先都tokenized了一下,然后直接扔给一个Transformer去学习,所以非常简单易学,但是ViLT也有它自己的缺点。首先,第一个缺点就是性能不够高,ViLT在很多任务上比不过(c)类里的这些方法。原因是对于现有的这些多模态任务而言,有可能是这些数据集的bias,也有可能是这个任务需要更多的视觉能力,总之,我们需要更强的视觉部分,即视觉模型应该要比文本模型要大,最后和这个效果才能好。但是在ViLT里,文本端用的tokenizer其实是很好的,但是visual embedding是random initialized,所以其效果自然就很差。其次,ViLT虽然说它的推理时间很快,但训练时间非常非常慢。在非常标准的一个4 million的set,ViLT需要64张GPU,而且是32G的,训练三天,所以它在训练上的复杂度和训练上的时间丝毫不亚于(c)类的方法。所以它是结构上简化了多模态学习,但没有真的让多模态学习所有人都玩得起。

基于以上两点,ALBEF呼之欲出。

CLIP

CLIP模型也是一个非常简单的结构,其是一个典型的双塔模型,即他有两个模型,一个对应文本,一个对应视觉。在训练的时候,通过对比学习,让已有的图像文本对在空间上拉得更近,让不是一个对的图像文本拉的更远,从而最后学到非常好的图像文本特征,然后一旦学到很好的图像文本特征之后,CLIP只需要做很简单的点乘,就可以去做多模态任务。尤其是对图像文本匹配,或者图像文本检索来说,CLIP简直是神一样的存在,它不光效果好,而且跟高效。

因为我们往往做图像文本匹配,或者图像文本检索任务的时候,我们是有一个很大的已有的数据库的,这个时候如果我们新来一张图片,或者新来一个文本,我们要跟已有的数据库去做匹配 ,那其他所有的方法,比如图上的(a)(c)(d)都会非常的慢,因为其所有的数据都要过一遍编码器,但是CLIP模型就不需要,它可以提前把数据库里所有的图像文本的特征提前都抽取好,并且是想什么时候抽取就什么时候抽取,抽取好放在那里即可,等我们真正想用的时候,直接做一个点乘就好,矩阵乘法还是相当快的。所以CLIP的这个实际应用非常广泛。

但是CLIP模型也有他的缺陷,他虽然对图文匹配的任务非常在行,但是对别的任务,比如VQA、VR、VE这些任务来说 ,性能就不够好了,因为毕竟只靠一个简单的点乘,还是不能够分析特别复杂的情况。

回顾到这里,我们来捋一下,总结一下之前的这些方法,哪些是好的,哪些是不好的。我们接下来该提出怎么样的改进呢?

首先我们来看模型的结构,因为我们有图像的输入和文本的输入,刚开始的模型很定是有两支的,因为它需要去抽取这个文本图像特征,但是我们一直强调,在多模态学习里,视觉特征要远远大于文本特征,所以我们知道使用更大更强的视觉模型,比如一个更大的ViT是好的,是我们需要坚持使用的。同时,作为多模态学习,模态之间的融合也是非常关键的,我们也要保证这个模态融合的模型,也要尽可能的大。

所以,我们大概知道,如果想做一个很好的多模态学习,其网络结构应该很像这个(c),即 文本编码器应该要比图像编码器要小,最后多模态融合部分尽可能的大。当然,这里的视觉模型很定不想要再用一个目标检测模型了,所以我们更多的是我们会采取一个比较的Vision Transformer,而不是简单的一个Patch embedding去做。

总之,模型大概就长以下这个样子。

 模型有了,我们如何训练呢?

我们知道CLIP模型就用了一个对比学习的Loss,即Image Text Contrastive,即ITC LOSS训练,效果已经很好了。所以我们知道ITC训练不错还高效,我们应该采纳。

之前(c)类的这种方法,他们往往有目标检测,所以他们提出了一个叫做Word Patch Alignment,即文本的一个单词和这个图像的一个patch,应该有一个对应的关系,但是因为现在这个目标检测模型已经没有了,而且在ViLT里头,我们发现这个WPA Loss算起来是非常的慢的,所以才导致这个ViLT模型训练起来这么费劲,所以我们不太想使用WPA Loss了

剩下常用的还有两个Loss,一个是我们耳熟能详的Mask Language Modeling【即Bert的训练方式,遮住一个词然后再去预判这个词语(完形填空)】,这个loss肯定是非常有用,到现在为止,不光是NLP还是Vision ,基本都大一统的全部使用Mask Modeling。另外还有一个Image text Matching的Loss,在之前的(c)和(d)的这种方法之中,都取得了很好的结果,所以我们也想继续采纳。

所以我们发现,可能对于一个好的多模态学习的模型结构来说,我们的目标函数应该也就是ITC、ITM和MLM这三个的合体,最后效果应该不错。

ALBEF

现在我们来看ALBEF的这个模型结果,其实就会发现,我们通过总结做出来的这些预测,基本上都是正确的。比如从模型结构来说,在图像这边的编码器,其实就是一个12层的Transformer Base Model。

 但是在文本这边,将一个12层的Bert Model,劈成了两个部分,前六层,拿来做文本的编码器,后六层做多模态融合的编码器。

满足我们刚刚所做的两个假设。第一个假设是整个图像编码器会比文本编码器要大,一边有12层的Transformer Block,另一边只有6层的Transformer Block。第二个是模态之间的融合也必须要大,所以这里面并不是一个简单的点乘,而是使用了6层的Transformer Block。

从目标函数来说,ALBEF就是用了这个Image Text Contrastive【ITC loss】和这个Image Text Matching和Mask Language Modeling,三个loss 的合体去训练这个模型。

之所以我们可以通过之前的一些对比和总结,得到接下来研究方向的一些假设,而且真的被一些后续的工作所验证,其实不是巧合,因为大部分工作的出发点 ,或者它的研究动机,其实就是在总结前人工作这个优缺点之中得到的,所以如果我们没有一些研究的idea,或者说我们不知道接下来研究方向该如何走的时候,还是需要去更相关的文献,并且不光是读这些文献,更重要的是做一个总结,每一篇论文我们都得到哪些insight,有什么东西是可取的,可以继续发扬光大,有什么东西不要,最好我们可以将其移除,通过这种不停地阅读、总结和对比。绝大多数便会给我们一个很明确的研究方向

ALBEF

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

这个团队在做出ALBEF这论文之后,又相继作了BLIP、MUST,还有Video那边的ALPro一系列的多模态工作。

(1)摘要部分 

 最近图像文本的这种大规模的特征学习,已经变得非常火爆了,因为这个时候CLIP和Align这些工作都已经出来,基于CLIP的后续工作也出来很多。

大部分的方法都是用一个、、、、、、、

写到这里,突然发现自己有点不感冒,先挖个坑在这吧

【多模态论文串讲·上【论文精读】】 https://www.bilibili.com/video/BV1Vd4y1v77v/?share_source=copy_web&vd_source=9ee2521627a11b87c06e3907e194e1ab 

以上是学习链接,感兴趣的小伙伴,自行查看哟!

有用的话,请多多给老师一键三连! 


http://chatgpt.dhexx.cn/article/oqmpyHqr.shtml

相关文章

C++【引用】——串讲

【引用】——串讲(视频89-94) Note: i.视频为黑马程序员C视频,系列文章为视频听课笔记; ii.引用不仅包含定义及简单应用,在类与对象…中也有涉及; iii.难度指数: iv.不论变量、函数名、标识符形式怎样复杂…

CLIP 改进工作串讲(下)

CLIP 改进工作串讲(下) 本文为 CLIP 改进工作串讲(下)【论文精读】 的学习笔记。 图像生成 最近一年图像生成领域扩散模型大火,尤其是文本生成图像,DALL-E、imagen 等工作层出不穷,有机会专门…

操作系统串讲

前言 文章内容来源:东北大学的操作系统MOOC视频在操作系统的不同阶段,计算机的工作形式也不同,不要在一开始就将操作系统在心里预设成现代的 windows 或 linux 操作系统,以及将计算机预设成个人电脑等,防止代错对象、…

4.7串讲

4.7串讲 Java基础API 文章目录 4.7串讲 Java基础API字符串字符字符串StringBulider,StringBuffer 内存结构正则表达式字符字符类预定义字符类POSIX字符类(仅US-ASCII)java.lang.Character 类(简单的 java 字符类型)Uni…

计算机网络知识串讲复习(超全)

本篇我总结了学习计算机网络时必备的知识,可以用于巩固知识或者期末复习~~~如果觉得博主爆肝总结的不错,感谢点赞! 目录 1、计算机网络的几个发展阶段 2、计算机网络的组成 3、协议的概念 4、实体,协议,服务,和服务访问点 5、计算机网络的分类 6、…

CLIP改进工作串讲(上)

CLIP改进工作串讲(上) 本文为 CLIP 改进工作串讲(上)【论文精读】 的学习笔记。 CLIP 改进方向 语义分割 Lseg、GroupViT 目标检测 ViLD、GLIP v1/v2 视频理解 VideoCLIP、CLIP4clip、ActionCLIP 图像生成 VQGAN-CLIP、CLIPass…

毕业知识串讲

1. 京淘后端项目架构 1.1 数据库主从同步 1.1.1 业务需求说明 当数据库发生宕机的现象,如果配置了数据库主从同步,则可以从从库中获取现有记录,显示数据的恢复. 1.2 数据库主从同步原理 1.2.1 数据库冷备份 说明: 人工的将数据库文件定期导出,一式三份 如果其中一份丢失…

如何做好技术串讲

首先,如何做好演讲是个好话题,不过这过于大众的主题不想写,除非哪天能想到点 新意 再说; 其次,串讲和演讲有啥区别呢?其实也没啥区别,一会儿说说我自己的理解; 最后,什么…

软件开发过程与项目管理(8.软件项目质量计划)

软件开发过程与项目管理(8.软件项目质量计划) 课件 软件质量基本概念 质量定义 质量是满足要求的程度,包括符合规定的要求和满足顾客隐含需求。 软件质量定义 软件质量是软件满足明确说明或者隐含的需求的程度 质量与等级 质量与等级…

软件项目开发基本流程详解

软件项目开发流程图是用来详细描述了软件在开发过程中产品调研、设计、开发、测试等各个阶段中各个角色,包含产品经理、研发、测试、用户等需要处理的事情,以及在不同阶段可以达到哪种效果。那么,一款软件从研发到发布到底要经过哪些流程呢?…

嵌入式软件开发流程

根据使用的开发工具套件不同,软件开发流程会有差异,但主要步骤大致相同。对于使用宿主机(PC)的集成化开发环境,软件开发流程一般包括创建项目、添加文件、编译连接、下载调试等步骤,如下图所示。 图1&#…

软件项目开发流程以及人员职责,软件工程中五种常用的软件开发模型整理

文章目录 一、软件项目开发流程逻辑图开发流程需求分析概要设计详细设计编码测试软件交付验收维护 软件维护软件升级 软件项目开发流程以及人员职责软件工程中五种常用的软件开发模型整理软件系统开发流程七大详细步骤完整介绍 一、软件项目开发流程逻辑图 这张图应该清楚的说…

软件工程项目流程

软件工程项目流程 1.1 项目合作与成员 根据本项目的工作内容和范围,我们将成立一个20人左右的项目工作组来负责本项目的开发。 1.2 项目实施方法 项目管理的成效直接关系到整个项目的成败。尤其是实施与移动互联网有关的新技术应用项目,无论在国内和国外都是有一定难度的,更…

软件工程----开发大致流程

软件开发的流程 需求分析概要设计项目计划详细设计编码测试项目测试项目部署后期运维软件开发注意事项 不同的软件项目,有不同的需求侧重点,开发流程也是不一样的。比如开发一个大型Web电商项目,这个往往需要采用前后端分离的方式&#xff0c…

软件项目开发流程逻辑图

相关链接: 软件项目规划大纲知识点

软件项目的开发流程

一个项目的开发流程 软件开发流程(Software development process) 1.项目启动 1、项目组成立(公司成员、客户成员) 2、制定项目预期目标 3、制定项目计划周期 4、建立好项目组成员沟通机制 2.需求调研 1、创建调研计划、协调调研时间 2、收集客户资料,获取客户需求 …

软件项目开发流程

软件开发流程(Software development process) 首先 看一下基本软件项目开发流程图 其中 1.需求分析:通过对客户业务的了解和与客户对流程的讨论对需求进行基本建模,最终形成需求规格说明书。2.总体设计:通过分析需求信…

一个完整的软件项目开发流程,软件过程,软件生命周期

一、开发流程图 1、需求分析 结构化分析面向对象分析 2、原型设计 结构化设计面向对象设计 3、程序开发 结构化开发面向对象开发 4、程序测试 二、软件生命周期 软件分析 1、问题定义 确定好要解决的问题是什么(what),通过对客户的访问…

软件项目开发的完整流程

APP早已与我们的生活息息相关,一款APP从开发到上线需要哪些步骤,开发一个APP要多长时间,今天和大家分享一下完整的开发流程。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1、需求的整理 和开发传…

软件开发的一般流程

说明: 最初所有的开发工作都是由后端工程师完成的,随着业务越来越繁杂,工作量变大,于是我们将项目中的可视化部分和一部分交互功能的开发工作剥离出来,形成了前端开发。 大约从2005年开始正式的前端工程师角色被行业所…