Kosmos-2: 在多模态大语言模型中引入基准和指代能力

Kosmos-2: 在多模态大语言模型中引入基准和指代能力
FesianXu 20240304 at Baidu Search Team

前言

之前笔者在博文中介绍过kosmos-1模型 [1],该模型脱胎于MetaLM采用『因果语言模型作为通用任务接口』的思想,采用了多种形式的多模态数据进行训练得到。而在本文将要介绍的kosmos-2中,作者则尝试引入了基准(grounding)和指代(referring)能力,使得多模态大语言模型的人机交互形式更加友好、灵活和多样。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注明出处,谢谢。

∇ \nabla 联系方式:

e-mail: FesianXu@gmail.com

github: https://github.com/FesianXu

github page: https://fesianxu.github.io/

知乎专栏: 计算机视觉/计算机图形理论与应用

微信公众号:机器学习杂货铺3号店


在我们正式介绍kosmos-2之前,我们首先了解下什么是指代(referring)功能和基准(grounding)功能,如Fig 1所示,这是百度app中的以图搜图功能,用户拍摄一张图片,此时用户可以对图中的多种物体进行画框,随后用户可以选择对被框框中的物体进行识别、提问或者发起搜索等。这个功能使得用户在以图搜图的场景中,可以更加灵活地和场景中的物体进行交互,这便是所谓的指代功能。各位读者有兴趣可以自行在手机百度App上体验这个功能。
fig1_image_ir

Fig 1. 百度搜索的以图搜图功能,支持一定程度的指代功能,通过画框显式筛选用户感兴趣的物体进行提问或者发起搜索。

当然,这种功能的一种最简单的实现思路就是对被框中的物体进行图片裁剪,直接对裁剪后的图片进行处理,显然这种方法将会丢失该框中物体和图片中其他物体的上下文关系。让我们举个例子,如Fig 2 (a)所示,如果对蓝色框中的物体进行提问,如果只是对蓝色框中的雪人进行裁剪后喂到模型中处理,就难以获得图片全局和被框中物体的上下文关联,因此很难分析出『他身上的微光是篝火倒映的结果』这个结论。在这个过程中,从原图中框定一些包围盒(Bounding box, bbox),通过提供这个包围盒的左上顶点坐标 ( x 0 , y 0 ) (x_0, y_0) (x0,y0)和右下角坐标 ( x 1 , y 1 ) (x_1, y_1) (x1,y1)即可。如Fig 2 (b)所示,这个过程称之为指代 (Referring),而所谓的基准(Grounding)1,则指的是模型的输出中,会对不同实体同时输出其在图中的包围盒的坐标。Grounding也可以翻译成『接地』,这让我们联想到了电子工程中的『地线』,电压的大小都是针对于地线而言的,因此『接地』『基准』可以理解为是为文本概念和视觉概念的对齐,而这个对齐更为显式,因为其要求模型提供了对应实体的包围盒坐标,此时的『地线』就是图片中特定的包围盒了。
fig2_refer_grounding

Fig 2. 基准功能和指代功能的解释和示例,可以使得多模态大语言模型具有全局的视觉理解和更灵活的人机交互能力。

如Fig 3所示,本文要介绍的kosmos-2 [2] 正是一种通过构建特定的多模态数据,引入了指代和基准能力的多模态大语言模型。作者在LAION-2B和COYO-700M数据集的基础上构建了基准图文对数据集(GRounded Image-Text pairs, GRIT),这种数据集是在<图片, 图片文本描述>成对数据的基础上,拆解和重组图片的文本描述,使得产生了不同粒度的文本片段(如名词片段、指代表述等),并通过基准物体识别模型(如GLIP [3])产出不同粒度文本片段的包围盒,通过这种方法形成了约9100万图片,1.15亿文本片段,1.37亿包围盒的GRIT数据集。将GRIT数据和Kosmos-1采用的多模态数据融合在一起训练得到了kosmos-2模型。
fig3_kosmos_2

Fig 3. Kosmos-2的示意图,其主要特点是引入了指代和基准能力。

