Explore Contextual Information for 3D Scene Graph Generation 学习笔记
Abstract
本文提出了一个充分利用场景图中contextual信息的框架,整体由图特征获取模型和图contextual推理模型组成,实现了适当的信息冗余特征提取、组织结构化和层次化推理。
Introduction

该文章认为当前模型面对的一大挑战是对象的多粒度和对象之间的多关系。**物体之间的多粒度不仅仅取决于物体的外观,还取决于物体周围的环境。**例如当一个chair在一个table面前,这个table更倾向于是dining table。而物体之间的关系也一样,两个物体之间可以有空间关系left,也可以有语义关系same as。
2D当中有很多运用背景信息的模型,但是3D这边不能直接搬过来,原因是3D点云的结构更为复杂,噪声更多,更难获取到有效的信息。在3D当中,如果使用联合区域作为视觉模式(图a)会导致噪声相乘,每一次对关系建模,物体区域都会重建。对相同区域的重复建模产生的冗余信息在很大程度上混淆了算法的学习能力。
在消息传播阶段,通过视觉获取到的初始特征会没有理由的在所有可能的连接当中相互传播,而这会产生大量的noise。同时从结果来看,这会导致所有节点收敛到同一个状态,导致特征一致性,让对节点类别的预测准确率甚至比原本还低。
结合人类对于场景的认知提出了本文的模型。
Approach
| 名称 | 含义 |
|---|---|
| OO | 点云 |
| II | 类无关的实体标注 |
| {o1,o2,...,on}{o_1,o_2,...,o_n} | 物体点云集合 |
| FRF_R | 关系特征 |
| FEF_E | 实体特征 |
| G = (E,P) | 场景图 |
| E={e1l,e2l,...,enl}E = {el_1,el_2,...,e^l_n} | 带有语义标签的实体 |
| $P = {p^l_{12} ,pl_{13},…,pl_{ij},…,p^{l}_{n,n-1} | i\neq j}$ |
Graph Feature Extraction
首先利用PointNet获取到点云的物体特征。然后对于遍历场景中所有的物体对,并做以下两件事:1. 获取到两个物体之间的相交bbox空间BijB_{ij},然后对bib_i和bjb_j进行位置编码得到位置特征fposijf^{ij}{pos}。2. 获取到BijB{ij}里面的点构成的边特征fRijf_R^{ij}并和边位置特征联合拼接。具体计算细节如下:
Interation Space Calculation
本文认为传统的方法中相邻物体之间存在信息冗余,在随后的消息传递阶段,这种冗余信息会随着迭代不断扩散和增长,最终使特征变得不可区分。因此提出了使用交集空间表示关系的方法。

首先利用以下公式将物体之间的相对位置分为了8种情况:

通过上述公式的达成数量判定物体的相对位置,其中lwhlwh分别表示物体的长宽高。之后交互空间的确定如下:


而对于inclusive和overlap两种情况,首先通过以下方法计算交叉空间:

这里使用bbox的左边最低坐标(x1i,y1i,z1i)(x^i_1, y^i_1, zi_1)和右边最高坐标(x2i,y2i,z2i)(xi_2, y^i_2, z^i_2)。同时要注意的是,对于Intersectant的情况,我们进行区域扩展以获取更多的环境上下文。由于物体边界框的重叠区域经常被遮挡或不可访问,这些区域中没有或很少有点,这使得难以提取关系特征。扩展后的交互空间可以表示为:

Position Feature Calculation
交互空间可以通过缩小感知区域来有效减少信息冗余,但是可以看到交互空间产生的关系特征中往往容易忽略物体信息、相关关系信息(relative relationships)和周围的背景信息。在后续的特征传播阶段可以补充物体和背景信息,但由于三维点的无序性,直接从特征中学习相对关系(relative relationships)是有难度的。因此需要编码物体的位置关系 ,这对于区分sub-obj来讲非常重要。编码方法采用对bbox按照sub-obj排序:

其中ii表示subject,jj表示object,xminbix_{min}{b_i}表示bib_i在x坐标上较小的值,xminUijx{U_{ij}}_{min}表示联合区域在X坐标上的最小值,max类似。然后将获取到的位置特征通过一个全连接网络。最后的特征初始化如下:

Contextual Reasoning for Scene Graph Generation

使用GSL模块来将全连接图构造成骨架(skeleton)图,通过在邻接节点集中使用不同的权重来实现。HOL模块通过将粗粒度和细粒度的标签组成两级层次树,在初始特征和背景(context)之间建立长期的联系。如上图4所示。
所谓skeleton graph(骨架图)就是边只有
具体来讲,关系特征FRF_R首先输入GSL(Graph Skeleton Learning)生成一个边权重图框架(graph skeleton)或者叫做结构组织规则集SG={r12,r13,...,rn,n−1}S_G={r_{12}, r_{13}, ..., r_{n,n-1}}。然后实体特征FEF_E、关系特征FRF_R和场景图SGS_G被输入到消息传递层当中,通过GNN来获得结构化FE\tilde{F}_E和FR\tilde{F}_R,FR\tilde{F}_R之后会输入到关系预测器当中获得最终的关系。最后,我们会将每一个实体FE\tilde{F}_E和FEF_E输入到层次结构对象学习块当中来预测粗粒度和细粒度标签。
Graph Skeleton Learning(GSL)

为了计算节点之间的联系,我们获取到图的框架信息,所谓图框架就是没有类别标签,只有01标签(表示边是否存在,通过softmax获得置信度)。因此可以构成一个带有边权重的框架图。GSL模块是由3层全连接网络实现的,激活函数用的ReLU。
Message Passing
在时间state tt 时,实体oio_i的隐藏层表示为Hei(t)H{(t)}_{e_i},关系oijo_{ij}的隐藏层状态表示为Hpij(t)H{(t)}{p{ij}},初始层采用特征提取得到的初始特征:

该模型在关系的视觉区域选择上缩小了感知区域,减少了实体区域的重复建模。代价是关系特征中缺少有关物体和周围上下文的信息,因此在消息传递阶段需要补充这种信息:

其中Mpij(t)M_{p_{ij}}^{(t)}表示关系pijp_{ij}的消息传递,gg表示MLP层。对于每一个实体节点eie_{i},它的邻居节点会被分成两个类别:Ni∗N_{i*}和N∗iN_{*i},分别表示eie_i作为subject和作为object时候。来自不同关系节点的消息是根据其相应的组织规则进行聚合的,使用公式如下:

Mei(t)M_{e_i}^{(t)}表示eie_i在迭代t上的消息,经过消息传递之后,使用两个Gated Recurrent Units(GRU)来更新特征:

最后得到最终的物体特征和关系特征:


由GSL(通用语义标注)基于初始特征生成的组织规则在后续融合过程中保持不变,以防止合并的关系特征加强节点之间的关联。
这里这个初始规则不变有点懵,不知道干嘛的
最后将F~R\tilde{F}_R输入到关系预测器中,就可以得到relation label PP。
Hierarchy Object Learning

由于关系数据和非关系数据的不平衡,节点之间的大多数通信将被GSL阻止,实体节点只能获取有限的环境信息。因此,利用HOL块对实体分类任务进行分层分解。HOL块使用粗粒度和细粒度的实体标签形成一个两级分层树,如图6所示。HOL模块的初始输入特征是初始实体特征FEF_E还有信息融合特征F~E\tilde{F}_E。在HOL block中有两个实体预测器,分别用于预测粗粒度和细粒度标签。
Loss
首先是GSL模块当中用SGS_G和SGTS_{GT}做损失函数。

其它就是分类上的预测损失

