如标题,总结归纳一些关于场景合成/自动布局的相关论文(当前主要整理在平面上进行的做法,后期再进行扩展)
由于课题组内只剩下我在做相关任务,很多时候没有人讨论,如果有大佬也做这方面工作、或者也看过这些文章,希望可以的话能够和我一起讨论!!!!!谢谢大家!
每篇论文会从研究问题(问题定义)、整体思路、网络设计、评价(创新点和局限性)、数据集等方面进行介绍。
(图来自Deep Convolutional Priors for Indoor Scene Synthesis)
目录
Deep Convolutional Priors for Indoor Scene Synthesis - 2018 TOG(Keyword:室内家具、步骤式合成、CNN)
GRAINS: Generative Recursive Autoencoders for INdoor Scenes 2019 TOG(家居布局、树结构网络、RvNN)
Deep Generative Modeling for Scene Synthesis via Hybrid Representations 2020 TOG(排列矩阵&渲染图像、GAN)
Generative Layout Modeling using Constraint Graphs
Deep Convolutional Priors for Indoor Scene Synthesis - 2018 TOG(Keyword:室内家具、步骤式合成、CNN)
研究问题
给定房间的轮廓(本文房间数据轮廓均为矩形) ,对特定类型的房间(如卧室、客厅、办公室,一个类型一套模型参数)进行常见物品/家具的布局摆放。
常见家具不包括壁挂式、第二层等物体,比如台灯。
整体思路
Goal:build a generative model of scenes that can encode complex dependencies and relationships involving objects and the room geometry.
模仿人摆放家具的思路:
- 对现有房间场景进行判断是否添加新的家具(预测、二分类问题)
- 选择新家具的类型和摆放位置(building a probability distribution of possible object categories across many possible scene locations, then sampling from that distribution)
- 对新家具进行旋转(预测转向)
一些对问题的简化:
- 只对平面上的家具进行学习(考虑到大部分的家具都摆放在地面上)-> 因此可以用从上到下的俯视图去表示
- 迭代式地去生成房间中物体的布局:即一个一个去摆放新的家具
网络设计
论文头图:几个组件分别进行三个步骤(分别正、负样本都是50%是什么意思?)
- Continue?模块:交叉熵损失
- 训练输入:在场景的一系列对象中,随机取所有的对象(输出结果为true)或者部分对象(输出结果为false)
- CategoryLocation?模块:交叉熵 + additional loss
(惩罚预测出不存在的类别)
- 训练输入:
- InstanceOrientation?模块:二值交叉熵
- 训练输入:
问题的一些数据规定:
- 房间表示(Scene S):a top-down view俯视图
(image-based representation)因此可以放到CNN里面去训练。俯视图由以下几个图(C+6)去表示
- depth
- room mask
- wall mask
- object mask
- orientation mask:两个通道分别表示sin值和cos值
- category mask:每个类别一个通道,共C个类别
评价
- 使用flat collections of objs来表示房间,忽略了房间的层次关系、以及对象之间的功能关系(table & chair) --- 明确将层级结构和对称性加入模型could help?
- 生成速度太慢,主要是由于挨个计算位置比较慢 ---- 用共享的feature map去计算位置(因为原来需要每一个位置都要重新计算一次feature map;或者换成image to image的翻译任务,一次性得到所有像素点的对象类型。
- 只考虑第一层的对象(只放在地板上的输入),只考虑了一个俯视图 ---- 使用多视角的图?
- 不涉及到一些室内设计规则
- ==========================
- 个人认为,迭代式的生成方法挺麻烦的:从网络训练角度很麻烦;从结果来看也不好到达全局一致性。但完整的一步式生成可能要学习到的东西比较多,在数据集不是很多的情况下不一定能得到好结果。
数据集
SUNCG dataset:contains over 45,000 3D scenes, with each scene segmented into individual rooms labeled with a room type (e.g. bedroom, living room) or multiple room types
处理:只考虑了三种类型的房间;去除了一些房间(低质量、房间大小在[>6m, >6m, >4m]的、家具数量在[4,20]之外的)、家具(包含多种物体的、出现次数不频繁的、地毯)以及会阻断房间的柱子、拱门、楼梯等隔断
Fast and Flexible Indoor Scene Synthesis via Deep Convolutional Generative Models 2018 CVPR(家具布局、步骤式迭代生成、CNN)
研究问题
给定建筑的几何边界(天花板、墙等)【这里应该也需要给定特定的房间类型】,决定空间中放置哪些对象及位置。
整体思路
基于图像image生成的pipeline(认为image-based方法能够更好的表达像素级空间关系)
整体思路与上一篇DeepSynth相似,对一些模块进行了细化。
网络设计
- Category:
- 把类别和定位分开,主要是因为合一起的容易出现同一种类别位置都一样的问题(比如床头柜都在床的左边之类的)
- 去掉了continue模块,在结尾用<STOP>类别替代它
- 网络使用ResNet-18,输入为:images + 每个类型的数量,输出为:类型的概率分布
- 输入的顺序由first-tier在second-tier之前、重要度(大小*出现频率)排序
- Location:
- 视为image-image的翻译任务,主要是为了视为一个2维离散任务去做,
- 网路使用Encoder+Decoder(fully-convolutional encoder-decoder network,FCN:ResNet34);损失为pixel-wise cross entropy loss ;为了防止学习到的是精确位置(因为每个标签都是单个位置)而不是对应分布,这里加上了L2正则向和dropout来限制模型。
- 输入为:,输出为heatmap image(64*64*C)来表示每个像素放置的可能性(64*64*1发现结果不好)
- 为了让下一个模型有平移不变性,让图像转换到以location为中心的图像作为后续的输出。
- Orientation
- 每一个类别有一个预测的网络
- 网络使用CVAE(CNN encoder + fc decoder);损失使用standard CVAE loss formulation
- 输入为平移变换后的图像;输出为cos值和sin值的符号
- 为了让下一个模型有旋转不变性,让图像旋转作为后续的输入
- Dimensions
- 网络使用CVAE-GAN(CNN encoder + fc decoder),用了一个卷积判别器
- 输入为;输出为bbox的 [ x , y ]
- Insertion:
- 计算好category, location, orientation, size 之后, 用 a nearest neighbor search方法从数据集中找到3d模型
评价
- 房间类型的限制 --- 结合房间结构+image-based
- 房间功能的结合
数据集及处理
SUNCG,过滤处理同上
PlanIT: Planning and Instantiating Indoor Scenes with Relation Graph and Spatial Prior Networks 2019 TOG(家具布局、图结构、GNN)
研究问题
给定房间类型和形状,选择和放置一系列物体去组合成这个房间
整体思路
- 生成relation graph
- 从大量场景实例中提取出relation graphs
- 根据这些图训练图的生成模型
- 实例化这个relation graph:use image-based neural network modules to guide our search
网络设计
- 房间表示——图的定义:
- 节点和边。节点除了正常节点还有超集节点(?)、边有两种边:
- support edges;
- spatial edges(具体分为4个方向边【front, back, right, left】* 3个距离边【adjacent, proximal, distant】)提取方式见4.3
-
-
另外:房间形状结构定义:使用额外的节点以及他们之间的双向边来表示
-
Wall节点 存储墙面片段的长度
-
Wall-wall 边 存储两道墙面之间的角度
-
Door、Windows节点与相连的墙面节点相连
-
-
由于这样子会表示出很多没啥意义的边,反而会影响网络的训练,因此要删掉一些边。
-
但又由于删掉了一些边会导致没办法生成场景(比如从单独的墙面生成场景的话,结果预测出来的东西与大家都没有边,会导致没办法继续),因此用了最小成本路径?的方法去进行重新连接
- 节点和边。节点除了正常节点还有超集节点(?)、边有两种边:
-
网络设计
-
图生成
-
TODO:
-
-
实例搜索网络
-
评价
数据集
SUNCG数据集,处理同DeepSynth,但加上了墙面完整的条件过滤。
GRAINS: Generative Recursive Autoencoders for INdoor Scenes 2019 TOG(家居布局、树结构网络、RvNN)
Deep Generative Modeling for Scene Synthesis via Hybrid Representations 2018 2020TOG(排列矩阵&渲染图像、GAN)
研究问题
根据待放置物体的大小和形状属性对3d物体在场景中的分布进行建模(用生成网络的方法:将分布映射到隐层空间中)
整体思路
认为循环插入物体的方法在本质上是次优的,因为在插入新物体后不会修改场景中现有对象;否则,必须运行代价高昂的全局优化来共同优化场景布局;另一方面并没有在隐层空间去得到表示,这对scene interpolation和scene extrapolation并不适用。
因此本文采用一个生成网络GAN的结构,用三维表示数据,但同时用图像去指导网络训练(判别器)
网络设计
场景表示:矩阵表示
- 单个对象的表示:Existence(dim = 1)、Location(dim = 3)、Size(dim = 2)、Orientation(dim = 3)、Description(dim = d) -->
- 假设共
个类别对象,每个对象在单个场景中最多存在
个
- 假设共
- 场景表示:
- 为了保持排序不变性,引入两个算子
(用于排序?)和
(用于平移、旋转)
- Pairwise matching & Consistent scene alignment
- 具体见Section 4.4
Pipeline
- 前处理:Rotate Translate Permute
- 中间网络:VAE-GAN结构
- 编码器将输入场景到隐空间变量z
- 稀疏连接+全连接交替
- 解码器基于z生成场景数据矩阵
- reverse from 编码器
- 鉴别器:
- 场景鉴别器分类输入场景是否真实
- 图像鉴别器分类输入俯视图图像是否真实
- 投影模块P将3D场景投影到2D俯视图图像的投影层
- ∂Eo(M)是某个位置的所有的点,计算点的距离
- 网络训练:挨个把模块固定,然后进行最小化操作。
- 编码器将输入场景到隐空间变量z
评价
- 3D 对象表示确保了合成场景的局部和全局结构,而基于图像的表示保留了与局部视图相关的模式。相结合的方式...
- 相较于循环添加的方法和的方法更有优势
- 不能完全编码合成场景的物理属性
- 不能生成新的对象/形状,不能输入别的约束
- 改进:增加性状描述生成网络来表示形状、增加多视角的图
数据集
Generative Layout Modeling using Constraint Graphs 2020 ArXiv(平面布局、图结构、transformer)
研究问题
不需要输入约束条件 / 指定边界或图元大小 的住宅平面布局 / 家具布局
整体思路
考虑全局拓扑关系(图元之间的连接和距离)以及局部空间细节(图元元素大小等细节)的保持。
基于以往基于图的生成模型是连续性的,而布局上的数据主要是离散的,因此采用自回归模型去自己生成约束。
Pipeline:
- 自回归生成图元的几何信息;
- 自回归生成边;
- 将节点和边视作约束用线性回归优化去进行布局
方法设计
数据表示 graph L = (N, R)
- 节点N表示图元 N = (τ, x, y, w, h)。其中 τ 表示房间/家具类型
- 用矩形表示房间,若存在不规则房间,则将它细分成多个矩形房间(见下图567)
- 边 R 表示图元之间的关系R = (Ni, Nj, ρ) 。其中ρ来表示不同类型的边
- RC:约束边,用作后期线性回归优化。比如水平方向上空间的连接、竖直方向上空间的连接(图中红线)
- RD:附加项,对连接边进行属性描述:比如相邻图元的墙或者门 (图中蓝线)
详细设计:(以平面布局为例)
- 图元信息生成自回归网络
- 采用GPT-2
- input & target:图元的约束:NC = (τ,w,h);额外添加两个序列,对应位置分别表示索引i以及对应属性类型t。
- 详细可见上图右上
- 额外添加的序列更方便特殊类型token添加(比如type=0的token表示终止token,若只有value,就不好用任何一个数值去表示他)
- sequence order:x从小到大、y从小到大。
- 边信息生成自回归网络
- GPT-2 model with PointerNetworks
- input & target:边的约束:R = (Ni, Nj);
- 其中Ni表示对应图元的属性
- 同样额外加上索引i和类型t来表示当前值是对应边的头还是尾
- 另外一个缩短序列的方法:将连接到同一个房间的边做整合,只在开头加上源元素的约束,后面跟上各个尾,最后额外加一个结束token来缩短这样的序列,如Horiz. adj
- sequence order:x从小到大,y从小到大
- 线性规划
- 目标函数如下:
- 在fllorplan问题中,目标函数可以是整个布局的轮廓长宽的和,来增加整个布局的紧凑型,也保持线性
- 步骤1+2得到的约束可以用如下方式表示:
- 目标函数如下:
其他
添加encoder 将用户约束与已有的约束做一个交叉注意,从而加到条件里面。
条件表示:比如房间的轮廓固定:将外轮廓也表示称
评价
感觉边分成约束边和属性边两种比较有意思,也更详细;
数据集
In-game Residential Home Planning via Visual Context-aware Global Relation Learning 2021 AAAI(楼层布局、图&图像、Link Prediction)
研究问题
开放空间(如庄园、城市规划?等)的场景合成。
难点:
- 组件之间的功能性关系不大;
- 组件数量比较大(相对于室内空间的家具数量来说);
- 存在一些不规则区域,不能直接用包围盒去表示
整体思路
由于组件之间的功能关系不大,因此用图中的边去学习隐层的相对关系:
本文提出了一种基于全局关系约束的思路。我们将当前场景转化为一个带有丰富空间信息的有向图。通过学习数据集中边的分布情况,我们可以采样出当前场景中所有节点到新节点的边的分布,进而通过边的分布来推断出新节点的位置。如此便可以辅助整个场景中组件的逐一摆放。
为了实现这个目的,我们基于图注意力机制下的循环网络来模拟当前子图到目标节点的边的分布情况
(引自网易伏羲团队介绍:AAAI 2021最「严」一届放榜:录取率仅21%,网易伏羲9篇论文入选 - 《逆水寒》官方网站- 颠覆式资料片“第二流派”- 网易旗舰级武侠游戏)
不规则区域不能直接用包围盒去表示,因此直接从2D渲染图中去提取几何信息:
为了在模型中加入对2D空间的理解,我们将3D场景渲染为2D,提取对应节点视觉特征,融合到循环网络中。由于图节点信息和2D场景信息来自不同的域,我们还加入一个全局的视觉内容-图节点匹配损失。
方法设计
数据表示:有向关系图G =(V,E)
-
节点 V 表示场景单元:标签(
,|D|为标签总数量)+ xy平面上的方向包围盒(
) --->
-
边 E⊆V×V 表示节点之间的空间关系:用4个方向类型*4种距离类型(
) + 6种对齐属性(
) + 两个节点之间的距离(
) --->
自顶向下图表示:
渲染成俯视图向网络提供详细的形状信息
网络结构:
视觉信息提取:ConvNet + RoIAlign裁剪建筑单元的视觉特征+Conv转换
评价
问题的主要难点就在于如何将没有类别的单元区别开,这里采用视觉信息去表示不同单元挺有创新的,不过中间的处理细节不知,比如对不规则的图元是否会增加mask之类的来提取专属于不规则图元的数据信息呢?
另关于朝向、边的表示感觉可以更详细一些?
数据集
从在线游戏中收集的玩家设计的庄园图:
- 一部分渲染图(30k)交给专家标注打分(分五个等级、去除比较水的后两个等级)
- 训练模型对剩下的进行打分和筛选
最后剩下28k 个设计,每个样本平均 276 个建筑单元。总共有 381 个不同的建筑单元,包括 280 个基础设施单元(如墙、门等)、101 个建筑单元和一个可以是任何形状的禁区单元
Scene Synthesis via Uncertainty-Driven Attribute Synchronization 2021 ICCV(室内家具布局、图结构、VAE+L-BFGS)
研究问题
不需要输入约束条件 / 指定边界或图元大小 的室内家具布局
整体思路
- 用两个VAE来分别生成家具的属性(Object Attributes)和家具之间的关系(Relative Attributes);
- 在此基础上用一些先验知识去优化当前的结果(优化方法:L-BFGS)
方法设计
Attribute Encoding and Synthesis
- 数据表示
- obj attributes
,其中:
:size parameters
:rotation
:location
:两个步骤:
- Relative Attributes
评价
数据集
3D-Front数据集