因此kosmos-2的主要升级点其实是GRIT数据集的构建,我们着重关注下数据的构建细节。如Fig 4所示,GRIT数据的构建主要包括两大步骤:

  1. 创建名词片段-包围盒成对样本:给定一个图片-文本描述样本,对文本描述样本进行名词片段提取,同时采用物体识别模型对图片进行处理得到所有包围盒,对提取好的名词片段和包围盒进行组建,得到名词片段-包围盒成对样本。注意到作者舍弃了抽象的名词片段,如"love", “time”, "freedom"等,这些抽象的概念容易带了噪声。
  2. 产出指代表述-包围盒成对样本:只是名词片段无法对一些复杂、组合概念进行描述,因此可以考虑对名词进行一些组合,构建出所谓的指代表述(referring expression)文本,本文通过SpaCy对文本进行依存关系树(dependency tree)解析,然后依次递归每个名词片段的子节点,然后将递归的子节点的词和该名词进行拼接得到扩展。举个具体的例子如下所示。
a dog in a field of flowers的依存关系树,由SpaCy 3.6.1生成。dog              ___|____            |        in         |        |           |      field        |    ____|______     |   |           of  |   |           |    a   a        flowers1. 以dog为中心进行扩展: a dog in a field of flowers
2. 以field为中心进行扩展: a field of flowers
3. 以flowers为中心进行扩展:flowers

为了减少冗余,作者只保留了那些不被其他指代表述或者名词片段包含的部分,以刚才的扩展为例子,作者保留了"a dog in a field of flowers",而舍弃了"a field of flowers"和"a field of flowers"。然后将"a dog"的包围盒赋值给了最终保留下的"a dog in a field of flowers"。整个过程如Fig 4所示。
fig4_grit_construction

Fig 4. GRIT数据集构建流程,主要由两大步骤构成:名词片段-包围盒成对数据提取、指代表述-包围盒成对数据组建。

在模型方面,kosmos-2沿用了kosmos-1的模型结构和训练范式,但是可以提供视觉回答(以输出图片中包围盒坐标的形式提供),也可以提供视觉输入和包围盒输入。此处的包围盒输入和输出都是左上角坐标和右下角坐标的形式,为了将训练目标统一到自回归生成,有必要将连续的坐标离散化到离散的token形式。一种可行的方法是将一个长宽分别为 W W W H H H的图片均匀划分到 P × P P \times P P×P的分块(patch)中,每一个分块大小为 ( W / P ) × ( H / P ) (W / P) \times (H / P) (W/P)×(H/P)像素。对于每个分块而言给它赋予一个唯一的token id,采用每个分块的中心像素的坐标代表整个分块的左边。最终在整个词表中将会新增 P × P P \times P P×P个新的包围盒『词』,至此包围盒的输入输出和文本输入输出便是打平了。

此时一个包围盒的输入或输出如<box><loc1><loc2></box>loc1loc2表示左上角和右下角分块的token id,而<box></box>则是特殊标记,表示了包围盒的开始和结束。如果一个文本片段包含了多个包围盒,则通过<delim>这个特殊标记进行连接,最终形式如<box><loci_1><loci_2><delim>...<locj_1><locj_2></box>

然后以类似于书写markdown文档超链接的形式,给文本片段添加包围盒,如<p> text span </p><box><loc1><loc2></box>,其中的<p></p>是特殊标记,表示了需要提供基准的文本片段。最终一个完整的输入如下所示,其中的<s></s>表示整个序列的开始和结束,而<image></image>则表示了提供的视觉向量的开始和结束,<grounding> 也是一个特殊标记,用于告诉模型将文本输出进行视觉基准,这是因为在训练时候同时包含有纯文本数据、图文对数据和图文交织数据,需要<grounding> 这个特殊标记告诉模型需要进行文本输出基准了。

<s> <image> Image Embedding </image> <grounding> <p> It </p> <box> <loc44> <loc863> </box> 
seats next to <p> a campfire </p> <box> <loc4> <loc1007> </box> </s>

在kosmos-1的纯文本数据、图文交织数据、图文对数据的基础上,作者引入了GRIT基准图文数据,损失计算只对离散的token进行,如文本token和包围盒位置token,而略过特殊标记。在实验中,作者将 P = 32 P=32 P=32,因此一共新增有 32 × 32 = 1024 32 \times 32=1024 32×32=1024个包围盒位置token,一个训练batch size包含了419k个token,其中185k个token来自于文本数据集,215k来自于原始图文对数据和基准图文数据,19k个来自于图文交织数据。

作者在实验部分验证了模型的基准和指代能力,同时给出了不少测试结果,笔者没看到有需要特别注意的,就不在这里贴出来了,有兴趣的读者自行去翻阅原文即可。笔者看来,从MetaLM到kosmos-1,再到kosmos-2,其实模型结构和训练范式并没有变化,优化的点主要还是各种多模态数据的构建上,这其实也启示我们在大模型年代,如何构建更好更合适的数据可能比魔改模型结构更有收益,数据采集和清洗是一种艺术,也许我们应该给予数据更多的关注和研究。

