賈瑞明,劉圣杰,李錦濤,王赟豪,潘海俠
(1.北方工業(yè)大學 信息學院,北京100144; 2.北京航空航天大學 軟件學院,北京100083)
視覺自定位(Visual Localization,VL)是一種通過待查詢的視覺數據來獲取相機位姿的方法,其在計算機視覺中扮演著重要的角色,在航天器交會對接、軌道飛行器回收空間碎片、火星漫游車等應用場景中,均需要通過視覺自定位技術獲取精確的自身位姿參數。不同于從運動恢復結構(Structurefrom Motion,SFM)及即時定位與地圖構建(Simultaneous Localizationand Mapping,SLAM)提供圖像序列間的相對位置關系,視覺自定位直接給出待查詢的視覺數據對應的相機絕對位姿。視覺自定位可以分為直接法和間接法。間接法通常的做法是將待查詢圖像與一系列相似的候選圖像比較以獲得位置,這成為一種圖像檢索問題[1-3]。直接法從待查詢圖像中直接恢復相機位姿,大致可以分為如下3種方法:①假設已知待查詢圖像對應的相機位姿的先驗知識,可以得到一個粗糙的位姿預估計。先驗知識可以從定位傳感器(如GPS[1,4-5])中獲得。②利用特征點匹配[6-9]來實現(xiàn),通過計算從二維待查詢圖像中提取到的特征在三維點云模型中的對應來獲得相機位姿。這通常需要使用從SFM 或其他方法中重建的三維模型。③直接從輸入視覺數據中估計出對應的位姿信息,有標準預測技術[10]和利用卷積神經網絡(Convolutional Neural Network,CNN)的方法。
隨著深度學習的發(fā)展,神經網絡在實現(xiàn)室內或者室外場景的坐標定位問題上體現(xiàn)出很好的精度。相比于傳統(tǒng)算法,深度學習方法在處理有復雜紋理的場景、不同光照的環(huán)境、有運動模糊等挑戰(zhàn)性因素的數據集時具有良好的魯棒性。本文討論的算法屬于直接法視覺自定位中的第3種方法,即運用卷積神經網絡直接從待查詢視覺數據中估計出對應相機位姿。
2015年,Kendall等[11]提出的網絡PoseNet嘗試直接從輸入圖像恢復六自由度的相機位姿,作為使用深度學習處理視覺自定位問題的開拓性工作,使用了第1版GoogleNet作為PoseNet的基礎網絡,將該網絡的3個softmax分類器替換為1個全連接層,之后輸出位置坐標和姿態(tài)角四元數。2016年,Walch等[12]對PoseNet提取到的特征進行調整,將這些特征不直接輸出到預測器,而是作為空域LSTM的輸入序列,得到了更精確的結果??蒲腥藛T還研究了如下代表性方法:Clark等[13]在時域上運用了LSTM 結構,利用視頻幀間的時域信息來輔助預測相機位置,但僅有相機位置信息而缺少姿態(tài)信息;Kendall和Cipolla[14]提出了運用模型不確定性的貝葉斯PoseNet,在多個隨機裁剪的輸入圖像和PoseNet之間插入了一個dropout層,并為每個生成的位置建模,提升了定位精度;Melekhov等[15]提出了一種沙漏網絡結構,使用ResNet34網絡結構代替PoseNet的GoogleNet,并使用反卷積及跳躍連接,定位精度超過了其他成果;Li等[16]提出利用深度圖進行研究,相比PoseNet提升了精度,但引入了附加深度信息,由于真實場景中可能無法有效獲取深度信息(如使用數碼相機),不利于實時定位。其他方法如使用附加的語義信息及視覺里程計進行約束[17-18]、估計像素級坐標之后利用RANSAC進行匹配[19],雖然提升了算法精度,但是大幅增加了算法復雜度及需要提供的信息。
本文提出了一種編解碼雙路視覺自定位網絡(Bifurcate Localization Net,BiLocNet)結構,可以從單張RGB圖像預測相機六自由度位姿參數;該網絡使用改進的Inception-Resnet-V2作編碼器,用雙路結構解碼輸出位置和姿態(tài)參數,提出一種多尺度位姿預測器結構,從解碼后的特征圖中預測出相機位姿;由于數據集較小,其他方法[11,13,15,18,20]均利用在ImageNet上進行預訓練的模型權重來執(zhí)行權重初始化,該網絡無需預訓練即可達到優(yōu)于預訓練模型的收斂速度和精度;此外,損失函數加入同方差不確定性[21]作為目標函數,提升了網絡可訓練性。
本文提出了一種編解碼雙路視覺自定位網絡結構,如圖1所示,其由編碼器(encoder)、解碼器(decoder)和 預 測 器(estimator)組 成。首 先,BiLocNet用編碼器對輸入圖像進行編碼以提取高級語義特征;然后,采用雙路解碼器、預測器分別解碼輸出位置p和姿態(tài)q。其中,在編、解碼之間加入跳躍連接使編碼部分的空間信息可以傳遞給解碼器,對解碼過程中的空間信息缺失進行一定程度的補償。

