Connecting the Dots: Floorplan Reconstruction Using Two-Level Queries 阅读笔记

简介:完成了从3D扫描数据中重建2D平面扫描图的任务。通过将平面图重建公式化为单阶段结构化预测任务:找到一组可变大小的多边形,这些多边形又是有序顶点的可变长度序列,以组成平面图。

Introduction

目标是将(室内)场景的观测转化为鸟瞰图中的2D矢量图。更具体地说,目标是将3D点云抽象为一组与房间相对应的闭合多边形,并能可选地添加更多的结构和语义元素,如门、窗和房间类型标签。

3D点云可从RGB相机,扫描仪等渠道获得,而目标则是从中提取凸显建筑结构元素的2D图。

目前的方法:自上而下的方法中,先使用神经网络从密度图中提取房间掩码,再通过优化获得多边形平面图。其中优化过程规则是手动设置的,这种非端到端训练的方式使得结果优劣很大程度上取决于优化方式的好坏。自下而上的方法:先通过神经网络提取拐角,然后寻找拐角之间的边缘(即墙段),最后将它们组装成平面平面布置图。这种方式结果的好坏取决于初始角点查询方式的优劣等,而数据缺失等问题会严重影响重建。

本文的方法:设计了一种方案,利用Transformers的序列预测功能,直接输出每个房间的可变长度、有序的顶点序列。这种网络被命名为RoomFormer。详细地说,文章利用CNN对房间密度图进行特征提取,并用Transformer架构辅以位置编码输出多个有序的角点序列。平面布置图是通过简单地按预测顺序连接这些角来恢复的。

模型评估数据集:Structured3D和SceneCAD

 

贡献:

a.提出了RoomFormer,一个Transformer架构可以端到端训练的神经网络模型。通过两级查询实现室内平面图的预测。

b.提高了Structured3D和SceneCAD的平面图重建分数,且推理时间更快。

c.能够额外预测语义房间类型标签、门和窗的模型变体。

Related Work

平面图重建:将原始传感器数据(如点云,RGB图像,密度图等)转化为矢量化几何图形。早期方法基于图像处理技术,如霍夫变换,平面拟合等。一些基于图的方法将平面图重建视为能量最小化的问题。而最近一些深度学习方法用神经网络替代了一些人为设置的规则,如Floor SP,Mask R-CNN,MonteFloor,FloorNet等,但这些方法是基于曼哈顿场景假设。HEAT提出了一种遵循典型自下而上流水线的端到端模型:首先检测角点,然后对角点之间的候选边缘进行分类。尽管端到端是可训练的,但它无法从未检测到的角中恢复边缘。

基于Transformer架构的结构重建:Trnasformer最初被用于序列到序列的翻译任务,如今在计算机视觉方面也表现出较好的性能。传统的工作基本都是生成一定数量的参数以表达原始形状,如DETR,LETR,PlaneTR等。而本文直接并行生成结构化的,顶点数量不确定的多边形,且不依赖于边界框的检测。

Method

平面图表示

本文的核心思想是将平面图重建作为多边形预测问题,每个多边形代表一个房间,且被建模为一个有序顶点序列。而边则由顶点的顺序隐式编码,因此不需要额外的边预测步骤。即输出为一组任意长度的序列,序列中每一项代表一个闭合多边形。多边形由任意数量的顶点序列表示,每个顶点被建模为由cn和pn组合成的向量,pn代表其2D位置,而cn={0,1}则表示该点是否为有效顶点。一旦模型预测了有序的角点序列,就连接所有有效的角点,以获得所有房间的多边形表示。

结构总览

模型架构如下图,a负责提取点云2D图像特征,b负责细化并编码图像特征,c使用两级查询进行多边形预测的Transformer解码器组成。d在训练过程中,多边形匹配模块在预测多边形和真实多边形之间的差距,从而实现端到端监督。

