【计算机视觉】BLIP:统一理解和生成的自举多模态模型

文章目录

  • 一、导读
  • 二、背景和动机
  • 三、方法
    • 3.1 模型架构
    • 3.2 预训练目标
    • 3.3 BLIP 高效率利用噪声网络数据的方法:CapFilt
  • 四、实验
    • 4.1 实验结果
    • 4.2 各个下游任务 BLIP 与其他 VLP 模型的对比

一、导读

BLIP 是一种多模态 Transformer 模型,主要针对以往的视觉语言训练 (Vision-Language Pre-training, VLP) 框架的两个常见问题:

  • 大多数现有的预训练模型仅在基于理解的任务或者基于生成的任务方面表现出色,很少有可以兼顾的模型。
  • 大多数现有的预训练模型为了提高性能,使用从网络收集的嘈杂图像-文本对扩展数据集。这样虽然提高了性能,但是很明显这个带噪声的监督信号肯定不是最优的。

BLIP 这种新的 VLP 框架可以灵活地在视觉理解任务上和生成任务上面迁移,这是针对第一个问题的贡献。

至于第二个问题,BLIP 提出了一种高效率利用噪声网络数据的方法。即先使用嘈杂数据训练一遍 BLIP,再使用 BLIP 的生成功能生成一系列通过预训练的 Captioner 生成一系列的字幕,再把这些生成的字幕通过预训练的 Filter 过滤一遍,得到干净的数据。最后再使用干净的数据训练一遍 BLIP。

在这里插入图片描述
论文地址:

https://larxiv.org/pdf/2201.12086.pdf

代码地址:

https://github.com/salesforce/BLIP

二、背景和动机

视觉语言训练 (Vision-Language Pre-training, VLP) 最近在各种多模态下游任务上取得了巨大的成功。然而,现有方法有两个主要限制:

  • 模型层面: 大多数现有的预训练模型仅在基于理解的任务或者基于生成的任务方面表现出色,很少有可以兼顾的模型。比如,基于编码器的模型,像 CLIP,ALBEF 不能直接转移到文本生成任务 (比如图像字幕),而基于编码器-解码器的模型,像 SimVLM 不能直接用于图像文本检索任务。
  • 数据层面:大多数现有的预训练模型为了提高性能,使用从网络收集的嘈杂图像-文本对扩展数据集。这样虽然提高了性能,但是很明显这个带噪声的监督信号肯定不是最优的。

本文提出了 BLIP:Bootstrapping LanguageImage Pre-training,用于统一的视觉语言理解和生成。BLIP 是一种新的 VLP 框架,与现有的方法相比,它可以实现更广泛的下游任务。它分别从模型和数据的角度引入了两个贡献:

  1. BLIP 提出了一种编码器-解码器混合架构 (Multimodal mixture of Encoder-Decoder, MED),MED 的特点是很灵活,它既可以作为单模态的编码器,又可以作为基于图像的文本编码器,或者基于图像的文本解码器。BLIP 由三个视觉语言目标联合训练:图像文本的对比学习、图像文本匹配和图像条件语言建模。

  2. BLIP 提出了一种高效率利用噪声网络数据的方法。即先使用嘈杂数据训练一遍 BLIP,再使用 BLIP 的生成功能生成一系列通过预训练的 Captioner 生成一系列的字幕,再把这些生成的字幕通过预训练的 Filter 过滤一遍,从原始网络文本和合成文本中删除嘈杂的字幕,得到干净的数据。最后再使用干净的数据训练一遍 BLIP。

三、方法

3.1 模型架构

在这里插入图片描述
最左边的是视觉编码器,就是 ViT 的架构。将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征。

视觉编码器不采用之前的基于目标检测器的形式,因为 ViLT 和 SimVLM 等工作已经证明了 ViT 计算更加友好。

第2列的是视觉编码器,就是 BERT 的架构,其中 [CLS] token 附加到文本输入的开头以总结句子。作用是提取文本特征做对比学习。

第3列的是视觉文本编码器,使用 Cross-Attention,作用是根据 ViT 给的图片特征和文本输入做二分类,所以使用的是编码器,且注意力部分是双向的 Self-Attention。添加一个额外的 [Encode] token,作为图像文本的联合表征。

第4列的是视觉文本解码器,使用 Cross-Attention,作用是根据 ViT 给的图片特征和文本输入做文本生成的任务,所以使用的是解码器,且注意力部分是 Casual-Attention,目标是预测下一个 token。添加一个额外的 [Decode] token 和结束 token,作为生成结果的起点和终点。

