Detecting Visual Relationships with Deep Relational Networks

2024-01-16 01:58

本文主要是介绍Detecting Visual Relationships with Deep Relational Networks,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用深度关系网络检测视觉关系

物体之间的关系在图像理解中起着重要的作用,以前的研究方法将“关系”作为一个分类问题,每一种关系类型(如:‘骑’)或每个不同的视觉短语(如‘人-骑-马’)作为一个类别。但这种存在缺陷,例如视觉外观多样,视觉短语多样。针对此,本文建立一个综合框架来解决这个问题。框架的核心就是 深度关系网络

1. 引言

早期将视觉关系视为一个分类任务,考虑将对象和关系谓词的不同组合作为一个类,但是会遇到很多不平衡类,例如视觉基因组中有超过75k不同的视觉短语,每个短语的样本数量从少量到超过10k不等,即使最复杂的分类器也会遇到如此巨大且高度不平衡的类空间。另一个策略就是将关系谓词作为一个类,尽管类的数量大大减少,但是每个类内的多样性显著增多。例如:mountain-near-river,person-near-dog,具有同一个谓词near,同属一个类别。但是这些图像没有任何共同点,因此仍不好。

针对此,本文开发新的框架来解决视觉关系检测问题。该框架将预测输出表示为(主题sub,谓词project,宾语obj)形式的三元组,并通过它们之间的两种关系(空间配置和统计依赖)来共同推断其类别标签。特别地,统计推断过程通过迭代展开被嵌入到一个叫深度关系网络(DR-Net)的深度神经网络中。

论文贡献:①DR-Net一种新颖的表述结合了统计模型和深度学习的优势。
②有效的视觉关系检测框架,将最新的技术提升到一个新的高度。

2. 论文内容

我们的工作旨在提高一种专门用于一般视觉关系检测的方法,在一个统一的框架上,我们的方法可以识别各种各样的关系,比如相对位置(“后面”)、动作(“吃”),功能(‘部分’),比较(“比它高”)等。我们采用(s.r.o)三元组描述每种视觉关系,任务是从给定图像中定位所有视觉关系,并推断出三元组。

在这里插入图片描述
图2:提出的视觉关系检测框架。给定图像,它首先使用对象检测器来定位单个对象。每个对象还具有外观特征。对于每对对象,将提取相应的局部区域和空间蒙版(spatial mask),并将其与各个对象的外观特征一起馈入DR-Net。 DR-Net将共同分析所有方面,并输出qs,qr和qo,即三元组每个组成部分的预测类别概率。最后,将通过为每个组件选择最可能的类别来得出三元组(s,r,o)。

2.1 任务阶段

