Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks 解析+总结

本文主要是介绍Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks 解析+总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

paper: 2004.06165.pdf (arxiv.org)

code:  microsoft/Oscar: Oscar and VinVL (github.com)

多模态学习初入门

最近,视觉和语言预训练(Vision-Language Pretraining, 简称VLP)在解决多模态学习方面已显示出巨大的进步。这类方法最有代表性地通常包括如下两步:

预训练:是以自监督的方式在海量 "图像-文本"数据(Image-Text Pair,或者叫做“图文对”)上训练大型的基于Transformer的模型(例如根据上下文预测被掩盖掉的语言或者图像的元素)

微调:可以对预训练模型的跨模态表示进行微调,以适应各种下游视觉和语言任务

摘要

关键问题:现有的VLP方法只是将图像区域特征和文本特征连接起来作为模型的输入以进行预训练,并不为模型提供任何线索,希望模型能利用Transformer的自我注意机制,使用蛮力来学习图像文本语义对齐方式。

解决方法:一种新的多模态预训练方法Oscar,它使用在图像中检测到的物体标签作为锚点,从而显著简化了路线的学习。在650万个文本-图像对的公共语料库上预先训练了Oscar模型,并在下游任务上对其进行了微调,从而在六种完善的视觉语言理解和生成任务上创建了最新的技术。

关键字: 对象语义,视觉和语言,预训练

1 Introduction

VLP:可从大量图像-文本对中学习有效学习通用表示形式,并对VLP模型针对特定任务进行微调实现SOTA。

通过使用诸如Faster R-CNN之类的预训练物体检测器 (object detector),可以将图像表示为一组视觉区域特征,每个视觉区域特征都与一个物体标签关联。因此,可以使用诸如BERT的预训练语言模型将句子表示为一系列单词嵌入。重要的是,在Oscar中,我们使用来自预先训练的BERT的对应词嵌入来构造物体标签的表示。

相关工作

视觉语言预训练 针对现有的V+L问题(视觉问答,图文检索和图像描述),采用类似BERT的目标学习来自语言标记嵌入和视觉区域特征拼接好的序列的跨模态表示。他们在很大程度上依靠Transformer的自我注意机制来学习联合表征,这些表征在两种模式下都有适当的上下文。例如,早期的努力,如[22,38]提出了一个基于two-stream and three-stream Transformer的框架,分别用co-attention来融合这两种模式。Chen等人[5]对不同的预训练目标对所学通用表征的影响进行了全面研究。Zhou等人[46]提出了第一个统一的模型来处理理解和生成任务,只使用VQA和图像字幕作为下游任务。本文将Oscar模型应用于更广泛的下游任务,包括理解和生成任务,并在大多数任务中实现了新的SoTA。与现有的 VLP方法相比,所提出的Oscar最突出的区别是使用了 对象标签来对齐两种模式中的元素。它缓解了VLP模型必须从头开始计算跨模态语义对齐的挑战,从而提高了学习效率。事实上,我们的基础模型已经在大多数V+L任务上已经超过了现有的大型VLP模型。

物体标签 Anderson等人[2]引入了自下而上的机制,通过Faster R-CNN[28]将图像表示为一组视觉区域,每个区域都有一个相关的特征向量。它使得注意力可以在物体层面上被计算出来并迅速成为细粒度图像理解任务的事实上的标准。在本文中,我们建议使用对象标签来调整[2]中的对象-区域特征。[2]中的对象-区域特征在预先训练好的语义空间中对齐。利用对象标签的想法已经被探索用于图像理解[42,43,46]。Wu等人[42]基于CNN的网格区域特征,采用预测的物体标签作为LSTM的输入,而You等人[43]同时考虑标签和区域特征。则同时考虑标签和区域特征。基于由物体检测器提出的突出区域。Zhou等人[46]基于物体检测器提出的突出区域,将物体预测概率向量与区域特征连接起来,作为视觉上的输入。遗憾的是,这些工作中的标签并没有同时与物体区域和文本的词嵌入,导致缺乏基础。我们构建的物体标签与其相应的区域特征和词嵌入产生了更加完整和翔实的对象表征,特别是当语言实体嵌入是预先训练过的,如下所述。