一个需要注意的点是:相同颜色的部分是参数共享的,即视觉文本编码器和视觉文本解码器共享除 Self-Attention 层之外的所有参数。每个 image-text 在输入时,image 部分只需要过一个 ViT 模型,text 部分需要过3次文本模型。

3.2 预训练目标

BLIP 在预训练期间联合优化了3个目标,有两个理解任务的目标函数和一个生成任务的目标函数。

  • 对比学习目标函数 (Image-Text Contrastive Loss, ITC)

ITC 作用于1 视觉编码器 和 2 文本编码器,目标是对齐视觉和文本的特征空间。方法是使得正样本图文对的相似性更大,负样本图文对的相似性更低,在 ALBEF 里面也有使用到。作者在这里依然使用了 ALBEF 中的动量编码器,它的目的是产生一些伪标签,辅助模型的训练。

  • 图文匹配目标函数 (Image-Text Matching Loss, ITM)

ITM 作用于1 视觉编码器 和 3 视觉文本编码器,目标是学习图像文本的联合表征,以捕获视觉和语言之间的细粒度对齐。ITM 是一个二分类任务,使用一个分类头来预测图像文本对是正样本还是负样本。作者在这里依然使用了 ALBEF 中的 hard negative mining 技术。

  • 语言模型目标函数 (Language Modeling Loss, LM)

BLIP 包含解码器,用于生成任务。既然有这个任务需求,那就意味着需要一个针对于生成任务的语言模型目标函数。LM 作用于1 视觉编码器 和 4 视觉文本编码器,目标是根据给定的图像以自回归方式来生成关于文本的描述。与 VLP 中广泛使用的 MLM 损失 (完形填空) 相比,LM 使模型能够将视觉信息转换为连贯的字幕。

3.3 BLIP 高效率利用噪声网络数据的方法:CapFilt

高质量的人工注释图像-文本对 { I h , T h } \{I_h, T_h\} {Ih,Th}(例如, COCO) 因为成本高昂所以数量不多。最近的工作 ALBEF, SimVLM 利用从网络自动收集的大量替代的图文对 { I w , T w } \{I_w, T_w\} {Iw,Tw} 。但是, 这些网络的替代数据集通常不会准确地描述图像的视觉内容, 质量相对嘈杂, 带噪声的监督信号肯定不是最优的。

BLIP 这里提出了一种高效率利用噪声网络数据的方法:Captioning and Filtering,CapFilt。

在这里插入图片描述

CapFilt 方法如上图2所示。它包含两个模块:

字幕器 Captioner: 给一张网络图片,生成字幕。它是一个视觉文本解码器,在 COCO 数据集上使用 LM 目标函数微调。给定网络图片 I w I_w Iw,Captioner 生成字幕 T s T_s Ts

过滤器 Filter: 过滤掉噪声图文对。它是一个视觉文本编码器,看文本是否与图像匹配,在 COCO 数据集上使用 ITC 和 ITM 目标函数微调。Filter 删除原始 Web 文本 T w T_w Tw,和合成文本 T s T_s Ts中的嘈杂文本,如果 ITM 头将其预测为与图像不匹配,则认为文本有噪声。

最后,将过滤后的图像-文本对与人工注释对相结合,形成一个新的数据集,作者用它来预训练一个新的模型。

四、实验

BLIP 在两个 16-GPU 节点上面做预训练,视觉编码器以 ImageNet-1K 上预训练的 ViT 权重初始化,文本编码器以 BERT-Base 的权重初始化。使用 2880 的 Batch Size 训练 20 Epochs。

预训练数据集和 ALBEF 一样:

使用下面4个数据集,图片数加起来大概是 4M。

  • Conceptual Captions
  • SBU Captions
  • COCO
  • Visual Genome

还引入了噪声更大的 Conceptual 12M 数据集,最终将图像总数增加到 14.1M (有的数据集失效了)。作者还尝试了一个额外的 web 数据集 LAION ,该数据集包含 115M 图像,具有更多的噪声文本。

4.1 实验结果

如下图所示,作者比较了在不同数据集上预训练的模型,是一个 CapFilt 的消融实验结果。Retrieval 代表检索任务的结果,Caption 代表生成任务的结果。

当使用 14M 的数据集设置时,联合使用字幕器 Captioner 和过滤器 Filter 可以观察到性能改进,而且它们的效果相互互补,证明了 CapFilt 方法能够从嘈杂的原始数据中提炼出有用的数据。

当使用更大的数据集 129M 的设置或者更大的模型 ViT-L 时,CapFilt 可以进一步提高性能,这验证了它在数据大小和模型大小方面的可扩展性。而且,仅仅增加字幕器和过滤器的模型尺寸时,也可以提高性能。

