21-CVPR-SceneGraphFusion Incremental 3D Scene Graph Prediction From RGB-D Sequences学习笔记
Abstract
该模型提出了一种从RGB-D帧中生成3D场景图的方法。在具体实现中,该模型通过图卷积神经网络的方法从原始的场景组件中获取到PointNet的特征。该模型也提出了一种能够很好的适应在这种渐进重构场景中的部分和缺失的图结构数据 。实验表明,我们的方法在很大程度上优于其它三维场景图预测方法,其准确性不落后于其他三维语义和全景分割方法,同时在35Hz下。

b) 图1:我们创造了一个全局一致性的3D场景图
a) 通过融合GNN和从RGB-D序列中生成的递进的几何分割
c) 作为一个副产品,我们的方法可以对大规模的三维扫描产生精确的全景分割。节点代表不同的物体段。
Introduction
目前3D场景图理解模型的应用非常广泛,随着深度传感器价格的下降、实时深度SLAM算法和大规模3D数据集的出现,目前的研究逐渐从重构3D场景结构转变为利用场景内容的语义信息提升3D地图。
但是目前的很多算法都需要3D几何结构作为先验知识并且基本上是离线操作,没有办法满足实时运算的要求。
逐步进行3D扫描的实时的场景理解带来了巨大的挑战,例如:需要使用部分的、不完整的、含糊不清的场景结构,且这些场景中的物体形状可能经常大幅度的变换;如何同时融合多个可能互相矛盾的网络预测来确保全图一致性 。
在Image领域,场景图被证明是一种强大的场景理解的抽象表示法。因为SG的精巧和明确,其对图像获取、生成、操纵和视觉问答等复杂任务起到了很好的作用。
在这项工作中,我们提出了一种实时方法,在三维测绘的同时,逐步建立全局一致的语义场景图 。
Contribution
- 我们提出了第一个on-line 3D 场景图预测,逐步将当前观察到的子图的预测融合到一个全局一致的语义图模型 中。
- 由于一种新的关系类型,节点被合并成三维实例,类似于全景分割。
- 介绍了一种全新的注意力方法,这种方法可以处理部分和不完整的3D数据,和高动态的边 。
Incremental 3D Scene Graph Framework

本模型的输入是一系列RGB-D图像 a),来创造一个渐进的几何分割 b)。然后获得每一个几何分割体的特征和邻接关系图,在当前帧 c) 中经过更新的特征和邻接关系图将会作为输入来计算结点和边的特征 g) 然后利用GNN预测场景图。最后,将生成的场景图和全局一致的3D图相融合。
本模型一共有两个核心:一个是重构和分割的主线(2015年的一篇文章)一个是场景图预测网络(SPN)。模型的输入 是一系列RGB-D帧和相关的位置信息。然后将被检测到的邻域图和语义分割属性的子集喂入图网络中来进行节点和边的预测。为了获取我们系统的实时表现,我们将场景图预测过程分成了另一个线程 。场景图是被异步预测的,然后和重构线程相融合。
1. Scene Reconstruction with Property Building
需要一种增量的、计算效率高的估计实例的方法,以便能够实时构建一个场景图。我们使用其它论文中的增量几何分割方法来建立一个全局一致的分割图,并将其与我们的在线属性更新和邻居图构建相结合。
Geometric Segmentation and Reconstruction
给了RGB-D帧和相关pose的输入,经过渐进语义分割算法( RealTime and Scalable Incremental Segmentation on Dense SLAM-2015)来生成一个全局的3D分割图。此时会获得一系列分割实例S={s1,...,sn}S={s_1,...,s_n}。每一个分割存储了一系列3D pointPiP_i,包含了坐标和颜色信息。注意生成的分割图在每一个新的帧中都会更新 ,通过加入新的分割和移除旧的。
Segment Properties
segment properties包含了以下属性:中心点坐标P‾i∈R3\overline{P}_i\in R^3,点位置的标准差σi∈R3\sigma_i\in R^3,轴对齐的bounding boxbi=(bx,by,bz)b_i=(b_x,b_y,b_z),最大长度li=max(bx,by,bz)∈R3l_i=max(b_x,b_y,b_z)\in R^3,以及bbox的体积vi=bx⋅by⋅bz∈Rv_i=b_x\cdot b_y\cdot b_z \in R。这些properties通过检查分段中的每一个修改点来更新。
Neighbor Graph
构造了一个邻域图,该图将segments作为节点,将连接关系作为边。为了找到邻居关系,这里通过计算所有bbox的之间的距离,如果距离小于一个限定值则认为二者之间存在连接边 。
这里和传统的认为所有节点之间都存在连接关系不同,只认为空间距离近的节点之间存在连接关系。
2. Prediction with Graph Structure
获得了segment的属性和邻域图之后,将其送到GNN中来预测segment的标签和predicate。又因为我们的语义重建过程是渐进 的,只有那些目前在输入帧中观察到的片段会被更新。因此我们只将一部分在最近几帧中已经被更新了的segment和neighbor graph子集喂入GNN中。
这里比较迷惑?它这里的意思是只将最近几帧中都出现过的segment喂入网络进行学习,而对于前几帧中没有出现过的新的实体不进行更新?
这里的意思是连续帧中会有一部分物体一直存在,然后会被一直生成对应点云,那这一部分点云就没有必要再喂入网络进行学习,而只有当这一部分物体发生很大变化的时候才会被重新喂入网络进行学习。
同时,当segment被喂入GNN中时,模型会记录segment的size和更新的时间戳。如果segment的size在后面变化超过10%或者segment有超过60帧没有被更新了,那它会被标注并再次喂入GNN中学习。
这里更迷惑了,究竟segment的哪些子集会被喂入GNN中进行学习啊?