a.CNN backbone:负责从密度图中提取L个多尺度特征图,然后将特征图展平为特征序列。扁平化的特征图被连接起来,并用作Transformer编码器的多尺度输入

b. Multi-scale deformable attention:由于标准Transformer的计算复杂度较高,因此采用了deformable attention机制。该机制只关注position附近的一小组关键采样点。而在多尺度特征图上应用,则可以编码更丰富的上下文。

Transformer encoder:输入为多尺度特征图,而输出为同分辨率的增强特征图。在MS-DSA模块中,查询和关键元素都是来自多尺度特征图的像素特征。参考点是每个查询像素的坐标。将可学习的尺度级嵌入添加到特征表示中,以识别每个查询像素位于哪个特征级。

c.Transformer decoder:由多层堆叠,每一层由一个自注意力模块(SA),一个多尺度可变形交叉(交叉是什么)注意力模块(MS-DCA)和一个FFN组成。每个解码器层接收来自编码器的增强图像特征和来自前一层的一组多边形查询信息。多边形查询信息首先在SA模块中彼此交互,然后再MS-DCA模块中查询密度图中的不同区域,最后由一个共享CNN来预测每个查询位置作为角点的有效性c。

通过两级查询建模平面图

文章将平面图重建建模为对一组序列的预测。两级查询一级用于查询多边形,另一级则用于顶点。多边形集被表示为一个M*N*2的矩阵,M是多边形最大数量,N是每个多边形顶点最大数量。

解码器结构和每层迭代后的效果如下图,其中Di表示上一层解码器层传入到下一层的内容,是一个M*N*C大小的矩阵;Qi=(xi,yi)表示某一层多边形查询的参考位置,而Pi则是Qi经转化后输入到decoder中的位置查询,Pi = MLP(PE(Qi)),PE代表位置编码,其过程是将2D坐标映射为C维大小向量嵌入。

解码器对所有角落级查询执行自关注,无论它们属于哪个房间。这种简单的设计不仅允许单个房间的角落之间的交互,还允许不同房间的角落间的交互(例如,两个房间相邻墙上的角落相互影响),从而实现全局推理。

在多尺度可变形注意力模块中,直接使用多边形查询作为参考点,使网络能够使用显式空间先验来汇集多边形顶点周围多尺度特征图中的特征。房间和角落的不同数量是通过将每个查询分类为有效或无效来实现的。

文章使用一个MLP来预测查询位置(xi,yi)的变化,并用它们改变本层的Qi,并作为下一层的Qi+1。

输入到第一层的解码器嵌入和多边形查询都是从正态分布初始化的,并作为模型参数的一部分学习。在推理过程中,我们直接加载学习到的解码器嵌入和多边形查询,并逐层更新它们。

多边形匹配

Transformer解码器的输出为固定的M个具有固定数量N个顶点的多边形(包含无效多边形)。但groundtruth往往包含具有任意数量顶点的任意个多边形,因此一个挑战是将固定数量的预测与任意数量的groundtruth相匹配,以使网络端到端可训练。因此,需要根据集合级别和序列级别两个不同级别的匹配来设计策略。即无序的多边形集合和有序的顶点序列。

公式a

公式b

假设一组待预测的多边形实例表示如公式a,其中每个向量表示如公式b,其中cn代表该项有效的概率,而pn则代表该项的位置,该位置坐标被标准化到[0,1]范围内。groundtruth实例集和待预测实例集表示形式相同,但其中的cn只有0或1两种取值。之后,用无效的多边形实例填充groundtruth实例集使其中实例数量与待预测集一致。

在集合层次,目标是获得使groundtruth和与其匹配的预测多边形之间差异最小的匹配方式σ,公式如(1)。其中D是计算groundtruth和当前参数下的差异值(即cost)的函数。由于多边形被视为顶点序列,因此代价函数D是序列级的。D的公式如下面的论文截图,其核心思想是计算两集合间的概率差和位置差之和。

