朱 攀,史健勇
(上海交通大學土木工程系,上海 200240)
建筑信息模型(building information model,BIM)越來越多地用于建筑領域的不同的任務或設計,如建設規(guī)劃、可視化、機器人導航、施工模擬、設施管理和古建筑修復等。對于有一定年代的建筑,通常無法從初始建筑設計圖中獲得合適的模型。點云測量則常作為在建筑軟件中生成3D模型的起點。盡管已有快速掃描設備和建模軟件的幫助,但是從原始點云生成3D建筑模型仍然是一項耗時且需大量手動工作的任務,因此研究自動重建3D建筑模型的方法具有較大的價值[1]。
深度學習已經(jīng)在很多領域取得成功,如拼寫校正、語音識別、認出社交媒體照片中的好友們等。現(xiàn)在正處于一個程序設計得到深度學習幫助越來越多的時代[2]。深度學習在計算機視覺中有很多任務,如圖像分類、物體檢測、語義分割和實例分割等。其中,實例分割不僅可以區(qū)分不同類別的物體,還可將同一類別的不同實例區(qū)分開來。傳統(tǒng)算法中點云到BIM的自動三維重建需分為5步[3]完成,即點云配準、點云分割、邊界提取、語義信息識別和3D建模。根據(jù)點云到BIM模型重建的步驟可以看出,利用3D實例分割技術可以解決點云的分割和語義信息識別2個關鍵步驟。因此,基于實例分割的深度學習方法可以幫助實現(xiàn)BIM的三維重建。
本文提出了一種基于曼哈頓世界假設下的室內場景的BIM三維自動重建方法。假設人造結構的外表面需與某一公共正交坐標系的3個主平面之一平行[4],即所還原的建筑構件的幾何模型均簡化為相互垂直或平行的長方體。該方法可根據(jù)分割好的點云,自動提取出該實例結構的3D尺寸與分類結果。目前可實現(xiàn)識別的建筑元素包括門、窗、墻、地板和天花板。該重建方法對點云的要求為:①所掃描房子為曼哈頓世界假設下的建筑;②點云位置需在既定的公共正交坐標系完全擺正;③沒有噪點。
本文的研究思路如圖1所示,通過引入已有的深度學習框架ASIS[5]對3D室內解析數(shù)據(jù)集(S3DIS)[6]中的點云進行實例分割,假設分割好的點云最緊致邊框作為BIM構建的3D參數(shù),使用分類的結果作為BIM構建的類別。根據(jù)這些數(shù)據(jù),使用基于工業(yè)基礎類(industry foundation class, IFC)標準的方法直接驅動BIM模型的自動生成。通過實驗驗證,利用無噪點點云,該方法可實現(xiàn)基于曼哈頓世界假設下的室內單房間的三維重建。
圖1 BIM逆向建模研究思路Fig. 1 Research idea of BIM reverse modeling
深度學習相較于傳統(tǒng)算法的優(yōu)勢為:減少了手工設計特征描述符的需求,且具有較寬松但更可靠的分類規(guī)則,因此在計算機視覺的對象分類和識別問題上取得非常高效的成果[7]。隨著建筑相關數(shù)據(jù)的不斷豐富,一些工作已經(jīng)開始利用深度學習方法對建筑對象進行理解與識別。ARMENI等[8]提出了一種基于滑動窗口和支持向量機(support vector machine, SVM)的方法在3D空間中檢測建筑和內部家具的結構和非結構元素,用于對大型室內空間進行3D語義解析。但實際上,SVM方法也需要人為設計特征,因此并沒有很好地利用深度學習的優(yōu)勢。對于建筑逆向建模,F(xiàn)loorNet[9]提出了一種可以將室內空間的RGBD視頻轉換為矢量圖形的平面圖的神經(jīng)網(wǎng)絡,并在后續(xù)的工作中[10],從重建的矢量化平面圖自動生成3D模型。整套方法并不是一種端到端的3D點云處理網(wǎng)絡,而是從2D分割入手再過度到生成3D模型,過程不夠簡潔。文獻[11]提出了從掃描點云到3D重建的建筑場景理解的深度學習方法,其目標和本文最相似,即由點云分割、點云分類和構建合并的3步完成,但實際上,點云的分割與分類是可以一步完成,比如使用PointNet網(wǎng)絡[12]。本文使用ASIS網(wǎng)絡框架[5]是一種端到端的點云實例分割方法,并且在選用的數(shù)據(jù)集上可以得到目前最優(yōu)的實例分割結果。
利用有監(jiān)督的深度學習方法的關鍵是要求提供大型的、帶有標簽的數(shù)據(jù)集。為了達到從點云中學習BIM模型所需的信息,需要回顧盡可能多的已有的公開數(shù)據(jù)集。目前已經(jīng)建立了一些公共數(shù)據(jù)集來對3D對象識別算法的性能進行基準測試。現(xiàn)領域中一些著名的數(shù)據(jù)集包括:①KITTI數(shù)據(jù)集[13],用于自動駕駛場景中的汽車與行人的識別;②ModelNet數(shù)據(jù)集[14]和ShapeNet數(shù)據(jù)集[15],用于計算機輔助設計(computer aided design, CAD)模型的識別;③斯坦福大學室內場景理解的S3DIS數(shù)據(jù)集[6],則用于建筑元素和家具的識別。其他相似的工作還包括NYU V2[16],SUNCG[17],Semantic3D[18],SceneNN[19],PiGraphs[20],SUN 3D[21]等。
表1對比了幾個常用數(shù)據(jù)集的信息,其中,真實掃描打鉤表示數(shù)據(jù)集是從真實世界的場景掃描而來,否則為電腦合成的數(shù)據(jù);實例標注打鉤表示數(shù)據(jù)集擁有實例級別的標注;建筑元素打鉤表示數(shù)據(jù)集對象包含建筑元素,如墻、門、窗。KITTI數(shù)據(jù)集是最早的點云數(shù)據(jù)集之一,盡管滿足實例分割的需求,但識別的對象并不是建筑元素。以ScanNet數(shù)據(jù)集建立的基準測試非常流行[22],但是缺乏對建筑元素類別的標注,比如說墻體。Matterport3D[23]是一個大型RGB-D數(shù)據(jù)集,但缺乏對墻體的實例級標注。
表1 常用3D數(shù)據(jù)集對比Table 1 Comparison of commonly used 3D data sets
斯坦福大學計算機科學與土木與環(huán)境工程系共同制作的S3DIS室內點云據(jù)集[6]由Matterport掃描儀采集而成,包含點云的三維坐標(x,y,z坐標)和顏色(RGB)信息。數(shù)據(jù)集注釋的類別包含建筑元素、家具元素以及雜物共13類,其中建筑元素有天花板、地板、墻、柱、梁、窗戶和門,家具元素包含桌子、椅子、書柜、沙發(fā)、黑板,其他出現(xiàn)次數(shù)較少或者不屬于感興趣的元素則分類為雜物。值得注意的是,由于該數(shù)據(jù)集對每個點云都有實例級的注釋,這意味著歸為雜物的噪點是被去除掉的,因此使用該數(shù)據(jù)集時無需進行點云去噪。S3DIS室內點云據(jù)集符合點云實例分割所需要的要求,因此本文選用該數(shù)據(jù)集作為分割和實驗的對象。
BIM模型通常由其應用軟件生成。用于創(chuàng)建和編輯的最流行的桌面應用軟件包括Autodesk Revit,Graphisoft ArchiCAD,Tekla Structures和VectorWorks。由BuildingSMART定義的IFC或“工業(yè)基礎類”是對建筑環(huán)境(包括建筑物和民用基礎設施)的標準化數(shù)字描述。其是一個開放的國際標準(ISO 16739-1:2018),這意味著IFC模式是一種無需指定商業(yè)軟件的數(shù)字描述,且可在廣泛的硬件設備、軟件平臺上實現(xiàn)通用[24]。因此以IFC為標準的BIM模型自動生成方法是最通行的方案之一。
文獻[25]提供了一種半自動化解決方案以處理建筑三維重建問題,并以檢測到的墻壁、地板和天花板的數(shù)據(jù)作為輸入編譯出IFC模型,使用IfcWallStandardCase實體表示墻壁,并使用IfcSlab實體表示地板和天花板。文獻[26]提出了一種從無組織點云中自動提取建筑物幾何形狀的方法,并將提取的數(shù)據(jù)生成為gbXML格式的模型,以便將其導入到能源仿真工具中。文獻[27]提出了一種半自動的圖像驅動系統(tǒng),用于識別建筑物體及其材料,使用IFC Engine[28]開發(fā)了帶有材料信息的IFC BIM生成子系統(tǒng),并以IfcColumnStandardCase為例,說明創(chuàng)建IFC BIM對象混凝土柱的過程。已有的工作對IFC模型的自動生成方法描述的較為簡單,本文將更詳細地說明建模的整個過程。
本部分將使用聯(lián)合分割(associatively segmenting instances and semantics, ASIS)網(wǎng)絡框架[5]將S3DIS數(shù)據(jù)集中的點云進行實例分割,得到構建級別的分割結果。
ASIS網(wǎng)絡框架可用于在3D點云上同時進行實例分割和語義分割,并將兩者緊密地聯(lián)系在一起。如圖2所示,整個聯(lián)合分割網(wǎng)絡系統(tǒng)由3部分組成:①負責點云特征提取的主干網(wǎng)絡;②負責融合實例、語義信息的聯(lián)合分割模塊(ASIS模塊);③負責實例分割的分類器。
圖2 ASIS網(wǎng)絡框架的原理Fig. 2 The principles of ASIS network framework
輸入的點云矩陣僅包含每個點的坐標信息(x,y,z)與顏色信息(RGB)。ASIS網(wǎng)絡框架的主干網(wǎng)絡負責對輸入的點云進行初步特征提取,并得到特征矩陣。在經(jīng)典的網(wǎng)絡中,需要經(jīng)過多層卷積和池化進行特征提取,從而找到分類目標,這個過程類似于一個漏斗,會使特征圖尺寸逐漸減小,隨后的語義分割與實例分割需要將分類后的特征圖還原到原圖尺寸。因此通常的做法是編碼和解碼網(wǎng)絡結構。主干網(wǎng)絡可使用PointNet或者其改進版PointNet++實現(xiàn),PointNet系列網(wǎng)絡[12]可以直接處理無序的點云而無需任何前處理(比如轉換成深度圖像或者體素等)。
聯(lián)合分割模塊由2路組成,并且相互配合。一路是富有語義感知的實例分割,另一路是融合了實例的語義分割。富有語義的實例分割路實現(xiàn)了同一語義類的點緊密相連,而不同的類被分開的功能。經(jīng)過聯(lián)合分割模塊,特征矩陣進一步強化了特征內涵并變成了具有語義感知能力的實例分割特征矩陣,較直接使用特征矩陣更具優(yōu)越性。
實例分割分類器可由均值漂移聚類法(mean-shift clustering)實現(xiàn),該分類器以具有語義感知能力的實例分割特征矩陣為輸出,可獲得預測點的語義標簽和實例標簽。
輸出后的實例分割矩陣比輸入的點云矩陣多了2個維度。第一個維度為每個點的語義標簽,表明該點云所屬的構件類型,比如該點云屬于墻。另一個維度則記錄該點云所屬實例的編號,該編號可將同一類構件的不同實例加以區(qū)分,比如區(qū)分該點云是屬于第一面墻還是第二面墻。
ASIS提供了在斯坦福數(shù)據(jù)集上訓練好的網(wǎng)絡模型,該模型在第5個區(qū)域上進行測試,并在其余4個房間區(qū)域上進行訓練,因此運行網(wǎng)絡可以得到在第5個區(qū)域的實例分割結果。對S3DIS數(shù)據(jù)集進行實例分割,在區(qū)域5下的測試的精度見表2。
圖3 ASIS對區(qū)域5的實例分割結果Fig. 3 Instance segmentation results for region 5 by using ASIS
將所有建筑構建的各個實例分割結果隨機賦色,可以得到圖3的效果。ASIS網(wǎng)絡對建筑等較大元素的實例分割表現(xiàn)較好,但當場景中單個元素較小時,則容易出錯。例如圖3(a),左上角的兩面墻體被分為不同的實例,且和地板的界限較為明顯。在圖3(a)中也顯示了一些失敗案例。在右上的墻上,2個窗戶和墻之間的分界并不明顯,并且窗戶和墻有一些公用的區(qū)域,這會給下一步的建筑構建外輪廓的提取造成困擾。此外,觀察左下角桌子周邊的椅子,可以發(fā)現(xiàn)4把椅子作為單個實例被錯誤地分割在一起。圖3(b)和(c)為另外2個房間的實例分割結果。
在實例分割任務上,ASIS網(wǎng)絡已經(jīng)達到了目前較高的水準,但因其對小物體識別的準確度仍有待提高,故本文對識別物體的類別進行了取舍。即本工作僅選用了準確度較高的一些類別,而不是全部13個類別。最終保留的分割類別僅包含墻、門、窗、天花板與地板5種占用空間較大的元素。這5類大物體在ASIS網(wǎng)絡分割下的精度較高,分割邊界也比較清晰,從而保證了后續(xù)三維重建的有效性。
實例分割后,點云的每個點實際上多了一個語義標簽和一個實例標簽,因此每個點均可以由一組7維向量[x,y,z,R,G,B,S,I]表示,其中(x,y,z)為該點的坐標位置,(R,G,B)為該點的顏色信息,S為點的語義標簽,表明該點所屬的類別,I為實例標簽,以區(qū)分同一類別下的不同實例。
BIM模型由眾多的建筑構件組成,對于單個構件而言,建立基本的模型至少需要該構件的類別信息、相對位置坐標及尺寸信息。因此每個構件建模所需的參數(shù)可由一組7維向量[lable,ox,oy,oz,x_size,y_size,z_size]表示,其中l(wèi)able為該構件的類別,(ox,oy,oz)為該構件底部中心坐標,用于確定相對位置坐標(x_size,y_size,z_size),為該構件在3個軸向上的尺寸。有多少個實例標簽就有多少個構件,每個構件均由這7個參數(shù)表示,也就是說BIM模型構件的屬性中只能包含這7個參數(shù),而其他參數(shù)是不可知的。
從離散的一個個點云的標簽到單個實例的具體3D參數(shù)的獲取,是根據(jù)包圍盒假設生成的,即假設以分割好的某個實例點云群的最緊致邊框作為該BIM構建的3D尺寸參數(shù)。以門為例,如圖4所示,為了獲取該構件的3個軸向上的尺寸與相對位置坐標,就需要找出最緊致的包圍盒。操作步驟如下:
(1) 獲取該實例(如一個門)的全部的點云向量,組成該實例的向量組。
(2) 獲取該向量組中點云的所有x軸方向的坐標,并取出該坐標向量中的極大x_max與極小值x_min。這是因為在曼哈頓世界假設中,如果建筑與坐標軸對齊,則包含極值坐標的點云即為該長方體構件的頂點。
(3) 同樣,取出另外2個軸向的極值:y_max、y_min、z_max和z_min。
(4) 定義該實例的3D尺寸參數(shù)為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尺寸,但因為點云僅掃描了室內一側,因此構件的厚度信息是不可知的。這里的“厚度尺寸”產(chǎn)生的原因有:①墻體和地板凹凸不平;②該墻并不是曼哈頓假設下的直墻,而是有輕微角度的斜墻;③門窗有把手之類的突起部件而產(chǎn)生的掃描厚度。因此該“厚度方向的尺寸”的意義在于給出了構件內表面存在的范圍,而不是構件真實的厚度。
本文制作了一個“IFC生成器”。其是在IfcOpenShell項目軟件庫[29]的基礎上開發(fā)而來。IFC生成器可根據(jù)已獲取的構件參數(shù)(7維向量組)自動生成BIM模型,其余的參數(shù)暫時不可知。目前可以包含的建筑元素有:墻、門、窗、開洞、地板、天花板。圖5是一個根據(jù)參數(shù)生成模型的案例。生成器已在GitHub上開源,軟件及其詳細的使用方法見https://github.com/zhupan007/ifc_generator。
圖5 案例:數(shù)據(jù)驅動IFC生成器生成BIM模型Fig. 5 A case: data-driven IFC-generator generates BIM model
IFC模型生成的具體步驟如下:
(1) 生成一個建筑對象??蓸嬙霫fcHierarchyHelper類的實例對象file,該對象在內存中維護著一個房屋模型。后續(xù)的添加房屋構件操作都將保存在此file對象中。然后,寫入建筑的場地層次信息。利用之前的file對象分別往房屋模型中添加項目(Project)、場地施工(Site)、建筑(Building)和建筑樓層(Building Storey)等4個對象變量。同時,需要設置這4個對象的從屬關系。
(2) 建立墻體、門、窗、地板和天花板。IfcWallStandCase是IFC中的標準墻,可作為BIM模型的墻體。在創(chuàng)建墻的形狀時,可使用SweptSolid(掃略實體)進行幾何的建立。Sweptsolid是IfcWall常用的幾何描述方式之一,該方法基于垂直拉伸多邊形足跡建立墻體[30]。掃略實體需定義墻的厚度參數(shù),這里的厚度僅表示該墻內表面存在的范圍,并不是墻真實的厚度。建立墻體時還需要指明該墻體的相對位置信息,該信息包含在構件底部中心坐標(ox,oy,oz)里。
創(chuàng)建窗戶、門、地板和天花板的步驟與建立墻體類似。唯一的區(qū)別在于建立門窗時,需要對相應墻體的位置開洞,以便能正確的顯示墻上的門窗。其中窗戶和門可使用IfcWindow和IfcDoor這2個建筑單元進行建立,地板和天花板可使用IfcSlab,開洞則可使用IfcOpeningElement進行建模。
整個三維重建以掃描的點云為起點,最終可以得到以IFC為標準的BIM模型。該方法分為2個步驟:①利用ASIS網(wǎng)絡對點云進行分割;②利用IFC生成器將得到的參數(shù)生成IFC標準下的BIM模型。圖6挑選了區(qū)域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)
從區(qū)域5幾個房間的三維重建結果可以看出,房子的基本輪廓被正確的反映出來了,尤其是對每個建筑元素類別的識別正確率很高,因而墻體被正確的分配到了房子的四周,而地板則正好托住了整個建筑。但該方法嚴重依賴實例分割結果的精度,因此導致了一些識別錯誤或識別遺漏。如在“區(qū)域5-辦公室1”的重建結果中,左上角的墻壁未被識別出來,錯將桌子識別成了墻。另在“區(qū)域5-過道3”中,2個門只識別出了1個。在“區(qū)域5-辦公室20”中,門的尺寸被夸大了,但是窗戶卻沒有識別出來。
利用無噪點點云,本文實現(xiàn)了基于曼哈頓世界假設下的室內單房間的三維重建。具體而言,借助ASIS網(wǎng)絡,通過對3D實例分割的研究,得到了點云構建級別的分割結果。這可以代替?zhèn)鹘y(tǒng)算法中點云重建的2個關鍵步驟。然后基于包圍盒假設,從分割的點云中提取模型所需的參數(shù),并將參數(shù)傳到IFC生成器中去,實現(xiàn)了基于IFC標準的BIM自動建模。整個方案借助實例分割工具完成了從點云到BIM的逆向建模。最后通過實驗驗證該方案的可行性。
本工作的不足有:①依賴實例分割的精度。更好的實例分割網(wǎng)絡將帶來更加精確的重建效果,但目前實例分割的mCov值僅為44.6%,這意味著很多小構件,如室內家具的分割結果并不能直接使用,因此本文只選取了門、窗、墻等較大的室內元素;②此外,依靠分割點云的最緊致外輪廓代替建筑構建的3D尺寸是比較粗糙的處理手段,可以在參數(shù)提取后處理中加入一些先驗知識,如使得四面墻體可以循環(huán)合并,并且窗戶和門是依附在墻體上。受到文獻[8]的啟發(fā),在后續(xù)工作中,可以研究基于3D物體檢測的方法來實現(xiàn)三維重建,即直接識別物體的3D尺寸和位置,這個方案可以避免過多的后處理;③模型的元素還不夠豐富和靈活。未來可在基于IFC標準的BIM自動建模中加入更多的元素,并且這些元素也可以不僅僅是矩形盒,也可以是更復雜的幾何形式。