【计算机视觉 | 自然语言处理】BLIP:统一视觉—语言理解和生成任务(论文讲解)

news2024/11/20 12:28:16

文章目录

  • 一、前言
  • 二、试玩效果
  • 三、研究背景
  • 四、模型结构
  • 五、Pre-training objectives
  • 六、CapFilt架构
  • 七、Experiment
  • 八、结论

一、前言

今天我们要介绍的论文是 BLIP,论文全名为 Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

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

https://arxiv.org/pdf/2201.12086.pdf

代码地址为:

https://github.com/salesforce/BLIP

试玩地址为:

https://huggingface.co/spaces/akhaliq/BLIP

在开始正文之前,我们不妨先来试试试玩的效果如何。

二、试玩效果

BLIP 的效果如何呢?用户只需上传一张图像,或单击内置示例加载图像就可完成。

BLIP 模型具有两个功能:

  • 图像标注
  • 回答问题

BLIP 的 Gradio 演示:用于统一视觉-语言理解和生成的引导语言-图像预训练(Salesforce 研究)。 从 2023 年 3 月 23 日起,现在已禁用图像上传。单击其中一个示例以加载它们:

上传著名油画《星夜》,在图像标注功能下模型输出「caption: a painting with many clouds above the city」。

在这里插入图片描述

我们看一下之前其他博主测试的一些效果:

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

根据试玩效果来看还是不错的。

三、研究背景

视觉 - 语言预训练 (Vision-Language Pre-trainingVLP) 提高了许多视觉 - 语言任务的性能。然而,大多数现有的预训练模型只能在基于理解任务(understanding-based tasks)或基于生成任务(generation-based tsaks)中表现出色。

但很少在这两方面都能取得较好的结果。

现有的 VLP 方法主要存在两个局限性:

  1. 从模型角度来讲,大多数方法采用基于编码器的模型,或者采用基于编码器 - 解码器模型。然而,基于编码器的模型很难直接转换到文本生成任务中,而编码器 - 解码器模型还没有成功地用于图像 - 文本检索任务;
  2. 从数据角度来讲,像 CLIPSimVLMSOTA 模型通过在 web 上收集的图像 - 文本对进行预训练,尽管扩大数据集获得了性能提升,但 web 上的文本具有噪声,对 VLP 来说并不是最优。

近日,来自 Salesforce Research 的研究者提出了 BLIP(Bootstrapping Language-Image Pre-training),用于统一视觉 - 语言理解和生成任务。

BLIP 是一个新的 VLP 框架,可以支持比现有方法更广泛的下游任务。

BLIP 通过自展标注(bootstrapping the captions),可以有效地利用带有噪声的 web 数据,其中标注器(captioner)生成标注,过滤器(filter)去除有噪声的标注。

该研究在视觉 - 语言任务上取得了 SOTA 性能,例如在图像 - 文本检索任务上, recall@1 提高 2.7%;在图像标注任务上,CIDEr 提高 2.8%、VQA 提高 +1.6%。

当将 BLIP 以零样本的方式直接迁移到视频 - 语言任务时,BLIP 也表现出很强的泛化能力。

四、模型结构

研究者提出的 BLIP 是一个统一的视觉语言预训练(vision-language pre-training, VLP)框架,从有噪声的图像文本对中学习。

接下来详细解读模型架构 MED(mixture of encoder-decoder)、它的预训练目标以及用于数据集自展的方法 CapFilt。

下图为 BLIP 的预训练模型架构和目标:

在这里插入图片描述

BLIP 采用 Visual Transformer 作为图像编码器,将输入的图像划分为 patch,然后将 patches 编码为一个 embedding 序列,并用一个额外的 [CLS] 标记来代表全局图像特征。与使用预训练的目标检测器进行视觉特征提取相比,使用 ViT 更便于计算,并且已经逐渐成为主流。

为了预训练一个具有理解和生成能力的统一模型,研究人员提出了多模态混合编码器-解码器(MED),能够用于多任务。

  1. 单模态编码器(Unimodal encoder),对图像和文本分别进行编码。文本编码器(text encoder)与 BERT 相同,在文本输入的开头附加一个 [CLS] 标记,以总结句子。
  2. 以图像为基础的文本编码器(Image-grounded text encoder),通过在自注意力(SA)层和前馈网络(FFN)之间为文本编码器的每个 Transformer 块插入一个额外的交叉注意力(CA)层来注入视觉信息。一个特定任务的 [Encode] 标记被附加到文本上,[Encode] 的输出 embedding 被用作图像-文本对的多模态表示。
  3. 以图像为基础的文本解码器(Image-grounded text decoder),用因果自注意力层(causal self-attention layer)替代编码器中的双向自注意力层。用 [Decode] 标记来表示一个序列的开始和结束。

显然,经由上述的三个模块,这个 MED 模型就拥有了同时匹配 generation-based tasks 和 understanding-based tasks 的能力。

