这次阅读的论文是 SceneHGN: Hierarchical Graph Networks for 3D Indoor Scene Generation with Fine-Grained Geometry,这是今年(2023)年发表在 IEEE Transactions on Pattern Analysis and Machine Intelligence 期刊上的文章,作者来自中科院。

作者在这篇文章里面提出 SceneHGH 网络来解决三维室内场景生成的问题。这个模型统筹考虑了房间的空间立体关系与每个待放置物体的形态细节。因此这个模型可以以细致的结合细节生成房间布局。为了让学习过程更加可控,作者引入了功能区 (Function Regions) 这一中间概念来串联起房间与待放置实体。为了确保模型的合理性(Plausibility),作者使用的基于图的表示形式同时包含了链接不同层级的父子节点的垂直边与连接同级别子节点的水平边。

作者使用的生成网络是一个基于可变自动编码器 (variational autoencoder, VAE) 条件式递归神经网络 (conditional recursive neural network, RvNN)。在给定放假你的边界条件的情况下,此网络可以生成具有良好几何表达形式的房间排布。

1 Introduction

在此章节中的行业背景我们暂且不表,主要关注其场景构建与假设条件。

现有的针对三维室内场景的排布工作往往是部分的,例如大部分工作着眼于生成家具的排布,但是并未包含家具的几何结构细节,或者只能从有限的现有家具几何形状中有选择性地布置。但是家具布局和家具的几何形态二者在排布问题上是存在关联的,将这二者拆解成独立的两个步骤可能导致形成一些次优结构。本文提出的架构是一个端到端的架构,可以将布局与几何结构统筹起来考虑。

当然,这种统筹方法会存在很多挑战。一个房间内的各个要素构成了一个天然的垂直层级结构:房间内包含多个家具对象,每个家具对象也可以由多个灵活子组件构成。房间内的对象数量可能很多(3D FRONT 数据集中的一个房间最多可以包含 188 个对象),这使得学习会比较困难。考虑到在大型房间中,部分对象之间内部会存在一定的关联(例如若干个椅子围绕着一个桌子摆放),作者引入了 Function Regions 的概念,如用餐区,沙发区等。功能区概念作为一个中间层在房间与具体的对象之间,作为一个衔接桥梁。

在生成一个室内场景时,房间的形状会预先给定,作者将房间形状拆解为单元格,这个单元格的编码被视为是房间生成过程的一个输入条件。为了确保模型的合理性,需要利用对象之间的丰富关系信息。这些关系包括垂直关系:功能区必须位于房间边界内,对象必须要在功能区内部;以及水平关系:对象的对称性,邻接关系,对象内的组件之间的对称性等。因此,作者提出的分层图网络是一个基于 VAE 的 RvNN 网络,此网络具有 4 层,分别是房间、功能区、对象以及对象组件。在图中,作者精心设计了节点之间的边来体现约束关系。训练如此大的网络也是富有挑战性的,作者提出了一种多阶段训练策略来保证续联的稳定性和有效性。

作者结合了多个开源数据集,包括 3D-FRONT,PartNet 等。

2 Related Works

暂略

3 Overview

3.1 分层图表示

作者提出将三维室内场景表示为一个分层树结构,分为房间、功能区、对象以及对象组件四个层次。

室内场景中的三维对象由多个组件组成,作者将对象组织为其组件的 n-ary 分层树结构,此结构中包含了各个组件的几何表示及其连接关系。每个对象的编码会包含其组件的结构信息,及其布局信息。

功能区划分的示例

在整个场景结构树中,作者同时编码了不同层级之间的对象的丰富关系。除了天然了父子垂直关系之外,同一层的节点之间也有水平关系(可以是多对多关系,这种关系表示为图中的 hyper-edge constraints)。

3.2 分层图网络