在这里插入图片描述
下图4中,作者展示了一些示例的字幕与对应的图片。 T w T_w Tw是直接从网络上爬取的原始字幕, T s T_s Ts是字幕器生成的字幕。图4中的红色文本是 Filter 删除的文本,绿色文本是 Filter 保留下来的文本。可以看出几张图片里面,红色的文本不是不好,只是没有绿色的文本对图片的描述更加贴切。这个结果说明了 CapFilt 方法确实是能够提升图文对数据集的质量。

在这里插入图片描述

4.2 各个下游任务 BLIP 与其他 VLP 模型的对比

检索任务实验结果:

如下图所示是检索任务实验结果,作者做了两个数据集 COCO 和 Flickr30K。与现有方法相比,BLIP 实现了显着的性能提升。使用相同的 14M 预训练图像,BLIP 在 COCO 上的平均召回率 R@1 上比之前的最佳模型 ALBEF 高出 +2.7%。作者还通过将在 COCO 上微调的模型直接迁移到 Flickr30K 来做 Zero-Shot Retrieval。结果如图6所示,其中 BLIP 的性能也大大优于现有的方法。

在这里插入图片描述
在这里插入图片描述
图片字幕实验结果:

如下图所示是图片字幕任务实验结果,作者做了两个数据集 NoCaps 和 COCO,两者都使用在 COCO 上微调的模型和 LM 损失进行评估。作者遵循 SimVLM 的做法在每个字幕的开头添加了一个提示 “a picture of”,发现这样使得结果更好了。使用了 14M 预训练图像的 BLIP 大大优于使用相似数量预训练数据的方法。使用了 129M 图像的 BLIP 实现了与使用了 200M 的 LEMON 相比具有竞争力的性能。值得注意的是,LEMON 需要很耗费计算量的预训练的目标检测器和更高分辨率 (800×1333) 的输入图像,导致推理时间比使用低分辨率 (384×384) 输入图像的无检测器 BLIP 慢得多。

在这里插入图片描述
视觉问答 (Visual Question Answering, VQA) 实验结果:

VQA 要求模型预测给定图像和问题的答案。BLIP 没有将 VQA 制定为多答案分类任务,而是按照 ALBEF 的做法把 VQA 视为一种答案生成的任务。结构如下图8所示,在微调过程中,作者重新排列预训练模型,把视觉编码器的输出塞进文本编码器,这样图像和问题就编码为了多模态嵌入,再把这个表征输入文本解码器获得答案。VQA 模型使用真实答案作为目标使用 LM 损失进行微调。

在这里插入图片描述
结果如下图9所示,使用 14M 图像,BLIP 在测试集上优于 ALBEF 1.64%。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023华数杯数学建模A题思路分析 - 隔热材料的结构优化控制研究

# 1 赛题 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性,在航天、军工、石化、建筑、交通等 高科技领域中有着广泛的应用。 目前,由单根隔热材料 A 纤维编织成的织物,其热导率可以直接测出;但是 单根隔热…

【前端】鼠标事件计算与圆心形成的角度

在业务需求中,常常出现一些我们无法完成的效果图,这时需要UI切图给我们,而切图后不可避免的一些点击事件无法方便的监听 如该图圆环,其实是一张单独的图片,这种情况下只能通过js判断用户点击、拖动的鼠标位置&#xf…

【flink】开启savepoint

先启动一个任务 flink run -c com.yang.flink.CDCJob test-cdc.jar开启savepoint 命令: flink savepoint JobID 文件地址 flink savepoint e929a11d79bdc5e6f140f2cfb92e1335 file:///workspace/flinkSavepoints/backend这样就开启好了 操作中的错误 详细信…

xml的注释删要干净Parameter index out of range (2 > number of parameters, which is 1).

报了这个bugjava.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1). 对应sql语句是这样的 把注释删掉,就不报错了,这是什么奇葩bug

SolidWorks 3D Interconnect介绍

目前市面上有的三维设计软件有很多,如UG、Pro/E、CATIA等,而且每个三维设计软件都会生成自己文件格式。由于产品设计的原因,我们避免不了的会需要去使用不同三维设计软件的文件,这对于工程师来说其实是一件比较麻烦的事。 为什么…

简单上手FineBI

简介 安装下载 下载的是V6.0.11版本 设置管理员账号 账号admin 密码123456 新建分析主题 添加数据 选择本地数据上传 选择示例数据上传 打开效果如下,点击“确定”,这样就将示例数据上传到分析主题中 分析数据——编辑数据 如果数据质量好&#xf…

