韓煌達,張海翔,馬漢杰,蔣明峰,馮 杰
(浙江理工大學 信息學院,浙江 杭州 310000)
在計算機視覺領域,基于圖像的三維重建十分具有挑戰(zhàn)性。目前,研究者使用的方法可分為多目圖像重建和單圖三維重建。前者需要從多個角度對物體進行測量,因此成本較高;而后者只需要單幅圖像作為輸入,十分便捷,可用于機器人、無人駕駛等諸多領域。隨著深度學習的快速發(fā)展,一系列基于不同三維表示方法的單圖三維重建網絡被提出,這些網絡能較準確地重建出物體的三維形狀,但是它們都是在如ShapeNet 這樣的合成基準上開發(fā)的[1]。ShapeNet 數據集的渲染圖像由孤立、處于中心位置的物體組成,并且圖像沒有背景。因此,這些網絡在面對更為復雜的實景圖像中的物體時無法重建出令人滿意的三維模型。
面對實景圖像中的物體,Yao 等[2]使用從目標檢測網絡中獲得的掩膜圖和包圍框,通過預測物體的三維屬性對基礎三維網格進行形變,從而生成和操控三維模型,這些研究的重心在于對物體的三維操控;Wu 等[3]訓練一個3DVAE-GAN 進行三維模型重建,但所用圖像經過人工裁剪,使物體處于圖像中心位置。此外,生成的模型分辨率較低;Gkioxari 等[4]結合目標檢測網絡,提出了Mesh R-CNN。該網絡首先預測出一個粗糙的體素表示,之后將其轉化為初始網格,再通過Scarsellif 等[5]提出的圖卷積網絡對初始網格進行形變從而生成三維模型。該網絡能準確地從實景圖像中重建三維模型,是目前較為有效的方法。然而,由于體素表示法的固有缺陷,該網絡重建出的三維物體分辨率仍然較低,并且視覺質量不高。
基于這些問題,本文提出IM-RCNN,該網絡可以準確地檢測出實景圖像中的多個物體,并重建出高分辨率、高視覺質量的三維形狀。本文的主要貢獻在于:①面向實景圖像,結合Mask R-CNN[6],提出一種基于隱函數的單圖三維重建網絡結構;②IM-RCNN 經過訓練,在CD(Chamfer distance)、NC(Normal consistency)、AP(Average Precision)指標上的表現優(yōu)于目前最好的方法,且重建的三維模型具有更加平滑的表面和豐富的細節(jié)。
主要闡述目標檢測網絡和單圖三維重建方法研究進展情況。
近年來二維目標檢測技術快速發(fā)展,Girshick 等[7]首先提出了R-CNN,在PASCAL VOC 2012 數據集上,將目標檢測指標mAP 提升到了53.3%,超越了之前的目標檢測算法。隨后又在R-CNN 基礎上提出了Fast R-CNN[8],在提高訓練和測試速度的同時獲得了更高的mAP;Ren 等[9]提出了Faster R-CNN,針對Fast R-CNN 網絡在提取候選區(qū)域時出現的計算瓶頸,提出一個區(qū)域建議網絡(RegionProposal Network,RPN),該網絡與目標檢測網絡共同使用輸入圖像的卷積特征圖,能夠幾乎無成本地輸出候選區(qū)域;Redmon等[10]提出YOLO。與Faster R-CNN 等基于候選框的目標檢測算法不同,這里將目標檢測看成一個回歸問題,輸入的圖像經過一個單獨的端到端網絡便能輸出包圍框和類別;Mask R-CNN 對Faster R-CNN 已有的包圍框分支進行擴展,增加了一個預測物體掩膜的分支。這些目標檢測網絡能夠準確地識別物體并使用包圍框、掩膜等進行定位,但它們的輸出僅僅局限在二維空間中。本文網絡不僅能夠輸出物體的類別、包圍框、掩膜,還能夠輸出實景圖像中多個物體的三維模型。
與二維圖像不同,三維形狀不局限于一種表示方法,因此近年來出現了各種基于不同三維形狀表示方法的單圖三維重建網絡,如體素表示法、八叉樹表示法、點云表示法、隱函數表示法等。
Choy 等[11]使用3D 卷積長短期記憶網絡,從單視圖或多視圖圖像中重建三維體素;Wu 等[3]將生成的對抗網絡用于三維體素,使用對抗思想來訓練3D GAN,實現從隱向量生成三維體素模型。這些工作使用體素作為三維形狀的表示方法,與二維圖像像素類似,研究者便把二維圖像處理方法遷移到三維形狀處理上。但是,隨著體素模型分辨率的提高,體素表示法的內存占用也呈立方式地增長。因此,這種表示法對內存要求較高,常常因為GPU 內存空間不足而產生低分辨率(如323或643的體素)的重建結果。
對此,H?ne 等[12]、Tatarchenko 等[13]使用八叉樹來表示三維形狀,實驗表明八叉樹表示法更具有內存效率,可以產生更高分辨率的三維模型。盡管如此,這些方法實現起來仍較困難,而且僅限于得到分辨率為2563的體素模型。
相對來說,點云表示法簡單且靈活。Fan 等[14]設計了一個點集生成網絡PointOutNet。該網絡可以從單幅圖像中預測出點云坐標,所生成的點集近似于真實的三維形狀。Qi 等[15-16]先后提出PointNet、PointNet++,使用對稱函數來達到點的排列不變性。
Groueix 等[17]將正方形面變形成目標曲面;Wang 等[18]提出Pixel2Mesh,使用圖卷積神經網絡逐步變形橢球體模板以對應圖像;張豪等[19]通過預測圖像深度信息并結合球形圖來重建三維形狀。
Mescheder 等[20]、Chen 等[21]、Park 等[22]用隱函數方法學習三維曲面,以點坐標和特征向量作為隱函數解碼器的輸入。對于每個點,隱函數解碼器都會為它分配一個值,該值可以指示這個點是在三維曲面外還是在里面,之后采用Lorensen 等[23]的等值面提取算法生成三維形狀。實驗表明,最終所生成的三維形狀具有較高的分辨率且內存效率較高。
這些三維形狀表示法都有各自的優(yōu)缺點。然而,這些表示法所對應的單圖三維重建網絡主要是在如ShapeNet這樣的合成基準上開發(fā)的,該數據集的渲染圖像由孤立的、處于中心位置的物體組成,并且圖像沒有背景。因此,面對現實世界處在不同場景、不同光照、不同遮擋下的物體,這些網絡無法取得令人滿意的效果。
本文目標是對輸入的單張實景圖像進行檢測,輸出檢測物體的類別、包圍框、掩膜以及三維網格。結合二維目標檢測網絡Mask R-CNN 來搭建網絡。在該網絡中,輸入圖像首先通過一個由ResNet-50-FPN構成的基礎網絡,之后區(qū)域建議網絡給出物體的候選框建議,再通過包圍框和掩膜分支進行處理[24]。
本文網絡稱為IM-RCNN,如圖1 所示,下文對隱函數分支進行說明。
Fig.1 IM-RCNN圖1 IM-RCNN
表1 展示了隱函數分支的架構。隱函數分支主要由使用卷積層f1獲取z 特征向量和使用隱函數解碼器獲得實數值v兩部分組成。
(1)獲取z 特征向量。z 特征向量的作用是對物體三維形狀進行編碼,目標是從實景圖像中重建出多個物體的三維形狀,因此需要這些物體在整幅圖像中所對應區(qū)域的特征圖。Ren 等[9]使用ROI Pooling 操作粗略地實現,He 等[6]使用雙線性差值提升輸入圖像與最終使用的區(qū)域特征圖之間的對齊程度。因此,本文沿用這樣的操作,獲得圖像中物體對應區(qū)域的特征圖,即圖2 中的X∈RH′×W′×C′。H′、W′、C′分別是特征圖X的高、寬和通道數。通過一個卷積層對它進行映射,即:
式(1)中,f1是經過卷積核卷積映射,Sigmoid 激活函數處理的映射過程參數如表1 所示。
Table 1 Network details of implicit function branch表1 隱函數分支的網絡細節(jié)
(2)隱函數解碼器。假設有一個水密的三維形狀,點p∈[-0.5,0.5]3是單位三維空間中的任意點,F是一個處于單位三維空間中的連續(xù)隱函數,用公式表示為:
式(2)中,F所輸出的值vgt表示點p在三維形狀的內部還是外部。
本文目標是通過深度神經網絡找到一個參數為θ的函數fθ,該函數以式(1)中得到的特征向量z和三維空間中的點p∈[-0.5,0.5]3為輸入,最終輸出實數v。根據圖2 和表1,網絡將維度為256 的特征向量z和維度為3 的三維空間上的點p相連接,得到z′。將z′送入fθ中,公式表示為:
關于fθ的結構,Hornik 等[25]認為,理論上多層的前向網絡可以在任意精度上擬合出一個連續(xù)的形狀函數。因此,根據Pix3D 數據集特征[26],使用8 個全連接層并搭配ReLU 激活函數搭建fθ。
在表示學習領域人們常常使用由編碼器加解碼器組成的網絡。研究人員為了得到給定輸入對應的最優(yōu)特征向量,首先完整地訓練一個自編碼器,之后把其中的解碼器部分單獨拿出來用作推斷[27-28]。本文的目標是重建出三維模型,為此使用三維卷積網絡搭建編碼器,如表2 所示。使用fθ作為隱函數解碼器構建一個體素自編碼器。在訓練隱函數分支之前先對它進行訓練,如圖3 所示。該體素自編碼器的作用是將編碼器部分用于生成標注的特征向量z,以及提供用作推斷的隱函數解碼器fθ。隱函數分支和包圍框分支、掩膜分支共同訓練。
Table 2 Structure of encoder表2 編碼器結構
2.2.1 體素自編碼器訓練
(1)數據預處理。根據圖3,在訓練體素自編碼器時,除了三維體素模型還需要事先從該體素模型中采集三維點坐標p 和對應的實數值vgt作為約束。首先,為了方便采樣,需要獲得初始的體素模型。參考體素表示法的相關工作,使用binvox 將Pix3D 數據集中的所有CAD 模型體素化[29]。由于CAD 模型一般不是水密網格,所以需要對初始體素模型進行漫水填充,最后進行均勻采樣,從上一步得到的分辨率為163、323的Pix3D 體素模型中采樣三維點坐標p 和對應的實數值vgt。
Fig.3 Training voxel auto-encoder圖3 訓練體素自編碼器
(2)體素自編碼器的損失函數與訓練。如圖3 所示,V是一個三維體素模型。通過編碼器f2來提取該三維體素的特征向量z,然后將特征向量z與三維空間中的采樣點p相連接,送入隱函數解碼器fθ,最終預測出p點對應的實數值vpred。
在體素自編碼器中,損失函數L是每個三維空間采樣點所對應的標注值和預測值之間的均方誤差。令P是從三維體素模型V 中采樣出來的點集,共有N個點,pi是點集P中的一個點,則:
訓練時,首先使用從163分辨率的體素模型中采樣的數據訓練300 個循環(huán),之后保持網絡結構不變,使用從323分辨率的體素模型中采樣的數據對上一步網絡參數模型進行微調,得到最終的網絡模型。
2.2.2 隱函數分支訓練
當完成上一步訓練后,對隱函數分支進行訓練。如圖4 所示,訓練時對預測特征向量和標注特征向量之間的均方誤差進行優(yōu)化,損失函數為:
式(5)中,X是物體對應的區(qū)域特征圖,fγ是帶參數γ的卷積層,zpred=fγ(X),zgt=f2(V),f2是上一步訓練好的編碼器。
Fig.4 Training implicit function branch圖4 訓練隱函數分支
在Pix3D 數據集上進行實驗,該數據集包含10 069 張實景圖像、395 個三維模型。由于Pix3D 數據集沒有提供官方的訓練集和測試集,因此沿用之前訓練數據集和測試數據集的劃分,即在Pix3D_S1 和Pix3D_S2 兩個版本的數據集上分別進行訓練和測試。
Pix3D_S1 版本隨機分配了7 539 張實景圖像用作訓練,2 530 張圖像用作測試。其中,訓練和測試數據集的三維模型相交,即某一個三維模型會以不同的顏色和紋理,或者以不同的方位、在不同的光照條件下出現在訓練數據集以及測試數據集的實景圖像中。
Pix3D_S2 版本比Pix3D_S1 版本更具挑戰(zhàn)性,訓練和測試數據集的三維模型互不相交,即在訓練數據集中出現的三維模型不會出現在測試數據集中,在測試數據集中出現的三維模型也不會出現在訓練數據集中。
本文實驗環(huán)境如表3 所示。
在單張GeForce RTX 2080 Ti GPU 上進行訓練,總共迭代315 000 次,每次迭代輸入一張圖像。對于優(yōu)化器使用帶動量的隨機梯度下降算法,在前32 000 次迭代中,學習率 從0.002 5 到0.02 線性增加,之后在256 000 到315 000 次迭代中,以10 倍數進行衰減。在訓練時,預訓練模型是COCO 實例分割模型,損失權重λimplicit是3,使用的權重衰減率是10-4。另外,對于二維目標檢測相關的損失權重 沿用Mask R-CNN 的默認數值。
Table 3 Experimental environment表3 實驗環(huán)境
3.3.1 測試數據集評估
為驗證IM-RCNN,在Pix3D_S1 和Pix3D_S2 數據集上進行訓練,并將測試結果與目前一些較有效的方法進行對比。其中,Pixel2Mesh 和Sphere-Init 經Gkioxari G等改進后擁有更好的效果。為了公平對比,這些網絡使用相同的訓練參數配置,在單張GeForce RTX 2080 Ti GPU 上從頭訓練。
大多數基于圖像的三維重建方法使用CD 和NC 作為評估指標,其中,CD 越小越好,NC 越大越好。因此,本文從預測的網格表面和標注的網格表面分別采樣10 000 個點,以此計算出這兩個指標的值。
根據表4可知,在pix3d_s1上,無論是CD還是NC指標,本文網絡在各個類別上的表現均優(yōu)于前人方法。最終,IM-RCNN 的平均CD 比效果次之的Mesh R-CNN 小0.226,提升大約23.9%,平均NC 比它大0.054,提升大約7.6%。
表5 是pix3d_s2 上的結果:①由于訓練數據集與測試數據集的三維模型互不相交,數據集本身難度增加,因此整體來看,這些網絡的表現不如在pix3d_s1 上的表現;②除了消防栓、籮筐所在的“其他”類別,IM-RCNN 的表現均優(yōu)于前人的方法;③由于工具類和其他類的三維模型形狀在訓練數據集和測試數據集中差別較大,并且用于訓練的模型數量較少,因此這些網絡在這兩個類別上的指標表現并不是很好。最終,IM-RCNN 的平均CD 要比效果次之的Mesh R-CNN小0.157,提升大約14.0%,平均NC比它大0.035,提升大約5.1%。
在目標檢測相關工作中,研究人員常常使用AP 指標來衡量檢測到的包圍框、2D 掩膜的平均精確度,使用AP_Mesh 來衡量重建的三維模型平均精確度,本文也使用這些指標對IM-RCNN 進行測試。如表6 所示,在pix3d_s1,IM-RCNN 在AP_BB、AP_Mask、AP_Mesh 三項指標上的表現均優(yōu)于以往的方法。在pix3d_s2,盡管在二維目標檢測性能上IM-RCNN 略遜于其他方法,但是在三維重建方面卻擁有最高的AP_Mesh。
圖5 展示了IM-RCNN 的一些重建結果。與Mesh RCNN 相比,IM-RCNN 可以重建出例如轉椅的椅腳這樣更豐富的細節(jié)。對于像書柜、床背、茶幾這樣有洞的物體也能更加清晰生動地重建。同時,根據圖6 的展示,IMRCNN 可以準確地檢測出一張實景圖像中的多個物體,并且具有更好的視覺效果。
Table 4 Performance on pix3d_s1表4 pix3d_s1 上的表現
Table 5 Performance on pix3d_s2表5 pix3d_s2 上的表現
Table 6 Comparison of AP_Box、AP_Mask、AP_Mesh metrics表6 AP_Box、AP_Mask、AP_Mesh 指標比較
Fig.5 Reconstruction results of IM-RCNN圖5 IM-RCNN 的重建結果
Fig.6 Output of IM-RCNN圖6 IM-RCNN 的輸出結果
3.3.2 多分辨率重建
由于體素表示法需要占用較大的內存,在Pix3D 數據集上,Mesh R-CNN 只能重建出243分辨率的三維形狀。相反,如圖7 所示,IM-RCNN 使用隱函數作為三維形狀的表示方法,它不僅可以重建出低分辨率(如243、643)的三維形狀,甚至可以重建出5123這樣高分辨率的三維形狀。
Fig.7 Multiresolution reconstruction圖7 多分辨率重建
針對當前面向實景圖像的三維重建方法重建結果分辨率低、視覺質量不佳等問題,本文基于隱函數方法,結合Mask R-CNN,提出了IM-RCNN。網絡在Pix3D 數據集上進行訓練和測試,實驗證明IM-RCNN 在各項指標上的表現均優(yōu)于以往的方法。IM-RCNN 能夠準確地檢測出實景圖像中的多個物體,輸出物體的類別、包圍框、掩膜,并重建出相應高分辨率、高視覺質量的三維模型。本文方法還存在不足之處,如將網絡分為兩階段訓練未免有些繁瑣,如何在不降低模型效果的前提下將網絡訓練簡化是后續(xù)優(yōu)化方向。此外,從實景圖像中重建出帶有紋理的三維模型也是未來工作重點。