朝花夕拾:多模态图文预训练的前世今生

news2024/11/27 12:54:17
Diffusion Models专栏文章汇总:入门与实战

前言:时间来到2024年,多模态大模型炙手可热。在上一个时代的【多模态图文预训练】宛若时代的遗珠,本文的时间线从2019年到2022年,从BERT横空出世讲到ViT大杀四方,再到MLLM大放异彩,全面梳理一下多模态图文预训练的前世今生。

目录

图文预训练

什么是图文预训练?

图文预训练下游任务:VQA

图文预训练下游任务:NLVR

图文预训练下游任务:图文检索

小结

发展脉络

开山鼻祖:2018年Bert

大杀四方:2020年 ViT 

增光添彩:2021年 CLIP

暴力美学:Florence


图文预训练

什么是图文预训练?

图文预训练是一种多模态学习方法,它通过结合图像和文本数据进行训练,以学习跨模态的语义表示。这种方法能够使模型同时理解图像内容和相关联的文本信息,从而在多种下游任务中实现更好的性能。图文预训练模型通常包含两个主要部分:图像编码器(Image Encoder)和文本编码器(Text Encoder),分别用于将图像和文本转换为高维特征向量。在训练过程中,模型会学习使匹配的图文对在特征空间中更接近,而不匹配的图文对更远离。

图文预训练借鉴了文本预训练的范式,对图文输入进行预训练,并应用于下游图文交互任务

图文预训练下游任务:VQA

VQA(Visual Question Answering)的任务是给定一张图片和一个与图片内容相关的问题,找到对应的答案。答案的类型由问题的类型确定。比如“is the”类的问题,答案就是“yes”或者“no”。“what color”类型的问题,答案就是“red”、“white”等颜色。实践中通常把整个数据集中的answer进行计数统计,最终转换成一个分类问题。

典型数据集:VQA v2

图文预训练下游任务:NLVR

NLVR (Natural Language for Visual Reasoning),给定一张图片和一个推论,判断这个推论是否正确。实践中是一个二分类问题(“true”或者“false”)。

典型数据集:NLVR2

图文预训练下游任务:图文检索

图文检索(Image Text Retrieval)即给定图片检索相关文本或者给定文本检索相关图片。通常关注的指标是Recall@top n。

典型数据集:Flickr30k

小结

发展脉络

开山鼻祖:2018年Bert

2018年,BERT横空出世,在NLP领域建立了预训练的范式,这种充分利用大量无标注数据从而碾压下游任务的范式取得了极大成功,使得CV领域和图文领域在接下来的几年,一直在努力引入这种成功的范式。

2019年图文领域对应的工作出来了,比较典型的有VisualBERTVL-BERT,还有相对较晚的UNITER。从名字就可以看出,这些工作受BERT的启发,本身的工作也都和BERT很像。

我们回到当时的场景思考一下,如何把图文的数据都丢到BERT里去呢?文本部分还好,不用改,主要的问题在于图片怎么转换成embedding?这里可以有很多不同方式,早期的方法通常是先对图片做通用的目标检测,得到一系列的region box,然后过CNN,得到一系列图片embedding。

输入搞定了,预训练任务怎么扩展?文本可以继续使用MLM,图片部分怎么处理?

  • VisualBERT参考BERT里的NSP(给定一个文本pair判断是否是连贯上下文)提出了Sentence-image prediction,也就是给定一个图文对判断是随机组合还是原始组合。
  • VL-BERT的做法是参考MLM,提出了Masked RoI Classification with Linguistic Clues,也就是将一部分region mask掉,然后根据文本和其他图片信息去预测这个region的类目。
  • UNITER将这些预训练任务整理了下:
    • 将mask region类的任务称为Masked Region Modeling (MRM),这里面又可以分为回归和分类。
    • 将图文匹配的任务称为Image-Text Matching (ITM)
    • 将细粒度的图文匹配任务称为Word-Region Alignment (WRA)。这里使用了Optimal Transport (OT)的思想,将细粒度的对齐问题建模成一个运输优化问题。
    • UNITER还对不同的预训练任务做了消融实验,其结论为:预训练任务的作用排序:MLM > ITM > MRC > WRA