深入理解 Java Bean 的生命周期及各个阶段解析

目录 引言:一、什么是Java Bean二、Bean的生命周期概述三、Bean的创建阶段四、属性设置阶段初始化阶段六、使用阶段七、销毁阶段 引言: Java Bean是Java编程中经常使用的重要概念,它是可重用、可移植、可序列化的组件。在Java开发中&#xf…

数据可视化:Matplotlib详解及实战

1 Matplotlib介绍 Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表。 Matplotlib提供了一个套面向绘图对象编程的API接口,能够很轻松地实现各种图像的绘制,并且它可以配合Python GUI工具(…

k8s手动发布镜像的方法

kubectl edit deploy编辑对应的文件,并:wq!保存即可

微信小程序 - scroll-view组件之上拉加载下拉刷新(解决上拉加载不触发)

前言 最近在做微信小程序项目中,有一个功能就是做一个商品列表分页限流然后实现上拉加载下拉刷新功能,遇到了一个使用scroll-viwe组件下拉刷新事件始终不触发问题,网上很多说给scroll-view设置一个高度啥的就可以解决,有些人设置了…

MySQL 窗口函数

聚合函数作为窗口函数 设聚合函数为op语法结构: op(字段名A) over(partition by 字段名B order by 字段名C rows between D1 and D2) 其中: partition by:按照某一字段将数据进行分组 order by:按照某一字段将数据进行排序&…

获取k8s scale资源对象的命令

kubectl get --raw /apis/<apiGroup>/<apiVersion>/namespaces/<namespaceName>/<resourceKind>/<resourceName>/scale 说明&#xff1a;scale资源对象用来水平扩展k8s资源对象的副本数&#xff0c;它是作为一种k8s资源对象的子资源存在&#xf…

“单片机定时器:灵活计时与创新功能的关键“

学会定时器的使用对单片机来说非常重要&#xff0c;因为它可以帮助实现各种时序电路。时序电路在工业和家用电器的控制中有广泛的应用。 举个例子&#xff0c;我们可以利用单片机实现一个具有按钮控制的楼道灯开关。当按钮按下一次后&#xff0c;灯会亮起并持续3分钟&#xff…

Windows安装子系统Linux

Windows安装子系统(Linux ubuntu&#xff09; 安装条件步骤1.安装WSL命令2.设置Linux用户名和密码3.写个简单的.c程序看看4.如何互传文件 安装条件 Windows 10版本2004及更高的版本才能安装。 步骤 1.安装WSL命令 我们可以使用WSL来安装子系统 Linux ubuntu(默认是这个)。 …

医学影像PACS:大容量图像存储 报告单多种模式及自定义样式

PACS&#xff08;picture archiving and communication system&#xff09;意为影像归档和通信系统。它是应用在医院影像科室的系统&#xff0c;主要的任务就是把日常产生的各种医学影像&#xff08;包括核磁&#xff0c;CT&#xff0c;超声&#xff0c;各种X光机&#xff0c;各…

话费充值系统源码话费直充快充慢充系统源码

话费充值系统/话费直充/快充慢充系统/话费直充系统

学C的第三十二天【动态内存管理】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十一天【通讯录的实现】_高高的胖子的博客-CSDN博客 1 . 为什么存在动态内存分配 学到现在认识的内存开辟方式有两种&#xff1a; 创建变量&#xff1a; int val …

软考 系统分析师和系统架构师 项目管理师

软考整起 https://www.ruankao.org.cn/ 什么是计算机技术与软件&#xff08;初级、中级、高级&#xff09;考试&#xff08;软考&#xff09;&#xff1f; - 知乎 系统分析师和系统架构师关系 这两年&#xff0c;我先后报考了计算机技术与软件专业技术资格&#xff08;水平&a…

pycharm中opencv库导入 cv2. 无函数提示跳出解决方法

pycharm中opencv库导入 cv2. 无函数提示跳出解决方法 1、找到当前解释器安装目录 例如&#xff1a; 2、进入D:\Python37\Lib\site-packages\cv2文件&#xff0c;进入cv2文件夹&#xff1a; 找到cv2.pyd, 把cv2.pyd复制一份&#xff0c;放到上层文件夹下&#xff0c;即site-p…

局域网部署,用WorkPlus视频会议保密又安全

用户采用私有化部署视频会议软件的情况主要有以下几种因素&#xff1a; 1. 针对机密性高的会议&#xff1a;如果有涉及高度机密的商业谈判或敏感信息交流等重要会议&#xff0c;政府、军工、企业等用户会选择局域网内部署视频会议软件&#xff0c;以保证信息安全。 2. 频繁进…