圖1 BiLocNet結構Fig.1 Architecture of BiLocNet
編 碼 器 由 改 進 的Inception-Resnet-V2[22]組成,Inception-Resnet-V2如圖2所示。編碼器中,stem結構用于維持基礎網絡層結構的穩(wěn)定。Inception-Resnet有A、B、C共3種模塊,區(qū)別在于卷積核的尺寸、通道數和子分支。Inception-Resnet模塊使用最大值池化層及多尺度卷積層獲得不同尺度下的特征,同時結合ResNet的思想,將殘差模塊中的殘差結構替換為上述多尺度結構,既保留了Inception一貫的拓寬及加深網絡的思想,又改善了過深的網絡可能出現(xiàn)的梯度消失及梯度爆炸問題。殘差模塊還使網絡梯度回傳更加有效,從而顯著提高網絡收斂速度。Reduction模塊用于降低分辨率、提升通道數,達到甚至超越傳統(tǒng)卷積神經網絡中利用最大值池化層接卷積層得到的效果。
由于本文網絡在編、解碼之間增加了跳躍連接,為了保證跳躍連接節(jié)點的特征圖的分辨率相同,調整了池化層及部分卷積層的填充方式以適應解碼器輸出的特征圖尺寸,從而使編碼器中間層輸出特征與解碼器恢復的特征可直接相加,還調整了某些輸出通道數以避免出現(xiàn)原網絡某些層之間張量維度不匹配的情況,同時去除了圖2中的dropout層、全連接層(FC)和softmax層,使輸出的特征向量不經過分類任務的預測器而直接作為解碼器的輸入。

圖2 Inception-Resnet-V2編碼器結構Fig.2 Architecture of encoder Inception-Resnet-V2
由于編碼過程中特征圖的空間分辨率會逐步降低,導致了神經元間的空間信息被壓縮,而這種空間依賴關系對于圖像處理任務至關重要,故本文在編碼之后加入解碼器。
解碼器采用2個上卷積層,卷積核大小為4×4,步長為2,每次上卷積之后特征圖分辨率變?yōu)樵瓉淼?倍,通道數也相應降低。解碼器嘗試從高維特征中恢復特征間的空間信息,且增加了網絡的深度,對預測精度有顯著提升。同時,為了更好地保持編碼過程中的圖像細節(jié)信息,編解碼之間增加了2個跳躍連接(解碼器有2個上卷積)。引出編碼器Inception-Resnet-A、Inception-Resnet-B后的2個特征圖,與上卷積后的特征圖分別相加,實現(xiàn)跳躍連接以彌補解碼后恢復的空間信息損失。經過實驗驗證,增加解碼器提升空間分辨率對于提升自定位精度有明顯作用。
預測器是深度學習回歸任務中不可或缺的結構,解碼后的特征圖如要轉換為需要的參數,需要使用預測器。
本文提出的多尺度位姿預測器結構如圖1所示,主要分為多尺度降維(Multi-scale Reduction,MSR)模塊和全局均值池化模塊(Global Average Pooling,GAP)。如圖3所示,MSR模塊由1×1和3×3兩種尺度的卷積層組成,一共包含5個卷積層,conv代表卷積層,k代表卷積核大小,s代表步長。解碼出的信息經過第1個MSR模塊,輸出特征圖大小將變?yōu)檩斎胩卣鲌D的一半,將得到的輸出經過第2個MSR模塊,輸出特征圖分辨率再次減半。GAP模塊包含一個用于降分辨率升通道的卷積層、一個全局均值池化層及一個1×1卷積層,最終輸出一個特征矢量。
MSR模塊用于將解碼器輸出的特征進行重組,使其通過不同尺度的卷積核獲得不同的感受野,同時將這些特征進行降維升通道為接下來的預測做準備,且MSR模塊拓展了網絡的深度和寬度,有效提升了網絡性能。單尺度降維模塊(Single-Scale Reduction,SSR)結構如圖4所示。

