秦 超,閆子飛
哈爾濱工業大學 建筑學院 媒體技術與藝術系,互動媒體設計與裝備服務創新文化和旅游部重點實驗室,哈爾濱 150001
同時定位與建圖(simultaneous localization and mapping,SLAM)技術是計算機視覺的一個重要分支領域[1],其中結合深度學習方法直接估計場景深度和視覺里程計正越來越受到廣泛關注。
較早的研究[2-5]通過特征匹配的方法來估計相機之間的運動,計算成本很高。LSD-SLAM[6]提出了一種通過基于李代數的直接法,能夠實時計算相機的位姿并且構建出全局的半稠密地圖。ORB-SLAM[7]提出一種基于關鍵幀提取的單目SLAM算法,使用多線程進行特征匹配和全局優化,是一個較為完整的SLAM系統。通過結合深度學習的方法,Zhou等[8]提出一種建立在單目相機的無監督生成框架直接估計圖像深度和相機位姿。在此基礎上,Vijayanarasimhan等[9]提出了添加額外的模塊,學習場景中的多個物體的剛體運動以減少估計的誤差。Bian等[10]提出了一種尺度一致性的約束方法,解決單目視覺尺度不一致的問題。而Yin等[11]則通過添加額外的光流,估計車輛、行人的運動,與圖片深度估計和相機位姿估計協同工作。更進一步,Zou等[12]通過對畫面進行分割,在運動部分計算光流、靜止的背景區域計算相機變換,分別計算兩部分的光度誤差,從而得到最終的損失函數。此外,Godard等[13]提出一種基于雙目圖像左右視圖的一致性約束來得到深度估計,達到了主流的深度估計水平。但是這些方法往往需要更多的監督信息,不但獲取的成本更高,也在一定程度上加重了訓練的負擔,并且使得估計結果對訓練集的依賴較高。
這些無監督的方法主要依靠光度誤差作為約束,而光度誤差又是建立在灰度不變假設之上,因此在違背該假設的區域產生的估計結果誤差較大。為了處理這些區域,Yang等[14]提出一種基于貝葉斯概率的不確定性估計方法,除了計算每個像素點光度誤差,還同時估計這個點光度誤差的不確定性方差,在一定程度上對不滿足灰度不變假設的區域進行彌補。但是他們的不確定性估計設計太過簡單,而且只能在物體邊緣處得到較好的不確定性估計結果,難以對整片違背灰度不變假設的區域進行處理。
本文提出了一種非監督的深度視覺里程計方法AUDVO,以端到端的方式對深度估計網絡和相機位姿估計網絡進行優化,并且通過圖像對齊操作和不確定性估計提高了網絡的魯棒性。本文主要貢獻如下:
(1)通過圖像對齊網絡對相鄰圖像之間由于相機曝光引起的圖像整體亮度變化進行處理,并且確定全局的運動尺度來對相機位姿的估計結果進行約束,可以在一定程度上解決單目相機尺度不一致的問題。
(2)通過不確定性網絡估計得到光度誤差的方差,減少了運動物體和被遮擋區域對估計結果的影響。為了得到更具魯棒性的深度估計和不確定性估計結果,結合卡爾曼濾波的原理,將輸入圖像水平翻轉后得到對應的深度估計和不確定性估計結果,然后再次翻轉,并與正常計算的結果進行融合得到最終的輸出。
(3)在公共數據集KITTI上進行大量實驗,證明了本文方法的有效性。對于圖像深度的估計結果來說,可以保證物體邊緣處輪廓完整,深度估計準確清晰;而對于相機位姿的估計結果來說,也達到了傳統單目VO的水準。
傳統的視覺里程計求解依靠特征點的提取和匹配來實現,各個模塊之間高度耦合,算法復雜度高[15]。而在本文的實現中,直接通過神經網絡估計場景深度和相機位姿,并且使用圖像對齊和不確定性預測對整體框架進行優化,保證了灰度不變假設的成立,不但降低了算法的復雜度,還提升了估計的精度。
通過非監督學習的方式進行估計時需要計算光度誤差對網絡進行優化,其基本假設是同一點在不同圖像中的灰度是一致的。但是在實際情況中,物體運動不可避免,這就會產生離散的深度值,在對遠距離的物體進行深度估計時這種情況尤其明顯[16]。并且物體的運動還會形成遮擋,使得估計得到的深度圖中這部分出現空洞。一些現有的方法[11-12,17-18]通過分割運動物體和靜態背景以及加入光流估計的方法,在一定程度上減少了運動對灰度一致性假設的影響。此外,由于光照變化在小尺度深度圖上估計產生的空洞區域會在訓練過程中因為插值操作被進一步放大,使得最終的估計結果較差。光度誤差的計算公式如下:
其中,p表示像素坐標,It和^分別表示t時刻和s時刻的圖像。這里的損失是絕對值誤差,在已知從t時刻到s時刻相機的運動下,有:
其中,K表示相機的內參,Dt是估計得到的t時刻對應圖片的深度圖,Tt→s表示相機運動的變換矩陣,pt和ps分別是t時刻和s時刻對應圖片的像素點。由于像素點并不是連續的,對于式(2)直接計算出的ps值,還需要通過對最近鄰的4個像素點進行插值得到近似的
對于場景中違背灰度不變假設的區域,Kendall等[19]提出可以將這些區域視為觀測噪聲,并且在計算損失函數時消除這些噪聲帶來的影響,在假設噪聲是Laplacian分布的前提下,深度預測的最大似然可以表示如下:
其中,y′表示預測的深度值,y表示真實值,Σ表示誤差項的方差。在光度誤差的計算中,y是目標圖像中的像素強度,Σ是通過自監督的方式學習得到的。通過添加不確定估計,式(1)的誤差函數改寫為:
在深度圖中,紋理缺乏區域會出現空洞以及物體的邊緣模糊等問題。為此,Yang等[20]提出使用分層技術,輸出不同精度的結果來解決這個問題,這也證明了更高的圖像分辨率會提高深度估計的準確性。還有一些工作[21]提出利用反卷積網絡和雙邊插值的方法建立深度圖像金字塔以得到更高分辨率的深度圖。但是簡單的插值操作效果并不好,還會使得在小尺度深度圖中預測得到的空洞區域被進一步放大。為此本文提出添加超分辨網絡對深度圖像金字塔進行上采樣,得到質量更佳的高分辨率深度圖并且計算不同尺度下的光度誤差之和。
場景中光照的變化使得實際情況中不同圖像之間并不嚴格滿足灰度不變假設,因此在計算光度誤差前,先將目標圖像和源圖像進行亮度對齊,這可以通過a和b兩個參數來實現,計算公式如下:
其中,參數a和b是通過自監督的方式從網絡中學習得到的。使用經過投影變換后的源圖像和經過亮度對齊后的目標圖像計算光度誤差。對齊后的圖像表示為Ias,bs t=at→sIt+bt→s,將式(4)表示的誤差函數改寫為:
單目視覺還存在尺度不確定性的問題,通過位姿估計網絡得到的相機運動Tt→s只是局部VO,缺乏全局一致性。為此,通過反向合成的形式預先將源圖像對齊到目標圖像上,得到一個預估的全局運動尺度,由于每段序列在估計的時候都會預先經過這層反向合成層進行對齊,可以確保不同序列估計得到的相機運動是尺度一致的。
同樣,在尺度上進行的圖像對齊操作也不需要監督信息,位姿網絡會在估計的時候學習到一個相機運動的全局尺度,并且通過光度誤差約束對深度估計網絡和相機位姿估計網絡進行優化。
整體的網絡結構如圖1所示。在深度估計模塊,主體部分是基于DispNet[22]的編-解碼器結構,通過跳躍連接和上采樣得到多尺度的預測結果。深度估計網絡的輸入是單張圖片,在經過對稱的7層卷積和7層上采樣網絡后得到4個不同尺度的深度圖。網絡最后一層通過sigmoid進行激活以限制輸出范圍,即假設卷積層輸出x,最終輸出1/(γ*sigmoid(x)+β),其中γ和β的值分別是10和0.01。
在上采樣部分,使用的是ESPCN[23]超分辨率網絡,將輸入圖片先后通過4層卷積和1層像素重置(pixel shuffle)并且使用sigmoid激活得到兩倍分辨率的深度特征。
相機位姿估計模塊的骨干部分是PoseNet[24],輸入的是連續的幾幀圖片,經過7層卷積后接1×1的卷積層輸出6自由度的相機位姿。圖像對齊模塊是嵌入位姿估計網絡當中的,在進行亮度對齊時,共享位姿估計網絡的前5層卷積層的參數,然后經過兩層卷積得到兩個亮度對齊參數a和b。而在進行尺度對齊時,使用和Jaderberg[25]相同的結構,先讓源圖像通過STN層進行仿射變換以確定全局的運動尺度,然后將目標圖像和源圖像聯結送入位姿估計網絡。
為了去除動態區域對結果的影響,通過一個不確定性估計網絡表示光度誤差的方差。不確定性估計網絡和深度估計網絡共享前5層卷積層參數,然后采用和深度網絡類似的上采樣操作,通過反卷積層得到不同尺度的不確定性估計。
最終的損失函數是由重建誤差和正則化誤差構成,所有誤差都是在4個尺度下分別計算然后求平均值,表示為:
其中,重建誤差的計算表示為:
因為在式(6)中對數的計算有可能讓該項損失為負值,影響訓練甚至無法收斂,所以通過網絡直接學習表示不確定的σ2,這樣原始的光度誤差的權重就是1/exp()σ2。
正則化誤差是為了提高整體的魯棒性,保證估計的深度和位姿準確,表示為:
Lsmooth是平滑損失項,通過計算圖像的拉普拉斯算子對估計得到的深度圖進行限制,表示為:
其中,?2表示對深度圖中的像素點求二階微分。
Lab是為了限制亮度對齊參數引入的正則化項,表示為:
實驗在KITTI數據集上進行,通過pytorch框架實現,從深度估計和相機位姿估計兩方面對結果進行評測,同時通過消融實驗對各個模塊的有效性進行驗證。使用的硬件設備為Intel?Xeon?W-2123 CPU@3.60 GHz,顯卡是12 GB顯存的NVIDIA GeForce RTX 2080 Ti。
在實際的訓練過程中,選取連續的5張圖片序列輸入位姿估計網絡,指定最中間的圖片為目標圖像,其余相鄰的圖片作為源圖像。深度估計網絡輸入的只有目標圖像,輸出的是對應的逆深度圖,按照Poggi等[26]的想法,在進行深度圖估計的時候,除了正常的深度圖,還會計算一個水平翻轉后的圖像對應的深度圖,然后將深度圖翻轉回來與正常得到的深度圖進行融合。如果正常得到的估計和不確定性為d1和σ1,翻轉后的估計結果是d2和σ2,根據卡爾曼濾波的原理,融合后的不確定性和方差表示為(σ2d1+σ1d2)/(σ1+σ2)和σ1σ2/(σ1+σ2)。訓練過程使用Adam[27]優化器加速收斂,參數設定β1為0.9,β2為0.999。初始學習率為2E-4,mini-batch的大小設置為4,動量(momentum)設為0.9,權值衰減5E-4,訓練時的圖片分辨率為416×128。
實驗在KITTI數據集進行,預先將圖片分辨率處理成416×128。和Eigen等[28]的設置一樣,首先去除相鄰兩幀之間沒有運動的圖片,然后從數據集中分別劃分出40 378、3 994張圖像序列和697張圖片作為訓練集、驗證集和測試集用于評價深度圖估計。評價的指標包括:絕對相對誤差(abs_rel)、平方相對誤差(sq_rel)、均方根誤差(rmse)和對數平方根誤差(log_rmse),這些數值越小表示結果越好;預測準確度小于閾值1.25、1.252、1.253的像素點占總像素的百分比,這些數值越大結果越好。而評估相機位姿估計性能使用的是KITTI odometry中的序列09和序列10,通過絕對軌跡精度(ate)比較估計的相機運動軌跡和真值之間的差異,數值越小表示結果越好。
為了驗證深度估計的準確度,和其他基于深度學習的估計方法進行對比。其中Sfmlearner[8]和本文的工作最相似,也是最早提出通過深度網絡和位姿網絡共同優化來提升兩個網絡性能的方法。深度估計的對比結果如表1所示,可以看出和傳統的單目方法相比,各項指標上的表現都更優,但是整體表現不如一些網絡設計更復雜的方法。如Godard等[13]通過左右視圖的真實位姿信息作為監督信號,提升了估計的準確性;而GeoNet[11]、DF-Net[12]和CC[17]則是利用光流網絡處理場景中的運動物體,減少深度估計時這些區域產生的影響。圖2更直觀展示了不確定性網絡的可視化結果,其中高亮區域表示估計的不確定性較高。可以看出場景中的車輛、樹木等相較于房屋有更高的不確定性。而且在強曝光和大面積陰影區域的不確定性也較其他部分更高,這也說明了為什么通過計算光流和殘差估計的不確定性可以有效提高估計的準確度。