这里说在GNN进行消息传递的时候,当一个节点的lower-layer的特征被更新之后,只有该节点的higher-layer的特征、它的直接邻居、和它的边特征受到到了影响。所以在实际使用中那些没有被影响到的节点的特征是可以被重用的,比如上图中的灰色节点的特征。
3. Temporal Scene Graph Fusion
最终,节点和边在邻域图中的语义预测会和全局一致的语义场景图进行融合。由于每一个节点和边的类别会被多次预测,这会产生潜在的矛盾的输出。为了解决这个问题,我们使用了一个平均法 来融合对同一节点或边的预测。
对于neighbor graph中的每一个segment和edge,我们存储了每一个类别或者predicate prediction权重ww和可能性μ\mu。在tt时刻如果给了一个节点或者边一个新的prediction和它的probability μt\mut,我们会根据以下公式来更新它之前存储的权重wt−1w{t-1}以及probability μt−1\mu^{t-1}

其中wmax=100w_{max}=100是权重最大值。与点级方法相比,我们能够使用更小的内存占用来存储和保存整个标签概率分布。
Scene Graph Prediction
使用几何分割方法得到的segments需要设计一个robust的特征,因为每个segments的形状通常是不完整且相对简单的,而且在reconstruction的过程中会发生变化。通过使用GNN,每一个segment的特征可以通过邻居的信息获得一个提升。但是,每一个segment的邻居数量会经常发生变化,这提高了训练过程的难度。
处理GNN中的动态节点和边,被称为归纳学习。目前的方法大多专注于如何在所有邻居节点间建立attention。然而,在这种情况下,缺失的边缘仍然会影响到所有聚合的信息。为了解决这个问题,本文提出了一个全新的feature-wise-attention(FAT),这个机制可以给每一个target节点的独立latent feature重新设置权重。通过在这个重新加权的嵌入上应用一个最大函数,这个策略产生的聚合特征受缺失邻接点的影响较小 。
1. Network Architecture
input:一系列segments、每一个segments的properties、一个邻域图
output:语义场景图,分别预测每一个节点和边的类别和predicates。
Node Feature
点云中在每一个segment sis_i中的每个点PiP_i利用PointNet f(⋅)f(\cdot)进行特征提取获得latent feature。我们前面获得的segment的properties中的标准差σi\sigma_i、轴对齐的bounding box bib_i,最大长度lil_i,以及bbox的体积viv_i和PointNet的输出特征拼接在一起来处理单位球面上的输入点的归一化所引起的尺度不敏感的限制。拼接方法如下:

Edge Feature
边的视觉特征和与它相连的两个segment相关。对于给定的source节点ii和target节点jj,边特征eije_{ij}可以表示为:

其中gs(⋅)g_s(\cdot)表示MLP
GNN Feature
经过前面两部的node和edge特征初始化之后,我们使用一个两个消息传递层(message passing layer)的GNN通过使用邻居节点的特征来增强特征。在每一个message passing layer中,节点的特征vilv_il和边的特征eijle_{ij}l会同时被更新。

其中gv(⋅)g_v(\cdot)和ge(⋅)g_e(\cdot)表示MLP,N(i)\mathcal{N}(i)表示ii节点的邻居结点集合,FAN表示feature-wise attention network(FAT)。
Class Prediction and Losses
文章使用交叉熵,对于物体表示为Lobj\mathcal{L_{obj}},对于边表示为Lpred\mathcal{L_{pred}}
2. Feature-wise Attention
input:
Query QQ,维度为dqd_q,target TT,维度为dtd_t,然后QQ到TT的attention计算方法为

其中⊙\odot表示对应相乘。
在实际使用中,为了获得更为灵活的注意力表示,使用了一个多头注意力机制,它将Q=[q1,...,qh] T=[t1,...,th]Q=[q_1,...,q_h]\ \ T=[t_1,...,t_h],具体的公式如下:

这里注意一下特征维度变化,这里每一个qiq_i的通道数dq/hd_q/h,每一个tit_i的通道数为dt/hd_t/h,hh为头数。
个人感觉这种多头注意力的方式比较奇怪,这个维度不如都使用dqd_q,然后在多个头计算出来的特征采用平均池化或者最大池计算最终的权重系数。
因此,最后的attention计算方式为:

其中g(⋅)g(\cdot)为单层MLP来让特征维度变换到合适的维度。
Experiment

对比实验,其中(f)(f)表示直接在3D场景图中进行场景图生成,而(i)(i)则表示从RGB-D图中生成场景图。由2和1对比可知,即便是没有attention机制,它的结果也要更好。
这里不使用attention机制的话那和原本方法的区别主要是:
- 特征增强
- 构造图的方式不同,一个是全连接图,一个是根据距离构造
- 节点特征的更新方式
然后通过345的对比可知,FAT这种特征计算方法相较于GAT和SDPA方法要更好