匹配成本D同时考虑了顶点标签和具有平衡系数λcls和λcoord的坐标。闭合多边形是一个循环,因此根据起始顶点和方向存在多个等效参数化。在这里,我们将地面实况Pm固定为始终遵循逆时针方向,但可以从任何顶点开始。我们计算了ξPσ(m)和Pm的所有可能排列之间的距离,并将最小值作为最终d。

用匈牙利算法算得最优匹配后,就可以计算loss值了。loss函数分为三部分,顶点标签分类loss、顶点坐标回归loss和多边形光栅化loss。其中顶点标签分类loss是标准的二进制交叉熵,如公式2。顶点坐标回归loss则使用了L1距离,如公式3。此外还计算了Dice loss作为光栅化loss,如公式4。其中R表示使用可微分光栅化器的给定多边形的光栅化掩模(像素化后的差异?)。

总的loss函数如下,其中坐标回归loss和光栅化loss只针对groundtruth中存在的多边形和顶点,而标签分类loss则针对所有多边形和顶点(即也包括无效多边形和无效顶点与填充后的groundtruth之间的差异)。

丰富平面图语义

本文的方法可以很容易地扩展到对房间分类问题的解决,并可以在使用相同输入的情况下重建额外的建筑细节。

房间类型分类:Transformer解码器最后一层输出为一个M*N*C的矩阵,通过对角特征求平均来聚合每个房间的特征,获得聚合后大小为M*C的特征矩阵。最后,将矩阵输入到一个线性投影层中,用softmax函数求每个房间的标签概率。M通常大于场景中房间的实际数量,因此会使用额外的空类标签来表示无效房间。用等式1的方式寻找与预测匹配的对象,并由一个交叉熵loss函数来计算loss,Transformer解码器最后一层输出为一个M*N*C的矩阵,通过对角特征求平均来聚合每个房间的特征,获得聚合后大小为M*C的特征矩阵。最后,将矩阵输入到一个线性投影层中,用softmax函数求每个房间的标签概率。M通常大于场景中房间的实际数量,因此会使用额外的空类标签来表示无效房间。用等式1的方式寻找与预测匹配的对象,并由一个交叉熵loss函数来计算loss。

门窗重构:在二维平面布置图中,门或窗可以被视为一条线。直观地,我们可以将它们视为具有2个顶点的特殊“多边形”。这样,神经网络可以直接用于预测门窗,而无需修改架构。只需要增加房间级查询M,或者可以用单独的解码器来预测门窗。由于一条线可以由固定数量的2个顶点参数化,我们可以将它们表示为两级查询,但使用固定数量的角级查询(图4b),也可以表示为单层查询(图4c)。

 Experiments

数据集和度量方式

数据集使用了Structured3D和SceneCAD。Structured3D是一个大型照片逼真的数据集,包含3500栋房屋,其平面图多样,涵盖曼哈顿和非曼哈顿布局。文章将注册的多视图RGB-D全景转换为点云,并将点云沿着纵轴投影为大小为256×256像素的密度图像。每个像素处的密度值是投影到该像素的点的数量除以最大点数,从而将其归一化为[0,1]。对于SceneCAD,文章则将布局标注转换为二维平面布置图多边形,并使用和Structured3D里同样的方式将点云投影为密度图。

度量:对于匹配的房间,文章在房间、角落和角度三个层级的几何上使用了F1 Score,Precision和recall三个度量值。文章还计算了房间语义预测的precision、recall和F1 score。对于房间类型,度量的计算与上述房间度量类似,但有一个额外的约束,即预测的语义标签必须与groundtruth相匹配。如果窗户或门到地面实况元素的L2距离小于10个像素,则认为它是正确的。

与先进方法的比较

