多模态预训练模型综述

news2024/9/25 19:23:32

经典预训练模型还未完成后续补上

预训练模型在NLP和CV上取得巨大成功,学术届借鉴预训练模型==>下游任务finetune==>prompt训练==>人机指令alignment这套模式,利用多模态数据集训练一个大的多模态预训练模型(跨模态信息表示)来解决多模态域各种下游问题。

多模态预训练大模型主要包括以下4个方面:

1.多模态众原始输入图、文数据表示:将图像和文本编码为潜在表示,以保留其语义

2.多模态数据如何交互融合:设计一个优秀架构来交叉多模态信息之间的相互作用

3.多模态预训练大模型如何学习萃取有效知识:设计有效的训练任务来让模型萃取信息

4.多模态预训练大模型如何适配下游任务:训练好的预训练模型fintune适配下游任务

本篇文章主要参考:《A survey of Vision-Language Pre-trained Models》https://arxiv.org/pdf/2202.10936.pdf

前置任务:文本-图语料对准备

预培训数据集,预训练多模态大模型的第一步是构建大规模的图像文本对。我们将训练前数据集定义为D = {(W, V )}Ni=1,其中W和V分别表示文本和图像,N是图像-文本对的数量。具体来说,每个文本将被标记为一系列令牌(token)W = ⟨w1,...,wn>。同样,每个图像也将被转换为序列化物体特征(或grid特征或patch 特征),表示为V = ⟨v1, ..., vm⟩。

多模态图、文数据表示:

文本embedding + 图片ROI embedding

文本序列首先分为令牌,并与“[CLS]”和“[SEP]”令牌串联,表示为W = ⟨[CLS],w1,...,wn,[SEP]>。每个令牌wj都将映射到一个单词嵌入。此外,在嵌入一词中添加表示位置的 pos embbding和嵌入模态类型的seg embbding,以获得wj的最终嵌入。

文本部分一般是直接复用BERT的内容,基本是没有太大变化的,但是视觉部分的变化就比较大了。如何设计一个比较好的视觉嵌入,去适应一个语言方面的预训练模型。早期的做法基于一个假设:图片提取出来的区域特征,最好和文本的token特征在同一个level上。比如可以使用faster Rcnn去提取一些区域特征,使用ROI feature作为内容信息,将bounding box作为位置信息( ViLBERT [Lu et al., 2019] 、 LXMERT [Tan and Bansal, 2019] )。

OSCAR将object tag作为信息进行输入,object是将信息转化为一个文本标签,构建了视觉信息和文本信之间的桥梁,达到了视觉和文本的一致性。

问题:

1.需要额外训练一个roi提取模型,模型准确性影响预训练模型准确性

2.不同图片roi个数是不确定的,预训练模型需要相对固定roi个数导致信息丢失

3.roi数据集准备复杂,目标检测模型得到的都是矩形的目标,其不适合于不规则的物体,导致得到的bounding box中存在噪声。另外,除了bounding box以外,一些背景信息是无法提取出来的,相当于即存在噪声,也存在损失。对效果产生一些影响。

4.下游任务不一定适配用roi粒度特征,比如在一个domain预训练的目标检测模型,将其转换到另外的domain中,效果可能有相当大的gap,影响模型的效果。

文本embedding + 图片Grid embedding

ROI来表示图像特征数据是region粒度特征,信息颗粒度太大容易带来信息丢失、下游任务不适配、非端到端模导致使用不方便等问题。为了解决region特征表示问题提出Grid embedding方式表示图像数据。放弃ROI,转而使用cnn或者resnet抽取Grid Embedding,以便图像编码器可以将图像作为一个整体查看,避免忽视一些关键区域的风险。

Pixel-Bert用cnn抽取图像Grid embbeding

SOHO用resnet抽取Grid embedding

优点是可以编码整张图片,避免了bounding box只能编码部分图片的缺陷,其二是CNN不必非要做一个预训练才可以提取region的特征,其是一个可以和整个预训练模型一起训练的端到端的模型。

文本embedding + 图片Patch embedding

随着VIT的兴起,出现了patch based的特征提取,将一张图片分为若干patch,并且使用线性变化的方式对其进行编码。

