《Unified Visual Relationship Detection with Vision and Language Models》ICCV2023

摘要

这项工作集中在训练单一的视觉关系检测器(VRD),该检测器可以预测来自多个数据集的标签空间的并集。由于不同数据集的标签体系不一致,合并标签是一个挑战。作者提出了 UniVRD,一种新颖的自下而上的方法,利用视觉和语言模型(VLMs)来统一视觉关系检测。VLMs 提供了对齐良好的图像和文本嵌入,其中相似的关系被优化以在语义上统一。UniVRD 在 HICO-DET 上达到了 38.07 mAP,比当前最佳的自下而上的 HOI 检测器相对提高了 60%。更重要的是,当模型扩展时,统一检测器的性能可以与特定数据集的模型相媲美,并且能够实现进一步的性能提升。

拓展阅读:

视觉关系检测(Visual Relationship Detection,简称VRD)旨在识别和理解图像中物体之间的语义关系。这种关系通常是成对的,并且可以用一个谓词(predicate)来描述物体间的相互作用或连接方式。

具体来说,视觉关系检测包括以下几个关键步骤:

  1. 物体检测:首先,系统需要检测图像中的物体,并为每个物体确定一个边界框(bounding box)。

  2. 关系识别:在物体被检测到之后,系统需要识别这些物体之间的语义关系。这些关系可以是“人-物”(human-object)或“物-物”(object-object)的交互,例如“坐在椅子上”、“拿着手机”或“狗追猫”。

  3. 谓词预测:对于每一对物体,系统需要预测一个或多个谓词来描述它们之间的关系。谓词通常是动词或动词短语,如“sitting on”、“holding”、“chasing”。

  4. 上下文理解:视觉关系检测通常需要考虑图像的上下文信息,以便更准确地识别关系。例如,相同的物体在不同的上下文中可能有不同的关系。

  5. 输出关系三元组:最终,系统输出的是一组关系三元组(triplets),每个三元组包含主语(subject)、谓词(predicate)和宾语(object),例如(“人”,“坐在”,“椅子”)。

视觉关系检测对于高级视觉理解任务至关重要,如场景图生成(Scene Graph Generation)、视觉问答(Visual Question Answering)和图像字幕生成(Image Captioning)。这些任务通常需要对图像内容进行深入的语义分析,而不仅仅是简单的物体识别。通过理解物体间的关系,计算机能够生成更丰富、更准确的描述和解释,从而更好地模拟人类的视觉感知和认知能力。

拟解决的问题

现有的视觉关系检测(VRD)模型通常只针对单一数据源进行训练,这限制了它们的泛化能力和可扩展性。作者试图解决的问题是如何训练一个能够统一多个具有异构标签空间的数据集的单一视觉关系检测器。

创新之处

  • 统一标签空间:提出一种新方法来统一不同数据集的标签空间,这是一个之前研究中未解决的问题。
  • 使用 VLMs:利用视觉和语言模型(VLMs)来优化图像和文本的嵌入,使得语义上相似的关系在嵌入空间中彼此接近。
  • 自下而上的设计:UniVRD 的设计允许模型在训练时同时受益于对象检测和视觉关系数据集。

方法

  • 对象检测器:使用标准的 Vision Transformer 作为图像编码器,并通过线性层和前馈网络预测每个实例的类别嵌入和边界框坐标。
  • 关系解码器:在对象检测器之后附加一个 Transformer 解码器,用于从预测的对象中解码成对的关系。
  • 文本嵌入:使用文本嵌入而不是类别整数来对检测到的对象和关系进行分类。
(a) 我们首先调整预训练的视觉和语言模型 (VLM) 进行对象检测。(b) 然后,我们将解码器附加到输出实例嵌入中,以解码来自预测对象的成对关系。查询字符串嵌入文本编码器并用于统一语言空间中的分类。预训练的 VLM 编码器以浅灰色标记,我们的附加模块以浅橙色标记。正面和负面文本字符串分别以绿色和红色突出显示。

对象检测器

对象检测器基于标准的Vision Transformer(ViT)构建,但进行了一些修改以适应对象检测任务:

  1. 移除池化层和最终投影层:原始ViT模型中的池化层和最终的投影层被移除,因为它们不适用于对象检测任务。
  2. 输出Token嵌入:ViT模型的每个输出Token通过一个线性层(Linear Layer)转换,以生成每个实例的分类嵌入。
  3. 边界框预测:Token嵌入通过一个两层的前馈网络(Feed-Forward Network, FFN)来预测边界框坐标。
  4. 文本提示:对于每个物体类别,使用预定义的提示模板生成文本查询,这些查询将通过文本编码器转换为文本嵌入,用于指导对象的分类。

关系解码器