圖3 MSR模塊結構Fig.3 Module architecture of MSR

圖4 SSR模塊結構Fig.4 Module architecture of SSR
目前,視覺自定位網絡中位置與姿態(tài)參數均從單路網絡輸出,未考慮位置和姿態(tài)的區(qū)別,本文根據位置與姿態(tài)的不同特性,采用雙路結構分別處理位置參數和姿態(tài)參數。
視覺自定位輸出六自由度參數,包括3個位置和3個姿態(tài)角度。位置與姿態(tài)有以下不同:①相機的位置和姿態(tài)具有不同的量綱;②相機位置和姿態(tài)的改變反映在二維圖像中是不同的,位置的變化將導致圖像中物體間的遮擋關系及像素位置發(fā)生變化,而姿態(tài)的變化導致了視角的變化。真實世界在圖像中的投影對于位置和姿態(tài)變化的表現(xiàn)是不同的,根據投影關系可知,視角變化會使物體在圖像中的大小和形狀發(fā)生變化。
綜上可知,不分離位置和姿態(tài)而直接單路輸出會導致兩者間互相干擾,使網絡無法精確解算位姿信息,故本文將位置和姿態(tài)考慮為2種任務,設計了雙路網絡來解決此問題。多任務學習通過從共享的特征表示中同時學習多個任務的特定表示,提高了學習效率及預測精度。多任務學習是一種任務之間的知識共享和遷移,從一個任務中學習得到的表示通常可以幫助改善其他任務。BiLocNet將編碼器輸出的特征矢量分裂為位置和姿態(tài)兩路子任務網絡。
相機位姿中,位置p由相機在世界坐標系中的坐標[x,y,z]表示,姿態(tài)q由一個四元數q=[v,a,b,c]T表示。
四元數可以表示三維空間中任意一個旋轉,避免了用歐拉角表示出現(xiàn)的萬向鎖現(xiàn)象。通過歸一化為單位長度,任意的四維矢量可以很容易地映射到合理的旋轉。使用四元數作為姿態(tài)角的優(yōu)化目標比求取旋轉矩陣要容易得多,避免了旋轉矩陣增加的計算量及計算標準正交化矩陣。給定一個單位長度的旋轉軸[i,j,k]和角度θ,對應的四元數為

給定一個歐拉角[φ,ρ,ω],[φ,ρ,ω]為沿著x-y-z坐標軸依次旋轉的角度,將其轉換為四元數的方法如下:

預測器分別輸出一個維度為3的預測矢量^p和一個維度為4的預測四元數^q。預測誤差如下:

式中:τ為距離范數。單位化的四元數存在于四維空間的球面上,當預測四元數^q足夠接近q時,球面距離和歐氏距離的差異可以忽略[11],因此本文選擇歐氏距離作為誤差函數。在范數的選擇上,由于L1范數對于所有樣本點誤差都以相同權重優(yōu)化,而L2范數則給予不同的誤差以不同的優(yōu)化權重,且由于L1范數的一階導數在極小值點附近也保持固定,損失函數值震蕩較大。本文實驗亦證明L2范數較優(yōu),故選用τ=2作為損失函數的范數。
單任務損失函數g定義為

式中:L為式(3)或式(4)所示歐氏預測誤差;σ作為模型的同方差不確定性[23]被加入損失函數中,設置為可訓練參數。同方差不確定性是描述系統(tǒng)固有噪聲的指標,如傳感器噪聲,特點是增大數據量也無法減小這種系統(tǒng)噪聲。加入σ有助于增加網絡可訓練性。
為避免損失函數出現(xiàn)負值,未采用初始化σ2方法[21],而改為初始化σ,使正則項落在正實數區(qū)間,從而使網絡收斂更加穩(wěn)定。由于將位置和姿態(tài)看成2個任務,總損失函數定義為