作者提出的网络架构包括一个房屋布局编码器(room layout encoder),一个场景层次结构编码器(scene hierachy encoder)以及一个场景层次结构解码器(scene heirachy decoder)。其中房间布局编码器以房间边界的分解梯度表示(deformation gradients of the floor boundary)作为输入条件,并提取处一个向量。此向量被用于解码器的输入条件。场景分层编码器完成了从房间级别逐级向下到功能区级别,对象级别并最终到对象组件几何级别,逐层地、递归地将房间多层体系映射到的通用隐藏空间(类似神经网络的隐藏层?)中(这句话很难翻译,原文是 The scene hierarchy encoder maps the indoor scene hierarchies from the room level to the functional region level, the object level, and finally down to the object part geometry level into a common space hierarchically and recursively),解码器的作用正好相反。

在编码过程中,家具级别的对象首先用一个预训练的 DSG-Net 编码、然后结合对象的特征及其在区域中的位置信息,功能域级别的特征被提取出来。最终,房间级别的特征政和路所有区域级别的信息。解码操作的过程为编码的逆操作。在编解码器的训练过程中,若干图消息传递操作被用来提取对象之间的关联与约束关系。下图展示了在场景生成过程中不同要对象之间的二元关系以及多对象之间的关系(hyper-edge)。

4 分层图表示(Hierarchical Graph Representation)

4.1 分层节点拆解

考虑一个三维室内场景,作者提出如下的分层结构,共分为四层,分别是房间层级、功能区域层级、家具层级以及对象组件几何层级。其中对象层级与对象组件几何层级在 PartNet 中有已经引入,而功能区层级为本文的创新点。每个层级的节点定义如下:

区域:根据家具对象的功能作用,功能区将整个室内场景的对象划分成若干个组,这样可以提高一致性,并更有利于学习过程。不同类型的房间通常有多重不同类型的功能区域。显式地构建这些区域的语义概念不仅为场景生产结果提供了许多有意义的语义标签,同时有利于更好地组织每个房间中的大量对象。另外,由于 RvNNs 模型的能力限制(capacity limit),作者也无法将同一个房间内的大量节点直接作为单一房间对象的子节点。

在实现过程中,作者使用 DBSCAN 空间聚类方法将每个场景划分成若干个更小的功能区域。DBSCAN 算法是一种基于密度的无参数聚类算法,分蔟的数量是自适应的,不需要预先指定。通过 DBSCAN 算法啊,所有的对象可以根据其空间临近性质进行分组,这种空间临近的性质,通常与其功能性相关。每个功能区的功能定义由其中面积最大的对象决定。对于一些的显然不合理的划分,作者会提出算法进行人为修正。

总结来看,对一个三维场景 ,有 ,其中 表示第 个分蔟(功能区域), 意味着功能区域之间的水平连接。

对象:在我们将室内空间划分为多个功能区域之后,每个功能区域内会包含多个家具对象。每个对象的形状 由一个 Mesh 几何对象描述,描述信息还包括其语义类别,以及空间位置信息。我们给出正式定义: ,其中 表示功能区中的第 个对象, 表示对象之间的水平关系。

对象组件:作者是会用 PartNet 形状分层结构来讲每个三维几何形状划分成具有与含义的组件树,将其组织为一个 n-ary 分层树结构,改结构的不同层表示了不同精细度的拆解结构。具体而言,每个对象 被拆解为若干个部分 ,这些部分由分层结构 组织起来,不同的部分之间存在二元或者 n-ary 关系 。每个组成部分 具有一个预定义的语义标签和一个 Mesh 形式的几何表示 。组件之间的关系集合遵循了 StructNet 中的做法。

4.2 Edge Relationships

在一个场景分层结构中,我们考虑两类节点关系,分别是:

  1. 父子节点之间的垂直关系;
  2. 同级别节点直接的水平关系;

相比于之前的工作,本文在二元关系的基础上引入多元关系。这种超关系(hyper edge)可以让我们生成的室内场景更加真实合理。