我们框架的总体包括三个阶段:
目标检测(Object detection):给定图像,我们使用对象检测器来定位一组候选对象,每个候选对象都带有边界框和图像特征,这些特征将用在joint Recoginition阶段被用来预测类别。
对过滤(Pair filtering):从检测到的对象中生成一组对象对,n个检测到的对象能生成n*(n-1)个对象对。但是很多是没有意义的,并且不太可能识别重要的关系,因此我们引入一个低成本的神经网络来过滤掉这些对,此过滤器同时考虑了空间位置(例如距离太远的对象不太可能相关)和对象类别(因为某些对象不太可能形成有意义的关系)
共同认可(Joint Recognition:每个保留的对象将被馈送到joint recognition模块,考虑到多个因素及其关系,该模块将产生一个三元组作为输出。

2.2 joint recognition中考虑的因素

  • Appearance: 外观特征可以用来推断对象所属类别,另外关系的类型也可以在图像中反应在视觉上,为了利用此信息,本文采用CNN封闭框(以很小的幅度包含两个对象的包围框)为每个候选对象对提取其外观特征,其不仅包括对象本身还包括周围的上下文,这在关系推理中很重要。

  • Spatial configurations:
    两个对象之间的关系也由它们之间的空间配置反映出来,例如它们的相对位置和相对大小。这些提示与单个对象的外观互补,并且对光度变化(例如光度)具有弹性。为了利用空间配置,我们面临一个问题:如何在计算机中表示它?先前的工作[9]提出了几何测量的清单。这种方法虽然简单,但可能会丢失某些配置方面的风险。在本文中,我们改为使用双重空间蒙版作为表示形式,其中包括两个二进制蒙版,一个用于主题,另一个用于对象。蒙版是从边界框派生的,并且可能彼此重叠,如图3所示。对蒙版进行下采样后,尺寸为32×32,我们凭经验发现,保真度和成本之间达到了很好的平衡。 (我们尝试了8、16、32、64和128的掩码大小,结果前1个调用分别为0.47、0.48、0.50、0.51和0.51。)每个候选对的双空间掩码将压缩为通过三个卷积层的64维向量

  • Statistical relations:
    在三元组(s,r,o)中,关系谓词r与对象类别s和o之间存在很强的统计依赖性。例如,(猫,吃,鱼)很常见,而(鱼,吃,猫)或(猫,乘车,鱼)则很少。在视觉基因组上,先验分布p(r)的熵为2.88,而条件分布p(r | s,o)的熵为1.21。这种差异清楚地表明了统计依赖性。为了开发统计关系,我们提出了深度关系网络(DR-Net),这是一种将统计关系模型整合到深度神经网络框架中的新公式。 。在我们的实验中,我们发现使用这种关系可以有效地解决视觉或空间线索所引起的歧义,从而大大提高了预测的准确性。

  • Integrated prediction:
    接下来,我们描述这些因素是如何实际组合的。如图2所示,对于每个候选对,框架分别通过外观模块和空间模块提取外观特征和空间特征。随后将这两个特征连接起来,并通过两个完全连接的层进一步压缩。该压缩对特征以及单个对象的外观特征将被馈送到DR-Net进行联合推理。通过多个推理单元,其参数捕获了三元组成分之间的统计关系,DR-Net将输出s,r和o的后验概率。最后,该框架通过为每个组件选择最可能的类别来产生预测。在训练中,分别对我们框架中的所有阶段,即对象检测,配对过滤和联合识别进行了训练。至于联合识别,将不同因素整合到单个网络中,并共同进行微调,以使地面真三胞胎的联合概率最大化。

2.3 深度关系网络

如上所示,在对象类别s和o和关系谓词r之间存在很强的统计关系。因此,要准确地识别视觉关系,重要的是要利用这些信息,尤其是在视觉线索不明确时。

2.3.1 回顾CRF(条件随机场)

是将统计关系纳入判别任务的经典表述。具体而言,对于识别视觉关系的任务,可以将CRF公式化为
在这里插入图片描述
xr是压缩对特征,它结合了封闭盒的外观和空间配置; xs和xo分别是主体和客体的外观特征; W表示模型参数; Z是归一化常数,其值取决于参数W。联合潜力可以表示各个单个潜力之和,如
在这里插入图片描述
这里,一元势ψa将单个物体与其外观联系起来; ψr将关系与特征xr关联。而二元势’rs,'ro和’so捕获了关系谓词r,主题类别s和对象类别o之间的统计关系。CRF的缺陷在于:首先,学习CRF需要计算归一化常数Z,这可能非常昂贵,甚至难以处理,尤其是当基础图中存在循环时(如上述公式)。因此,通常使用近似值来规避此问题,但有时会导致估算不佳。第二,当存在循环依赖性时,诸如均值场方法[54]和循环置信传播[55]等变分推理方案被广泛用于简化计算。这常常在推理的目的和训练的目的之间留出间隔,从而导致次优的结果。

2.3.2 从CRF到DR-Net

受到深度神经网络的启发,我们探索了一种新的替代方法,即将推理馈入前馈网络。考虑上述的CRF,给定s,o,r的后验概率分布为:在这里插入图片描述
在典型公式中,通常将ψr(r | xr)设计为每个r的xr线性函数。令Wrs和Wro为矩阵,使得Wrs(r,s)='rs(r,s)和Wro(r,o)='ro(r,o),令qr为后验概率的向量对于r,则上面的公式可以重写为在这里插入图片描述
在此,σ表示softmax函数。 1s和1o是s和o的单一指标向量。可以证明,这是以下优化问题的最佳选择:
在这里插入图片描述
基于此优化问题,方程(4)中给出的解可以推广到s和o不是确定性的情况,而是由概率向量qs和qo给出它们的知识,如下所示:
在这里插入图片描述
类似的推导也适用于以其他分量为条件的s和o的推论。一起,我们可以获得一组更新公式,如下所示:在这里插入图片描述
这些公式将当前概率向量qs,qr和qo用作输入,并输出更新的版本q0s,q0r和q0o。从神经网络的角度来看,这些公式也可以视为计算层。从这个意义上讲,迭代更新过程可以展开到包含一系列此类层的网络中。我们将此网络称为深度关系网络(DR-Net),因为它涉及多个变量,并且将其构建模块(即上述计算层)称为推理单元

3.讨论

DR-Net用于关系建模,这与用于特征/模式组合的方法不同。具体来说,对象类别和关系谓词是两个在统计上相关的不同领域。前者不是后者的额外功能;后一种也不是前者的特征。 DR-Net抓住了这一点。在补充材料中提供了这一说法的证明。它们之间的关系是通过推理单元中的链接进行的,而不是通过融合层进行组合。公式7中的基本公式具有几种对称性约束:Wsr = WTrs,Wso = WTos,Wro = WTor。此外,所有推理单元共享同一组权重。然而,从务实的角度来看,人们也可以考虑解除这些限制,例如允许每个推理单元都有自己的权重。这可能会增加网络的表达能力。

4.实验

在这里插入图片描述

5.可视化部分结果

下表列出了某些对象对的谓词识别结果。包含这些对的图像在第一行中列出,其中红色和绿色框分别对应于主题和对象。以下各行列出了通过不同方法预测的最有可能的谓词,其中黑色表示错误的预测,红色表示正确的预测。
在这里插入图片描述
在这里插入图片描述
该图说明了一些图像及其对应的场景图。场景图是根据5.3节生成的。在场景图中,黑色边缘表示错误的预测,红色边缘表示正确的预测。

6.总结

本文提出了一种用于视觉关系检测的新框架,该框架集成了各种提示:外观,空间配置以及对象和关系谓词之间的统计关系。该框架的核心是深度关系网络(DR-Net),这是一种新颖的表示法,它将深度神经网络的表达能力扩展到关系建模。在视觉基因组上,所提出的方法不仅比现有技术大幅度提高了技术水平,而且在场景图生成中产生了可喜的结果,这一任务代表了更高水平的图像理解能力。这些实验结果清楚地表明了统计关系在视觉关系检测中的重要性,以及DR-Net建模复杂关系的强大能力。

这篇关于Detecting Visual Relationships with Deep Relational Networks的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)