关系解码器的目标是从一组检测到的物体中识别出相互之间的关系,并将这些关系表示为“主题-谓词-对象”的三元组(〈subject, predicate, object〉)。

  • 关系解码器接收来自对象检测器的输出,包括一组预测的边界框集合 B=\left \{ b_{i} \right \}_{i=1}^{N}​ 和相应的实例嵌入集合 Z=\left \{ z_{i} \right \}_{i=1}^{N}​。
  • 创建一组预定义的关系查询,这些查询是Transformer解码器的输入,用于解码潜在的关系。
  • 每个关系查询通过Transformer解码器的初始化阶段,生成一组初始的关系嵌入 R=\left \{ r_{i} \right \}_{i=1}^{M},其中 M 是解码器的输出关系嵌入的数量,等于学习的关系查询的数量。
  • 在关系嵌入上应用一个线性层和一个 FFN 来预测分别用于主语和宾语框的分类和位置的每个关系嵌入。

通过将预测的关系嵌入 r ∈ R 与实例嵌入 z ∈ Z 进行比较来找到主语和宾语框的索引。具体来说,我们使用 FFN 将每个关系嵌入 r_{j} 投影到主语嵌入 f_{sub}\left ( r_{j} \right ) 和宾语嵌入 f_{obj}\left ( r_{j} \right ) 中。主语索引 s_{j} 和宾语索引 o_{j} 通过以下方式获得: 

 其中 sim(·,·) 测量两个嵌入之间的余弦相似度。

用于分类的文本嵌入

概念解释

  • 用于分类的文本嵌入是将文本(例如类别名称或关系描述)转换为可以用于机器学习模型的连续向量表示的关键步骤。
  • 文本提示是将类别名称或描述性短语转换成模型可以处理的形式。例如,将“person”转换为“a photo of a person”。
  • 文本编码器是一个预训练的语言模型,通常是基于Transformer的架构,能够将文本序列转换为一系列嵌入向量。

文本提示被送入文本编码器,编码器通过其内部的嵌入层和Transformer层处理文本,生成文本嵌入。文本嵌入具有高维空间中的连续值,能够捕捉文本的语义信息,包括同义词、反义词、上下文含义等。

使用相似度度量(如余弦相似性)来比较实例嵌入或关系嵌入与文本嵌入之间的相似度,从而实现分类:

  • 对于对象检测器,文本嵌入用于将检测到的物体与特定的类别关联起来。每个物体的边界框和实例嵌入与文本嵌入进行比较,以确定最佳匹配的类别。
  • 对于关系解码器,文本嵌入用于识别和分类物体间的关系。关系三元组(如“a person riding a horse”)被转换成文本提示,并生成相应的文本嵌入。

结论

作者提出了一种基于 VLMs 的自下而上的方法,用于训练单一统一的视觉关系检测模型,该模型在多个数据集上表现出竞争力。通过扩展模型规模,可以在 VRD 任务上获得显著的性能提升。

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

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

相关文章

MyIP:强大且简单好用!

在这个数字化的时代,IP地址就像是我们的网络身份证。各位在日常的工作中,肯定会会遇到需要和 IP 地址相关的需求。 今天和大家聊一聊一个非常好用的开源 IP 工具项目 - MyIP。 简介 MyIP一个开源IP工具箱,提供了一系列的网络检测工具&…

axios请求响应拦截器

目录 axios-拦截器 拦截器的作用 请求拦截器-基本写法: axios请求拦截器-统一设置token 需求: 核心步骤: 关键代码: 响应拦截器-基本写法: axios响应拦截器-统一处理token失效 需求: 核心步骤: 关键代码: axios响应拦截器-数据剥离 需求: 核心步骤: 关键代码: ax…

七、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制和JS颜色选择器改变灯珠颜色

本地代码集成离线iro.js库来添加一个颜色选择器控件,在无网络环境可以通过JavaScript将选中的颜色发送到服务器以改变LED颜色。以下是将iro.js集成到网页后的颜色图片。 Iro.js 地址API操作手册 color:change # 每当所选颜色发生变化时触发 - 无论是当用户与颜色选…

Oracle|DM 常用|不常用 SQL大口袋

目录 一、前言 二、SQL写法 1、sql获取某一条数据中的前一条和后一条 2、实现like多个值的查询(Oracle和dm支持,MySQL未试过) 3、start with connect by prior 使用方法 4、用hextoraw解决select、update、delete语句执行慢 5、ORA-00…

Vue+Element Plus后台管理主界面搭建实现

​ 续接Django REST Framework&#xff0c;使用Vite构建Vue3的前端项目 1. 后台管理系统主界面框架搭建 后台系统主界面搭建 新建后台管理文件目录 完成后台整体布局 // 1.主界面 index.vue<script setup lang"ts"></script><template><el-…

初识自然语言处理NLP

文章目录 1、简介2、自然语言处理的发展简史3、语言学理论句法学&#xff08;Syntax&#xff09;语义学&#xff08;Semantics&#xff09;语用学&#xff08;Pragmatics&#xff09;形态学&#xff08;Morphology&#xff09; 4、统计与机器学习方法n-gram 模型隐马尔可夫模型…

C++20中的模块

大多数C项目使用多个翻译单元(translation units)&#xff0c;因此它们需要在这些单元之间共享声明和定义(share declarations and definitions)。headers的使用在这方面非常突出。模块(module)是一种language feature&#xff0c;用于在翻译单元之间共享声明和定义。它们是某些…

怎么用云手机进行TikTok矩阵运营