表1 KITTI數據集上的深度圖估計對比結果Table 1 Comparison of depth estimation on KITTI dataset
在相機位姿估計方面,除了基于深度學習的方法,還和傳統的ORB-SLAM和DSO方法進行對比,這兩者都是非常成熟的SLAM框架,可以適用于單目、雙目、深度攝像頭等多種條件,被廣泛移植到了許多的實際項目中。相機位姿估計的對比結果如表2所示,其中ORBSLAM的full和short分別表示在整段視頻和選取較短的序列上運行的結果。

表2 KITTI odometry上的絕對軌跡誤差對比結果Table 2 Comparison of absolute trajectory errors on KITTI odometry
從對比結果可以看出,提出的AUDVO超越了傳統的估計方法和僅依靠深度估計網絡對位姿估計進行優化的方法,并且達到了與GeoNet[11]、DF-Net[12]和CC[17]這些通過光流估計物體運動的方法相近的水平,證明了AUDVO對于處理場景中的運動物體和被遮擋的區域有相當的魯棒性。
圖3展示了估計得到的相機軌跡的可視化結果,其中藍色曲線是數據集提供的真實運動軌跡,可以看出相較于其他方法,AUDVO在序列09上更加接近真實的軌跡并且沒有出現明顯的軌跡漂移,這驗證了圖像對齊網絡的有效性,可以捕獲運動的全局尺度并且減少誤差的積累。但是在序列10上的表現就顯得稍微遜色一些,雖然還是優于傳統的ORB-SLAM方法和基于深度學習的Sfmlearner方法,但卻不如添加了光流估計的DF-Net更加接近真實值。
為了證明本文提出的方法中各個模塊的有效性,確認其對于最終結果的貢獻,在保證其他部分一致的情況下從深度估計和位姿估計兩方面設計消融實驗。基準線(baseline)表示DepthNet和PoseNet構成的骨干網絡,通過雙線性插值進行上采樣操作。在此基礎上分別添加超分網絡(SR)、圖像亮度對齊(IA-B)、圖像尺度對齊(IA-S)和不確定性估計網絡(U-CNN)來驗證各部分的有效性。
表3是深度估計的消融實驗結果,通過對比可以看出添加的不同模塊都提高了估計的準確度。其中使用超分網絡代替簡單的雙線性插值后,估計的準確度有了顯著提高(對比B和B+SR),而相比之下圖像對齊模塊的提升效果就沒有那么明顯,而且通過比較B+SR、B+SR+IA-B和B+SR+IA-S可以發現,在進行圖像對齊的時候,亮度對齊模塊比尺度對齊模塊更能提高深度估計的準確度,這說明了相較于相機運動的細小偏差,相鄰圖像之間的亮度變化更能影響對于深度的估計。這也再次驗證了灰度不變假設對于計算光度誤差的重要性。為了處理運動物體和被遮擋區域這些明顯違背灰度不變假設的部分,通過不確定性網絡對每個像素點深度估計的不確定性進行建模,并且將圖像水平翻轉后預測得到的深度估計和正常得到的估計融合以進一步提高整體的魯棒性。通過對比實驗B+SR+IA-B+IA-S和B+SR+IA-B+IA-S+U-CNN的結果,證明了這樣的方法大幅提升了網絡的預測能力。

