【论文精读】多模态系列:ALBEF、VLMo、BLIP、CoCa、BeiTv3

系列文章目录

【论文精读】CLIP:Learning Transferable Visual Models From Natural Language Supervision 从自然语言监督中学习可迁移的视觉模型
论文精读】CLIP 改进工作(LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso、CLIP4clip、ActionCLIP)

文章目录

  • 系列文章目录
  • 一、ALBEF:基于动量蒸馏的视觉语言表示学习
    • (一)主要贡献
    • (二)模型架构
    • (三)损失函数
    • (四)动量蒸馏
  • 二、VLMo:混合模态专家的统一视觉语言预训练
    • (一)主要贡献
    • (二)模型架构
    • (三)训练方式(分阶段的训练策略)
  • 三、BLIP:用于统一视觉语言理解和生成的引导语言图像预训练
    • (一)主要贡献
    • (二)模型架构
    • (三)Bootstrapping
  • 四、CoCa:对比字幕是图像文本基础模型
  • 五、BeiTv3:把图像作为一种语言


只用transformer的encoder的一些方法:CLIP、ViLT、ALBEF、VLMo
transformer的encoder和decoder一起的一些方法:BLIP、CoCa、BEIT v3、PaLI

一、ALBEF:基于动量蒸馏的视觉语言表示学习

(一)主要贡献

  • 引入了一种对比损失,通过跨模态注意力在融合之前将图像和文本表示对齐(Align before Fuse)
  • 类似ViLT模型采用vision transformer对图像特征进行处理,因此预训练过程也不需要目标检测器,进而不需要边界框注释或高分辨率图像
  • 提出动量蒸馏(从动量模型产生的伪目标中学习的自训练方法),从而解决noisy web data的问题

(二)模型架构

图像处理:
给定任何一张图片,按照vision transformer的方法,打成patch,然后通过patch embedding layer,送进vision transformer,图像这边对应的编码器就是一个标准的12层的vision transformer的base模型

文本处理:
将12层的bert model拆分成了两个部分,前6层用于做文本编码器,后6层用于做多模态融合的编码器。

momentum model: 不仅用于完成momentum distillation,而且能够生成更多的negatives
在这里插入图片描述

(三)损失函数

损失函数:ITC Loss、ITM Loss、MLM Loss

  • ITC Loss: Image-text 对比学习损失
    在这里插入图片描述

  • ITM Loss: Image-Text 匹配损失
    在这里插入图片描述

  • MLM Loss:遮蔽语言模型交叉熵损失
    在这里插入图片描述

最终的损失函数为:
在这里插入图片描述

(四)动量蒸馏

提出动量蒸馏的动机:

  • 用于预训练的图像文本对主要是从网络上收集的,并且它们往往是有噪声的。正对通常是弱相关的:文本可能包含与图像无关的单词,或者图像可能包含文本中未描述的实体。
  • 对于 ITC 学习,图像的否定文本也可能与图像的内容匹配。
  • 对于 MLM,可能存在与同样好(或更好)描述图像的注释不同的其他词。
  • 然而,ITC 和 MLM 的独热标签会惩罚所有负面预测,无论其正确性如何。

动量蒸馏的思想: 从动量模型生成的伪目标中学习(自训练模式)

  • 这里的伪标签其实就是一个softmax score,它不再是一个one hot label了
  • 动量模型的构建其实就是在已有的模型之上,去做指数移动平均(EMA)
  • 训练的目的不仅仅是使得预测结果与ground truth的one hot label尽可能的接近,而且能够与动量模型生成的伪标签尽可能的匹配。

在这里插入图片描述
在这里插入图片描述

二、VLMo:混合模态专家的统一视觉语言预训练

(一)主要贡献

  • 模型结构上的改进:Mixture of experts,其实就是自注意力中所有的模态都是共享的,但是在feed forward FC层,每个模态会对应自己不同的expert。
  • 训练方式上的改进:考虑到视觉领域和nlp领域都有自己各自的大规模数据集,而多模态领域当时还缺乏较大的数据集,作者提出了分阶段的模型预训练方法,利用视觉数据集训练好vision expert,然后把language expert在language数据集上训练好,然后再在多模态的数据集上做pre-training