图像首先被拆分为拍平为2D patch,然后序列化embdding图像的patch,来表示原始图像特征。模型是端到端表示且用的transformer架构可以并行化计算,所以VIT做patch推理速度会快很多

小结:

1.文本部分一般是直接复用BERT的内容,基本是没有太大变化的。

2.视觉部分的变化就比较大了,主要有region embbding表示、Grid embbding表示、Patch embbding表示

多模态信息融合模型:

融合模型将文本embbding和图像特征作为输入,让几种模态的信息融合交互以达到跨模态信息表示、知识萃取

Fusion Encoder

fusion encoder主要有两种类型的融合方案:单流架构和双流架构。在self-attention 或 cross-attention 对图文数据表示操作后,不管是单流网络还是双流网络,其最后都将transformer的最后一层输出作为多模态融合的结果。

单流架构

单流网络直接将两个模态的内容加以拼接,之后输入到transformer中。相当于是将单模态内的交互和多模态之间的交互合到一起来做。比如vision的q来自于图像,其k和v即来自于图像也来自于文本;文本这边也是如此。

其最大的好处是其参数的高效性。并不需要将跨模态的交互和单模态的交互放到一起来做,因此是十分节约参数的。

双流架构

但是有人argue觉得这种方式的单模态特征都是刚刚提取到的,是没有学习很好的单模态特征,因此是具有一定局限性的。所以提出双流机构的解决方案,双流网络是先在单模态的场景下将模态内的交互做好,之后在多模态场景下,做好多模态的交互。

与单流架构中的自注意操作不同(单流是把视觉embbeding和文本embbding concat系,相当于融合后做KV自注意力),双流架构采用交叉注意机制来建模V-L交互中,其中查询向量来自一种模式,而键和值向量来自另一种模式。交叉注意力层通常包含两个单向交叉注意力子层:一个从语言到视觉,另一个从视觉到语言。他们负责在两种模式之间交换信息和调整语义。

Dual encoder

fusion encoder的操作不可避免的需要使用transformer进行模态之间的融合,但是在很多对时间敏感的任务上其实是没有必要的。

Dual encoder对文本和图像进行编码,仅仅使用相似度的交互,进行浅层的交互。

文本用一个text encoder去编码,图像用一个image encoder进行编码,他们之间并不需要进行特别多的交互,其最后仅需要用一个简单的计算,比如相似性度量进行计算,即可。

其优点是,表示是预训练好的,另外文本编码器和图像编码器是完全解耦的,可以用于很多单模态任务上。但是因为其只进行了浅层的交互,因此这类模型无法适用于多模态推理方面的工作。

Fusion Encoder + Dual encoder

fusion encoder模式融合图信息和文信息交互的更深入,能学习到更细粒度的跨模态信息特征,但是推理速度相对较慢、数据复杂度也会更高。而dual encoder把单独抽取好的图信息和文信息,在高层面简单的做点乘跨模态信息交融不够;但是数据处理简单、推理速度更快、得到更宏观层面的图文信息。有没办法把两种encoder方式融合,让模型及科研学习到细粒度的多模态信息也可以学习到更宏观的多模态表示,同时能够根据不同的下游任务需要可控的选择性突出哪部分表示能力,加快下游任务的推理速度。

fusion encoder比较容易处理多模态融合的推理问题,dual encoder比较适合处理跨模态检索的问题。VLMO提出了将两者融合在一起的解决方案。

V-L模型适合解决多模态的信息,但是不是非常适合解决文本的信息,UNIMO给出了解决方案。OFA给出了视觉任务,文本任务,以及多模态任务三种任务的一个统一的解决方案。

多模态预训练模型学习手段

根据前面的介绍,在输入图像和文本编码为矢量并完全融合交互后,下一步是为VL-PTM设计预训练任务,设计的预训练任务对VL-PTM可以从数据中学到什么东西有很大影响。这部分,我们将介绍一些广泛使用的预训练任务。

Cross-Modal Masked Language Modeling (MLM)

