基于AISI网络的BIM三维重建方法研究
2020-11-13史健勇
朱 攀,史健勇
(上海交通大学土木工程系,上海 200240)
建筑信息模型(building information model,BIM)越来越多地用于建筑领域的不同的任务或设计,如建设规划、可视化、机器人导航、施工模拟、设施管理和古建筑修复等。对于有一定年代的建筑,通常无法从初始建筑设计图中获得合适的模型。点云测量则常作为在建筑软件中生成3D模型的起点。尽管已有快速扫描设备和建模软件的帮助,但是从原始点云生成3D建筑模型仍然是一项耗时且需大量手动工作的任务,因此研究自动重建3D建筑模型的方法具有较大的价值[1]。
深度学习已经在很多领域取得成功,如拼写校正、语音识别、认出社交媒体照片中的好友们等。现在正处于一个程序设计得到深度学习帮助越来越多的时代[2]。深度学习在计算机视觉中有很多任务,如图像分类、物体检测、语义分割和实例分割等。其中,实例分割不仅可以区分不同类别的物体,还可将同一类别的不同实例区分开来。传统算法中点云到BIM的自动三维重建需分为5步[3]完成,即点云配准、点云分割、边界提取、语义信息识别和3D建模。根据点云到BIM模型重建的步骤可以看出,利用3D实例分割技术可以解决点云的分割和语义信息识别2个关键步骤。因此,基于实例分割的深度学习方法可以帮助实现BIM的三维重建。
本文提出了一种基于曼哈顿世界假设下的室内场景的BIM三维自动重建方法。假设人造结构的外表面需与某一公共正交坐标系的3个主平面之一平行[4],即所还原的建筑构件的几何模型均简化为相互垂直或平行的长方体。该方法可根据分割好的点云,自动提取出该实例结构的3D尺寸与分类结果。目前可实现识别的建筑元素包括门、窗、墙、地板和天花板。该重建方法对点云的要求为:①所扫描房子为曼哈顿世界假设下的建筑;②点云位置需在既定的公共正交坐标系完全摆正;③没有噪点。
本文的研究思路如图1所示,通过引入已有的深度学习框架ASIS[5]对3D室内解析数据集(S3DIS)[6]中的点云进行实例分割,假设分割好的点云最紧致边框作为BIM构建的3D参数,使用分类的结果作为BIM构建的类别。根据这些数据,使用基于工业基础类(industry foundation class, IFC)标准的方法直接驱动BIM模型的自动生成。通过实验验证,利用无噪点点云,该方法可实现基于曼哈顿世界假设下的室内单房间的三维重建。
图1 BIM逆向建模研究思路Fig. 1 Research idea of BIM reverse modeling
1 相关工作
1.1 深度学习在建筑三维重建中的应用
深度学习相较于传统算法的优势为:减少了手工设计特征描述符的需求,且具有较宽松但更可靠的分类规则,因此在计算机视觉的对象分类和识别问题上取得非常高效的成果[7]。随着建筑相关数据的不断丰富,一些工作已经开始利用深度学习方法对建筑对象进行理解与识别。ARMENI等[8]提出了一种基于滑动窗口和支持向量机(support vector machine, SVM)的方法在3D空间中检测建筑和内部家具的结构和非结构元素,用于对大型室内空间进行3D语义解析。但实际上,SVM方法也需要人为设计特征,因此并没有很好地利用深度学习的优势。对于建筑逆向建模,FloorNet[9]提出了一种可以将室内空间的RGBD视频转换为矢量图形的平面图的神经网络,并在后续的工作中[10],从重建的矢量化平面图自动生成3D模型。整套方法并不是一种端到端的3D点云处理网络,而是从2D分割入手再过度到生成3D模型,过程不够简洁。文献[11]提出了从扫描点云到3D重建的建筑场景理解的深度学习方法,其目标和本文最相似,即由点云分割、点云分类和构建合并的3步完成,但实际上,点云的分割与分类是可以一步完成,比如使用PointNet网络[12]。本文使用ASIS网络框架[5]是一种端到端的点云实例分割方法,并且在选用的数据集上可以得到目前最优的实例分割结果。
1.2 3D数据集回顾
利用有监督的深度学习方法的关键是要求提供大型的、带有标签的数据集。为了达到从点云中学习BIM模型所需的信息,需要回顾尽可能多的已有的公开数据集。目前已经建立了一些公共数据集来对3D对象识别算法的性能进行基准测试。现领域中一些著名的数据集包括:①KITTI数据集[13],用于自动驾驶场景中的汽车与行人的识别;②ModelNet数据集[14]和ShapeNet数据集[15],用于计算机辅助设计(computer aided design, CAD)模型的识别;③斯坦福大学室内场景理解的S3DIS数据集[6],则用于建筑元素和家具的识别。其他相似的工作还包括NYU V2[16],SUNCG[17],Semantic3D[18],SceneNN[19],PiGraphs[20],SUN 3D[21]等。
表1对比了几个常用数据集的信息,其中,真实扫描打钩表示数据集是从真实世界的场景扫描而来,否则为电脑合成的数据;实例标注打钩表示数据集拥有实例级别的标注;建筑元素打钩表示数据集对象包含建筑元素,如墙、门、窗。KITTI数据集是最早的点云数据集之一,尽管满足实例分割的需求,但识别的对象并不是建筑元素。以ScanNet数据集建立的基准测试非常流行[22],但是缺乏对建筑元素类别的标注,比如说墙体。Matterport3D[23]是一个大型RGB-D数据集,但缺乏对墙体的实例级标注。
表1 常用3D数据集对比Table 1 Comparison of commonly used 3D data sets
斯坦福大学计算机科学与土木与环境工程系共同制作的S3DIS室内点云据集[6]由Matterport扫描仪采集而成,包含点云的三维坐标(x,y,z坐标)和颜色(RGB)信息。数据集注释的类别包含建筑元素、家具元素以及杂物共13类,其中建筑元素有天花板、地板、墙、柱、梁、窗户和门,家具元素包含桌子、椅子、书柜、沙发、黑板,其他出现次数较少或者不属于感兴趣的元素则分类为杂物。值得注意的是,由于该数据集对每个点云都有实例级的注释,这意味着归为杂物的噪点是被去除掉的,因此使用该数据集时无需进行点云去噪。S3DIS室内点云据集符合点云实例分割所需要的要求,因此本文选用该数据集作为分割和实验的对象。
1.3 BIM模型的自动生成
BIM模型通常由其应用软件生成。用于创建和编辑的最流行的桌面应用软件包括Autodesk Revit,Graphisoft ArchiCAD,Tekla Structures和VectorWorks。由BuildingSMART定义的IFC或“工业基础类”是对建筑环境(包括建筑物和民用基础设施)的标准化数字描述。其是一个开放的国际标准(ISO 16739-1:2018),这意味着IFC模式是一种无需指定商业软件的数字描述,且可在广泛的硬件设备、软件平台上实现通用[24]。因此以IFC为标准的BIM模型自动生成方法是最通行的方案之一。
文献[25]提供了一种半自动化解决方案以处理建筑三维重建问题,并以检测到的墙壁、地板和天花板的数据作为输入编译出IFC模型,使用IfcWallStandardCase实体表示墙壁,并使用IfcSlab实体表示地板和天花板。文献[26]提出了一种从无组织点云中自动提取建筑物几何形状的方法,并将提取的数据生成为gbXML格式的模型,以便将其导入到能源仿真工具中。文献[27]提出了一种半自动的图像驱动系统,用于识别建筑物体及其材料,使用IFC Engine[28]开发了带有材料信息的IFC BIM生成子系统,并以IfcColumnStandardCase为例,说明创建IFC BIM对象混凝土柱的过程。已有的工作对IFC模型的自动生成方法描述的较为简单,本文将更详细地说明建模的整个过程。
2 基于深度学习的点云实例分割
本部分将使用联合分割(associatively segmenting instances and semantics, ASIS)网络框架[5]将S3DIS数据集中的点云进行实例分割,得到构建级别的分割结果。
2.1 ASIS网络框架原理
ASIS网络框架可用于在3D点云上同时进行实例分割和语义分割,并将两者紧密地联系在一起。如图2所示,整个联合分割网络系统由3部分组成:①负责点云特征提取的主干网络;②负责融合实例、语义信息的联合分割模块(ASIS模块);③负责实例分割的分类器。
图2 ASIS网络框架的原理Fig. 2 The principles of ASIS network framework
输入的点云矩阵仅包含每个点的坐标信息(x,y,z)与颜色信息(RGB)。ASIS网络框架的主干网络负责对输入的点云进行初步特征提取,并得到特征矩阵。在经典的网络中,需要经过多层卷积和池化进行特征提取,从而找到分类目标,这个过程类似于一个漏斗,会使特征图尺寸逐渐减小,随后的语义分割与实例分割需要将分类后的特征图还原到原图尺寸。因此通常的做法是编码和解码网络结构。主干网络可使用PointNet或者其改进版PointNet++实现,PointNet系列网络[12]可以直接处理无序的点云而无需任何前处理(比如转换成深度图像或者体素等)。
联合分割模块由2路组成,并且相互配合。一路是富有语义感知的实例分割,另一路是融合了实例的语义分割。富有语义的实例分割路实现了同一语义类的点紧密相连,而不同的类被分开的功能。经过联合分割模块,特征矩阵进一步强化了特征内涵并变成了具有语义感知能力的实例分割特征矩阵,较直接使用特征矩阵更具优越性。
实例分割分类器可由均值漂移聚类法(mean-shift clustering)实现,该分类器以具有语义感知能力的实例分割特征矩阵为输出,可获得预测点的语义标签和实例标签。
输出后的实例分割矩阵比输入的点云矩阵多了2个维度。第一个维度为每个点的语义标签,表明该点云所属的构件类型,比如该点云属于墙。另一个维度则记录该点云所属实例的编号,该编号可将同一类构件的不同实例加以区分,比如区分该点云是属于第一面墙还是第二面墙。
2.2 ASIS网络生成实例分割结果
ASIS提供了在斯坦福数据集上训练好的网络模型,该模型在第5个区域上进行测试,并在其余4个房间区域上进行训练,因此运行网络可以得到在第5个区域的实例分割结果。对S3DIS数据集进行实例分割,在区域5下的测试的精度见表2。
图3 ASIS对区域5的实例分割结果Fig. 3 Instance segmentation results for region 5 by using ASIS
将所有建筑构建的各个实例分割结果随机赋色,可以得到图3的效果。ASIS网络对建筑等较大元素的实例分割表现较好,但当场景中单个元素较小时,则容易出错。例如图3(a),左上角的两面墙体被分为不同的实例,且和地板的界限较为明显。在图3(a)中也显示了一些失败案例。在右上的墙上,2个窗户和墙之间的分界并不明显,并且窗户和墙有一些公用的区域,这会给下一步的建筑构建外轮廓的提取造成困扰。此外,观察左下角桌子周边的椅子,可以发现4把椅子作为单个实例被错误地分割在一起。图3(b)和(c)为另外2个房间的实例分割结果。
在实例分割任务上,ASIS网络已经达到了目前较高的水准,但因其对小物体识别的准确度仍有待提高,故本文对识别物体的类别进行了取舍。即本工作仅选用了准确度较高的一些类别,而不是全部13个类别。最终保留的分割类别仅包含墙、门、窗、天花板与地板5种占用空间较大的元素。这5类大物体在ASIS网络分割下的精度较高,分割边界也比较清晰,从而保证了后续三维重建的有效性。
3 用点云数据驱动生成IFC-BIM模型
3.1 基于包围盒假设从分割的结果中提取建筑构件参数
实例分割后,点云的每个点实际上多了一个语义标签和一个实例标签,因此每个点均可以由一组7维向量[x,y,z,R,G,B,S,I]表示,其中(x,y,z)为该点的坐标位置,(R,G,B)为该点的颜色信息,S为点的语义标签,表明该点所属的类别,I为实例标签,以区分同一类别下的不同实例。
BIM模型由众多的建筑构件组成,对于单个构件而言,建立基本的模型至少需要该构件的类别信息、相对位置坐标及尺寸信息。因此每个构件建模所需的参数可由一组7维向量[lable,ox,oy,oz,x_size,y_size,z_size]表示,其中lable为该构件的类别,(ox,oy,oz)为该构件底部中心坐标,用于确定相对位置坐标(x_size,y_size,z_size),为该构件在3个轴向上的尺寸。有多少个实例标签就有多少个构件,每个构件均由这7个参数表示,也就是说BIM模型构件的属性中只能包含这7个参数,而其他参数是不可知的。
从离散的一个个点云的标签到单个实例的具体3D参数的获取,是根据包围盒假设生成的,即假设以分割好的某个实例点云群的最紧致边框作为该BIM构建的3D尺寸参数。以门为例,如图4所示,为了获取该构件的3个轴向上的尺寸与相对位置坐标,就需要找出最紧致的包围盒。操作步骤如下:
(1) 获取该实例(如一个门)的全部的点云向量,组成该实例的向量组。
(2) 获取该向量组中点云的所有x轴方向的坐标,并取出该坐标向量中的极大x_max与极小值x_min。这是因为在曼哈顿世界假设中,如果建筑与坐标轴对齐,则包含极值坐标的点云即为该长方体构件的顶点。
(3) 同样,取出另外2个轴向的极值:y_max、y_min、z_max和z_min。
(4) 定义该实例的3D尺寸参数为x_size=x_max-x_min,y_size=y_max-y_min,z_size=z_maxz_min,即图4中包围盒的尺寸。
(5) 该实例的相对位置坐标可以用包围盒底部中心坐标(ox,oy,oz)代替。
图4 点云最紧致边框示意(以门为例)Fig. 4 The tightest frame of the point cloud(take the door as an example)
尽管在包围盒假设里定义了构件的3D尺寸,但因为点云仅扫描了室内一侧,因此构件的厚度信息是不可知的。这里的“厚度尺寸”产生的原因有:①墙体和地板凹凸不平;②该墙并不是曼哈顿假设下的直墙,而是有轻微角度的斜墙;③门窗有把手之类的突起部件而产生的扫描厚度。因此该“厚度方向的尺寸”的意义在于给出了构件内表面存在的范围,而不是构件真实的厚度。
3.2 根据参数生成模型
本文制作了一个“IFC生成器”。其是在IfcOpenShell项目软件库[29]的基础上开发而来。IFC生成器可根据已获取的构件参数(7维向量组)自动生成BIM模型,其余的参数暂时不可知。目前可以包含的建筑元素有:墙、门、窗、开洞、地板、天花板。图5是一个根据参数生成模型的案例。生成器已在GitHub上开源,软件及其详细的使用方法见https://github.com/zhupan007/ifc_generator。
图5 案例:数据驱动IFC生成器生成BIM模型Fig. 5 A case: data-driven IFC-generator generates BIM model
IFC模型生成的具体步骤如下:
(1) 生成一个建筑对象。可构造IfcHierarchyHelper类的实例对象file,该对象在内存中维护着一个房屋模型。后续的添加房屋构件操作都将保存在此file对象中。然后,写入建筑的场地层次信息。利用之前的file对象分别往房屋模型中添加项目(Project)、场地施工(Site)、建筑(Building)和建筑楼层(Building Storey)等4个对象变量。同时,需要设置这4个对象的从属关系。
(2) 建立墙体、门、窗、地板和天花板。IfcWallStandCase是IFC中的标准墙,可作为BIM模型的墙体。在创建墙的形状时,可使用SweptSolid(扫略实体)进行几何的建立。Sweptsolid是IfcWall常用的几何描述方式之一,该方法基于垂直拉伸多边形足迹建立墙体[30]。扫略实体需定义墙的厚度参数,这里的厚度仅表示该墙内表面存在的范围,并不是墙真实的厚度。建立墙体时还需要指明该墙体的相对位置信息,该信息包含在构件底部中心坐标(ox,oy,oz)里。
创建窗户、门、地板和天花板的步骤与建立墙体类似。唯一的区别在于建立门窗时,需要对相应墙体的位置开洞,以便能正确的显示墙上的门窗。其中窗户和门可使用IfcWindow和IfcDoor这2个建筑单元进行建立,地板和天花板可使用IfcSlab,开洞则可使用IfcOpeningElement进行建模。
4 实验与评估
整个三维重建以扫描的点云为起点,最终可以得到以IFC为标准的BIM模型。该方法分为2个步骤:①利用ASIS网络对点云进行分割;②利用IFC生成器将得到的参数生成IFC标准下的BIM模型。图6挑选了区域5中3个典型房间逆向建模,结果中展示了每个房间的原始点云,点云的分割结果及建成的BIM模型。为了便于观察,所有模型去除了天花板。分割结果中只保留了、门、窗、地板4个元素,其余元素暂时忽略不计。每个元素的尺寸被视为点云最紧致的包围盒,因此这些建筑元素的建模形状都是长方体。
图6 基于点云的BIM三维重建的结果(从左到右,分别为原始的带有颜色信息的点云,实例分割的结果,重建的BIM模型)Fig. 6 Results of BIM 3D reconstruction based on point cloud (From left to right, the original point cloud with color information, the result of instance segmentation, and the reconstructed BIM model are respectively)
从区域5几个房间的三维重建结果可以看出,房子的基本轮廓被正确的反映出来了,尤其是对每个建筑元素类别的识别正确率很高,因而墙体被正确的分配到了房子的四周,而地板则正好托住了整个建筑。但该方法严重依赖实例分割结果的精度,因此导致了一些识别错误或识别遗漏。如在“区域5-办公室1”的重建结果中,左上角的墙壁未被识别出来,错将桌子识别成了墙。另在“区域5-过道3”中,2个门只识别出了1个。在“区域5-办公室20”中,门的尺寸被夸大了,但是窗户却没有识别出来。
5 结束语
利用无噪点点云,本文实现了基于曼哈顿世界假设下的室内单房间的三维重建。具体而言,借助ASIS网络,通过对3D实例分割的研究,得到了点云构建级别的分割结果。这可以代替传统算法中点云重建的2个关键步骤。然后基于包围盒假设,从分割的点云中提取模型所需的参数,并将参数传到IFC生成器中去,实现了基于IFC标准的BIM自动建模。整个方案借助实例分割工具完成了从点云到BIM的逆向建模。最后通过实验验证该方案的可行性。
本工作的不足有:①依赖实例分割的精度。更好的实例分割网络将带来更加精确的重建效果,但目前实例分割的mCov值仅为44.6%,这意味着很多小构件,如室内家具的分割结果并不能直接使用,因此本文只选取了门、窗、墙等较大的室内元素;②此外,依靠分割点云的最紧致外轮廓代替建筑构建的3D尺寸是比较粗糙的处理手段,可以在参数提取后处理中加入一些先验知识,如使得四面墙体可以循环合并,并且窗户和门是依附在墙体上。受到文献[8]的启发,在后续工作中,可以研究基于3D物体检测的方法来实现三维重建,即直接识别物体的3D尺寸和位置,这个方案可以避免过多的后处理;③模型的元素还不够丰富和灵活。未来可在基于IFC标准的BIM自动建模中加入更多的元素,并且这些元素也可以不仅仅是矩形盒,也可以是更复杂的几何形式。