由于多任務之間的損失函數尺度大小不同,需要有不同權重來進行平衡以利于網絡訓練,所以本文的損失函數加入了不確定性。在訓練過程中,網絡自動學習平衡位置和姿態(tài)損失項的最佳權重σp、σq,既可以保證穩(wěn)定優(yōu)化Lp和Lq,同時作為正則項被加入損失函數又不會因為σ太大而使數據項權重太小導致網絡無法收斂。
為便于與其他算法進行比較,使用Microsoft提供的7-scenes室內場景數據集[10]來評價本文BioLocNet結構。7-scenes數據集廣泛運用于相機位姿估計任務,其包含7個場景,同時提供RGB及原始深度圖。圖像由KinectRGB-D傳感器采集,真實位姿標注由KinectFusion[24]計算得出。每個場景的圖像由分辨率為640×480的圖片組成,被劃分為訓練集及測試集。場景具有復雜的紋理及光照信息,同時視角的改變和運動模糊也為相機位姿估計帶來極大挑戰(zhàn)。圖5展示了7個場景的數據集圖片,每個場景隨機采樣一張展示。
按照官方推薦劃分的訓練集及測試集來訓練和測試每個場景。本文使用 GPU 型號為NVIDIA1080 Ti,在內存為32GB、CPU為i7-6700的計算機上進行實驗。程序在tensorflow框架下運行,初始學習率設為10-3,衰減率設為0.955,優(yōu)化器使用Adam。在預處理階段,每幅圖像先縮放到343×343,隨后減去每個場景圖像均值再除以標準差,最后在線隨機裁剪到300×300。在測試階段,使用圖像的中心裁剪進行測試。訓練時,每個epoch將數據集順序打亂。損失函數權重初始化為σp=0,σq=-1,batchsize設為16,迭代20×103~100×103步,訓練網絡直至收斂。
選用與其他算法相同的評價標準來評估本文的實驗結果。通常的做法是分別求出測試集預測結果中位置和姿態(tài)的中位數進行比較。表1展示了本文結果與其他目前最先進算法結果的對比,所使用的網絡為本文提出的BiLocNet。
表1給出了7個場景的測試誤差,表中粗黑體數據表示該數據在橫向對比中最優(yōu)。實驗結果表明,本文網絡的表現(xiàn)超過了目前最先進的輸入為RGB圖像的同類型算法,有3個場景的位置精度達到了最優(yōu),6個場景的姿態(tài)精度超越其他算法,平均精度值也超越了其他算法。由實驗結果可以看出,得益于將位置和姿態(tài)分別進行預測的雙路網絡,預測出的姿態(tài)精度大大超越了其他算法;且實驗發(fā)現(xiàn),只使用單路解碼器及預測器的結構(Hourglass)在 Chess場景下位置誤差為0.15 m,姿態(tài)誤差為6.02°,比使用雙路結構位置精度下降15%,姿態(tài)精度下降17%。實驗結果證明了本文算法雙路結構的必要性和有效性。

位置誤差/m,姿態(tài)誤差/(°場景)PoseNet[11] Bayesian DS[15] LSTM-Pose[13] Vid Loc[12] Hourglass[14]BiLocNet Chess 0.32,8.12 0.28,7.05 0.24,5.77 0.18,N/A 0.15,6.17 0.13,5.13 Fire 0.47,14.4 0.43,12.52 0.34,11.9 0.26,N/A 0.27,10.84 0.29,10.48 Heads 0.29,12.0 0.25,12.72 0.21,13.7 0.14,N/A 0.19,11.63 0.16,12.67 Office 0.48,7.68 0.30,8.92 0.30,8.08 0.26,N/A 0.21,8.48 0.25,6.82 Pupkin 0.47,8.42 0.36,7.53 0.33,7.00 0.36,N/A 0.25,8.12 0.25,5.23 Kitchen 0.59,8.64 0.45,9.80 0.37,8.83 0.32,N/A 0.27,10.15 0.26,6.95 Stairs 0.47,13.8 0.42,13.06 0.40,13.7 0.26,N/A 0.29,12.46 0.33,9.86均值 0.44,10.44 0.35,10.22 0.31,9.85 0.25,N/A 0.23,9.69 0.23,8.16
預測器的結構直接決定了解碼后的特征如何映射為位姿矢量。
本文在網絡解碼部分嘗試過全連接預測器,結構如圖6所示,即將解碼器的輸出直接通過一個特征向量大小為2 048的全連接層做預測,發(fā)現(xiàn)其精度較差。這種情況的出現(xiàn)是因為全連接層將特征矩陣展開為一維特征向量,會損失特征矩陣的空間結構,更適用于分類任務,所以應避免預測器出現(xiàn)全連接層。本文進一步嘗試使用GAP預測器,結構如圖7所示,即將解碼器輸出使用卷積層降分辨率升通道,之后的全連接層替換為全局均值池化層,由于GAP避免了空間信息的損失及不必要的特征映射,并將解碼器輸出特征矩陣進行了調整,所以模型效果大幅提升。
為了比較不同預測器模型之間的差異,選擇數據集中的一個Chess場景進行對比實驗,結果見表2,其中多尺度位姿預測器指本文使用帶有MSR模塊的多尺度位姿預測器。
對于位置和姿態(tài)估計任務來說,使用MSR增加了網絡的深度及寬度,其多尺度卷積核可以重組不同空間尺度的特征信息,保證了較高分辨率的特征圖經過有效調整之后合理地映射為位姿矢量。經實驗表明,將MSR(見圖3)替換為SSR(見圖4),精度下降8%,證明了MSR多尺度結構的有效性。

