李 偉,王辰鑫,李澎林
(浙江工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,浙江 杭州 310023)
傳統(tǒng)的數(shù)字城市是城市地理信息與其他城市信息相結(jié)合的一個虛擬空間,其關(guān)注的重點是城市的全貌[1]。隨著“互聯(lián)網(wǎng)+房地產(chǎn)”模式的出現(xiàn),客戶對房產(chǎn)信息獲取體驗提出了更高要求,房產(chǎn)室內(nèi)場景的在線三維快速建模與展示成為亟待解決的技術(shù)難題,其技術(shù)難點在于建模效率和模型的靈活性。
當前,室內(nèi)場景的三維建模方法主要分為人工和自動化建模兩種。人工建模雖然具有較好的模型質(zhì)量,但建模周期長、成本高;自動化建模主要有基于激光掃描和基于RGB-D圖像兩種方法。在基于激光掃描建模的研究方面,Enrique等[2]提出基于激光雷達點云數(shù)據(jù)建立室內(nèi)邊界模型的方法,對比較規(guī)則的室內(nèi)平面,如墻、地板和天花板等進行了簡單的重建;莫悠等[3]提出一種室內(nèi)移動與地面定點激光掃描技術(shù)相結(jié)合的室內(nèi)精細點云數(shù)據(jù)獲取方式,解決了部分區(qū)域密度不足及缺失的問題。雖然基于激光掃描的建模方法相比人工建模提高了效率,但其數(shù)據(jù)采集設(shè)備非常昂貴,需要較大人力對模型進行后期處理。在基于RGB-D圖像建模的研究方面,著名的KinectFusion系統(tǒng)[4-5]使用一臺移動的Kinect攝像機完成精細的掃描和模型創(chuàng)建工作;Xiao等[6]采用人工標注的方法建立不同RGB-D視圖之間的對應(yīng)關(guān)系,從而建立完整的室內(nèi)場景的三維模型;Choi等[7]提出了一種基于RGB-D視頻的室內(nèi)場景建模方法。雖然Kinect等消費級RGB-D攝像機降低了圖像采集的成本,但要建立完整的室內(nèi)場景三維模型,需要采集大量關(guān)聯(lián)的RGB-D圖像來獲取對空間的整體理解,建模成本高、效率低。上述兩類方法所建三維模型需實地采集數(shù)據(jù),模型的靈活性較差,且模型數(shù)據(jù)量較大,在線瀏覽往往需要專業(yè)Web插件,在應(yīng)用上有較大的局限性。隨著卷積神經(jīng)網(wǎng)絡(luò)的提出,深度學(xué)習(xí)得到了迅速的發(fā)展,它能通過大量的樣本學(xué)習(xí)得到目標的深層特征,而不需要人為指定的特征[8]。姚曉峰等[9]從RGB-D圖像出發(fā),通過改進的卷積神經(jīng)網(wǎng)絡(luò)模型,把室內(nèi)場景的建模轉(zhuǎn)化為一個圖像分類問題;Mask R-CNN在圖像識別中的三個重要任務(wù)中都取得了目前最好的結(jié)果[10],但目前還沒有在室內(nèi)場景建模方面的應(yīng)用。綜上所述,現(xiàn)有的室內(nèi)場景三維建模方法建模成本高、效率低,所得模型數(shù)據(jù)量較大,且無法二次修改,靈活性差,無法滿足房產(chǎn)室內(nèi)場景的在線三維建模與展示要求。筆者設(shè)計一種基于戶型圖實例分割與ThreeJS的室內(nèi)場景建模方法,該方法以住宅戶型圖柵格數(shù)據(jù)和戶型結(jié)構(gòu)矢量數(shù)據(jù)為輸入,將Mask R-CNN應(yīng)用于戶型圖柵格數(shù)據(jù)的實例分割,通過自動坐標配準與模型匹配等技術(shù),快速而靈活地建立室內(nèi)場景三維模型。
室內(nèi)場景三維模型主要包括墻體和空間家具,其中墻體空間信息可通過戶型結(jié)構(gòu)矢量數(shù)據(jù)獲得,室內(nèi)空間的家具適配及擺放是自動建模的難點,因此,筆者提出的基于戶型圖實例分割與ThreeJS的室內(nèi)場景建模框架處理過程分為兩個階段:
1) 戶型圖實例分割階段:通過Mask R-CNN算法對戶型圖柵格數(shù)據(jù)樣本集進行訓(xùn)練,得到檢測模型;在實際建模過程中,直接使用該模型檢測戶型圖柵格數(shù)據(jù),得到實例分割結(jié)果——家具掩膜圖像。
2) 室內(nèi)場景三維建模階段:首先將家具掩膜圖像與戶型結(jié)構(gòu)矢量數(shù)據(jù)進行配準,然后計算家具坐標,結(jié)合家具模型庫適配模型,最后基于ThreeJS完成三維場景可視化。室內(nèi)場景建??蚣苋鐖D1所示。
圖1 室內(nèi)場景建??蚣軋D
該階段創(chuàng)建了戶型圖柵格數(shù)據(jù)樣本集,通過Mask R-CNN算法對該數(shù)據(jù)集進行訓(xùn)練和測試,得到效果最好的檢測模型。在實際建模過程中,直接使用該檢測模型對輸入的戶型圖柵格數(shù)據(jù)進行實例分割,輸出實例分割結(jié)果。
為了驗證Mask R-CNN檢測和識別戶型圖柵格數(shù)據(jù)的有效性,創(chuàng)建了戶型圖柵格數(shù)據(jù)樣本集(以下簡稱數(shù)據(jù)集),如圖2所示。該數(shù)據(jù)集搜集了各類戶型圖,其中房產(chǎn)市場主流的三居室和四居室分別占56.8%和30.4%,其他戶型占12.8%。通過旋轉(zhuǎn)、翻轉(zhuǎn)等數(shù)據(jù)增強方法解決因沒有足夠的訓(xùn)練數(shù)據(jù)所導(dǎo)致的性能問題[11],得到戶型圖柵格數(shù)據(jù)原始樣本共1 250 幅,其中1 050 幅作為訓(xùn)練集,200 幅作為測試集。
圖2 部分數(shù)據(jù)原始樣本
筆者定義了8 類需要進行圖像語義分割標注的家具,按其出現(xiàn)的場景可分為4 類,如表1所示,這4 類場景占據(jù)了住宅的大部分面積,可以構(gòu)成一個比較完整的室內(nèi)場景。
表1 家具分類表
通過在原始樣本上對這8 類家具進行人工標注,得到數(shù)據(jù)集格式,如圖3所示。圖3(a)是原圖,圖3(b)是用labelme制作的灰度標簽形成的偽彩色圖,圖3(c)是偽彩色圖在原圖所占的面積顯示,右下角是其圖例。
圖3 數(shù)據(jù)集構(gòu)成
筆者自定義了一張RGB顏色表,如表2所示,附加在灰度標簽上,Mask R-CNN神經(jīng)網(wǎng)絡(luò)的標簽共有9 類灰度值,顏色表可以直觀地表明灰度值與家具的對應(yīng)關(guān)系。
表2 RGB顏色表
采用的深度學(xué)習(xí)算法是FaceBook AI研究院提出的端到端卷積神經(jīng)網(wǎng)絡(luò)Mask R-CNN。Mask R-CNN的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示,它的框架簡單、靈活和具有通用性。該網(wǎng)絡(luò)能有效地檢測在圖像中同時出現(xiàn)的每個實例,預(yù)測出每個實例的類別,并對每個實例生成一個高質(zhì)量的掩膜(mask)。Mask R-CNN使用的是Faster R-CNN的框架[12],并且在這個基礎(chǔ)上增加了一個并行的掩膜(mask)分支,可同時實現(xiàn)分類和像素級掩膜的分割。訓(xùn)練采用多任務(wù)損失函數(shù),在Faster R-CNN損失函數(shù)的基礎(chǔ)上增加了3 個損失函數(shù),損失函數(shù)表達式為
L=Lrpn_class+Lrpn_bbox+Lcls+Lbox+Lmask
(1)
式中:Lrpn_class和Lrpn_bbox均為Faster R-CNN 中的損失函數(shù);Lcls為分類損失函數(shù);Lbox為邊界框損失函數(shù);Lmask為掩膜損失函數(shù)。
圖4 Mask R-CNN網(wǎng)絡(luò)結(jié)構(gòu)圖
模型訓(xùn)練階段,通過戶型圖柵格樣本對具有初始參數(shù)的卷積神經(jīng)網(wǎng)絡(luò)進行迭代訓(xùn)練,根據(jù)訓(xùn)練結(jié)果和Tensorboard查看訓(xùn)練過程,從而不斷優(yōu)化相關(guān)訓(xùn)練參數(shù),最終得到目標檢測模型。筆者模型的訓(xùn)練流程包含4 個步驟:
步驟1將經(jīng)過標注和Mask掩膜制作的戶型圖樣本輸入到一個預(yù)訓(xùn)練模型的神經(jīng)網(wǎng)絡(luò)(ResNet-101-FPN)中獲得對應(yīng)戶型圖訓(xùn)練樣本的特征圖,對這個特征圖中的每個位置生成9 種預(yù)先設(shè)置好面積和長寬比的目標框,從而得到多個候選RoI(region of interest)。
步驟2將這些候選的RoI送入?yún)^(qū)域建議網(wǎng)絡(luò)(RPN)進行二值分類(前景和背景)和BB(bounding box)回歸,通過非極大值抑制算法篩選得到RoI,對RoI進行RoI Align操作。
步驟3對RoI進行分類(家具分類)、BB回歸和Mask生成。
步驟4重復(fù)步驟2,3,訓(xùn)練完所有樣本得到最終優(yōu)化調(diào)整的檢測模型。
模型測試階段,將測試樣本輸入目標檢測模型得到檢測結(jié)果。筆者模型的測試流程包含2 個步驟:
步驟1利用測試樣本對戶型圖目標檢測模型進行測試,得到測試樣本的檢測結(jié)果。
步驟2人工判斷測試結(jié)果是否符合要求,如不符合要求則調(diào)整訓(xùn)練參數(shù)重新進行模型訓(xùn)練。
該階段首先使用薄板樣條插值算法將家具掩膜圖像與戶型結(jié)構(gòu)矢量數(shù)據(jù)進行配準,其次根據(jù)配準后的圖像計算掩膜外切矩形的頂點坐標,最后根據(jù)適配規(guī)則適配家具庫中的模型,基于ThreeJS完成三維場景可視化。
采用薄板樣條插值算法對戶型結(jié)構(gòu)矢量數(shù)據(jù)和家具掩膜圖像進行圖像配準[13-14]。薄板樣條插值算法是在非剛性配準中應(yīng)用最廣泛的非線性變換算法[15],它包含一個全局仿射變換和一個結(jié)合權(quán)重的局部非線性項[16]。對于在圖像上的N個控制點(xi,yi)∈R及對應(yīng)的函數(shù)值vi∈R,薄板樣條插值函數(shù)f(x,y)定義了映射f:R2→R,它有最小彎曲能量Ef為
(2)
并且閉合形式的解為
(3)
式中:rj(x,y)為插值點(x,y)到第j個控制點(xj,yj)的距離;α1,α2,α3,ωj為加權(quán)系數(shù);U(rj(x,y))為薄板樣條插值基函數(shù)。
將N個控制點坐標及對應(yīng)的函數(shù)值代入式(3),聯(lián)立得到薄板樣條插值的系數(shù)α和ω有以下線性方程的解:
(4)
式中:Kij=U(rij);P的第i行為(1,xi,yi);ω,v為由ωi和vi分別構(gòu)成的列向量;α=(α1,α2,α3)T。
圖像配準流程如下:
1) 在戶型圖墻體結(jié)構(gòu)上選擇4 個分散的控制點。
2) 將控制點坐標及其對應(yīng)的值代入薄板樣條插值函數(shù)求解。
3) 由求解結(jié)果變換圖像,完成家具掩膜圖像和戶型結(jié)構(gòu)矢量數(shù)據(jù)的配準工作。
根據(jù)配準后的圖像可以計算得到家具掩膜外切矩形的頂點坐標,為下一步構(gòu)建場景提供了基礎(chǔ)。
根據(jù)表1的分類方法將模型分為4 類,家具及其配套家具以模型組合的形式添加到模型庫中,并根據(jù)相關(guān)信息定義模型的類型、長寬、構(gòu)成元素及數(shù)量、裝飾風(fēng)格等屬性。由于家具模型的文件大小會極大地影響整體模型在WebGL中的運行效率[17],而glTF是“3D JPEG”,所以將搜集到的三維模型通過格式轉(zhuǎn)換工具預(yù)處理成glTF格式。
室內(nèi)場景的三維模型由目標空間的墻體結(jié)構(gòu)和家具模型組成,其中墻體結(jié)構(gòu)由房屋結(jié)構(gòu)矢量數(shù)據(jù)確定。家具模型的確定分為模型適配和模型放置兩個過程。
筆者模型的適配規(guī)則如下:
1) 裝飾風(fēng)格默認為簡約現(xiàn)代風(fēng)格。
2) 臥室家具根據(jù)識別到的床的長寬比和床頭柜的數(shù)量適配模型,床頭柜缺失的情況將床頭柜數(shù)量默認設(shè)置為2;根據(jù)識別到的電視柜的長寬比適配電視柜模型。
3) 客廳家具根據(jù)識別到的最大的沙發(fā)的長寬比和沙發(fā)的數(shù)量適配沙發(fā)及配套茶幾模型;根據(jù)識別到的電視柜的長寬比適配電視柜模型。
4) 餐廳家具根據(jù)識別到的餐桌的長寬比和椅子的數(shù)量適配模型。
5) 書房家具根據(jù)識別到的桌子的長寬比適配模型。
由筆者模型的適配規(guī)則,從模型庫中適配模型加載到ThreeJS中,則調(diào)整模型的步驟如下:
步驟1根據(jù)模型包圍盒質(zhì)心坐標相對坐標原點的偏移量校正模型坐標到坐標原點。
步驟2根據(jù)掩膜外切矩形的頂點坐標定義標準包圍盒。
步驟3根據(jù)包圍盒頂點坐標分別計算標準包圍盒和模型實際包圍盒的邊長。
步驟4若標準包圍盒垂直于模型實際包圍盒,則將模型旋轉(zhuǎn)90°后重復(fù)步驟3。
步驟5根據(jù)標準包圍盒和模型實際包圍盒邊長的比例關(guān)系,取最小值作為縮放比例縮放模型。
步驟6根據(jù)標準包圍盒質(zhì)心坐標相對坐標原點的偏移量移動模型。
步驟7手動調(diào)整模型的朝向、裝飾風(fēng)格得到室內(nèi)場景三維建模結(jié)果。
實驗計算平臺采用NVIDIA GeForce 2080Ti的GPU,搭載Intel Core i7-9700K CPU,32 GB內(nèi)存,ubuntu18.04系統(tǒng)的PC機。PSPNet是目前最好的語義分割網(wǎng)絡(luò)[18],為驗證Mask R-CNN的檢測和識別效果更優(yōu),選擇PSPNet作為Mask R-CNN的對照實驗組, 在數(shù)據(jù)集上對兩種算法進行訓(xùn)練和測試,部分實驗結(jié)果如圖5所示,Mask R-CNN的識別結(jié)果相比PSPNet邊緣更平滑、噪聲點更少,識別效果更好。
圖5 部分實驗結(jié)果
傳統(tǒng)的目標檢測是從待檢測數(shù)據(jù)中準確完整地識別和檢測出所有目標,因此采用檢出率(true positive rate,TPR)、誤檢率(false positive rate,F(xiàn)PR)、漏檢率(loss positive rate,LPR)作為實例分割結(jié)果的評價指標,具體如下:
1) 檢出率表示一個樣本集中,被分類器檢測的正樣本數(shù)目占目標實際總數(shù)的比值,其表達式為
(5)
式中:nP為正樣本數(shù)目;n為目標實際總數(shù)。
2) 誤檢率表示一個樣本集中,被分類器錯誤判定為目標的數(shù)目占所有被分類器檢測的正樣本數(shù)目的比值,其表達式為
(6)
式中:nFP為被分類器錯誤判定為目標的數(shù)目;nP為正樣本數(shù)目。
3) 漏檢率表示一個樣本集中,未被分類器檢測到的目標數(shù)量占目標實際總數(shù)的比值,其表達式為
(7)
式中:nL為未被分類器檢測到的目標數(shù)量;n為目標實際總數(shù)。
通過對測試結(jié)果的統(tǒng)計,得到表3實驗對比結(jié)果。由表3可見:就實驗對象而言,Mask R-CNN算法的檢出率達到了97.05%,漏檢率僅為4.72%,都遠遠優(yōu)于PSPNet。由此得出:使用Mask R-CNN算法能夠有效地檢測和識別戶型圖中的家具,為后續(xù)三維建模提供了基礎(chǔ)。
表3 不同算法實驗結(jié)果對比
圖6給出了部分戶型圖柵格數(shù)據(jù)的實例分割和自動三維建模效果圖。從圖6中可以看出:即使戶型圖中不存在床頭柜實例,也可通過筆者的三維建模方法建立完整的室內(nèi)場景模型。實驗表明:通過輸入戶型圖柵格數(shù)據(jù)和戶型結(jié)構(gòu)矢量數(shù)據(jù),系統(tǒng)可以快速地生成模型,用戶可以根據(jù)效果對模型進行調(diào)整,使模型更符合要求。
圖6 部分三維建模效果
表4給出了筆者方法與不同建模方法的對比。其中建模成本由人工成本、時間成本和設(shè)備成本等3 方面綜合評估;建模效率由模型制作周期確定;模型質(zhì)量由三維場景與真實場景的差異性確定;Web可視化難易由是否易于實現(xiàn)在線訪問模型、是否需要插件支持等因素確定;模型靈活性由場景內(nèi)各家具元素是否獨立、易替換確定。從表4中可以看出:筆者方法以較低的建模成本、較高的建模效率滿足了房產(chǎn)室內(nèi)場景的在線三維建模與展示需求,且模型靈活性較好、模型質(zhì)量符合預(yù)期。
表4 不同建模方法對比
現(xiàn)有的室內(nèi)場景三維建模方法建模成本高、效率低和靈活性差,已無法滿足房產(chǎn)室內(nèi)場景的在線三維建模與展示的需求,為此,提出了一種基于戶型圖實例分割與ThreeJS的室內(nèi)場景建模方法。該方法有兩點創(chuàng)新:1) 將Mask R-CNN應(yīng)用到了戶型圖柵格數(shù)據(jù)實例分割上,解決了三維建模的數(shù)據(jù)采集問題;2) 基于ThreeJS完成三維場景可視化,實現(xiàn)了在線瀏覽房產(chǎn)室內(nèi)場景三維模型。實驗結(jié)果表明:該方法基本滿足房產(chǎn)室內(nèi)場景的在線三維建模與展示的需求。由于戶型結(jié)構(gòu)檢測難度較大,直接使用戶型結(jié)構(gòu)矢量數(shù)據(jù)構(gòu)建室內(nèi)場景的墻體,后續(xù)工作可以加強基于戶型圖的墻體識別,簡化建模流程,實現(xiàn)在缺少戶型結(jié)構(gòu)矢量數(shù)據(jù)的情況下建立室內(nèi)場景三維模型的愿望。