鄒濘鍵, 馮 剛, 陳衛(wèi)東
(華南師范大學(xué) 計算機(jī)學(xué)院, 廣州 510631)
單視圖三維重建一直以來是計算機(jī)視覺領(lǐng)域里的一個熱點(diǎn). 隨著深度學(xué)習(xí)的發(fā)展和大型3D模型數(shù)據(jù)集ShapeNet[1]的出現(xiàn), 基于深度學(xué)習(xí)的三維重建成為主流. 編碼器-解碼器結(jié)構(gòu)是目前基于深度學(xué)習(xí)三維重建的主要架構(gòu), 輸入單一圖片進(jìn)編碼器提取圖像特征而后由解碼器將特征向量還原成三維模型, 此結(jié)構(gòu)是訓(xùn)練神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)二維圖像和三維物體之間的映射關(guān)系. 本文從MarrNet方法[2]中得到啟發(fā), 輸入單一圖片不直接生成特征向量而是生成2.5D中間表達(dá)(深度圖、表面法向量貼圖、輪廓圖), 對比之下中間表達(dá)可以從圖像中獲得更多信息, 從而具有從復(fù)雜背景的圖片中重建出三維模型的能力. 另外之前的研究都只提取了圖像的全局特征, 因此重構(gòu)后的三維模型精準(zhǔn)度不高, 針對這個問題本文提出局部特征模塊, 結(jié)合局部特征和全局特征生成更高質(zhì)量的三維模型.
近年來, 單視圖三維重建工作使用的3D表達(dá)方式主要有點(diǎn)云, 體素, 網(wǎng)格. 基于點(diǎn)云[3-5]的三維表達(dá)雖然易于使用CNN (convolutional neural networks)但分辨率十分受限. 基于體素[6-8]的表達(dá)因其使用太多的體素去描述物體內(nèi)部看不到的部分而增加了計算量. 基于網(wǎng)格[9-11]的方法重構(gòu)出來的三維物體較為精細(xì), 不過這種方法受限于其固定的拓?fù)浣Y(jié)構(gòu).
針對上述3種表達(dá)方式的局限性, 隱式曲面表達(dá)[12,13]逐漸受到重視. Mescheder等人[14]則使用隱式曲面表達(dá), 他們預(yù)測體積網(wǎng)格中每個單元被占用或未占用的概率, 在緩解體積網(wǎng)格分辨率受限的問題的同時也使最后生成的模型更平滑. Chen等人[15]同樣使用SDF來完成三維重建的任務(wù), 雖然生成了連續(xù)高質(zhì)量的三維模型, 但重建細(xì)節(jié)欠佳, 不能很好的重建如三維模型孔洞處的細(xì)節(jié). Wang等人[16]提出的DISN使用SDF作為表示, 因不僅提取了輸入圖片的特征更提取了局部特征使重建細(xì)節(jié)方面得到提升, 但其缺點(diǎn)在于只能處理純凈背景的圖片, 處理復(fù)雜背景時其精度會大大降低. Thai等人[17]提出的SDFNet討論重建精度的同時也研究了模型的泛化能力, 訓(xùn)練出的模型能很好的重建出訓(xùn)練集中未出現(xiàn)過的物體種類. Kleinberg等人[18]將SDF與GAN (generative adversarial networks)結(jié)合生成精度較好的三維模型.
本文提出的模型創(chuàng)新點(diǎn)有: (1)加入2.5D草圖預(yù)測模塊使模型可以從復(fù)雜背景圖片中重建三維模型,結(jié)合局部特征提取模塊和SDF隱式表面表達(dá)可以生成更逼真的模型. (2)討論模型的泛化能力, 研究模型是否可以重建出訓(xùn)練集中未出現(xiàn)過的物體種類, 實(shí)驗結(jié)果證明加入2.5D草圖預(yù)測模塊有助于提升泛化能力. (3)本文采用隱式表面表達(dá)方法中最常用的SDF(signed distance function)作為三維模型的表達(dá)方式不僅估計了采樣點(diǎn)的正負(fù)值(該點(diǎn)在表面外還是表面內(nèi))還估計了其到表面的距離, 可以提取任意值的等值面.
本文方法概況如下: 先通過采樣策略為數(shù)據(jù)集ShapeNet每個三維模型采樣點(diǎn)生成采樣點(diǎn)點(diǎn)云, 之后結(jié)合圖片全局特征和局部特征預(yù)測每個采樣點(diǎn)的SDF值, 最后提取SDF值為0的面作為最終生成三維模型表面.
網(wǎng)絡(luò)整體架構(gòu)如圖1所示, 主要包含兩個模塊: 相機(jī)位姿預(yù)測模塊和SDF預(yù)測模塊. 首先對輸入的圖像進(jìn)行相機(jī)參數(shù)的預(yù)測. 之后將圖片輸入至2.5D草圖模塊經(jīng)過編碼器解碼器生成2.5D草圖, 再提取2.5D草圖的特征作為全局特征. 接著使用之前預(yù)測到的相機(jī)參數(shù)將采樣點(diǎn)映射到二維圖像平面, 進(jìn)行該采樣點(diǎn)的局部特征提取. 最后將點(diǎn)特征分別與全局特征和局部特征結(jié)合, 進(jìn)行降維操作后得到兩路SDF值, 將這兩路得出的結(jié)果連接生成最后預(yù)測的SDF值.
圖1 網(wǎng)絡(luò)架構(gòu)
使用ShapeNet數(shù)據(jù)集進(jìn)行這個模塊訓(xùn)練, 此模塊功能為預(yù)測將默認(rèn)位姿的3D模型投影至與輸入圖片相同位姿所需要的相機(jī)參數(shù). 將ShapeNet數(shù)據(jù)集中各個3D模型默認(rèn)位姿作為世界坐標(biāo)下位姿, 并提取點(diǎn)云生成世界坐標(biāo)下的點(diǎn)云. 在數(shù)據(jù)準(zhǔn)備操作中會對ShapeNet數(shù)據(jù)集進(jìn)行渲染, 會對默認(rèn)位姿3D模型旋轉(zhuǎn)、平移特定角度, 而后提取點(diǎn)云生成真實(shí)相機(jī)坐標(biāo)下的點(diǎn)云. 相機(jī)位姿預(yù)測模塊大致為輸入一張圖片至CNN (這里采用VGG-16)預(yù)測位姿, 將網(wǎng)絡(luò)預(yù)測出的位姿對世界坐標(biāo)下的點(diǎn)云進(jìn)行旋轉(zhuǎn)平移變換操作生成預(yù)測相機(jī)坐標(biāo)下的點(diǎn)云, 再與真實(shí)相機(jī)坐標(biāo)下的點(diǎn)云損失對比優(yōu)化這一模塊. 估計出來的相機(jī)參數(shù)用于局部特征提取.Zhou等人[19]的實(shí)驗說明使用6D旋轉(zhuǎn)表示法相對于四元數(shù)和歐拉角來說更容易使網(wǎng)絡(luò)回歸, 在此也采用該方法. 本文使用6D旋轉(zhuǎn)表示b=(bx, by)其中bx∈R3,by∈R3, b∈R6來表示物體位姿. 本模塊預(yù)測出6D旋轉(zhuǎn)表示b和位移量t, 由b通過式(1)可以計算出旋轉(zhuǎn)矩陣R =(Rx,Ry,Rz)T∈R3×3.
其中, N(·)是標(biāo)準(zhǔn)化方程, ×是交叉積.
預(yù)測相機(jī)坐標(biāo)下的點(diǎn)云和真實(shí)相機(jī)坐標(biāo)下的點(diǎn)云之間的差距作為本模塊的損失函數(shù)如式(2):
該方程本質(zhì)是MSE (mean squared error), 其中PCw表示世界坐標(biāo)下的點(diǎn)云, 而pw表示世界坐標(biāo)下點(diǎn)云中的一個點(diǎn), pG為真實(shí)相機(jī)坐標(biāo)下的點(diǎn), 式(2)中,pG-(Rpw+t)表示真實(shí)相機(jī)坐標(biāo)下的點(diǎn)pG與由世界坐標(biāo)系下的點(diǎn)pw通過旋轉(zhuǎn)R和平移t變換得到的點(diǎn)之間的差距. 最后除總共點(diǎn)的個數(shù). 相機(jī)位姿預(yù)測網(wǎng)絡(luò)如圖2.
圖2 相機(jī)位姿預(yù)測網(wǎng)絡(luò)
SDF是一個將3D模型采樣的點(diǎn)p=(x, y, z)映射到實(shí)數(shù)s=SDF(p)的連續(xù)函數(shù), 其中s的正負(fù)代表在物體表面外部還是內(nèi)部, s的絕對值表示這個點(diǎn)到物體表面距離. 再使用Marching cubes方法[20]提取0等值面作為3D物體的形狀. SDF預(yù)測模塊分為全局特征提取和局部特征提取兩個過程.
2.3.1 全局特征提取
在全局特征提取時使用了2.5D草圖模塊如圖3所示, 以2D RGB圖片作為輸入預(yù)測它的2.5D草圖:表面法線、深度和輪廓, 其主要目的是從輸入圖像中提取出固有的物體屬性, 與直接從RGB中提取特征相比, 提取出的特征更豐富, 實(shí)驗表明使用這種中間表示方式可以使網(wǎng)絡(luò)更容易處理具有復(fù)雜背景的圖片, 并且因從圖像中得到更豐富的信息, 網(wǎng)絡(luò)的泛化能力也得到了提升. 在2.5D草圖模塊使用編碼器為ResNet18(deep residual network)將256×256 RGB圖像編碼成大小為8×8的512特征圖, 然后通過解碼器(解碼器包含4組5×5全卷積層和ReLU層然后是4組1×1全卷積層和ReLU層)輸出相應(yīng)的深度圖、表面法線、輪廓圖像, 分辨率都為256×256. 將得到的2.5D草圖輸入到同樣是ResNet18編碼器中得到全局特征. 用Blender軟件渲染出的2.5D草圖作為地面真實(shí)計算損失函數(shù),訓(xùn)練過程中我們使用MSE損失優(yōu)化2.5D表示模塊.
圖3 2.5D草圖預(yù)測模塊
2.3.2 局部特征提取
如圖4所示, 在局部特征提取模塊使用編碼器VGG-16 (visual geometry group). 通過相機(jī)位姿預(yù)測模塊得到的相機(jī)參數(shù)將3D的點(diǎn)p投影到2D圖像上得到點(diǎn)q, 在VGG-16中5個特征子圖中找到q點(diǎn)對應(yīng)的位置取下, 維度分別為64、128、256、512、512, 而后進(jìn)行連接得到維度為1 472的局部特征(因為特征圖尺寸不一樣, 所以先采用雙線性插值再取下與q點(diǎn)對應(yīng)模塊).
圖4 局部特征提取
2.3.3 預(yù)測SDF值
如圖5所示, 當(dāng)經(jīng)過全局特征提取和局部特征提取之后得到全局特征維度為1 024和局部特征維度為1 472, 采樣點(diǎn)維度初始為3經(jīng)過MLP (multilayer perceptron)生成維度為512的點(diǎn)特征后分別與全局特征和局部特征結(jié)合. 最后通過圖5中所示一系列操作分別得到兩個維度為1的特征, 將得到的兩個特征結(jié)合則是網(wǎng)絡(luò)預(yù)測的SDF值.
圖5 通過圖像特征預(yù)測SDF
用原始數(shù)據(jù)集ShapeNet中的三維模型先提取出點(diǎn)云, 而后測量出點(diǎn)云中各個點(diǎn)的SDF值作為地面真實(shí)SDF值, 而我們的網(wǎng)絡(luò)f(·)是估計使用采樣策略采樣點(diǎn)的SDF值, 使用以下?lián)p失函數(shù)優(yōu)化預(yù)測SDF值模塊. SDF損失函數(shù)為式(3):
其中, f(I, p)表示以圖像I和三維點(diǎn)p作為輸入輸入到本網(wǎng)絡(luò)中, 而SDFI(p)則表示地面真實(shí)SDF值, m1和m2, 這兩個值代表不同的權(quán)重, σ為一個閾值.
為了生成隱式平面, 首先定義一個分辨率為256×256×256稠密3D網(wǎng)格將采樣點(diǎn)點(diǎn)云放入其中并為網(wǎng)格中的每個點(diǎn)預(yù)測SDF值. 得到了稠密網(wǎng)格中每個點(diǎn)的SDF值之后使用Marching cubes在SDF值為0的等值面上生成對應(yīng)的平面.
傳統(tǒng)實(shí)驗都是采用ShapeNet數(shù)據(jù)集中所有13種種類按照官方推薦的訓(xùn)練集數(shù)據(jù)集分割進(jìn)行實(shí)驗. 本文為了檢測泛化能力, 驗證網(wǎng)絡(luò)是否可以重建出訓(xùn)練集中未出現(xiàn)的物體種類, 采用數(shù)據(jù)集中最大的3種種類(長凳、汽車、桌子)作為訓(xùn)練集而其余10種作為訓(xùn)練集. 重建結(jié)果與最先進(jìn)的方法進(jìn)行對比, 結(jié)果顯示本文可以重構(gòu)出訓(xùn)練集中未出現(xiàn)過的種類, 同時還解決了重構(gòu)中細(xì)節(jié)恢復(fù)的問題.
使用ShapeNet 作為數(shù)據(jù)集, 在實(shí)驗中我們使用3種種類作為訓(xùn)練集, 而使用另外10種種類作為測試集. 實(shí)驗中地面真實(shí)深度圖、法線貼圖等2.5D草圖我們使用Cycles光線追蹤引擎在Blender中實(shí)現(xiàn)了自定義數(shù)據(jù)生成管道, 以2D圖片為渲染對象, 生成的2.5D草圖作為地面真實(shí)值與網(wǎng)絡(luò)生成的2.5D草圖計算損失. 為了生成實(shí)驗中的復(fù)雜背景2D圖片, 用不同的20個隨機(jī)圖像作背景渲染每個3D模型而后生成具有復(fù)雜背景的2D圖片. 為了增加2D圖像數(shù)據(jù)量,本文通過旋轉(zhuǎn)、平移特定角度生成不同角度下的3D模型再添加背景圖生成2D圖像. 每個三維模型旋轉(zhuǎn)、平移8個特定角度, 因此每個模型生成8張具有復(fù)雜背景的2D圖像. 實(shí)驗中使用的點(diǎn)云也是由數(shù)據(jù)集ShapeNet得到的, 把數(shù)據(jù)集默認(rèn)位姿提取得到的點(diǎn)云作為世界坐標(biāo)下的點(diǎn)云, 而由旋轉(zhuǎn)、平移不同角度后得到的三維模型中提取得到的點(diǎn)云作為真實(shí)相機(jī)坐標(biāo)空間下的點(diǎn)云, 其旋轉(zhuǎn)平移的相機(jī)參數(shù)則作為真實(shí)相機(jī)參數(shù).
要生成三維模型因此更關(guān)注物體表面周邊的點(diǎn),所以在訓(xùn)練過程中采樣策略為在高斯分布N(0, 0.1)下采樣2 048個點(diǎn). 把采樣點(diǎn)云裝入生成的256×256×256稠密3D網(wǎng)格中結(jié)合圖片全局特征和局部特征逐個點(diǎn)預(yù)測對應(yīng)的SDF值, 再與真實(shí)SDF值做對比.
本文分開訓(xùn)練相機(jī)位姿預(yù)測網(wǎng)絡(luò)和SDF預(yù)測網(wǎng)絡(luò). 相機(jī)位姿預(yù)測網(wǎng)絡(luò)中CNN使用VGG-16, 使用式(2)作為這個模塊的損失函數(shù). 因SDF預(yù)測網(wǎng)絡(luò)需要用到相機(jī)位姿預(yù)測網(wǎng)絡(luò)中預(yù)測出的相機(jī)參數(shù), 為更好訓(xùn)練SDF預(yù)測網(wǎng)絡(luò), 我們使用地面真實(shí)相機(jī)參數(shù)訓(xùn)練此網(wǎng)絡(luò). 在本模塊中提取全局特征線路使用2.5D草圖作為中間表達(dá), 用Blender渲染出來的2.5D草圖和網(wǎng)絡(luò)訓(xùn)練得到草圖對比來調(diào)優(yōu)2.5D草圖提取模塊. 最后由局部特征、全局特征和點(diǎn)特征共同預(yù)測的SDF值與地面真實(shí)SDF值使用式(3)作為損失函數(shù), 其中m1=4,m2=1, σ=0.01. 本文使用Adam優(yōu)化器學(xué)習(xí)率為1×10-4,batch-size為16.
測試階段中, 先使用相機(jī)位姿預(yù)測模塊估計相機(jī)位姿, 把預(yù)測到的位姿用于SDF預(yù)測模塊預(yù)測各個點(diǎn)的SDF值. 所有采樣點(diǎn)SDF已知后采用第2.5節(jié)中提及表面重建的方法生成輸出模型.
對于質(zhì)量評測, 使用常見的衡量指標(biāo)倒角距離chamfer distance (CD)比較重建后的模型和地面真實(shí)模型. CD計算公式為式(4), 為了使用CD評判重建后模型和地面真實(shí)模型的相似度需對兩個模型采樣生成點(diǎn)云. S1和S2分別代表這兩個點(diǎn)云, 公式中第1項代表S1點(diǎn)云中任意一點(diǎn)x到S2最小距離之和, 第2項則表示S2中任意一點(diǎn)y到S1最小距離之和. 所以CD值越大說明兩組點(diǎn)云區(qū)別越大, 反之CD值越小兩組點(diǎn)云區(qū)別越小, 重建效果越好.
通過渲染復(fù)雜背景圖后的圖片作為輸入, 由2.5D草圖估計網(wǎng)絡(luò)得到對應(yīng)的2.5D草圖如圖6. 之后再進(jìn)行SDF值預(yù)測和局部特征提取等操作得到的三維模型與GenRe[21]和OccNet[12]重建出來的結(jié)果進(jìn)行對比, GenRe是研究基于泛化至訓(xùn)練集中未出現(xiàn)的物體種類算法中經(jīng)典的模型, 而OccNet是近期使用隱式曲面作為表達(dá)方式算法中有代表性的模型, 我們挑選出在訓(xùn)練集中未出現(xiàn)過的4種種類進(jìn)行對比如圖7, 對比可以很明顯的看出本文的方法不僅可以恢復(fù)訓(xùn)練集中未見過的物體種類還可以很好的處理模型中細(xì)節(jié)的恢復(fù), 如椅子和長椅靠背孔洞處的恢復(fù)以及飛機(jī)機(jī)翼和手槍手柄處的孔洞恢復(fù)更貼近地面真實(shí)模型. 表1則為部分未見過種類CD值對比, CD值越低表示重建效果越好, 可以看到本文方法CD值在6種種類和平均值對比中都是最低的, 表明本文重建效果優(yōu)于其他兩種.
表1 6種訓(xùn)練集未出現(xiàn)的種類CD比較
圖6 輸入圖片和2.5D
圖7 三維模型重構(gòu)對比
本文提出的網(wǎng)絡(luò)使用SDF隱式曲面來表示三維物體, 生成后的模型相較于之前單視圖三維重建方法有更為清晰的表面. 引入局部特征提取的模塊使得最后生成的模型能夠捕獲細(xì)粒度的細(xì)節(jié)生成高質(zhì)量3D模型. 我們還進(jìn)行了泛化能力的實(shí)驗, 通過2.5D模塊和選擇以視覺為中心的坐標(biāo)系來測試泛化能力. 定性和定量的實(shí)驗可以驗證出我們的方法在重建模型的質(zhì)量上和泛化能力方面都優(yōu)于現(xiàn)有的方法.