预训练范式方面,这些工作直接用BERT的参数初始化模型,然后再进行图文预训练。

数据方面,这些工作通常都是使用开源的图文数据集,如CC、COCO,体量大致在百万级别。

这里的预训练范式也改成了:

  • 1.单模态预训练
    • 图片用BEIT
    • 文本用BERT
  • 2.图文预训练

预训练范式改进了以后,性能又得到了提升。

2021年METER是一个整合的工作,它就训练任务、模型架构等方面做过大量比较,结论是:

  • 模型结构:
    • 融合头用cross-attention优于用merge-attention
    • backbone最佳组合:RoBERTa + Swin Transformer / CLIP-ViT
    • decoder类型的结构并不能带来增益
  • 预训练任务:
    • MLM + ITM是基石,图片的mask预训练任务像MIM其实可有可无(注意这里是多模态数据预训练时,前置的单图预训练还是很有增益的)

除此之外METER还分享了两点经验:

  • 按照参数是否随机初始化而设置不同的学习率,也能带来较多的提升。
  • 提高图片像素可以带来较大提升。

大杀四方:2020年 ViT 

2020年,CV圈也迎来了里程碑式的工作:ViT,它对图片输入的处理简单粗暴,直接划分成16 × 16个patch,并在论文的题目中宣称:“一张图等于16 × 16个字”。ViT引发了transformer在CV界的广泛应用,于是自然有人将这个思路引入到图文预训练中来,这就是ViLT

ViLT的做法其实几乎和UNITER如出一辙,不过将所有的region都替换成了patch。这里会产生一个小问题:region是有类别的,而patch因为是随机切分,没有类别,所以也就没有MRM这类的任务了。不过这个影响不大,因为MRM的贡献本来就不大。

ViLT和UNITER不同的是,ViLT基于ViT参数进行了初始化,而UNITER是基于BERT。另外ViLT也提出了两个提点建议:全词mask和图片的数据增强。

那引入patch有什么好处呢?

  • 提速:ViLT和UNITER的预测速度比为15ms:900ms,而diff部分也主要来自于目标检测的耗时。
  • 结构统一、简单。图片省去了额外的特征提取操作。

但整体来说,ViLT的性能并没有优于UNITER,它的贡献在于让大家认识到省掉目标检测是可能的;且这是一个工业应用affordable的方案。我们也在实际应用中采用了ViLT的方案,在下游任务上取得了不错的效果。

增光添彩:2021年 CLIP

2021年图文领域也出现了一个里程碑式的工作:CLIP。CLIP最初的动机是学习一个迁移性能好的图片表示。它的想法很简单:用文本信息作为弱监督,通过对比学习来学习图片表示。它的整体架构很简单,采用了文本encoder和图片encoder双流的结构,融合的head只是一个简单的相似度计算。

那么优秀的迁移性是通过什么实现的呢?

  • 基于wikipedia的海量图文对(4亿对),涵盖各种领域。
  • 基于和文本表示对比学习的弱监督:文本表示相比于类目信息量更丰富。

CLIP最终的性能是令人惊艳的,最让人惊艳的是图文匹配的能力。当时一些基于CLIP去做以文搜图、以文搜视频的应用层出不穷。这个结果给人一种感觉:对比学习在跨模态对齐的任务中,大有可为

CLIP这种双流结构+对比学习在模态对齐的任务上效果拔群,但在VQA这中分类任务中就表现平平了。究其原因,还是因为CLIP的融合头太简单了,于是出现了一些后续工作,将双流+对比学习的范式和之前的单流范式进行结合。

首先出现的是CLiP-ViL:文本还是不变,图片先过CLIP的图片encoder生成一系列图片表示,然后再一起进入一个单流的transformer。这种范式,也就是先多流后单流,后来称为新的潮流。

采用先多流后单流范式的影响力更大的工作是ALBEF