五、Pre-training objectives

本文在 pre-training 的时候使用了三个 objectives,分别是两个 understanding-based objectives 和一个 generatin-based objectives。

  1. Image-Text Contrastive Loss (ITC):通过 contrastive learning 的思想,对齐视觉 transformer 和文本 transformer 的特征空间,目的是为了获得更加优质的 image 和 text 的 representation。
  2. Image-Text Matching Loss (ITM):旨在学习 image-text multimodal representation,来捕获视觉和语言的细粒度对齐。简单的来啊说就是图文匹配,最后输出一个二分类,positive or negative。
  3. Image-Text Matching Loss (ITM):三个 tasks 中的生成任务,为给定的图片生成对应的 description。广泛用于 VLP 的 MLM 损失相比,LM 使模型具有将视觉信息转换为连贯字幕的泛化能力。

六、CapFilt架构

由于大规模预训练的文本-图片对通常是从 web 上找出来的,该文本通常无法准确描述图像的视觉内容,从而使它们成为嘈杂的信号,对于学习视觉语言对齐不是最佳的。

由此,作者提出了一个 CapFilt 架构用来提高 image-text pair 的质量。

在这里插入图片描述

如上图所示,其中 I w I_w Iw T w T_w Tw代表 web image-text pair, ( I h , T h ) (I_h, T_h) (Ih,Th)代表高质量的手工标注的 image-text pair。

它引入了两个模块:一个基于 web 图像生成 caption 的 captioner ,以及一个用于去除 image-text pair 噪声的 filter。captioner 和 filter 都是从同一个预训练过的 MED 模型中初始化的,并在 COCO 数据集上单独微调。微调是一个轻量级的过程。

整个过程大概为:先进行 pre_train,之后利用 I h I_h Ih T h T_h Th分别对 captioner 和 filter 进行 finetune,captioner 给定 web 图片生成对应的 caption,filter 利用ITM判断 web 图片-文字对和 web 图片-生成 caption 对是否 match,如果不 match,则过滤掉,最后将过滤后剩余的图片-文字对和 I h I_h Ih T h T_h Th合在一起 pre_train 一个新 model。个人理解比较像一个新颖的 online self-knowledge distillation。

七、Experiment

在这里插入图片描述

上图是提出的 captioner 和 filter 对最后结果的影响。

在这里插入图片描述

上图是 parameters sharing 策略对最后结果的影响。

在这里插入图片描述
上图是 image-text retirval 中与其他 SOTA 任务的对比,可以看出有较大提升。

在这里插入图片描述

上图是与其他 image caption SOTA 方法的对比。

八、结论

作者提出的 BLIP 架构在大范围的 downstream 任务上达到了 SOTA 的效果,其中包括了 understanding-based tasks 和 generation-based tasks。同时模型使用了一种 dataset bootstrapping 的方法来解决 web 中收集的大量 noisy 数据的问题。

作者还提出有几个潜在的方法可能可以提高BLIP的性能:

  • 进行多轮的 dataset bootstrapping
  • 为每幅图片生成多个 caption,来扩大语料库
  • 训练多个 captioner 和 filter,并进行 model ensemble

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

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

相关文章

Node.js 的安装

node.js 通用的安装方式(单版本) Node.js 可以用不同的方式进行安装。 第一种,可以在官网中,根据自己的操作系统,选择对应的安装包。 打开官网网址(Download | Node.js) 第二种,就…

php+vue网盘系统的设计与实现

该网盘系统的开发和设计根据用户的实际情况出发,对系统的需求进行了详细的分析,然后进行系统的整体设计,最后通过测试使得系统设计的更加完整,可以实现系统中所有的功能,在开始编写论文之前亲自到图书馆借阅php书籍&am…

吉时利Keithley6430/6485/6487皮安表测试软件NS-SourceMeter

软件概述 NS-SourceMeter皮安表上位机软件用于实现吉时利皮安表的上位机控制功能,通过在软件上的相应操作,控制皮安表进行配置或者测量,同时可以对测量的数据和图形进行保存。NS-SourceMeter皮安表软件由计算机和皮安表组成,通过计…

026 - C++ 可见性

本期我们讨论 C 的可见性。 可见性是一个属于面向对象编程的概念,它指的是类的某些成员或方法有多可见。 我说的可见性是指,谁能看见它们,谁能调用它们,谁能使用它们等这些内容。 可见性是对程序实际运行方式完全没有影响的东西…

Linux驱动开发:platform总线驱动

目录 1、为什么需要platform总线 2、设备端:platform_device 2.1 platform_device结构体 2.2 注册 2.3 注销 3、驱动端:platform_driver 3.1 platform_driver结构体 3.2 注册 3.3 注销 4、总线 4.1 bus_type 4.2 platform_bus_type 5、匹配…