圖6 全連接預測器Fig.6 FC estimator

預測器 位置誤差/m 姿態(tài)誤差/(°)全連接預測器0.26 8.03 GAP預測器 0.14 5.21多尺度位姿預測器0.13 5.13
神經網絡可以看為一個復雜的高維函數,而損失函數的選擇是優(yōu)化此高維函數至關重要的步驟。PoseNet的α權重損失函數定義為[11]

式中:α為平衡位置項與姿態(tài)項的權重。α權重損失函數的缺點是需要手動設置,欲達到最優(yōu)效果,通常會使用網格搜索法來確定。在沒有先驗知識支持的條件下,耗時巨大且表現(xiàn)往往并非最佳。
本文引入了可訓練的權重(σ權重)以自動地學習不同任務間的平衡(式(7)),效果優(yōu)于α權重損失函數,在無MSR的BiLocNet上位置精度提升了10.5%,姿態(tài)精度提升了13.9%。數據見表3,同樣使用Chess子數據集作為說明。

損失函數 位置誤差/m 姿態(tài)誤差/(°)0.19 6.55 σ權重α權重0.17 5.64
遷移學習指通過預訓練從大數據集的分類任務中學習到特征的表示,將保存的權重模型加載到其他任務的網絡作為初始化權重,從而加速網絡收斂的一種方式。多數研究都借助于遷移學習的預訓練模型初始化網絡權重,但在本文網絡結構下,無預訓練的方式優(yōu)于有預訓練的方式,這是因為:①分類數據集與位姿估計數據集樣本分布及內容相差較大,遷移學習得到的特征表示由于是從分類數據集中學得,用其作為初始化權重反而對位姿估計問題是有害的。②進行預訓練需要花費較長的時間,使用數據集增強及增加迭代輪數等手段實現(xiàn)方便快速且在本文討論問題上精度更優(yōu)。何凱明等[25-26]也在研究成果中提到對于非分類任務,遷移學習可能并不會取得更好的效果。本文在數量為100 000的部分ImageNet數據集上進行編碼器的預訓練,并將訓練好的權重作為網絡訓練前的權重初始化進行遷移學習。有無預訓練的對比結果如圖8所示。

圖8 有無預訓練的BiLocNet損失函數曲線Fig.8 Loss function curves of pre-trained and non-pre-trained BiLocNet
可以看出,無預訓練具有收斂速度快、收斂精度高的特點,可以快速使網絡收斂到最小值附近。表4展示了有無遷移學習的結果對比。表中使用Fire場景作為測試場景,示例圖片見圖5。定性分析和定量分析結果均表明,在本文網絡上使用預訓練模型對結果沒有提升,甚至有所下降。

有無遷移學習 位置誤差/m 姿態(tài)誤差/(°)0.32 10.64無有0.29 10.48
1)本文算法可實現(xiàn)較為優(yōu)異的預測性能,在室內數據集上可將平均位置誤差縮小至0.23 m,平均姿態(tài)誤差縮小至8.16°。
2)跳躍連接和解碼器可以補充編碼過程中損失的空間信息,與多尺度位姿預測模塊相互配合,可以大幅提升預測精度。
3)實驗表明,由于數據集差異較大,遷移學習對于本文算法效果不佳。損失函數中加入可訓練權重使網絡的位姿精度平均提升了12.2%,且可以避免花費大量時間手動選擇超參數。
4)研究待解決問題的特性有助于提升實驗結果,本文算法挖掘位置和姿態(tài)的特性和區(qū)別,針對性地設計雙路網絡,使位姿精度平均提升了14%。
此外,依然有幾個值得繼續(xù)研究的問題:多任務之間通過訓練得到的損失函數權重是否是最優(yōu)解;解碼器恢復特征圖到什么程度的空間分辨率是最佳效果;2個子任務之間是否可以通過交互提升性能?下一步將繼續(xù)研究這些問題。