(二)模型架构

VLMo实际上也是一个transformer encoder的结构,但是在每个transformer block里做了一些改动:

  • 一个标准的transformer block:一个Layer Norm+一个MSA(multi-head self-attention)+一个Layer Norm+一个FFN(feed-forward network)+一个residual
  • 改动之后的transformer block的feed-forward network不是一个,而是根据不同的输入不同的模态有对应的vision FFN、language FFN、vision language FFN

VLMo的损失函数也是ITC、ITM和MLM
在这里插入图片描述

(三)训练方式(分阶段的训练策略)

使用纯图像和纯文本语料库进行阶段性预训练。

  • vision pre-training:在大规模纯图像数据上预训练视觉专家(V-FFN)和自注意力模块,如 BEIT中所示。
  • language pre-training:冻结视觉专家和自注意力模块的参数,并通过对大量纯文本数据进行掩码语言建模来训练语言专家(L-FFN)。
  • vision-language pre-training:通过视觉语言预训练来训练整个模型。

在这里插入图片描述

三、BLIP:用于统一视觉语言理解和生成的引导语言图像预训练

(一)主要贡献

  • Bootstrapping:如果你有一个从网页上爬取下来的很嘈杂的数据集,先用它去训练一个模型,然后通过一些方法得到一些更干净的数据,然后用这些更干净的数据能不能训练得到更好的模型
  • unified:统一了视觉语言理解和生成的任务

(二)模型架构

BLIP模型主要包括了四个部分:

  • 图像方面:一个完整的ViT模型
  • 文本方面:三个模型,分别用于计算三个目标函数
    • 第一个文本模型:根据输入的文本去做understanding的分类任务,因此当得到文本特征之后,与视觉特征做ITC Loss
    • 第二个文本模型:是一个多模态编码器(image-grounded text encoder),借助了图像的信息,然后去完成多模态的任务,对应ITM Loss
    • 第三个文本模型:(image-grounded text decoder),第一层采用的是causal self-attention(因果关系的自注意力),从而完成生成任务,目标函数基于GPT系列的language modelling,给定一些词去预测剩下的词
      在这里插入图片描述

三个文本模型对应的token不一样:cls token、encode token、decode token

(三)Bootstrapping

采用标题和过滤策略(Captioning and Filtering, CapFilt)来提高文本语料库的质量,包含了两个模块:一个是给定网络图像生成字幕的Captioner,另一个是去除噪声图像-文本对的Filter。Captioner和Filter都是从同一个预训练的MED模型初始化的,在COCO数据集上单独进行微调。

  • Captioner以LM为目标进行微调,对给定的图像进行文本解码生成caption;
  • Filter以ITC和ITM的目标进行微调,以学习文本是否与图像匹配,该Filter去除原始网络文本和合成文本中的噪音文本,如果ITM头预测一个文本与图像不匹配,则该文本被认为是噪音。

将最终获得的新的干净的数据集拿来再次训练BLIP,获得的模型效果提升非常显著

在这里插入图片描述

四、CoCa:对比字幕是图像文本基础模型

CoCa模型结构与ALBEF模型很像,因为想做caption的文本生成,因此文本端使用的decoder

CoCa模型的两个loss:

  • contrastive loss:就是ITC loss
  • captioning loss:其实就是BLIP里用的language modeling loss,也就是GPT用的loss

在这里插入图片描述

五、BeiTv3:把图像作为一种语言

通过对海量数据进行大规模预训练,可以轻松地将模型转移到各种下游任务中。有吸引力的是,我们可以预训练一个处理多种模式的通用基础模型。以下三个方面推进了视觉-语言预训练的融合趋势:

  • transformer适用于各种modality,从语言领域渗透到了视觉和多模态等领域
    • dual-encoder:双编码器架构(CLIP),适合做高效检索(retrieval)任务
    • encoder-decoder:编码器-解码器架构(BLIP,CoCa),适合做生成任务
    • fusion-encoder:融合编码器架构(ALBEF,VLMo),适合做图像文本编码
  • 预训练目标函数:masked data modeling已经成功的应用到了各类模态当中了
    • 当前的视觉语言基础模型通常会同时处理其他预训练目标(例如图像文本匹配),导致扩展不友好且效率低下。
    • 相比之下,文章提出的BeiTv3仅使用一项预训练任务,即“mask-then-predict”来训练通用的多模态基础模型。通过将图像视为外语(即 Imglish),以相同的方式处理文本和图像,而没有基本的建模差异。因此,图像-文本对被用作“平行句子”,以学习模态之间的对齐。
  • 扩大模型规模和数据规模

