孫克強(qiáng)繆 君江瑞祥黃仕中張桂梅
(南昌航空大學(xué)計算機(jī)視覺研究所,江西 南昌330063)
基于圖像的室內(nèi)場景三維重建是計算機(jī)視覺領(lǐng)域的一個重要研究內(nèi)容,它在視覺SLAM(Simultaneous Localization And Mapping)、虛擬現(xiàn)實(Virtual Reality)、增強(qiáng)現(xiàn)實(Augmented Reality)等領(lǐng)域具有廣泛的應(yīng)用。
基于圖像的三維重建一般需要獲得場景深度信息及相機(jī)參數(shù),然后利用二者逐像素計算得到的三維點云建立模型。室內(nèi)場景通常包含大量的平面結(jié)構(gòu),例如墻壁、天花板等?;趫D像的分段平面重建是常用的方法之一。這類方法除了計算深度信息及相機(jī)參數(shù)外,還估計場景包含的平面,因此重建精度更高。目前常用方法有布局估計法[1]、曼哈頓假設(shè)法[2]及各種體素重建法[3],但單張圖像對應(yīng)著無數(shù)真實物理世界場景,重建的逆推過程存在很多歧義,而且除受光照變化影響外,室內(nèi)場景還存在紋理缺乏的挑戰(zhàn)。近年來,深度學(xué)習(xí)算法被快速應(yīng)用到計算機(jī)視覺的各個領(lǐng)域,基于深度卷積神經(jīng)網(wǎng)絡(luò)可以從圖像中學(xué)習(xí)場景豐富的特征表示,故利用深度神經(jīng)網(wǎng)絡(luò)的單幅圖像室內(nèi)場景三維重建已有研究[4-5]。這些算法將平面分割和深度估計統(tǒng)一在共同的深度學(xué)習(xí)框架內(nèi),但都存在以下問題:①沒有充分考慮到平面內(nèi)待重建目標(biāo)物體的細(xì)節(jié),易丟失平面內(nèi)小物體的信息;②預(yù)測的分割圖及深度圖的邊緣效果不佳,影響重建精度。
為了解決上述問題,本文針對室內(nèi)場景重建提出了一種端到端分段平面重建算法(如圖1)。該算法將平面分割和深度圖預(yù)測任務(wù)整合到一個深度卷積神經(jīng)網(wǎng)絡(luò)中,對室內(nèi)場景中的整體結(jié)構(gòu)進(jìn)行快速高效的推斷和分析,本文的主要技術(shù)貢獻(xiàn)包括以下兩個方面:①提出了一種基于深度卷積神經(jīng)網(wǎng)絡(luò)端到端的方式實現(xiàn)室內(nèi)場景的三維重建算法;②改善了平面內(nèi)待重建目標(biāo)物體的細(xì)節(jié)信息及預(yù)測的分割圖及深度圖邊緣效果不佳的問題。
圖1 單圖像室內(nèi)場景分段平面重建
在室內(nèi)機(jī)器人導(dǎo)航及社交媒體等新興產(chǎn)業(yè)有著廣泛應(yīng)用的場景三維重建是計算機(jī)視覺和計算機(jī)圖形學(xué)重點問題。其中,三維場景中的平面區(qū)域為一些類似于場景理解[6]和場景重建[3]等三維感知任務(wù)提供了極為重要的幾何線索。
大多數(shù)傳統(tǒng)室內(nèi)場景平面預(yù)測和重建方法[7-8]都需要借助多幅圖像的輸入或深度信息。Deng等人[9]近來提出了一種基于學(xué)習(xí)的方法用來恢復(fù)室內(nèi)場景中的平面結(jié)構(gòu),但它需要已知深度信息。隨著如基于模板的形狀組合[10-11]、包圍盒[12]或線框[13]形式的目標(biāo)檢測框架結(jié)構(gòu)在三維理解任務(wù)中的廣泛應(yīng)用,對室內(nèi)場景中的目標(biāo)對象進(jìn)行形狀預(yù)測,但只能得到粗糙的目標(biāo)對象,對具有遮擋和復(fù)雜特性的室內(nèi)場景重建能力具有一定的局限性。
除了利用檢測的框架結(jié)構(gòu)外,聯(lián)合優(yōu)化的分割掩模對于一些需要更精確的平面參數(shù)或邊界的三維重建應(yīng)用來說很有幫助。通過近年來在語義分割方面的研究,發(fā)現(xiàn)全連接條件隨機(jī)場(Conditional Random Field)在邊界分割及定位方面表現(xiàn)十分奏效[14]。CRF通常只利用低級語義信息,需利用圖形化模型[15]或設(shè)計新的神經(jīng)網(wǎng)絡(luò)[16-17]從而進(jìn)一步利用全局上下文信息。
在規(guī)則的人造環(huán)境室內(nèi)場景中存在很多平面結(jié)構(gòu),利用這些平面區(qū)域的空間信息使得三維場景的恢復(fù)變得便利。此外,針對室內(nèi)場景,基于分段平面的重建算法通常可以恢復(fù)完整的室內(nèi)場景結(jié)構(gòu),這是傳統(tǒng)的像素或空間點級的算法難以企及的。
基于分段平面深度圖的重建曾經(jīng)是多視圖三維重建領(lǐng)域的一個熱點話題[18]。其主要任務(wù)是通過二維圖像推斷出一組平面參數(shù),同時再為各像素標(biāo)定平面序號。目前,現(xiàn)有的大多數(shù)的方法都是先重建出精確的三維點,再通過擬合后的平面生成平面假設(shè),然后再通過求解一個全局推理問題將分段平面的深度圖重建出來?;诙嘁晥D的三維重建須從不同角度采集場景多幅圖像,但現(xiàn)實生活中拍攝的照片單幅居多。本文提出的端到端的三維重建方法以單幅RGB圖像為輸入,直接推斷平面參數(shù)、分割圖及深度圖,進(jìn)而重建出室內(nèi)三維場景。
在2006年,Saxena等人[19]通過提出的基于學(xué)習(xí)的方法,直接從單幅RGB圖像中推斷出深度圖。隨著深度神經(jīng)網(wǎng)絡(luò)的研究和發(fā)展,許多基于卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)的方法被一一提了出來[20-21]。但大多數(shù)的技術(shù)方法只是通過單幅RGB圖像生成了深度圖(僅有一組深度值)并沒有進(jìn)行平面分割掩膜處理或平面檢測;在2016年,Wang等人[22]利用提出的方法通過推測出處于平面上的像素來進(jìn)一步進(jìn)行深度和表面法線預(yù)測。但該方法僅能判斷出像素是處于平面還是非平面上,未能對平面進(jìn)行分割處理和平面參數(shù)估計,這導(dǎo)致該方法的重建缺乏時效性和高可靠性。最近,Zhou等人提出的PlaneRecover[4]和Liu等人提出的PlaneNet[5]均是將單圖像三維重建看作是平面分割任務(wù),這與我們的工作很接近。但本文進(jìn)一步考慮了平面內(nèi)待重建目標(biāo)物體的細(xì)節(jié)和易丟失平面內(nèi)小物體的情況,并對邊緣像素進(jìn)行了監(jiān)督,使得重建精度更高。
本文算法的目標(biāo)是通過CNN預(yù)測直接從單幅RGB圖像中得到室內(nèi)場景的深度圖、分割圖及平面參數(shù),然后將平面深度圖與相機(jī)標(biāo)定獲取的相機(jī)參數(shù)相結(jié)合,得到逐像素的三維點云深度信息(3D點坐標(biāo)),并通過平面擬合恢復(fù)各平面結(jié)構(gòu)。這就使得本文算法必須要滿足兩個條件:①能夠準(zhǔn)確地檢測出場景中的平面;②在獲得室內(nèi)場景各平面深度圖的同時,還要能夠?qū)κ覂?nèi)場景中的平面進(jìn)行平面參數(shù)的估計及分割掩膜處理。本文使用包含語義標(biāo)簽和深度信息的數(shù)據(jù)集訓(xùn)練一個深度神經(jīng)網(wǎng)絡(luò),以此得到平面參數(shù)、分割圖及深度圖。
如圖2所示,本文設(shè)計的深度神經(jīng)網(wǎng)絡(luò)整體上包含兩個分支。一個分支整合了分割圖和深度圖的預(yù)測任務(wù),另一分支進(jìn)行平面參數(shù)的預(yù)測任務(wù)。首先,輸入單幅RGB圖像,經(jīng)過RESNet-101處理后得到輸入圖像的特征圖(Feature Map);接著經(jīng)過全局平均池化(Global Average Pooling)和雙線性插值(Bilinear Iterpolation)對特征圖分別進(jìn)行下采樣和上采樣操作;最后,再經(jīng)過條件隨機(jī)場對分割圖進(jìn)行優(yōu)化。前一分支輸出分割圖及深度圖,后一分支輸出平面參數(shù)。其中,平面參數(shù)包括平面法向信息和偏移量。通過本文預(yù)測得到的平面參數(shù)、深度圖及分割圖,即可確定室內(nèi)場景中的各平面結(jié)構(gòu)及三維空間范圍。最終,利用逐像素的三維點云深度信息,并通過擬合平面恢復(fù)各平面結(jié)構(gòu),實現(xiàn)分段平面的三維重建。
圖2 算法流程
本文提出的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)建立在深度殘差網(wǎng)絡(luò)(Deep Residual Networks,DRN)[23](如圖4)上,包含三個主要部分:特征提取網(wǎng)絡(luò),分割細(xì)化網(wǎng)絡(luò)以及平面參數(shù)網(wǎng)絡(luò)。
為了預(yù)測空間點的數(shù)值,我們采用小卷積核進(jìn)行卷積。但固定的感受野不利于檢測復(fù)雜場景中大小不同的物體。相比于核尺寸相同的卷積,空洞卷積可以在不增加計算量和參數(shù)量的情況下增加卷積核的感受野。感受野RF、卷積核尺寸C及空洞率V之間的關(guān)系為:
當(dāng)V=1時,即為普通卷積??斩绰蔞越大,可使卷積核獲取更大感受野、采樣更大范圍。
圖3 部分特征圖結(jié)果示例
特征提取網(wǎng)絡(luò):特征提取網(wǎng)絡(luò)利用加入空洞卷積的ResNet-101網(wǎng)絡(luò),提取全局特征(如顏色、紋理特征等)與局部特征(如邊緣、角點等),輸出高分辨率的特征圖。以如圖3(a)所示的輸入圖像為例,本文將DRN作為基礎(chǔ)網(wǎng)絡(luò)提取全局特征,將網(wǎng)絡(luò)對輸入圖像采用卷積等操作進(jìn)行特征提取,得到不同分辨率的特征圖。這些特征圖分別為輸入圖像的1/2,1/4,1/8,即128×96,64×48,32×24。部分特征圖結(jié)果如圖3(b)所示。局部特征提取將PSPNet[17]作為基礎(chǔ)網(wǎng)絡(luò),并利用改進(jìn)后的PSPNET(Refine PSPNet,如圖5所示)對DRN網(wǎng)絡(luò)產(chǎn)生的不同分辨率的特征圖進(jìn)行處理。為了保留特征圖中大量的有效信息及減少計算量等因素,本文利用全局平均池化對特征圖進(jìn)行處理,結(jié)果如圖3(c)所示。首先將網(wǎng)絡(luò)產(chǎn)生的分辨率為32×24的特征圖經(jīng)過金字塔池化及1×1卷積操作后,將產(chǎn)生的分辨率均為32×24的四層特征圖進(jìn)行雙線性插值操作,并且與DRN網(wǎng)絡(luò)產(chǎn)生的相同分辨率的特征圖進(jìn)行拼接;接著,將通過3×3卷積和雙線性插值上采樣產(chǎn)生的分辨率為64×48的特征圖與DRN網(wǎng)絡(luò)產(chǎn)生的相同分辨率的特征圖進(jìn)行拼接;然后,再通過3×3卷積和雙線性插值將產(chǎn)生的分辨率為128×96的特征圖與DRN網(wǎng)絡(luò)產(chǎn)生的相同分辨率的特征圖進(jìn)行拼接;最后,為了將特征圖恢復(fù)到輸入圖像大小,本文通過雙線性插值[24]對特征圖進(jìn)行處理,圖3(d)顯示了部分實驗結(jié)果。
分割細(xì)化網(wǎng)絡(luò):分割細(xì)化網(wǎng)絡(luò)包括分割圖分支和深度圖分支。該網(wǎng)絡(luò)利用Refine PSPNet,首先將DRN輸出的不同分辨率的特征圖進(jìn)行平均池化、卷積、拼接等操作;接著將拼接后的特征圖進(jìn)行雙線性插值,生成分辨率為256×192的分割圖;最后,在分割圖預(yù)測分支加入用于圖像像素分類的概率圖模型-條件隨機(jī)場對分割圖進(jìn)行分割優(yōu)化。
圖4 網(wǎng)絡(luò)結(jié)構(gòu)圖
為了控制深層網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)量和計算量,本文將深度圖預(yù)測分支與分割圖分支整合在同一個金字塔池化模塊下。由于在人工環(huán)境中,平面與非平面類分布不均衡,故本文通過交叉熵?fù)p失函數(shù)用于監(jiān)督分割圖的訓(xùn)練過程。
圖5 改進(jìn)后的PSPNet(Refine PSPNet)
對于深度圖預(yù)測分支,首先通過Refine PSPNet將生成的多尺度特征圖經(jīng)過雙線性插值及與本文設(shè)計的網(wǎng)絡(luò)產(chǎn)生的各分辨率特征圖進(jìn)行拼接等操作,最終生成分辨率為256×192的深度圖。本文利用真實的深度圖與預(yù)測的深度圖間的差值平方和作為深度圖的監(jiān)督訓(xùn)練損失:
平面參數(shù)網(wǎng)絡(luò):平面參數(shù)網(wǎng)絡(luò)將利用Refine PSPNet,將拼接后的分辨率為32×24的特征圖經(jīng)過平均池化得到1×1的特征圖,再經(jīng)過全連接層,得到平面參數(shù)。本文首先將設(shè)計的網(wǎng)絡(luò)產(chǎn)生分辨率為32×24的特征圖經(jīng)過金字塔池化處理,再經(jīng)過1×1卷積操作將產(chǎn)生的分辨率均為32×24的四層特征圖進(jìn)行上采樣操作,并且與DRN網(wǎng)絡(luò)產(chǎn)生的分辨率同樣為32×24的特征圖進(jìn)行拼接;然后將通過平均池化操作產(chǎn)生的特征圖通過1024個通道的全連接層處理,產(chǎn)生平面參數(shù)。
由于在預(yù)測平面參數(shù)任務(wù)過程中,平面的回歸順序不可知,故本文利用倒角距離作為平面參數(shù)回歸的度量指標(biāo),定義了無序損失函數(shù)對平面參數(shù)進(jìn)行監(jiān)督訓(xùn)練。
通過利用上述各分支損失函數(shù)監(jiān)督訓(xùn)練得到輸入圖像場景中的分割掩模圖、深度圖及平面參數(shù),通過訓(xùn)練總損失:
完成本文提出的深度神經(jīng)網(wǎng)絡(luò)各分支監(jiān)督訓(xùn)練。其中,Ls為分割掩模損失;Ld為深度損失;Lc為平面參數(shù)損失。
為了防止在訓(xùn)練時出現(xiàn)過擬合問題,在網(wǎng)絡(luò)中使用Dropout方法,使全連接層的神經(jīng)元以一定的概率失活并不再參與前向和反向傳播,隨機(jī)忽略部分學(xué)習(xí)參數(shù)。
本文使用目前具有代表性的大規(guī)模室內(nèi)場景數(shù)據(jù)集—ScanNet[25],這是一個大型室內(nèi)RGB-D視頻數(shù)據(jù)集,包含了1513個場景的250萬個視圖,并標(biāo)注了3D相機(jī)的姿態(tài)、表面重建和語義分割。ScanNet包含各種室內(nèi)場景,例如辦公室,公寓和浴室等。數(shù)據(jù)集既包含了一些如浴室、雜物間等小的空間集合又涵蓋了一些如教室、圖書館等大的空間集合。由于計算機(jī)內(nèi)存和顯存等因素的限制,我們只從數(shù)據(jù)集中選取共51000張圖片用于實驗研究。其中,訓(xùn)練集有50000張圖片,測試集有1000張圖片。另外,選用NYU Depth Dataset V2[8](NYUV2)數(shù)據(jù)集對本文預(yù)測的深度結(jié)果做定量分析。部分?jǐn)?shù)據(jù)集示例如圖6所示。
圖6 數(shù)據(jù)集示例
對于單目圖像深度圖的預(yù)測,我們采用以下幾種定量的評價指標(biāo)進(jìn)行計算:①相對誤差(Relative Error,Rel);②平方相對誤差(Square Relative Error,Rel(sqr));③均方根誤差(Root Mean Squared Error,RMSE);④對數(shù)均方根誤差(Logarithmic Root Mean Square Error,RMSE(log));⑤對數(shù)平均誤差(Logarithmi Mean Error,log10);⑥閾值誤差(Correct,δ(%))。通常,誤差值越小且精度值越高,預(yù)測的深度圖質(zhì)量越好。
其評價指標(biāo)計算公式如下:
①相對誤差(Relative Error,Rel),其公式為:
②平方相對誤差(Square Relative Error,Rel(sqr)),其公式為:
③均方根誤差(Root Mean Square Error,RMSE),其公式為:
④對數(shù)均方根誤差(Logarithmic Root Mean Square Error,RMSE(log)),其公式為:
⑤對數(shù)平均誤差(Logarithmi Mean Error,log10),其公式為:
⑥閾值誤差(%,Correct)δ,其公式為:
式中:N為像素總個數(shù),Di為第i個像素的預(yù)測深度值,為第i個像素所對應(yīng)的真實深度值,τ為設(shè)置的閾值,通常所設(shè)定的閾值為:1.25、1.252、1.253。
我們基于ResNet-101網(wǎng)絡(luò)結(jié)構(gòu),通過使用TensorFlow[26]的框架實現(xiàn)了本文的算法。本文利用ScanNet訓(xùn)練集進(jìn)行訓(xùn)練,共迭代500000次,使用Adam優(yōu)化器[27]進(jìn)行參數(shù)優(yōu)化,初始的學(xué)習(xí)率(Learning Rate)定為0.0003。我們在平面分割結(jié)果、深度預(yù)測精度和重建結(jié)果方面將本文算法和其他方法進(jìn)行了比較。
為了評估本文的平面分割算法,NYU-Toolbox[8],曼哈頓世界立體視覺[2](MWS),分段平面立體視覺[28](PPS)以及PlaneNet[5]被用來進(jìn)行比較。NYU-Toolbox是一種使用隨機(jī)采樣提取平面的算法,并通過馬爾可夫模型對分割掩模進(jìn)行優(yōu)化;MWS在提取平面過程中使用了曼哈頓世界假設(shè),并采用成對的消失線來改善平面提取結(jié)果;PPS使用消失線產(chǎn)生了較好的平面候選區(qū)域;PlaneNet使用深度卷積神經(jīng)網(wǎng)絡(luò)提取平面特征。
圖7展示了各種算法在ScanNet數(shù)據(jù)集上的部分平面分割結(jié)果。從圖中可以看出來:其他方法在進(jìn)行室內(nèi)場景的分割時,不能夠準(zhǔn)確的分割出室內(nèi)場景的平面(如圖7中框中所示)且無法捕捉到精確的邊界。本文利用空洞卷積增加卷積核的感受野,捕獲更多空間語義信息,并融合多尺度特征,故可以對室內(nèi)場景平面進(jìn)行準(zhǔn)確分割,并且通過將全連接條件隨機(jī)場優(yōu)化的定位精度與深度卷積神經(jīng)網(wǎng)絡(luò)的識別能力耦合,從而可以更好地處理邊界定位。
圖7 平面分割比較
在圖8中展示了本文算法和其他方法關(guān)于平面分割精度的定量比較。其中,像素召回率指的是正確預(yù)測的平面重疊區(qū)域中像素所占的百分比;平面召回率指的是正確預(yù)測真實平面的百分比。如果所預(yù)測的平面與真實平面的交并比(IOU)大于0.5,并且重疊區(qū)域的平均深度差值小于設(shè)定的深度閾值(從0到0.6 m,增量為0.05 m),那么我們就認(rèn)為該平面被成功的預(yù)測出來了。從曲線圖8可以看出來:當(dāng)使用預(yù)測的深度圖作為輸入時(計算預(yù)測的像素點到預(yù)測深度圖間的距離),本文算法的平面召回率和像素召回率都是最優(yōu)的;即使使用真實深度圖作為輸入時(計算預(yù)測的像素點到真實深度圖間的距離),本文算法的平面召回率和像素召回率也比PPS和PlaneNet好。
在本節(jié)中,本文算法和其他方法進(jìn)行了深度圖的定量分析比較。為了得到深度圖,除了使用全局預(yù)測任務(wù)外,同時為了避免其他分支的影響,我們還單獨(dú)使用深度預(yù)測分支(深度)進(jìn)行深度圖的估計,同時使用Eigen[29]等人的方法改變訓(xùn)練損失。深度預(yù)測精度在NYUV2數(shù)據(jù)集上的測試結(jié)果如表1所示。Eigen-VGG是一個用于法線和深度預(yù)測的卷積神經(jīng)網(wǎng)絡(luò);SURGE[22]是一個可進(jìn)行平面優(yōu)化的深度預(yù)測網(wǎng)絡(luò);FCRN[30]是目前最好的單圖像深度預(yù)測網(wǎng)絡(luò)之一。由于NYUV2深度圖極具噪聲且真實平面的提取極具有挑戰(zhàn)性且質(zhì)量不佳,故本文僅使用深度預(yù)測分支及深度損失來微調(diào)網(wǎng)絡(luò)。
表1展示了4.2節(jié)提到的各種指標(biāo)的定量結(jié)果。表格第2至第6列是各種深度誤差指標(biāo)值(差值越小表明深度預(yù)測結(jié)果越好);表格第7至第9列的三個指標(biāo)為深度精度指標(biāo)(數(shù)值越大表明深度預(yù)測結(jié)果越好),它們表示預(yù)測深度值與真實深度值的差值小于設(shè)置閾值情況下的像素所占比例。從表中可看出來,當(dāng)使用全局預(yù)測任務(wù)預(yù)測深度圖時,和文獻(xiàn)[5]相比各種深度誤差指標(biāo)和深度精度指標(biāo)相當(dāng)甚至不及;當(dāng)僅使用深度預(yù)測分支(深度)進(jìn)行深度估計時,各種深度誤差指標(biāo)和深度精度指標(biāo)略有提高。
圖8 平面分割精度比較
表1 NYUv2數(shù)據(jù)集深度精度比較
圖9展示了本文算法與使用深度殘差網(wǎng)絡(luò)的PlaneNet[5]各室內(nèi)場景重建對比結(jié)果。PlaneNet使用固定的感受野,無法使用卷積核進(jìn)行更大范圍的采樣、捕獲豐富的空間語義信息,并且沒有使用淺層高分辨率的特征;本文利用空洞卷積并設(shè)置不同空洞率增加卷積核的感受野,捕獲更多空間語義信息,并融合多尺度特征。從圖9中矩形框可以看出,本文的算法在邊緣位置的重建效果(如框所示)要好于PlaneNet。
圖9 重建結(jié)果對比
本文提出了一種基于空洞卷積殘差連接的和多尺度特征融合網(wǎng)絡(luò)的分段平面三維重建算法。本文提出的算法可直接從單幅圖像中預(yù)測出平面參數(shù)、深度圖及分割掩模。由于本文是在靜態(tài)室內(nèi)場景下進(jìn)行的三維重建,未來的一個重要方向是能夠在室內(nèi)和室外均進(jìn)行動態(tài)場景的實時三維重建。