2023第二届中国汽车碳中和国际峰会

会议背景 随着世界越来越认识到气候变化的破坏性影响,政府、组织和个人正在采取行动减少导致全球变暖的温室气体排放。随着电动化和互联技术的发展,汽车产业价值链正在经历变革。 汽车价值链的转型还为汽车行业创造了许多脱碳和更具可持续性的新机会。 …

vue3-admin-template页面

vue3-admin-template 本人学习视频网址为:视频地址源码:github 网页采用技术框架 本管理模板采用vue3开发,使用vue-router来作为路由跳转,将登录成功后产生的菜单,token放入到vuex中存储,通过axios来进行交互&#x…

深入理解 spring-boot-starter-parent

目录 一、前言二、Maven继承三、分析spring-boot-starter-parent四、Maven单继承问题五、不继承spring-boot-starter-parent需要注意的 一、前言 在idea当中创建springboot项目的时候都会继承一个spring-boot-starter-parent作为父类,假如不继承我们的项目就不能使…

Hudi的介绍与安装编译

Hudi的介绍 安装Maven 编译Hudi 执行编译 Hudi的介绍 Hudi简介 Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取…

CentOS 7(2009) 升级 GCC 版本

1. 前言 CentOS 7 默认安装的 gcc 版本为 4.8,但是很多时候都会需要用到更高版本的 gcc 来编译源码,那么本文将会介绍如何在线升级 CentOS 的 gcc 版本。 2. 升级 GCC (1). 安装 centos-release-scl; [imaginemiraclecentos7 ~]$ sudo yum…

docker-compose搭建skywalking

SkyWalking 架构图 架构组成 SkyWalking Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalk…

测试知识总结

1.影响ui自动化稳定性 异常弹出对话框 --异常场景库 页面控件元素属性的细微变化--模糊匹配 延迟 --- retry 数据 -- 数据已被使用 2. 移动端应用细分为三大类:Web App、Native App(原生应用) 和 Hybrid App(混合应用&…

Yjs + quill:快速实现支持协同编辑的富文本编辑器

大家好,我是前端西瓜哥,这次来看看 Yjs 如何帮助我们实现协同编辑能力的。 Y.js 是一个支持 协同编辑 的开源库。只要我们将自己的数据转换为 Y.js 提供的 Y.Array、Y.Map 类型,Y.js 就会自动帮我们做数据的一致性处理和同步。 一致性问题 …

Cookie和Session的API、登录页面

目录 一、Cookie 和 Session 1、HttpServletRequest 类中的相关方法 2、HttpServletResponse 类中的相关方法 3、HttpSession 类中的相关方法 4、Cookie 类中的相关方法 二、网页登录 1、约定前后端交互接口 2、编写一个简单的登录页面 3、编写一个Servlet 来处理这个…

Springboot +Flowable,任务认领和回退(二)

一.简介 有的时候,一个任务节点会存在多个候选人,例如:张三提交一个任务,这个任务即可以由李四处理,又可以由王五处理,那么针对这种多个任务候选人的情况,该如何处理? 二.绘制流程…

SuperMap GIS基础产品组件GIS FAQ集锦(2)

SuperMap GIS基础产品组件GIS FAQ集锦(2) 【iObjects for Spark】读取GDB参数该如何填写? 【解决办法】可参考以下示例: val GDB_params new util.HashMapString, java.io.Serializable GDB_params.put(FeatureRDDProviderParam…

spi 应用层读值为0问题

昨天调SPI遇到读值为0x00&#xff0c;经排查是读写方向的问题。 #include <stdint.h> #include <stdio.h> #include <stdlib.h…

Consensus见闻:雷声大 却不下雨的奧斯汀

前言 由Coindesk举办的Consensus历时3天&#xff0c;于4月28日完美落幕&#xff0c;欧科云链研究院前往美国得克萨斯州奧斯汀参加&#xff0c;本文将分享我们在奧斯汀和Consensus会议中的所见所闻&#xff0c;带你们看一个不一样的奧斯汀。 出品&#xff5c;欧科云链研究院 作…

datagrip连接elasticsearch且进行查询20230506

背景&#xff1a;公司要做一个es的数据存储&#xff0c;然后通过接口进行查询&#xff0c;我在docker下完成了ELK的安装&#xff0c;但是对es还不是很了解&#xff0c;就想着用logstash加载完数据到es中后&#xff0c;在数据库中对es进行查询&#xff0c;发现datagrip是支持连接…

Boosting之Adaboost与GBDT

同质与异质 1.异质模型&#xff1a;把不同类型的算法集成在一起&#xff0c;基础模型要有足够大差异性&#xff08;可以找出最适合当前数据的模型&#xff09; 同质模型&#xff1a;通过一个基础算法生成的同类型学习器。 Boosting概念介绍 Boosting本意就是提升&#xff0…