Reference

[1]. https://blog.csdn.net/LoseInVain/article/details/136428429, 《Kosmos-1: 通用接口架构下的多模态大语言模型》

[2]. Peng, Zhiliang, et al. “Kosmos-2: Grounding Multimodal Large Language Models to the World.” arXiv preprint arXiv:2306.14824 (2023). aka Kosmos-2.

[3]. Li, Liunian Harold, et al. “Grounded language-image pre-training.” Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022. aka GLIP.


  1. 在深度学习领域,“grounded” 通常指的是将模型的输出或表示与真实世界中的某些实体或概念相关联或对齐。这种关联可以为模型提供更丰富、更具解释性的信息,并有助于提高其性能。 当谈到“video grounded”时,这通常意味着视频数据中的某些内容与模型的输出或中间表示之间存在某种形式的对齐或关联。例如,在视频描述生成任务中,模型可能会生成描述视频内容的文本。如果这些描述确实与视频中的实际事件、物体或动作相对应,那么可以说模型在这方面是"grounded"的。简而言之,“grounded” 在这里意味着模型不仅仅是生成一些看似合理但与真实内容无关的输出,而是能够捕捉并与真实世界中的实体或事件建立联系。 ↩︎

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

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

相关文章

FPGA FIFO 读取模式

FPGA FIFO 读取模式分两种&#xff1a; Normal Mode: In normal mode, the “rdreq” signal serves as the read request or read enable. When this signal goes high, the data output provides the first data from the FIFO.Essentially, in normal mode, data is availa…

C++异常处理机制【自定义异常体系 || 异常规范 || 异常安全】

目录 一&#xff0c;传统C语言处理异常 二&#xff0c;C异常概念 三&#xff0c;使用 1. 自定义异常体系 2. 在函数调用链中异常栈展开匹配原则 3. 异常的重新抛出 四&#xff0c;异常规范 五&#xff0c;异常安全 六&#xff0c;C标准库的异常体系 七&#xff0c;异…

人工智能|机器学习——Canopy聚类算法(基于密度)

1.简介 Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。 Canopy聚类很少单独使用&#xff0c; 一般是作为k-means前不知道要指定k为何值的时候&#…

算法学习06:数组模拟:单/双链表,栈和队列,单调栈/队列

算法学习06&#xff1a;数组模拟&#xff1a;单/双链表&#xff0c;栈和队列&#xff0c;单调栈/队列 文章目录 算法学习06&#xff1a;数组模拟&#xff1a;单/双链表&#xff0c;栈和队列&#xff0c;单调栈/队列前言一、链表1.单链表2.双链表 二、栈和队列1.普通栈、队列2.单…

docker安装ES、LogStash、Kibana

文章目录 一、安装Elasticsearch1. 安装Elasticsearch2. 安装IK分词器3. elasticsearch-head 监控的插件4. 配置跨域 二、安装LogStash三、安装kibana四、SpringBoot集成LogStash&#xff0c;将日志输出到ES中五、 启动项目&#xff0c;监控项目运行 提示&#xff1a;以下是本篇…

docker创建mysql,以及mysql无法连接问题

1、docker开放3306端口 Docker开放3306端口实现步骤 本文将介绍如何使用Docker开放3306端口&#xff0c;以便其他容器或外部应用程序可以通过该端口访问MySQL数据库。以下是实现步骤的简要说明&#xff1a; 步骤 描述 第一步 创建一个MySQL容器 第二步 打开3306端口…

Part-DB 安装及使用

Part-DB 安装及使用: http://coffeelatte.vip.cpolar.top/post/software/applications/part-db/part-db_安装及使用/ Part-DB 是比较实用的元器件进销存 Web 系统&#xff0c;支持使用电脑摄像头扫码&#xff08;条码和二维码&#xff09;。 1. 安装 大部分按照 官方安装指导…

C++:模版进阶 | Priority_queue的模拟实现

创作不易&#xff0c;感谢三连支持 一、非类型模版参数 模板参数分类为类型形参与非类型形参。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&…

JavaScript高级Ⅱ(全面版)

接上文 JavaScript高级Ⅰ JavaScript高级Ⅰ(自认为很全面版)-CSDN博客 目录 第2章 DOM编程 2.1 DOM编程概述 2.1.4 案例演示(商品全选) 2.1.5 dom操作内容 代码演示&#xff1a; 运行效果&#xff1a; 2.1.6 dom操作属性 代码演示&#xff1a; 运行效果&#xff1a; 2…