比较的方法可以分为两大类:依赖神经网络划分房间,然后通过优化技术获得平面图,如MonteFloor和Floor SP;通过检测角点和线段恢复平面图,如LETR,HAWP和HEAT。RoomFormer在Structured3D上的表现优于此前的所有方法,且推理速度最快。在SceneCAD上,比较了Floor SP和HEAT的两种代表性方法,RoomFormer效果明显更好。

泛化能力:文章在Structured3D训练集上进行训练,并在SceneCAD验证集上进行评估(无需对SceneCAD进行微调)。将当前最先进的端到端方法HEAT进行比较,并在表3中报告分数。文章的模型更好地概括了看不见的数据特征。这可能归因于归因于学习的全局推理能力,而不是像HEAT那样专注于单独的角点检测和边缘分类。

Fig5中可以看出,MonteFloor可能会导致房间的缺失,而Heat则可能会导致角或边的缺失。而RoomFOrmer会更稳健地处理这些情况。下图中可以看出,FloorSP可能会强制生成多边形遮罩整个房间,从而产生不必要的角点。相比之下,RoomFormer的结果更加自然。

语义添加

文章注意到,门窗和房间分开识别有助于更好地为房间增加语义。此外,对于窗户的识别,单级查询(TD-SQ)比两级查询(TD-TQ)工作得更好。

对比实验

两级查询和单级查询的对比:单层查询负责预测房间的所有有序顶点。表5显示了两级查询极大地改进了所有度量。原因是两级设计放松了每个查询的作用,使其为单个顶点而不是序列建模。此外,它支持同一房间的顶点之间以及相邻房间之间的顶点之间的显式交互,而单级查询仅支持房间级交互。

多尺度特征图的作用:文章利用多尺度特征图来聚合局部和全局上下文。通过与单特征图实验对比,发现多尺度特征图显著改善了所有指标。

迭代的多边形调整:文章将顶点序列坐标直接学习为查询,逐层迭代地对其进行细化,并将更新后的位置用作可变形交叉注意力的新参考点。通过消融实验(保持静态参考点,仅更新解码器输出),发现这种策略对性能有有效提高。

损失函数的评估:测试了Lcoord和Lras分别删除后的效果,根据实验结果,证明了序列坐标回归损失是必不可少的,光栅化损失是一种辅助损失。

Conclusion

在这项工作中,我们介绍了RoomFormer,这是一个简单直接的二维平面图重建模型,被公式化为多边形估计问题。网络学习预测每个平面布置图中不同数量的房间,每个房间表示为不同长度的有序拐角序列。我们的单阶段、端到端可训练模型在性能和速度指标方面都比以前的多阶段和启发式驱动方法有了显著改进。此外,它还可以灵活地扩展以重构语义丰富的平面图。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]:在你提供的引用中,出现了一个关于MongoDB连接报错的问题。报错信息显示无法连接到127.0.0.1:27017,原因是连接被拒绝。为了解决这个问题,你可以尝试以下两种方法: 1. 在MongoDB的bin文件夹下手动创建data文件夹,并在data文件夹下创建db文件夹。然后,在bin文件夹下打开git bash窗口,输入命令"./mongod --dbpath /data/db"。这样可以指定MongoDB的数据存储路径为创建的db文件夹。\[1\] 2. 在MongoDB的bin目录下,输入命令"mongod.exe --dbpath D:\data\db",其中D:\data\db是你需要存放数据的位置。在执行这个命令之前,你需要先创建该文件夹。\[2\] 希望以上方法能够帮助你解决连接被拒绝的问题。如果问题仍然存在,请检查你的网络连接和MongoDB的配置是否正确。 #### 引用[.reference_title] - *1* [mongo连接报错MongoDB shell version v3.4.0 connecting to: mongodb://127.0.0.1:27017 2018-09-27T21:11:...](https://blog.csdn.net/weixin_44029605/article/details/104631974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于MongoDB报错:connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=...](https://blog.csdn.net/s_sos0/article/details/125459059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值