表3 深度估計的消融實驗結果Table 3 Ablation results of depth estimation
圖4更加直觀展示不同模塊對深度估計的影響。第一行是KITTI數據集的原始數據,第二行是基準線(B)的估計結果,第三行是基準線加上超分網絡(B+SR)的結果,第四行和最后一行分別是在第三行的基礎上添加了圖像對齊模塊(B+SR+IA-B+IA-S)和完整的AUDVO的估計結果。從結果中可以看出,添加超分網絡后深度圖中的更多邊緣細節部分被保留下來,車輛、樹木、電線桿等物體的輪廓也更加清晰;而通過加入圖像對齊模塊,深度圖中的細節變得更加豐富,說明網絡可以很好區分較遠處的物體邊緣而不是將其視為一個整體;不確定性網絡的加入也在一定程度上提高了對于陰影區域和更遠處物體的區分能力,并且保證了物體輪廓的完整性。
表4是位姿估計的消融實驗結果,展示了缺少不同模塊后在序列09和序列10上的絕對軌跡誤差結果。可以看出在缺少圖像對齊模塊之后估計的結果下降明顯,這是因為圖像對齊模塊對不滿足灰度一致性假設的區域進行了修正,使得估計的誤差更小,而且通過估計全局的運動尺度作為約束,有效地限制了誤差的累積。相比之下,缺少不確定性網絡和超分網絡對于位姿估計準確度的影響就小了很多,這說明了即使在局部物體邊緣深度估計不夠清晰甚至有較大的錯誤,只要在全局這種預測能力是保持一致的,就不會對相機位姿的估計產生較大的影響。

表4 位姿估計的消融實驗結果Table 4 Ablation results of pose estimation
本文提出了一種基于深度學習的單目視覺里程計方法,稱為AUDVO。可以通過非監督的方法估計出每幀圖像的深度和其對應的相機位姿。考慮到實際場景的復雜情況對于計算光度誤差的影響,通過添加圖像對齊模塊來處理圖像之間的亮度和尺度的不一致,對于運動物體、場景受遮擋部分以及天空、地面等大面積紋理缺失部分,通過不確定網絡估計處理這部分像素點,提高了深度和相機位姿估計的準確度,使結果更加具有魯棒性。在KITTI數據集上的實驗證明了AUDVO的有效性,不但可以很好預測物體邊緣部分的深度值,在估計相機位姿的時候也超過了傳統的DSO方法。但是單目視覺始終存在尺度模糊的問題,從實驗結果看來,對于遠處物體之間的距離估計還是存在較大的誤差。在之后的研究中,還需要結合多種傳感器或者語義分析來確認真實的距離和進行復雜的定位,并且通過多任務學習將傳統SLAM方法和深度學習的思想結合,進一步提高算法的性能。