多模态嵌入 已有研究表明,V+L任务可以从共享的嵌入空间中获益,以调整图像和文本之间的模式间对应关系。Socher等人[33]的早期尝试是利用核化的冠状相关将单词和图像区域投射到一个共同的空间,使用核化的典型相关分析,并在注释和分割方面取得了良好的效果。类似的想法被用于图像说明[14]和基于文本的图像检索[29]。特别是,开创性的工作DeViSE[8]提出了使用从无序的语义信息中收集的视觉对象,从未经注释的文本中收集的语义信息来识别视觉对象。这种语义信息被用来预测在训练期间没有观察到的图像标签,并在成千上万个从未见过的新标签中极大地改善了零点预测。视觉模型从未见过的新标签。这个想法已经被 观点在[34,15,25]中得到了扩展,表明利用预先训练好的语言学知识 对于调整语义和提高跨模式转移学习的样本效率非常有效。在这一研究思路的启发下,我们重新审视了这一想法并 建议在神经语言模型预训练的时代,利用从学习到的词嵌入中获得神经语言模型预训练时代的丰富语义。事实上,我们对novel objects的结果表明,Oscar有助于提高预训练模型的可扩展性和通用性。

Oscar训练方式

 

Oscar输入数据:将图文对表示为三元组(橙色单词序列,蓝色物体标签,绿色图片区域特征)。Oscar提出用物体来堆砌跨域语义;删除物体的话,Oscar退化为以前的预训练方法。此三元组可以从两个角度理解:模态视角和字典视角

  • 输入表示。将每个(图像-文本)样本定义为一个三元组(单词序列,物体标签,区域特征)。

  • 预训练目标。根据三元组中三个项目的分组方式,我们从两个不同的角度查看输入:模态视角和字典视角。每一种视角都允许我们设计一个新颖的预训练目标:1)字典视图的掩盖码恢复损失,它衡量模型根据上下文恢复丢失元素(单词或对象标签)的能力; 2)模态视角的对比损失,它衡量模型区分原始三元组及其“污染”版本(即原始物体标签被随机采样的标签替换)的能力。

在六个任务上进行微调和评估:

  • Visual Question Answering (VQA)

  • Graph Question Answering (GQA)

  • Natural Language Visual Reasoning for Real (NLVR2)

  • Image-Text Retrieval

  • Text-Image Retrieval

  • Image Captioning on COCO dataset

  • Novel Object Captioning (NoCaps)

整体预训练+微调的流程:  Oscar以三元组作为输入,以两个损失函数为目标进行预训练(在单词和标签上掩盖恢复损失,以及在标签和其他标签之间的对比损失),然后对其进行微调以实现五个理解和两个生成任务。

实验效果

为了考虑参数的利用效率,我们在下表中比较了不同大小的模型。Oscar在六项任务上均达到了最新水平。在大多数任务上,我们的基本款模型 (base model)要优于以前的大型模型(large model),通常情况下会大大提高。它表明Oscar具有很高的参数利用效率,我们认为部分原因是物体的使用大大简化了图像和文本之间语义对齐的学习。在这里,VLP基线方法是从UNITER, VilBERT, LXMERT, VLP, VL-BERT, Unicoder-VL, 和 12-in-1收集的。请注意,Oscar接受了650万对的预训练,这比UNITER的918万对和IXME的960万对都少,这也说明了Oscar的数据利用率很高。

 

结论

在本文中,我们提出了一个新的预训练方法Oscar,该方法使用对象标签作为锚点,将图像和语言模式统一在一个共享语义空间。我们在一个有650万个文本-图像对的公共语料库上进行预训练来验证该模式。这些预训练的模型在六项既定的V+L理解和生成任务上归档了新的先进技术。

这篇关于Oscar: Object-Semantics Aligned Pre-training for Vision-Language Tasks 解析+总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析