X-VLM:多粒度视觉语言预训练方法

2023-11-01 07:10

本文主要是介绍X-VLM:多粒度视觉语言预训练方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文:Zeng, Yan, Xinsong Zhang and Hang Li. “Multi-Grained Vision Language Pre-Training: Aligning Texts with Visual Concepts.” ArXiv abs/2111.08276 (2021).

源码:https://github.com/zengyan-97/x-vlm

现有的视觉语言预训练方法大多依赖于通过目标检测提取的以对象为中心的特征,并在提取的特征和文本之间进行细粒度的对齐。我们认为,视觉语言预训练可能不需要目标检测。为此,我们提出了一种新的方法X-VLM来进行“多粒度视觉语言预训练”。学习多粒度对齐的关键是在给定关联文本的图像中定位视觉概念,同时将文本与视觉概念进行对齐,对齐方式是多粒度的。实验结果表明,X-VLM可以有效地将学习到的对齐用到许多下游视觉语言任务上,并始终优于现有的SOTA方法。 

★  相关工作

ALIGN:基于噪声文本监督的视觉和视觉语言表示学习

VL-BERT:可预训练的通用视觉语言表征模型

VinVL:视觉语言模型中的视觉表示

★  论文故事

视觉语言预训练旨在从大量图像-文本对中学习视觉语言对齐。预训练好的视觉语言模型(VLM)通过少量的标记数据进行微调,在许多视觉语言(V+L)任务中达到了SOTA性能,如视觉问答和图文检索。 

图1:视觉语言预训练方法的比较:(a)基于目标检测的方法,(b)文本与整个图像对齐的方法,(c)我们的X-VLM方法。

现有的视觉语言对齐方法分为两种,如图1(a,b)所示。它们大多检测图像中的对象,并将文本与细粒度(以对象为中心)特征对齐。他们要么利用预训练的目标检测器,要么在预训练过程中进行实时目标检测。其他方法不依赖于目标检测,只学习文本和图像粗粒度(整体)特征之间的对齐。

细粒度和粗粒度方法都有缺点。目标检测识别图像中所有可能的对象,其中一些可能与文本无关。以对象为中心的特征无法轻松表示多个对象之间的关系,例如“过街的人”。此外,预定义适合下游任务的对象类别是有挑战性的。另一方面,粗粒度方法无法有效地学习视觉和语言之间的细粒度对齐,例如对象级别,这对于一些下游任务(如视觉推理和视觉定位)至关重要。 

理想情况下,我们希望VLM能够在预训练中学习视觉和语言之间的多粒度对齐,而不局限于对象级或图像级,并将学习到的对齐应用到下游的V+L任务中。不幸的是,现有的方法不能令人满意地处理视觉和语言之间的多粒度对齐。 

在本文中,我们提出通过将文本描述与图像中相应的视觉概念对齐来进行多粒度视觉语言预训练。以图1为例,我们有以下训练数据:1)描述整个图像的图像标题;2) 区域标记,例如“背包男”,每个标记都与图像中的一个区域相关,而以前的方法大致将区域描述与整个图像对齐;3) 物体标签,如“背包”,这是以前的方法用来训练目标检测器的。我们重新定义了数据,这样一幅图像就可以有多个边界框,文本与每个框中的视觉概念直接关联。“视觉概念”可以是对象、区域或图像本身,如图1(c)中的示例。通过这样做,我们的方法学习到了与各种文本描述相关的视觉概念,这些概念也不局限于对象级或图像级。

我们的多粒度模型称为X-VLM,由图像编码器(生成图像中视觉概念的表示)、文本编码器和跨模态编码器组成,跨模态编码器在视觉特征和语言特征之间进行跨模态注意,以学习视觉语言对齐。学习多粒度对齐的关键是优化X-VLM:1)通过结合边框回归损失和IoU损失,在给定关联文本的图像中定位视觉概念;2)同时,通过对比损失、匹配损失和掩码语言建模损失,将文本与视觉概念进行多粒度对齐,如图1(c)所示。在微调和推理中,X-VLM可以利用学习到的多粒度对齐来执行下游的V+L任务,而无需在输入图像中添加边框注释。

我们在各种下游任务上证明了X-VLM方法的有效性。在图像-文本检索方面,X-VLM学习的多粒度视觉语言对齐优于基于以对象为中心特征的VinVL,在MSCOCO上获得了4.65%的绝对提升。X-VLM也比ALIGN、ALBEF和METER有很大的优势,尽管它们在更多的数据或参数上进行了预训练。在视觉推理任务中,与VinVL相比,X-VLM在VQA和NLVR2上的分别提升了0.79%和1.06%,且推理速度更快。X-VLM也比经过18亿内部数据预训练的SimVLM base表现更好,特别是在NLVR2上,它比SimVLM base高出2.4%。在视觉定位(RefCOCO+)方面,X-VLM与UNITER相比实现了4.5%的绝对提高,与专门用于定位任务的MDETR相比实现了1.1%的绝对提高。X-VLM在图像标题任务中也具有与强基线相当的性能。源码和预训练模型可以在https://github.com/zengyan-97/x-vlm获得。

本文工作的贡献如下:1)我们提出进行多粒度视觉语言的预训练来处理文本和视觉概念之间的对齐。2)我们提出优化模型X-VLM,在给定相关文本的图像中定位视觉概念,同时将文本与视觉概念对齐,其中对齐是多粒度的。实证研究表明,我们的方法在微调中有效地利用了学习到的多粒度对齐。在许多下游V+L任务中,X-VLM的性能始终优于现有的SOTA方法。 

★  模型方法

图2:本文提出的多粒度视觉语言预训练方法。

X-VLM由图像编码器、文本编码器和跨模态编码器组成。所有编码器都是基于Transformer的。跨模态编码器通过每一层的交叉注意力将视觉特征与语言特征融合在一起。如图2所示,我们通过在给定相应文本的图像中定位视觉概念,同时对齐文本和视觉概念来优化X-VLM,其中对齐是多粒度的。

  实验结果

表1:预训练数据集。

表2:MSCOCO和Flickr30K数据集上的图像-文本检索结果。IR:图像检索;TR:文本检索。

表3:下游视觉语言任务上的结果比较。

图3:在未见过的图像上的Grad-CAM可视化和边框预测。

表4:X-VLM的消融研究。

图4:在未见过的给定文本描述的图像中定位视觉概念。

图5:在未见过的图像中进行边框预测和单词可视化。这表明X-VLM还可以将“拉”和“拿”等概念与图像中的相应区域进行对齐。

  总结讨论

现有的视觉语言模型要么使用图像的细粒度特征(以对象为中心)对齐文本,要么使用图像整体的粗粒度特征对齐文本。这两种方法虽然有效,但仍存在一些不足。本文将现有的数据集重构为图像/区域/对象-文本对,并提出了一种新的多粒度视觉语言预训练方法X-VLM。X-VLM模型的训练是通过在给定相关文本的图像中定位视觉概念,并将文本与相关的视觉概念对齐来驱动的,其中对齐是多粒度的。在图像-文本检索、视觉推理和视觉定位等视觉语言任务上的实验表明,X-VLM优于现有的SOTA方法。

多模态人工智能

为人类文明进步而努力奋斗^_^↑

欢迎关注“多模态人工智能”公众号,一起进步^_^↑

这篇关于X-VLM:多粒度视觉语言预训练方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/321322

相关文章

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初