TikTok作为炙手可热的社交媒体巨头&#xff0c;已经吸引了亿万用户的目光。随着科技的飞速发展&#xff0c;云手机的出现为TikTok矩阵运营注入了新的活力。本文将深入探讨云手机在TikTok矩阵运营中的实际应用&#xff0c;并分享一系列高效策略与技巧。 &#xff08;1&#xff0…

DGA上的动态规划

前言&#xff1a;之前都没有写过建模成有向图来动态规划的&#xff0c;但是这个题可以抽象成有向图来做 我们可以用方块的编号和高来确定底下的长和宽 其实这题说白了就是一个记忆化搜索&#xff0c;但是不知道能不能建模出来而已 #define _CRT_SECURE_NO_WARNINGS #include&l…

39.【C语言】指针(重难点)(D)

目录 10.野指针 *定义 *案例 11.野指针规避方法 *初始化 *防止越界 *指针变量不再使用时&#xff0c;及时置NULL&#xff0c;指针使用之前检查有效性 *避免返回局部变量的地址 *assert断言 12.assert断言 *解释 *作用 *优点 *启用assert的开关 往期推荐 承接上篇 38.【C语言】指…

Qt实现类似淘宝商品展示看板功能简版

前一篇文章的简化版本只有浏览功能&#xff0c;前一篇文章链接如下&#xff1a; Qt实现类似淘宝商品看板的界面&#xff0c;带有循环翻页以及点击某页跳转的功能 效果如下&#xff1a; 代码留给有需要的人。 #ifndef ModelDashboardGroup_h__ #define ModelDashboardGroup_…

选择叮咚门铃的材质注意事项

在挑选叮咚门铃时&#xff0c;材质是一个不容忽视的重要因素。合适的材质不仅能确保门铃的耐用性和美观度&#xff0c;还能影响其性能和使用体验。 塑料材质的叮咚门铃是较为常见且经济实惠的选择。它轻巧且易于成型&#xff0c;可以被设计成各种独特的形状和颜色&#xff0c;为…

Java开发笔记--通用基础数据校验的设计

最近在开发一个功能&#xff0c;对排水管网的基础数据(包括管井、管道、泵站&#xff0c;雨水口&#xff0c;雨水口线&#xff0c;泵站&#xff0c;污水处理厂&#xff0c;排口等)的导入进行校验。 以字段为纬度&#xff0c;考虑二个方面的校验&#xff1a;数据库唯一&#xf…

【Windows】如何用防火墙禁用某个软件联网

我们使用一些激活软件时&#xff0c;经常需要防止软件联网造成激活失效&#xff0c;以下说明如何通过防火墙配置屏蔽掉软件联网。 以下说明手动添加防火墙拦截的方法&#xff1a; 使用【WinR】快捷键打开运行窗口然后输入【wf.msc】 点击确定。 点击左侧的出站规则然后点击右…

el-table自动滚动到最底部

我的需求是这样的&#xff0c;因为我的表格是动态的&#xff0c;可以手动新增行&#xff0c;固定表头&#xff0c;而且需要一屏显示&#xff0c;为了方便用户就需要再新增的时候表格自动向上滚动。 差了官方文档后发现有一个属性可以支持 这个属性正是自己需要的&#xff0c;所…

Python面试宝典第30题:找出第K大元素

题目 给定一个整数数组nums&#xff0c;请找出数组中第K大的数&#xff0c;保证答案存在。其中&#xff0c;1 < K < nums数组长度。 示例 1&#xff1a; 输入&#xff1a;nums [3, 2, 1, 5, 6, 4], K 2 输出&#xff1a;5 示例 2&#xff1a; 输入&#xff1a;nums …

Rest风格快速开发

Rest风格开发简介 简单点来说&#xff0c;Rest风格的开发就是让别人不知道你在做什么&#xff0c;以deleteUserById和selectUserById为例&#xff1a; 普通开发&#xff1a;路径 /users/deleteById?Id666 /users/selectById?Id666 别人很容易知道你这是在干什么 Rest风…

JavaScript骚操作媒体查询攻略

背景 一讲到媒体查询&#xff0c;大家首先想到的可能都是都是CSS中media,这也没错&#xff0c;这确实是最常见的媒体查询方式&#xff0c;但是我们今天要讲的不是它&#xff0c;而是大家很少接触到的window.matchMedia()和window.resize 最近在做项目的时候拿到一个需求&…

【Qt】多种控件实现“hello world“

使用编辑框的方式实现"hello wordl" 使用编辑框实现"hello world"的方式有俩种&#xff1a; 单行编辑框&#xff1a;LineEdit多行编辑框&#xff1a;TextEdit 图形化界面 纯代码方式 代码展示&#xff1a; #include "widget.h" #include &qu…

Python实战:基础语法

一、求解列表中的最大元素 import random#定义函数 def get_max(lst):x lst[0] #x存储的是元素的最大值#遍历操作for i in range(1,len(lst)):if lst[i] > x:x lst[i] #对最大值进行重新赋值return x#调用函数 lst [random.randint(1,100) for item in range(10)] print…