多模态MLM任务和nlp中bert模式很相似,通过MASK掉一部分的信息,通过没有MASK的信息来推理出MASK的表示。但与NLP不同地方在于,需要考虑如何设计学习任务。让多模态预训练模型不能只是单纯的依靠文本或者图像上下文信息就推理出MASK掉的表示是什么,而应该依赖与另外模态的信息才能推理出MASK的信息表示是什么。这样的任务设计才能让文本和图像信息之间产生关联,有上下文信息依赖,多到跨模态信息之间的对齐。

ViLT [Kim等人,2021年]采用了全字屏蔽策略,该策略防止模型仅通过周围文本信息就可以预测被MASK掉的信息表示;InterBERT [Lin等人,2020年]屏蔽了连续的文本片段,以使这预训练学习任务更加困难,并进一步改进了其在下游任务上的表现。

Cross-Modal Masked Region Prediction (MRP)

与MLM相似MRP也是通过对对部分信息MASK,通过没被MASK信息推测MASK的表示。MRP通过MASK掉一些ROI区域,然后根据其它图文信息预测出ROI区域信息表示。主要有两大类训练任务预测被MASK的区域是什么物体Masked Region Classification (MRC) 和预测被MASK区域的信息表示 Masked Region Feature Regression (MRFR) 。

Masked Region Classification (MRC)

MRC学习预测每个屏蔽区域的语义类,预测的是图像的更高层次的语意,而不是预测MASK部分每个像素。通过预测被MASK区域的是那个类,相当于在做object detect中的物体分类。用交叉熵方式来作为loss,通过没有被MASK的图文信息来预测被MASK区域可能是什么物体(做分类)。

Masked Region Feature Regression (MRFR)

MRFR通过未MASK区域的图文信息回归预测MASK区域的原始区域特征,MRFR要求模型重建高维向量,而不是语义分类。

Image-Text Matching (ITM)

MLM和MRP帮助多模态预训练模型学习图像和文本之间的细粒度相关性,而ITM 为多模态预训练模型提供在粗粒度水平上对齐的能力。ITM类似NLP中预测上下两句话相似度的任务,给一对图文对预测他们之间是否匹配。

Cross-Modal Contrastive Learning (CMCL)

CMCL旨在通过将匹配的图像文本对的嵌入点推在一起,同时将不匹配的图像文本对分开,在同一语义空间下学习通用视觉和语言表达。有点类似nlp和cv里面的trip loss方式(比较学习),值得注意的是,CMCL中的对比loss是对称的,文本到图像的对比loss也类似。CLIP和ALIGN利用大规模的图像文本对来cmcl学习,并在图像分类任务表现出令人惊讶的zero-shot效果。

多模态预训练模型下游任务

下游任务包括理解和生成。

理解部分:

图文检索

ITR是一项典型的跨模态匹配任务。这项任务需要检索与给定句子最匹配的图像,反之亦然。使用融合编码器架构的早期VL-PTM获得融合矢量表示,该表示后来被预测为相似性分数[Lu等人,2019年;Li等人,2019年;Li等人,2020年c]。CLIP[Radford等人,2021年]和ALBEF[Li等人,2021a]等双编码器架构对ITR来说效率更高,因为它们可以在检索之前预先计算和存储图像和文本的嵌入。

视觉引用表达

VRE是NLP中引用表达式任务的扩展。目标是将区域定位在与特定文本描述相对应的图像中。

看图回答问题(VQA)

VQA是一项广泛使用的跨模态推理任务。与基于文本的QA不同,VQA需要回答有关图像的问题。大多数研究人员将VQA视为一项分类任务,并要求模型从答案库中选择正确的答案。具有融合编码器架构的VL-PTM通常将最终的跨模态表示(通常对应于输入[CLS]令牌)映射到答案标签的分布。因此,dual encoder架构的VL-PTM对VQA任务不那么有效,因为两种模式信息融合太浅,无法进行跨模式推理。现在有一些研究将VQA建模为生成任务,这可以更好地推广到现实世界的开放式场景。

感知任务

利用预训练大模型来实现zero-shot或者是few-shot的图片分类、物体识别、segment边界划分。

生成部分:

生成任务可以被认为是图像-文本的双重任务,生成任务可以分为文本到图像生成和图像到文本生成(多模式文本生成)。

图到文生成