一个非常类似的工作是 GRAINS。在这个工作中,作者用三个关系来描述对象和墙体之间的关系,分别是 supporting, surrounding 以及 co-occurence。不同于 GEAINS,我们在这里采用了更加精确的关系描述,包括二元关系: adjancency (),translational symmetry (), reflective symmetry (), rotational symmetry (), 以及多元关系 parallel collinearity . n-fold rotational symmetry ()。

4.2.1 垂直关系

垂直关系描述了父子节点知己的关系,包括:

  • 房间跟节点与功能区域之间的关系;
  • 每个功能区域包含多个家具对象;
  • 每个家具对象由多个组件组成;

此外,我们还额外引入了两个垂直关系:直接将房间跟节点和对象层连接起来:

  • : 一个对象的倾转 bbox 需要与房间的边界对齐 (the oriented bounding box of an object may have to align with the room boundary in some scenes.);
  • :每个生成的对象需要位于房间边界内部;

这种跨层垂直边可以提高生成结果的合理性。

4.2.2 二元水平关系

水平关系发生在同级别的对象之间,用来描述具有同一个父节点的兄弟节点之间丰富关系与约束。基于形状生成领域的已有工作启发,我们定义了四种二元关系:adjancency (),translational symmetry (), reflective symmetry (), rotational symmetry ()。对于邻接关系,我们定义两个组件邻接,如果他们的最小间距低于 ,其中 为两个组件的外接圆的平均半径。对于对称关系,作者遵循一个已有工作来定义 。这些二元边于训练输入时在对象层级自动完成。注意两个节点之间可能存在多个二元关系。、

4.2.3 N-ary hyper-edges

二元关系还不足以充分描述复杂对象布局。例如在下图右侧,除了考虑的对象之间两两关系,最好能够考虑四把椅子环绕桌子布置的的多元关系。又如下图中右图,两个床头柜和床的方向线之间应该保持平行。

本文中我们引入两种多元关系:

  1. n 重旋转对称
  2. 平行关系:

多元关系发生一个功能区内的对象层层级。如果我们在任意两个对象之间构建二元关系(用以替代多元关系描述),这会形成一个致密网络,这对训练过程不利。

N 重旋转对称;考虑 个对象 ,如果满足下面的关系则称他们构成 N 重旋转对称关系:

其中 表示两个对象之间的 Chamfer 距离 表示旋转矩阵。 为旋转中心点, 为旋转角度。 为一个常量阈值。

平行共线性 考虑 个对象 ,如果他们满足下面的套件则称他们满足平行共线关系:

  • 所有对象的二维倾转 bbox 的主轴方向彼此平行(在二维面内);
  • 满足下列等式:

其中 为任意向量,而 为任意非负实数, 的倾转 bbox 的中心点 为以常量阈值。

5 分层图网络

如前文所属,本文中采用的网络是基于 VAE 的 RvNN 网络。SceneHGN 网络采用场景分层树 (从房间层级到对象组件层级) 作为输入,房间的边界 作为额外的输入条件。 需要通过一个编码器 映射到特征向量的 也经过一个编码器 映射到一个隐藏向量 。然后这两个向量被拼接起来,送入解码器 来重建 。为了训练 VAE 生成模型,我们使用 KL 散度增加了一个正则量,将所有场景的隐藏层空间映射到一个标注你的高斯分布。

由于我们是从 DSG-Net 中获取对象组件层级,因此编码器 $Enc_{PG} 和解码器 遵循了 DSG-Net。 利用组件的几何信息 ,其中 为对象 的每个组件的 deformation gradients 表示形式, 为其中心点,以及结构信息 ,将其映射到一个隐藏的特征空间 。解码器的作用阈值相反,它将特征向量映射回来

5.1 Room Boundary Layout VAE

FloorNet 的结构如下图所示。任意一个闭合的房间轮廓可以使用一个 deformed 2D unit square boundary 来表示。在本文中,一个单元方形边界由 596 个顶点和 596 个边组成。

Floor VAE。为了显示方便,图中的房间轮廓包含了 8 个点和 8 个边