ALBEF前面的多流和CLIP一样,做对比学习。而它是这么解释为什么要先多流对比学习的:

  • 图文embedding对齐后,让单流的融合头学习更容易。
  • 单模态(特别是图片)的encoder可以学得更好。
  • 相对于之前简单的ITM,可以引入更多负例。

另外考虑到现实数据可能比较noisy,ALBEF还提出了MoD(momentum distillation)。整体思路就是引入动量更新,即一个相对平滑的teacher模型,用于生成伪标签,让目标模型利用伪标签进行一致性正则约束。

但不得不说的是,既然引入了对比学习,鉴于CLIP的经验,图文预训练的数据其实应该更多。因此ALBEF除了和之前其他工作对齐的百万级数据外,海训练了千万级数据的版本。至此,ALBEF的性能碾压了UNITER,基于patch的方案也终于在数据量和对比学习的加持下,打败了基于region的方案。

除了这种先多流后单流的方式,还有没有其他可能的方式去引进对比学习呢?有没有办法改造下单流让它可以直接使用对比学习呢?VLMO提供了另一种思路:我们可以只替换ffn来表示不同模态的encoder(MoME),这样encoder其他地方都可以复用,attention也只有self attention,没有cross attention。

这里的预训练范式也改成了:

  • 1.单模态预训练
    • 图片用BEIT
    • 文本用BERT
  • 2.图文预训练

预训练范式改进了以后,性能又得到了提升。

暴力美学:Florence

为了追求极致性能,后面出现了一些彻底“不讲武德”的工作,继续充分挖掘大模型、大数据。

Florence在做图文对比学习时,直接怼了9亿图文对;再配合roberta的预训练文本encoder(VQA架构基于METER),最终效果也再度炸裂。

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

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

相关文章

通过阿里云Milvus与PAI搭建高效的检索增强对话系统

阿里云Milvus现已无缝集成于阿里云PAI平台,一站式赋能用户构建高性能的RAG(Retrieval-Augmented Generation)对话系统。您可以利用Milvus作为向量数据的实时存储与检索核心,高效结合PAI和LangChain技术栈,实现从理论到…

数学建模算法与应用 第8章 时间序列分析

目录 8.1 确定性时间序列分析方法 Matlab代码示例:移动平均法提取趋势 8.2 平稳时间序列模型 Matlab代码示例:差分法与ADF检验 8.3 时间序列的Matlab相关工具箱及命令 Matlab代码示例:ARIMA模型的建立 8.4 ARIMA序列与季节性序列 Matl…

【Golang】Go语言中缓冲bufio的原理解读与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Ubuntu关闭anaconda自动进入base虚拟环境

问题描述:安装好Anconda后,每次打开终端后都会自动进入到base的虚拟环境中去 直接使用通常情况下也不会有什么影响,但是为了避免,有以下两个方法: 1.使用conda deactivate #每次使用conda deactivate,退…

鸿蒙开发(NEXT/API 12)【ArkWeb接入密码保险箱】系统安全

网页中的登录表单,登录成功后,用户可将用户名和密码保存到鸿蒙系统密码保险箱中。再次打开该网页时,密码保险箱可以提供用户名、密码的自动填充。 手机使用场景 在网站中输入用户名、密码,登陆成功后,ArkWeb会提示将用…

线程池的核心参数——Java全栈知识(50)

线程池的核心参数 线程池核心参数主要参考ThreadPoolExecutor这个类的7个参数的构造函数 corePoolSize 核心线程数目maximumPoolSize 最大线程数目 (核心线程救急线程的最大数目)keepAliveTime 生存时间 - 救急线程的生存时间,生存时间内没有新任务,此…

前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)

前端Vue字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin) 引言 最近前端引入了UI给的思源黑体字体文件,但是字体文件过于庞大,会降低页面首次加载的速度,目前我的项目中需要用到如下三个字体文…

视频理解模型

LSTM 视频分解成图片帧分别进行特征提取,最后把提取到的特征放到LSTM网络里提取时序信息。 3D-ConvNet 把一组图片帧作为一个整体输入到3D卷积网络中,由于多了一个维度,参数变得多,模型变深,但当时没有大量的视频数…

PMP--冲刺题--解题--71-80