调试程序时,会出现下面这个报错 分析原因: 出现未加载 wntdll.pdb 报错大概率是你的指针使用错误 ,比如使用野指针、越界访问、或者堆区空间释放方式错误等。 这里以 堆区空间释放方式错误 为例子 1、堆区开辟的数组空间使用 delete 释放 // 堆区开辟的数组空间使用 delete 释放int* p = new int[10];delete p; 正

查看Excel 中的 Visual Basic 代码,要先设置excel选项

1. excel VB的简单介绍 百度安全验证 2.excel选项设置 excel表格中在选项->自定义功能区域,选择开发工具,visual baisc/查看代码,即可看到代码。 3.excel已经设置,可以直接查看

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S

Deep Ocr

1.圈出内容,文本那里要有内容.然后你保存,并'导出数据集'. 2.找出deep_ocr_recognition_training_workflow.hdev 文件.修改“DatasetFilename := 'Test.hdict'” 310行 write_deep_ocr (DeepOcrHandle, BestModelDeepOCRFilename) 3.推理test.hdev

[VC] Visual Studio中读写权限冲突

前置场景: 编译没有报错,但是运行提示 内存异常: 情景1: 如下代码运行异常,提示引发了异常:写入权限冲突。*** 是 0xFFFFF..... char* str = (char*)malloc(10);str[0] = 0x30;  解决方案:要包含头文件<stdlib.h>  情景2: 在FileA文件调用FileB文件的函数,但是在FileA中却没有声明该B函数的原型

解决Visual C++ 中相互包含头文件的问题

在编MFC应用程序时,经常会遇到头文件相互包含的问题,很是苦恼,于是便求助于强大的CSDN,得到如下答案:   方法一:利用友元类   我一共有两个类,由于要在两个类的头文件里互相应用对方,所以,在每一个类的头文件里面现包含另一个类的头文件,然后在该类的定义中声明另一个类为友元类。如下:    #include "B.h"      class CA: public CDialog

如何简单而优雅地升级Visual NMP中的PHP版本

需求:自己想测试下不同版本的PHP性能,就想升级下 Visual 这个集成环境中PHP的版本 网上: 升级PHP到5.6.11  1、下载新的nts版的PHP并解压缩到bin\PHP下,保留原文件夹的名称; 2、将旧版PHP文件夹下的PHP.ini复制到新版的PHP文件夹下;修改复制的PHP.ini,将旧版PHP文件夹信息替换成新版PHP文件夹信息; 3、下载php_xdebug-2.3

应用Visual Studio Profiler分析CPU使用情况

使用Visual Studio Profiler分析CPU使用情况‌的步骤如下: 1.‌启动CPU分析:‌ 在Visual Studio中打开你要分析的项目。 在菜单栏中选择Debug > Performance Profiler,或者使用快捷键Alt + F2。 在性能分析工具窗口中,选择CPU Usage选项,这将帮助你分析应用程序的CPU使用情况。 2.‌运行CPU