在这里插入图片描述
BEIT3使用了多路Transformer来作为图像,文本和多模态数据的统一架构,之前大部分的工作都是各个部分有独立的子模型。这个多路Transformer其实也是微软之前的工作VLMo,多路Transformer的核心是模型的MHSA模块是共享的,而设置不同的FFN来分别处理图像(V-FFN),文本(L-FFN)和多模态数据(VL-FFN)。

在这里插入图片描述

这种设计让不同的数据共享了模型架构,而且还可以灵活地应用在各种下游任务中:比如对纯视觉任务,只需要用MHSA+V-FFN部分就好,而纯文本任务只用MHSA+L-FFN,而对于多模态任务和灵活地组合不同的FFN。

在这里插入图片描述

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

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

相关文章

机器学习:基于Sklearn框架,使用逻辑回归对由心脏病引发的死亡进行预测分析

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

Linux网络编程---多路I/O转接服务器(一)

多路I/O转接服务器 多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。 主要使用的方法有三种:select、poll、epoll 一、select多路IO转接 让内核去…

js实现倒计时效果

实现效果 实现代码 const computingTime startTime > {// 目标日期const targetDate new Date(startTime).getTime();// 每秒更新倒计时const timer setInterval(function() {// 当前时间const now new Date().getTime();// 距离目标时间的毫秒数const distance targe…

vue3中使用animate.css

在vue3中使用animate.css 20240428_093614 引入:npm install animate.css --save main.js注册:import ‘animate.css/animate.min.css’ 注意:import ‘animate.css’ 不适合在vue3项目 使用:class“animate__animated 动画名称”…

Matlab实现CNN-BiLSTM模型,对一维时序信号进行分类

1、利用Matlab2021b训练CNN-BiLSTM模型,对采集的一维时序信号进行分类二分类或多分类 2、CNN-BiLSTM时序信号多分类执行结果截图 训练进度: 网络分析: 指标变化趋势: 代码下载方式(代码含数据集与模型构建&#xff0…

Vue3 v3.4之前如何实现组件中多个值的双向绑定?

文章目录 基础代码1. watch2. computed&#xff08;推荐&#xff09; 官方给的例子是关于el-input的&#xff0c;如下。但是input不是所有组件标签都有的属性啊&#xff0c;有没有一种通用的办法呢&#xff1f; <script setup> defineProps({firstName: String,lastName…

【调研分析】目标在不同焦距和距离下与画面的比例(2.8-3.6-4.0)

之前在做项目中需要极度优化效果和代码运行速度 为此测试了同一个目标在不同焦距和距离下与画面的比例&#xff0c;从而可以方便在指定大小情况下搜索目标 NOTE: 这是早期滑窗检测做目标检测下的工作

浅谈OpenCV 粗略计算工件轮廓面积和外接圆直径(Emgu.CV)

前言 最近领导在做库房工具管理这块的功能&#xff0c;希望能集成OpenCV 粗略的计算出工具的长度&#xff0c;以方便用户再归还工具的时候&#xff0c;提示用户该放在那种尺寸的盒子里面&#xff0c;这便是这篇文章的由来。 我们的系统是基于.net开发的&#xff0c;所以采用的是…

分布式系统事务一致性解决方案(基于事务消息)

参考&#xff1a;https://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/ 文章目录 概要错误的方案方案一&#xff1a;业务方自己实现方案二&#xff1a;RocketMQ 事务消息什么是事务消息事务消息处理流程事务消息生命周期使用限制使用示例使用建议 概要 …

MATLAB语音信号分析与合成——MATLAB语音信号分析学习资料汇总(图书、代码和视频)

教科书&#xff1a;MATLAB语音信号分析与合成&#xff08;第2版&#xff09; 链接&#xff08;含配套源代码&#xff09;&#xff1a;https://pan.baidu.com/s/1pXMPD_9TRpJmubPGaRKANw?pwd32rf 提取码&#xff1a;32rf 基础入门视频&#xff1a; 视频链接&#xff1a; 清…

急急急!微信朋友圈删除了怎么恢复?

微信朋友圈是我们与朋友分享生活点滴的重要平台&#xff0c;但有时候微信出现异常&#xff0c;导致我们编辑好的朋友圈被删除了&#xff0c;这时候该怎么办呢&#xff1f; 幸运的是&#xff0c;微信提供了一种简单的方式来恢复已删除的朋友圈内容。微信朋友圈删除了怎么恢复&a…

利用二叉检索树将文章中的单词建立索引(正则表达式)

知识储备 链接: 【二叉检索树的实现——增删改查、读取命令文件、将结果写入新文件】 1、正则表达式的处理 &#xff08;1&#xff09;r’前缀的作用 r’前缀的用于定义原始字符串&#xff0c;特点是不会处理反斜杠\作为转义字符 &#xff08;2&#xff09;正则表达式中元…

场外个股期权开户新规及操作方法

场外个股期权开户新规 场外个股期权开户新规主要涉及对投资者资产实力、专业知识、风险承受能力和诚信记录的要求。以下是根据最新规定总结的关键要点&#xff1a; 来源/&#xff1a;股指研究院 资产门槛&#xff1a;投资者需具备一定的资产实力&#xff0c;确保在申请开户前…

【Linux】文件打包解压_tar_zip

文章目录 &#x1f4d1;引言&#xff1a;一、文件打包压缩1.1 什么是文件打包压缩&#xff1f;1.2 为什么需要文件打包压缩&#xff1f; 二、打包解压2.1 zip2.2 unzip2.3 tar指令 &#x1f324;️全篇小结&#xff1a; &#x1f4d1;引言&#xff1a; 在Linux操作系统中&#…

OpenCV-Python: 强大的计算机视觉库

文章目录 OpenCV-Python: 强大的计算机视觉库背景OpenCV-Python是什么&#xff1f;安装简单的库函数使用方法场景示例人脸检测和识别图像分割目标跟踪 常见问题和解决方案总结 OpenCV-Python: 强大的计算机视觉库 背景 OpenCV (Open Source Computer Vision Library) 是一个开…

如何修改php版本

我使用的Hostease的Windows虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机&#xff0c;但是没有找到切换PHP以及查看PHP有哪些版本的位置&#xff0c;因此咨询了Hostease的技术支持&#xff0c;寻求帮助了解到可以实现在Plesk面板上找到此切换PHP版本的按钮…

基于Springboot+Vue的Java项目-火车票订票系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

GDPU 算法分析与设计 天码行空5

一、【实验目的】 &#xff08;1&#xff09;熟悉动态规划算法的基本思想. &#xff08;2&#xff09;理解动态规划算法中子问题的划分和递推方程设计的基本方法. &#xff08;3&#xff09;熟悉矩阵链乘法的基本思想并编程实现。 二、【实验内容】 输入:矩阵链Ai…j的输入为…

Power BI:如何将文件夹批量Excel(多sheet页)文件导入?

故事背景&#xff1a; 业务同事想用Power BI分析近两年市场费用。 数据源全部是Excel文件&#xff0c;并且以每月一个Excel文件的方式&#xff0c;统一存放到同一文件夹下面。 重点&#xff0c;每张Excel文件会有多张sheet页&#xff0c;用区分每家分公司的费用信息。 目前…

Linux之进程间通信(二)

system V system V共享内存是内核中专门设计的通信的方式, 粗粒度划分操作系统分为进程管理, 内存管理, 文件系统, 驱动管理.., 粒度更细地分还有 进程间通信模块. 对于操作系统, 通信的场景有很多, 有以传送数据, 快速传送数据, 传送特定数据块, 进程间协同与控制以目的, 它…