賈瑞明 李 彤 劉圣杰 苗 霞 王一丁
(北方工業(yè)大學信息學院 北京 100144)
計算機視覺的發(fā)展為機器人領域的研究帶來了極大的突破,機器人實現(xiàn)判斷周圍環(huán)境和自主運動的關鍵是進行精確的環(huán)境三維重建。環(huán)境三維重建的目標是從一組給定的彩色圖像中恢復出場景的三維結構,可以表示為深度圖、點云或者三維體。其中深度圖由于可轉(zhuǎn)換性好、容易獲取等原因,應用最為廣泛。在三維重建的過程中,給定每幅圖像的相機位姿有助于捕獲圖像間的幾何關系,使得重建的結果更加準確。
深度信息是理解場景中幾何關系的重要線索。例如,具有顏色和深度通道的RGBD圖像可以應用于各種任務,如三維模型重建、場景識別和人體姿態(tài)估計等。深度可以從立體圖像對或運動序列中估計,這為理解三維結構提供了相對豐富的信息。相反地,從單幅圖像中估計深度更具有挑戰(zhàn)性和模糊性,因為無法做到立體圖像或時態(tài)幀之間的對應匹配。早期深度圖預測方法依賴于手工標注的特征和圖模型[1-2],存在預測質(zhì)量差的問題。最近的方法[3-5]多使用卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks, CNN)以自動學習具有判別性的特征并且取得了較好的效果。Eigen等[6]提出了一個多尺度CNN,用于融合不同語義層的粗略預測和精細預測結果。一些研究者們研究了用CNN實現(xiàn)條件隨機場(Conditional Random Field, CRF)模型,從而實現(xiàn)整個深層網(wǎng)絡的端到端優(yōu)化[7-8]。
傳統(tǒng)相機位姿預測方法[9-11]通過圖像間的特征匹配找到二維圖像和三維模型之間的映射,從而得到相機的精確位姿。三維模型通常由從運動恢復結構(Structure From Motion, SFM)重建得出。得益于深度學習的發(fā)展,近年來許多基于深度學習的方法被提出。2015年Kendall等[12]首次提出了一種端到端的網(wǎng)絡PoseNet以直接從輸入彩色圖像預測出相機的6自由度位姿。PoseNet使用GoogLeNet作為主干網(wǎng)絡,將網(wǎng)絡頂層修改以適用于回歸任務。其他方法[13-15]通過使用LSTM結構或ResNet對PoseNet進行改進。
多任務學習是一種可以促進不同任務間知識共享和遷移的深度學習訓練方式,它可以有效提高網(wǎng)絡的學習效率。不同的計算機視覺任務通??梢员患稍谕粋€網(wǎng)絡框架中。文獻[16-17]使用其他的任務如語義分割或表面法向量來輔助深度圖的預測。文獻[18]設計了一種多任務預測蒸餾網(wǎng)絡來進行深度圖預測和場景分析。受多任務思想啟發(fā),本文設計了深度和相機位姿兩個任務聯(lián)合預測的算法。
本文創(chuàng)新點如下:
(1) 設計了一種深度位姿聯(lián)合預測網(wǎng)絡(Depth-pose Prediction Network,DPNet)。網(wǎng)絡接受RGB圖像作為輸入,直接輸出相機位姿和深度圖。
(2) 網(wǎng)絡以編解碼結構為基礎,設計了一個分支解碼器,包括深度圖解碼器與位姿解碼器。深度圖解碼器直接輸出深度圖,位姿解碼器又分為位置和姿態(tài)兩路以減少位置和姿態(tài)同時預測帶來的互相干擾。
(3) 在公開數(shù)據(jù)集Microsoft 7-Scenes上進行了詳盡的實驗,并與多種算法對比,證明了本文算法的有效性。
本文算法不需要更多的附加信息,減少了對數(shù)據(jù)集采集的要求;聯(lián)合預測不僅解決了位姿和深度圖同時預測的問題,而且有更好的精確度。
本文DPNet總體結構如圖1所示,輸入為RGB圖像,經(jīng)過編碼得到提取的高級語義特征,再將這些高級語義特征分別送入深度圖解碼器和位姿解碼器進行解碼,最后輸出預測的深度圖和相機位姿。圖中虛線表示跳躍連接,其將編碼器不同階段的特征圖引出,與解碼器對應階段的特征圖相加從而實現(xiàn)空間信息的補充及恢復。
圖1 聯(lián)合預測網(wǎng)絡結構
DPNet的解碼器部分的結構為雙路分支結構,位姿解碼器中又分為位置和姿態(tài)兩個分支,兩個分支之間具有相輔相成、互相促進的作用,在反向傳播梯度時共同對共享的網(wǎng)絡部分的權重調(diào)整造成影響。在DPNet中,深度圖預測和位姿預測互相促進。位姿預測中位置和姿態(tài)任務又互相促進,共同提升網(wǎng)絡精度。
在聯(lián)合預測網(wǎng)絡中,編碼器是從圖像中提取抽象特征的重要結構。神經(jīng)網(wǎng)絡相對于傳統(tǒng)算法一個顯著的不同點就是特征不需要人工標注,直接由卷積層提取特征,通過訓練網(wǎng)絡權重不斷讓網(wǎng)絡學習如何提取有效特征。
本文采用Inception-Resnet-v2[19]作為編碼器,將原網(wǎng)絡中最后的dropout層、全連接層和Softmax刪去以適應本文網(wǎng)絡,結構如圖2所示,陰影部分表示被刪去的層。Inception-Resnet-v2由Google團隊提出,其結合了ResNet[20]的思想,將殘差模塊中的殘差結構替換為多尺度結構。Inception-Resnet主要由A、B、C三種模塊構成,三種模塊的卷積核尺寸、通道數(shù)、分支數(shù)不同。模塊為得到多尺度特征,還加入了最大值池化層(max pooling)以及多尺度卷積層。這種結構既使神經(jīng)網(wǎng)絡在寬度和深度上都得到了拓展,又使梯度消失和梯度爆炸問題得到了改善,同時權重的梯度在反向傳播時變得更加有效,網(wǎng)絡收斂速度得到了顯著提高。圖2中Reduction 模塊用于降低分辨率同時提升通道數(shù)。
圖2 Inception-Resnet-v2結構
位姿解碼器用于直接預測相機位姿。每幅圖像都有其對應的相機位置t和q,用于描述拍攝時相機的狀態(tài)。位置由世界坐標系下的三個坐標值組成,姿態(tài)由一個四元數(shù)表示。由于使用歐拉角表示姿態(tài)會造成“萬向鎖”的現(xiàn)象,旋轉(zhuǎn)矩陣表示姿態(tài)會產(chǎn)生參數(shù)冗余,故本文選用四元數(shù)來表示相機姿態(tài)。
考慮到位置和姿態(tài)具有如下區(qū)別:(1) 攝像機姿態(tài)的平移和旋轉(zhuǎn)有不同的量綱,一個是距離,另一個是角度;(2) 攝像機平移和旋轉(zhuǎn)的變化導致在二維圖像有不同表示。平移變化不僅會導致兩個對象之間的遮擋關系發(fā)生變化同時也會引起視差、放大或縮小圖像。旋轉(zhuǎn)中俯仰角和偏航角的變化會導致觀察范圍的改變。綜上,設計雙路位姿解碼器將位置和姿態(tài)分開進行預測以保證二者之間沒有互相干擾。
如圖3所示,位姿解碼器由兩個反卷積層及兩路分支網(wǎng)絡組成,每路分支網(wǎng)絡包含三個多尺度融合模塊(Multi-scale Fusion Module, MFM)以及一個全局均值池化層。反卷積層(圖3中“Deconv”模塊)使用半徑為2、步長為2的卷積核對編碼后的特征圖進行升采樣同時降低通道數(shù),卷積層則使用半徑為1、步長為2的卷積核進行卷積操作,全局均值池化層(圖3中“Pooling”模塊)用于提取全局信息,做到了對解碼后的特征信息的充分利用。跳躍連接加在每個反卷積層之后,圖3中未畫出。
圖3 雙路位姿解碼器結構
提出的MFM結構如圖4所示,使用了1×1和3×3兩個尺度的卷積核對反卷積之后的特征圖進行特征映射以及降維,之后將特征圖進行拼接,最后使用ReLU激活函數(shù)進行激活,其中:k表示卷積核;s表示卷積的步長。不同尺度的卷積可以獲得不同的感受野,從而提升特征提取能力。
圖4 MFM結構
深度圖表示為物體表面到相機光心的距離,為三維重建提供了非常重要的三維信息。
深度圖的預測通常使用全卷積網(wǎng)絡實現(xiàn),在編碼之后會有相應的反卷積層將特征圖恢復至與輸入圖像相同大小。DPNet深度圖解碼器結構如圖5所示。與位姿解碼器相同,深度圖解碼器的前兩個反卷積層之后也各加入一個跳躍連接,第三個反卷積層之后使用圖像雙線性插值來調(diào)整特征圖尺寸以便最終得到與輸入相同的特征圖尺寸。反卷積層使用與位姿解碼器相同的卷積和參數(shù)。
圖5 深度圖解碼器結構
神經(jīng)網(wǎng)絡依靠損失函數(shù)來迭代地更新網(wǎng)絡權重,損失函數(shù)反映的是預測結果和實際結果之間的差別。由于本文網(wǎng)絡擁有位置、姿態(tài)、深度圖三個子分支,所以創(chuàng)建多任務損失函數(shù)如下:
L=Lt+Lq+Ldepth
(1)
(2)
(3)
(4)
式中:x表示深度圖中像素點的坐標;N表示所有像素點的個數(shù);dx表示深度圖中對應像素點坐標x處的灰度值。
式(2)和式(3)將預測的位姿損失表示為預測值與真實值的二范數(shù)形式。預測出的姿態(tài)四元數(shù)需要進行歸一化以避免計算值溢出上界。
本文使用公開數(shù)據(jù)集Microsoft 7-Scenes以評估網(wǎng)絡性能。數(shù)據(jù)集包含七個場景的室內(nèi)環(huán)境圖像,每個場景都包含數(shù)量不等的分辨率為640×480的RGB圖像和未修正的深度圖。圖像中具有復雜的紋理信息、不同的光照及遮擋情況,為相機位姿的預測帶來了極大的挑戰(zhàn)。圖6展示了數(shù)據(jù)集七個場景圖像的采樣。
圖6 7-Scenes數(shù)據(jù)集
使用一塊NVIDIA TITAN RTX GPU在TensorFlow框架下訓練網(wǎng)絡。優(yōu)化器使用Adam,學習率初始值設為1e-3,權重衰減率為5e-4。RGB圖像首先經(jīng)過重新調(diào)整大小至343×343,再經(jīng)過隨機裁剪送入網(wǎng)絡進行訓練。編碼器的權重使用在ImageNet上訓練的權重進行初始化。
本文將實驗結果與LSTM-Pose等先進方法進行比較,表1給出了七個場景測試的位置誤差和姿態(tài)誤差。誤差遵循其他方法的計算規(guī)則,位置誤差使用歐氏距離度量,姿態(tài)誤差利用四元數(shù)的運算確定,取每個場景所有測試集圖片的中位數(shù)進行評估。
表1 本文與其他算法的位置誤差和姿態(tài)誤差對比
續(xù)表1
本文算法在七個場景的測試誤差均為最小,其中位置誤差比LSTM-Pose網(wǎng)絡平均提升了16%,姿態(tài)誤差平均提升了11%,兩者平均提升13.5%,證明了本網(wǎng)絡的有效性。
原始數(shù)據(jù)集的深度圖存在尺寸與RGB圖不一致、有數(shù)據(jù)點缺失等問題,在進行實驗前先對數(shù)據(jù)進行了匹配,訓練時將缺失的數(shù)據(jù)點的梯度設置為不進行反向傳播。
由于目前幾乎沒有文獻使用本文數(shù)據(jù)集進行深度圖預測,所以僅在此展示實驗結果。圖7展示了在“chess”場景下原始RGB圖、原始深度圖標簽與預測出的深度圖的對比。
(a) RGB圖 (b) 原始深度圖 (c) 預測深度圖圖7 深度圖預測結果
可以看出預測的深度圖有效地填補了黑色空洞,但是由于缺失像素過多,預測效果并未達到完全解決空洞的問題。第二排的顯示器、第三排的顯示器和架子腿、第四排的架子腿和椅背,以及第五排的桌面和夾架子腿都出現(xiàn)了大面積的預測深度值不準確。由于在同一室內(nèi)場景進行預測,輸入RGB圖拍攝時的相機位姿間隔較小,所以像素值未缺失部分預測出的深度值較為準確。
表2給出了深度圖預測的度量指標性能。其中包含:
平均相對誤差(Average relative error, rel):
(5)
均方根誤差(Root mean squared error, rmse):
(6)
對數(shù)平均誤差(Mean log10 error, mlog):
(7)
關于閾值t的精確度:
(8)
我們還使用了文獻[22]提出的網(wǎng)絡及文獻[23]提出的網(wǎng)絡FLEDNet訓練了本文數(shù)據(jù)集。
表2 深度圖預測各性能指標展示
從性能指標來看,本文網(wǎng)絡預測像素深度值和真實值之比1.25范圍內(nèi)的像素點預測精確度有88.3%,相比于文獻[22]的方法有12.6%的提升,相比于FLEDNet有3.8%的提升,具有良好的深度圖預測性能。
為了探究不同編碼器的性能,本文測試了目前深度學習中已提出的幾種高性能網(wǎng)絡。編碼器的層數(shù)通常對應于編碼能力,表3給出了對比結果,從上往下層數(shù)逐漸加深。
表3 幾種編碼器結構性能對比
可以看出,Inception-Resnet相比其他網(wǎng)絡更深也更寬,取得了最好的結果。
2.5.1位姿解碼器中分支位置選擇
圖3中位置和姿態(tài)兩個分支從兩層反卷積后分開,不同分離位置會對網(wǎng)絡性能產(chǎn)生不同影響,過早的分離會導致公共部分網(wǎng)絡學習到的表示不夠健壯,過遲的分離則會導致兩者之間干擾增加。為此我們設計了幾個不同分離節(jié)點的對比實驗,在場景“chess”的對比結果如表4所示。
表4 不同分離節(jié)點性能對比
隨著分離節(jié)點的推后,位姿預測精度逐步提升,但接著推后則造成了精度的降低,說明在兩層反卷積后將位置和姿態(tài)分開預測是最佳選擇。
2.5.2單任務/多任務實驗對比
為了探究網(wǎng)絡使用單任務分別預測位姿或深度圖和多任務同時預測位姿和深度圖的不同性能,設計了以下實驗:
(1) 單路位姿。網(wǎng)絡僅僅使用單任務訓練(相機位姿預測),輸入為RGB圖像,輸出為位姿參數(shù),沒有深度圖解碼器。
(2) 單路深度。網(wǎng)絡僅僅使用單任務訓練(深度圖預測),輸入為RGB圖像,輸出為預測的深度圖,沒有雙路位姿解碼器。
(3) 雙路輸出。深度圖和位姿參數(shù)通過兩路子解碼網(wǎng)絡分別輸出,共計兩路輸出。
(4) 三路輸出。DPNet結構,其中深度圖通過一個子網(wǎng)絡輸出,位置和姿態(tài)參數(shù)通過兩路子網(wǎng)絡分開輸出(如圖1所示),共計三路輸出。
為了說明對比效果,三種實驗均在“chess”場景下進行,表5給出了實驗結果。
表5 幾種網(wǎng)絡結構性能對比
實驗結果表明,DPNet使用的聯(lián)合學習方式無論對于深度圖預測還是相機位姿預測,精度都有顯著的提升,證明了本文DPNet的有效性;同時三路輸出和雙路輸出的實驗對比證明了分別預測位置和姿態(tài)確實避免了兩者間的干擾,提升了網(wǎng)絡預測精度。
本文利用多任務思想,設計了一種深度-位姿聯(lián)合預測網(wǎng)絡,將深度圖以及相機位姿使用相同的編碼器以及不同的解碼器聯(lián)合訓練,使得任務間可以相互促進。將位置和姿態(tài)分開進行預測,消除了兩者間的串擾。實驗結果表明本文算法的位姿預測準確率和深度圖預測質(zhì)量較高,相比LSTM-Pose方法,位姿平均精度提升了13.5%,相比FLEDNet,深度圖預測精度提升了3.8%。