imagecaption图像描述技术,就是以图像为输入,通过数学模型和计算使计算机输出对应图像的自然语言描述文字,使计算机拥有 “看图说话”的能力,是图像处理领域中继图像识别、图像分割和目标跟踪之后的又一新型任务.。

在日常生活中,人们可以将图像中的场景、色彩、逻辑关系等低层视觉特征信息自动建立关系,从而感知图像的高层语义信息,但是计算机作为工具只能提取到数字图像的低层数据特征,而无法像人类大脑一样生成高层语义信息,这就是计算机视觉中的“语义鸿沟”问题.图像描述(字幕)技术(Image Caption Generation)的本质就是将计算机提取的图像视觉特征转化为高层语义信息,即解决“语义鸿沟”问题,使计算机生成与人类大脑理解相近的对图像的文字描述,从而可以对图像进行分类、检索、分析等处理任务。

文到图生成

文本到图像生成是从描述文本生成相应图像的任务。这部分前面文章已经做过详细介绍,这边不在展开介绍。需要进一步了解的可以翻阅我前面文章。

随着生成任务的完善,最近研究开始进行多模态的图片生成。利用文本描述,把输入的参考图片、边界信息作为控制变量来限制生成图的风格,controlnet。甚至出现输入视频作为参考控制,通过文本描述来生成视频的任务

经典多模态表示模型

这部分持续更新,可以关注后续文章

CLIP

viT

SVIT

BLIP大统一模型

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

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

相关文章

【数据结构】栈的接口实现(附图解和源码)

栈的接口实现(附图解和源码) 文章目录栈的接口实现(附图解和源码)前言一、定义结构体二、接口实现(附图解源码)1.初始化栈2.销毁栈3.入栈4.判断栈是否为空5.出栈6.获取栈顶元素7.获取栈中元素个数三、源代码…