为了高效地、精确地编码房间边界,尤其是变现处管教,我们使用了 2D non-rigid registration 技术,而非顶点坐标体系来表示一个 2D mesh。然后我们在这个 registered 2D mesh 上计算 ACAP deformation graidents。对于每个定点,我们最终得到 6 维特征 以及三维特征 (分别表示了缩放、剪切以及旋转)。

这段话有点东西啊,得找相关文献看看。

然后 矩阵被送入 FloorNet 编码器。FloorNet 的关键组件是一个图卷积网络。我们将整个 registered floor boundary 视为一个环装图,并在此基础上进行卷积操作来提取 2D mesh 的特征。在两轮卷积操作后,特征会通过一个 MLP 并输出一个隐藏层向量。我们执行两轮迭代,来将信息传递的给临近顶点,从而学习到邻接边的夹角(前面提到的着重学习拐角信息)。解码器的结构与编码器的相反。

5.2 Scene Hierachy Encoder

这个编码器包含两个部分,分别是一个递归编码器 ,实现从组件层到对象层的编码,以及 实现从对象层到整个房间层的编码。作者完全遵循了 DSG-Net 的结构来实现 ,本章节剩下的部分主要着介绍 这个编码器。

每个对象节点存储了三类信息,分别是:其结构和几何信息 ,这个信息通过 编码器提取;放置参数 $ 以及语义分类标签 。放置参数 包括了中心位置 ,缩放系数 ,以方向参数 (以 z 轴为旋转轴。对象特征编码器 将上述信息编码为特征向量

其中 是一个全连接网络,而 表示串联操作符。

对于非对象的节点 ,使用一个递归编码器 来提取其所有子节点的特征,并沿着节点之间的关系边来传递消息。对于表示多元关系的边,我们首先只将关系的类型的集成到对应节点的特征中,这个过程使用了一个 MLP 。这个 MLP 由两个全连接层和一个 Leaky ReLu 激活函数组成。然后我们在子图中执行两个消息传递操作来讲所有子节点的特征集中起来,这个过程通过一个以 Leaky ReLu 为激活函数的全连接层实现。最终得到的特征向量

其中 表示 的子节点。 为对象的语义标签, 为多元关系边的语义标签。

整个 不断重复直到得到根节点的特征。最终根节点的特征同一个全连接层映射到特征向量所处的隐藏空间。我们用 KL 散度加入一个正则量,使得的特征向量符合高斯分布。

5.3 Scene Hierachy Decoder

解码器以编码器输出的特征向量为输入,以空间边界特征为条件(condition),以递归的方式还原整个场景层级结构,解码器同样包含两个部分,分别是的递归式解码器 ,负责从对象特征描述中还原组件的几何结构,以及递归式解码器 ,负责接受根节点特征 以及条件输入 。对于对象解码, 解码器遵循了 DSG-Net 的设计,本章节主要介绍 .

如前文描述, 以房间节点未输入,并推断出其子节点,即功能区的特征,并递归式地解析处对象层级的特征信息。对于每一个解码步骤,我们假设每个父节点最多只有 10 个子节点,并且通过一个二分类网络(通过一个以 Sigmoid 为激活函数的 MLP 来实现)来预测节点存在的概率。同时我们也会预测出子节点的语义类型。对于对象节点,我们训练一个 MLP 来预测放置参数、分类语义标签以及对象特征,特征数据会被输入 来获取组件形态。放置参数估计网络由两个全连接网络,一个 Leaky ReLu 激活函数和一个 skip-link 组成。网络通过三个不同的全连接层来估计 , 。接下来我们通过节点的几何数据与特征来预测已有节点之间的关系。这些关系类型会与真值比较从而在训练阶段指导模型的超参数优化。

对于二元关系边的预测,我们对于任意两两节点组合,结合其特征判断每种边的存在概率。对于多元关系,我们通过注意力机制来预测一个 mask, 来表示哪些节点共享了一个多元边属性。利用节点之间的边连接关系,我们执行两轮消息传递过程来更新节点特征。最终得到的节点特征为:,其中 表示每个父节点 的子节点。综上,我们有

其中 ,其中 是子图中节点的数量, 是 hyper-edge 类型的数量。对于每一行,它预测了不同类型的 hyper-edge 出现的概率,最终推断的多元关系类型以 argmax 的操作给出。根据我们的定义,每个对象应该最多只有一个 hyper-edge。

5.4 Training and Losses

5.4.1 训练策略

根据之前的描述可以看出我么内购我们构架你的模型是一个由多个独立网络组成复杂体系,这个体系要想一次性训练到位是比较困难的。因此我们将训练分成两个阶段。首先我们训练从对象到组件级别的递归网络,然后训练整个网络。对于空间边界 VAE,我们在骨干网络之外单独对其进行训练。

5.4.2 损失函数

总损失函数如下:

其中 是整个数据集中的场景分布。重建损失 包括 eaf loss,sematic loss, edges/node existence loss, geometry loss, placement loss 以及部分 edge losses. 这里除了 placement loss, room-object edges 以及本文提出的 hyper-edge loss 之外,其他的损失定义都参照了 StructureNet。对于结构性损失,StructNet 中使用这一损失来确保生成的结构对象的合理性与真实性。不过在本文中,我们只对对象内的层级结构施加这一损失,而非整个场景层级。正则项 只在使得隐藏空间更加平滑,并有利于下游网络(生成与插值网络)的运作。在本文中我们设置常量 ,这是一个经验数值。

下面我们给出 Placement losses 和 edge losses:

Placement Parameter Reconstrucion Loss: 对于中心点和缩放系数我们采用 L2 Loss 来计算其损失。对于朝向角度来说,我么你发现在真实室内场景中,大多数情况下家具的朝向角度来自有限的几个值,一般是 ,因此我们选择用离散的值来预测家具的大致朝向,并生成一个残差偏移量来得拟合真值。因此 ,其中 为是一个估计向量,每个元素表示家具朝向指定方向的概率, 为预测出来的残差偏移量, 为真值。

Room-object Bindary Edge Loss:这个损失的主要目的是将预测出来的对象与房间的边界墙体之间对齐。在输入的室内场景数据中,房间边界和墙体基本对齐的。因此我们也鼓励对象的倾转 bbox 同水平面上的两个轴对齐。这一限制值对具有相关属性(即有 room-objects 边)的对象起作用。我们增加一个损失梁来估计对象的 box 和放假你的 box 沿着房间边界方向的距离,,其中 是所有预测出来的对象的集合。

为 Chamfer 距离。 为一个单元立方体的六个面的单位长度法向量, 为一个变换矩阵,将法向量旋转到的与对象的朝向 对齐。

Hyper-edge Loss:这个损失项的加入鼓励对象之间保留多元关系。本文引入了两种多元你关系。

对于满足 n 重旋转对称关系的 对象,我们可以定义损失函数:

其中 为所有对象的中心, 表示以竖直方向为轴以 为中心点,以 为角度的选转矩阵。注意由于在解码器作用之后对象之间不再保持旋转顺序,因此我们这里要尝试所有的顺序组合得到 Chamfer 距离的最小值。

对于共线平行关系(collinearly parallel hyper-edges),我们定义两个损失函数,第一个是:

这是对方向一致性的评估。第二个损失函数是:

其中 的倾转 bbox 的中点, 是所有相关对象的中点组成的点集的中点, 所有相关对象的平均相对位置。 表示将向量长度单元化。在计算 时,我们将对象中点的在水平面上的横纵坐标按照升序排序,从而避免相反向量被抵消。最终的损失函数是:

6 Experiments and applications

6.1 Scene Generation

前文训练的是一个面向室内场景的通用编解码系统,其隐藏层的特征向量,可以用于大量后续应用。三维场景生成就是一个典型的应用。这里提出的网络架构可以用于自由场景生成,但是在显示中,大部分的生成任务都有额外的限制条件输入(例如房间轮廓)。

论文的后续内容是结果对比和展示,不再整理。