CEF JS与c++能够交互的原理 以及 JS 调用C++的流程分析

相关章节:CEF 之 Render进程 与 Browser进程通信 目录 一、JS与c++能够交互的原理 二、JS调用C++ 流程梳理

大模型时代下的自动驾驶研发测试工具链-SimCycle

前言&#xff1a; 最近OpenAI公司的新产品Sora的发布&#xff0c;正式掀起了AI在视频创作相关行业的革新浪潮&#xff0c;AI不再仅限于文本、语音和图像&#xff0c;而直接可以完成视频的生成&#xff0c;这是AI发展历程中的又一座重要的里程碑。AI正在不断席卷着过去与我们息…

【Node.js从基础到高级运用】四、Node.js基础

Node.js 基础 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它使得 JavaScript 可以脱离浏览器环境&#xff0c;在服务器端运行。本教程将介绍 Node.js 的一些基础概念&#xff0c;包括全局对象、内置模块的使用&#xff0c;以及事件循环和异步编程的基础。 全…

【EXCEL自动化07】用pandas库实现vlookup函数功能

🔥学好办公自动化,帮你节省更多宝贵的时间 🔥这个专栏收录python办公自动化的实操案例,利用python实现高效的办公自动化 🔥实现excel,word,文件批处理等自动化操作 使用pandas库来实现Excel中VLOOKUP函数的功能。 需要安装pandas库。有时直接下载会失败,会提示先安…

STM32 学习10 PWM输出

STM32 学习10 PWM输出 一、PWM简介1. PWM的概念2. PWM的工作原理3. PWM 常用的应用场景 二、一些概念1. 频率2. 占空比 三、STM32F1 PWM介绍1. 定时器与寄存器&#xff08;1&#xff09;**自动重装载寄存器&#xff08;ARR&#xff09;**&#xff1a;&#xff08;2&#xff09;…

python基础——输入与输出【input 和 print】

&#x1f4dd;前言&#xff1a; 上一篇文章python基础——入门必备知识中讲解了一些关于python的基础知识&#xff0c;可以让我们更好的理解程序代码中内容的含义&#xff0c;不至于一头雾水。今天我就来介绍一下&#xff0c;python中两个常见的输入和输出语句 input 和 print …

产品推荐 - 基于星嵌 OMAPL138+国产FPGA的DSP+ARM+FPGA三核开发板

1 评估板简介 基于TI OMAP-L138&#xff08;定点/浮点DSP C674xARM9&#xff09; FPGA处理器的开发板&#xff1b; OMAP-L138是TI德州仪器的TMS320C6748ARM926EJ-S异构双核处理器&#xff0c;主频456MHz&#xff0c;高达3648MIPS和2746MFLOPS的运算能力&#xff1b; FPGA…

粘包与拆包

优质博文&#xff1a;IT-BLOG-CN 一、粘包出现的原因 服务端与客户端没有约定好要使用的数据结构。Socket Client实际是将数据包发送到一个缓存buffer中&#xff0c;通过buffer刷到数据链路层。因服务端接收数据包时&#xff0c;不能断定数据包1何时结束&#xff0c;就有可能出…

【操作系统概念】第11章:文件系统实现

文章目录 0.前言11.1 文件系统结构11.2 文件系统实现11.2.1 虚拟文件系统 11.3 分配方法11.3.1 连续分配11.3.2 链接分配11.3. 3 索引分配 11.5 空闲空间管理11.5.1 位图/位向量11.5.2 链表11.5.3 组 0.前言 正如第10章所述&#xff0c;文件系统提供了机制&#xff0c;以在线存…

系统架构设计师——计算机系统基础知识

计算机系统基础知识 计算机硬件基础知识、计算机软件基础知识、计算机语言、多媒体技术等内容 1.1 计算机系统概述 计算机系统的定义与组成计算机系统&#xff08;Computer System&#xff09;是指用于数据管理的计算机硬件、软件及网络组成的系统。&#xff08;软件硬件&am…

编程笔记 html5cssjs 004 网页基本结构 2035年倒计时

编程笔记 html5&css&js 004 网页基本结构 2035年倒计时 一、代码二、解释 这段HTML代码实现了一个倒计时页面&#xff0c;倒计时的目标日期是2035年1月1日。页面中使用一个<div>元素显示倒计时的天数、小时数、分钟数和秒数。 一、代码 <!DOCTYPE html> &…