【华为OD机试模拟题】用 C++ 实现 - 字符匹配(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明字符匹配题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。…

C++10:非类型模板参数以及模板的特化

目录 非类型模板参数 模板的特化 模板类的特化 1.全特化 2.偏特化 模板其实还有其他的玩法&#xff0c;比如非类型模板参数以及模板的特化。 非类型模板参数 在记述非类型模板参数前&#xff0c;我们认识一下C中一个比较鸡肋的类&#xff0c;array #include<iostream&g…

Kotlin1.8新特性

Kotlin1.8.0新特性 新特性概述 JVM 的新实验性功能&#xff1a;递归复制或删除目录内容提升了 kotlin-reflect 性能新的 -Xdebug 编译器选项&#xff0c;提供更出色的调试体验kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并为 kotlin-stdlib提升了 Objective-C/Swift 互操作…

MATLAB绘制泰勒图(Taylor diagram)

泰勒图&#xff08;Taylor diagram&#xff09; 泰勒图是Karl E. Taylor于2001年首先提出&#xff0c;主要用来比较几个气象模式模拟的能力&#xff0c;因此该表示方法在气象领域使用最多&#xff0c;但是在其他自然科学领域也有一定的应用。 泰勒图常用于评价模型的精度&…

使用命令别名一键启动arthas

1. 使用命令别名启动arthas 确保单板上有jdk和arthas jdk目录&#xff1a;/home/xinliushijian/arthas/jdk arthas目录&#xff1b;/home/xinliushijian/arthas su xinliushijian编写脚本messi.sh cd /home/xinliushijian/arthas vi messi.sh 内容如下&#xff1a; #!/bin/ba…

「兔了个兔」玉兔踏青,纯CSS实现瑞兔日历(附源码)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

Hive中数据库和表的操作(HSQL)

数仓管理工具Hive可以将HDFS文件中的结构化数据映射成表&#xff0c; 利用HSQL对表进行分析&#xff0c;HSQL的底层运行机制&#xff0c;默认是MapReduce计算&#xff0c;也可以替换成Spark、Tez、Flink 计算结果存储在HDFS&#xff0c;像Hive中的库、表、字段、表所属库、表的…

Zebec社区上线ZIP-2(地平线升级行动)提案

此前&#xff0c;Zebec社区在上线了投票治理系统Zebec Node后&#xff0c;曾上线了首个提案ZIP-1&#xff0c;对Nautilus Chain的推出进行了投票&#xff0c;作为Zebec Chain上线前的“先行链”&#xff0c;该链得到了社区用户的欢迎&#xff0c;投通过票的比例高达98.3%。而Na…

[Java代码审计]—命令执行失效问题

前言 关于Java的命令执行其实一直都没有单独学习过&#xff0c;正好昨天师傅问了一个问题&#xff1a;命令执行时字符串和字符串数组用哪个更好一些。当时被问得有点懵难道不都一样么&#xff1f;其实不然&#xff0c;借此重新了解下RCE以及失效问题。 单例模式 常规命令执行…

基于STM32 电机库(5.4.4)的单电阻采样调试总结

目录 硬件调整 软件调整 下载运行 参数优化 总结 硬件调整 实验用的开发板和电机如下&#xff0c;在调单一电阻之前已经在三电阻的环境下把启动运行的参数已经调好了&#xff0c;这里不多说。调好后需要把硬件改成单电阻采样。 如下原理图&#xff1a; 只需要把R75,76两…

每个人都应该知道的5个NLP代码库

在本文中&#xff0c;将详细介绍目前常用的Python NLP库。内容译自网络。这些软件包可处理多种NLP任务&#xff0c;例如词性&#xff08;POS&#xff09;标注&#xff0c;依存分析&#xff0c;文档分类&#xff0c;主题建模等等。NLP库的基本目标是简化文本预处理。目前有许多工…

【6】linux命令每日分享——rm删除目录和文件

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

loki 日志管理的安装部署使用

loki介绍 Loki是 Grafana Labs 团队最新的开源项目&#xff0c;是一个水平可扩展&#xff0c;高可用性&#xff0c;多租户的日志聚合系统。它的设计非常经济高效且易于操作&#xff0c;因为它不会为日志内容编制索引&#xff0c;而是为每个日志流编制一组标签。 不对日志进行…

python学习之手把手教你将图片变成黑白或彩色字符画(骚操作)

文章目录前言一、字符画的实现原理二、黑白字符画实现代码三、彩色字符画生成代码实现&#xff1a;总结前言 字符画这个话题&#xff0c;似乎早在贴吧时代就已经被玩烂了。在百度图片随便一搜索&#xff0c;就能够看到非常多。然后在这个时代&#xff0c;会编程的人越来越多&a…

Transformer输出张量的值全部相同?!

【bug】Transformer输出张量的值全部相同&#xff1f;&#xff01;现象原因解决现象 输入经过TransformerEncoderLayer之后&#xff0c;基本所有输出都相同了。 核心代码如下&#xff0c; from torch.nn import TransformerEncoderLayer self.trans TransformerEncoderLayer…

日记本-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

【实验7-3】 日记本 【任务介绍】 1.任务描述 编写一个日记本功能的程序&#xff0c;使用字节流经日记的具体信息记录在本地的txt文件中。当用户输入日记的特定内容后&#xff0c;会将输入的内容保存至本地的txt文件中。需要输入的内容包括“姓名”&#xff0c;“天气”、“…

OpenFeign详解

OpenFeign是什么&#xff1f; OpenFeign&#xff1a; OpenFeign是Spring Cloud 在Feign的基础上支持了SpringMVC的注解&#xff0c;如RequesMapping等等。OpenFeign的FeignClient可以解析SpringMVC的RequestMapping注解下的接口&#xff0c;并通过动态代理的方式产生实现类&am…

基于YOLOv5的细胞检测实战

数据及代码链接见文末 1.任务与数据集介绍 如下图所示,我们有一个医学细胞数据集,需要从数据集中检测出三种不同的细胞。标签中已经标注了细胞的类别和位置。 我们也可以看到,三种细胞有着不同的形态和颜色,同时数据集的标签也存在没有标注到的细胞 2.数据与标签配置方…

【打卡-Coggle竞赛学习2023年2月】图节点嵌入

文章目录## Part4 图节点嵌入### 背景介绍### 环境配置### 学习打卡- 任务1&#xff1a;图属性与图构造- 任务2&#xff1a;图查询与遍历- 任务3&#xff1a;节点中心性与应用- 任务4&#xff1a;图节点嵌入算法&#xff1a;- 任务5&#xff1a;图节点嵌入算法&#xff1a;- 任…