文章目录 14.敏捷--合规--测试无问题,安全团队却拒绝部署,则意味着可能存在某方面安全问题71、 [单选] 一个项目经理正在为一家政府所有的公司管理一个采用迭代方法的项目。第一个有用的生产发布由三次迭代组成。每次迭代都在测试环境中成功通过了客户代…

qwt实现码流柱状图多色柱体显示

qwt实现码流柱状图多色柱体显示 1. 前言2. qt实现柱状图3.qwt基础说明3.1 qwt安装与使用3.1.1 下载qwt源码3.1.2 编译3.1.3 安装3.1.4 使用3.2 QwtPlotBarChart类3.2.1画图步骤3.2.2 specialSymbol3.3.3 barTitle4 BsBarChart定制4.1 每个柱体可以显示不同的颜色4.2 每个柱体可…

网络安全-IPv4和IPv6的区别

1. 2409:8c20:6:1135:0:ff:b027:210d。 这是一个IPv6地址。IPv6(互联网协议版本6)是用于标识网络中的设备的一种协议,它可以提供比IPv4更大的地址空间。这个地址由八组十六进制数字组成,每组之间用冒号分隔。IPv6地址通常用于替代…

大数据毕业设计选题推荐-B站热门视频数据分析-Python数据可视化-Hive-Hadoop-Spark

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Python 工具库每日推荐【Pillow】

文章目录 引言Python图像处理库的重要性今日推荐:Pillow工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:创建图像拼贴案例分析高级特性图像增强图像水印扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript 设计模式 专栏,感兴…

数学建模算法与应用 第5章 插值与拟合方法

目录 5.1 插值方法 Matlab代码示例:线性插值 Matlab代码示例:样条插值 5.2 曲线拟合的线性最小二乘法 Matlab代码示例:线性拟合 5.3 最小二乘优化与多项式拟合 Matlab代码示例:多项式拟合 5.4 曲线拟合与函数逼近 Matlab代…

深入理解链表(SList)操作

目录: 一、 链表介绍1.1、 为什么引入链表1.2、 链表的概念及结构1.3、 链表的分类 二、 无头单向非[循环链表](https://so.csdn.net/so/search?q循环链表&spm1001.2101.3001.7020)的实现2.1、 [单链表](https://so.csdn.net/so/search?q单链表&spm1001.2…

系统架构师备考记忆不太清楚的点-信息系统-需求分析

霍尔三维结构 逻辑维:解决问题的逻辑过程 过程有明确问题、确立目标、系统综合、系统分析、优化、系统决策、实施计划 时间维:工作进度 这个纬度则是做工作计划的输出 有 规划阶段、拟定方案、研制阶段、生产阶段、安装阶段、运行阶段、更新阶段 知…

TiDB 优化器丨执行计划和 SQL 算子解读最佳实践

导读 在数据库系统中,查询优化器是数据库管理系统的核心组成部分,负责将用户的 SQL 查询转化为高效的执行计划,因而会直接影响用户体感的性能与稳定性。优化器的设计与实现过程充满挑战,有人比喻称这是数据库技术要持续攀登的珠穆…

Android SELinux——基础介绍(一)

Android 系统的安全策略是保护用户的隐私和数据不受侵害的重要保证,一个相对安全的计算环境对于确保移动设备的安全至关重要。随着新的威胁不断出现,Android 的安全策略也在不断发展和完善,以应对新的挑战。 一、概念介绍 1、SELinux SELin…

图像处理(一)——CMC特刊推荐

特刊征稿 01 期刊名称: Data and Image Processing in Intelligent Information Systems 截止时间: 提交截止日期:2024年11月15日 目标及范围: 感兴趣的主题包括但不限于: 先进的数据处理技术; 智能数据分析; 智能系统…

【论文阅读】DeepAC:实时六自由度目标跟踪的深度主动轮廓

Deep Active Contour for Real-time 6-DoF Object Tracking ICCV 2023 Project Page 【Question&Thinking】 解决的问题? RGB 视频的实时六自由度目标跟踪 现有的问题?提出的方法?达到的效果?存在的问题? Abst…