浙江大學章國鋒:視覺SLAM技術及應用
2018年7月,中國圖象圖形學學會主辦,深藍學院承辦的“第一屆全國SLAM技術論壇”,邀請浙江大學的章國鋒老師作《視覺SLAM技術及應用》的報告。現將內容整理公佈,希望更多SLAMer受益。

SLAM(Simultaneous Localization and Mapping)意為同時定位與地圖構建,被廣泛應用於機器人、自動駕駛和增強現實等領域。視覺SLAM是指以視覺感測器為主的SLAM技術,也是最常見的一種SLAM技術。本文首先介紹了視覺SLAM技術及其面臨的實際問題,然後介紹了本課題組近年來為了解決這些問題所做的五個代表性工作(基於非連續特徵跟蹤的運動恢復結構系統ENFT-SfM、大尺度單目實時SLAM系統ENFT-SLAM、面向動態場景的RDSLAM、面向移動裝置的RKSLAM以及基於RGB-D感測器的稠密SLAM系統RGB-D SLAM)。最後展示了基於視覺SLAM技術所做的一些應用,並對視覺SLAM技術的未來發展趨勢進行了討論和總結。
一、視覺SLAM簡介
SLAM這個術語最早出現在機器人領域,它是指在未知環境下,同時估計裝置的位姿和環境的三維結構。它被廣泛應用於增強現實(AR)、虛擬現實(VR)、機器人、自動駕駛等領域。根據地圖的稠密程度,SLAM可分為稀疏SLAM和稠密SLAM。

SLAM技術經過多年發展,其框架目前已趨於穩定(圖1),即並行跟蹤和建圖(最早由PTAM工作提出來)。該框架包括前臺跟蹤(Tracking)和後臺建圖(Mapping)執行緒:前臺根據感測器輸入的資料,實時地跟蹤和估計相機的位姿,後臺則對地圖進行區域性或全域性的優化,並進行迴路閉合,消除誤差累積。系統實時地輸出每個時刻裝置的位姿和三維地圖。
視覺SLAM的感測器主要是攝像機,分為單目攝像機、雙目攝像機和多目攝像機。廣義上的視覺SLAM是指以視覺感測器為主、其它感測器(例如IMU、GPS、深度攝像機等)為輔的技術。相比於其它技術,視覺SLAM技術的主要優勢在於它的成本低、小尺度場景下定位精度高、不需要預先佈置場景。
視覺SLAM技術的理論基礎是多檢視幾何(Multi-View Geometry)。根據多檢視投影方程,我們知道空間上的某個三維點在影象平面上的投影與其對應的觀測點理想情況下應該是相同的,但實際上由於噪聲等因素的影響會存在重投影誤差。通過最小化重投影誤差可以求解出攝像機的位姿和點的三維位置。視覺SLAM技術經過多年發展,其理論已經成熟,但在實際複雜場景應用時卻會遇到以下幾方面的挑戰:
• 如何處理迴圈迴路序列和多視訊序列?
• 如何在大尺度場景下實現高精度實時定位?
• 如何在動態場景下穩定跟蹤?
• 如何應對快速運動和劇烈旋轉的情況?
圍繞這些問題,我們課題組在過去幾年主要做了以下五個方面的工作。
1、基於非連續性跟蹤的運動恢復結構系統ENFT-SfM
運動恢復結構(Structurefrom Motion,簡稱SfM)是指根據輸入的視訊序列或多張影象,自動地恢復出攝像機位姿和場景的三維結構。運動恢復結構首先需要解決特徵匹配問題。如果特徵匹配的結果不好,後面的求解結果就會不穩定。
第一個需要解決的問題:如何高效地匹配不同子視訊序列的同名特徵點。 我們提出了一個高效的非連續特徵跟蹤方法ENFT,分為連續幀特徵跟蹤和非連續軌跡匹配兩個步驟。第一步針對連續幀的特徵跟蹤,我們提出了兩遍匹配方法。第一步先採用SIFT特徵匹配方法得到若干正確的匹配點,再假設場景可以用多個平面近似表達,通過求解出多個單應性矩陣來對影象進行矯正和提供更好的起始點來幫助在第一遍匹配中沒有找到對應點的特徵點重新找到匹配點,這樣可以有效延長連續幀上的特徵點跟蹤軌跡。第二步針對非連續幀的特徵軌跡匹配。考慮到暴力匹配計算複雜度非常高,無法處理長視訊序列。為此我們提出先快速估計一個粗略的匹配矩陣:對連續幀跟蹤得到的特徵點軌跡,採用對各幀描述量取平均的方法得到軌跡的描述量,並用基於分層的K-means方法將描述量相似的特徵軌跡聚類到同一個組裡,然後根據特徵軌跡之間的可能匹配關係推測出各幀之間的相似關係,從而得到匹配矩陣的一個粗略估計。但因為這種匹配並不精確,所以得到的匹配矩陣僅是一個對幀間相似度的近似估計。因此,完全信任匹配矩陣選取影象對進行匹配是不可行的,且計算效率低。為此,我們提出將特徵匹配和匹配矩陣的優化同時迭代地進行:
1)根據選擇的影象對的特徵匹配結果對匹配矩陣進行優化;
2)根據更新的匹配矩陣更可靠地選擇出有公共內容的影象對進行特徵匹配。
該方法可以非常高效地將有公共內容的影象對找出來並進行匹配,幾乎沒有冗餘的計算,而且對初始匹配矩陣不敏感。然後根據匹配矩陣。實驗證明該方法對初始匹配矩陣的要求非常低,非連續幀之間的特徵匹配的複雜度從跟幀數成平方關係降到了跟具有公共特徵點的影象對的數目成線性關係。
第二個需要解決的問題:如何高效地全域性優化,及時消除累積誤差。 集束調整因為要把所有的攝像機引數和三維點一起進行優化,所以對於大資料量來說,往往變數數目非常大,迭代優化速度非常慢。如果每次只優化區域性一小部分,而固定其餘部分,則容易陷入區域性最優解。如果採用位姿圖(Pose Graph)的策略,先消去三維點再只對攝像機位姿進行優化,雖然優化的變數數目減少了,但是在對三維點進行消元的過程中由於線性化帶來的誤差可能會導致優化結果不理想。
為此,我們提出了一個基於分段的集束調整方法。我們把長視訊序列分解為若干短視訊序列,再對每個短視訊序列獨立進行SfM,然後把它們對齊。每個短視訊序列的攝像機引數和三維點整體進行7個自由度的相似變換(旋轉3個自由度、平移3個自由度和尺度1個自由度)。我們根據公共特徵點對齊每段視訊序列,如果對齊過程中誤差較大,那麼需要找到使能量下降最快的分裂點,把序列進一步分裂,增加優化的自由度。重複上述步驟直至重投影誤差小於閾值或不能再分裂為止。基於分段的集束調整方法是一個從粗到細(Coarse-to-Fine)的優化過程,不容易陷入區域性最優解,而且收斂速度很快。

如(圖2)是一個例子,我在自己小區拍了6段長視訊序列,總共將近10萬幀,在一臺PC上用SIFT運算元進行特徵匹配(使用GPU加速)耗時74分鐘,SfM求解耗時16分鐘,平均速度達17.7fps。這裡有一個對比,中間是Visual SFM的結果,它用我們的特徵匹配結果,然後進行求解,在GPU加速的情況下,SfM求解需耗時57分鐘。而我們的求解是在CPU下單執行緒做的,所以如果考慮GPU加速的因素,我們的速度會快1個數量級以上。實驗結果表明,我們的結果明顯好很多,而Visual SFM並不能解出整個地圖(分裂成60個獨立的子圖)。最右邊是ORB-SLAM的求解結果,很多幀的相機姿態沒有成功恢復,而且一些迴路沒有得到很好的閉合。
我們也在KITTI和TUM資料集上進行了測試比較。在這兩個資料集上,ENFT-SfM和ORB-SLAM的結果相差不大。由於ENFT-SfM採用了非連續特徵跟蹤ENFT和基於分段的集束調整方法,相比於基於詞袋和位姿圖優化的迴路閉合方法,在複雜迴路情況下會具有明顯的優勢。
2、大尺度單目實時SLAM系統ENFT-SLAM
ENFT-SfM是一個離線的運動恢復結構系統,雖然平均速度達到了接近實時,但無法滿足真正的實時應用需求。為此,我們對ENFT-SfM進行了改造,採用了並行的跟蹤和建圖框架,做到了真正實時。特徵跟蹤直接採用ENFT特徵跟蹤,主要在迴路檢測與閉合上做了改進,即對原來的非連續特徵軌跡匹配進行了修改,通過計算當前幀與歷史關鍵幀的相似度並選擇相似度高的關鍵幀進行匹配。全域性優化的時候還是採用基於分段的集束調整進行優化。
3、面向動態場景的RDSLAM
動態場景下視覺SLAM容易存在一些問題,比如如何處理大量的錯誤匹配和遮擋(包括視角變化產生的遮擋和動態物體造成的遮擋)。為了解決這個問題,我們提出了RDSLAM框架(圖3)。

我們的主要貢獻是,通過在Mapping執行緒中線上地檢測三維點雲的變化,如果某個三維點發生變化,會及時把它從地圖中剔除掉;同樣如果某個關鍵幀的特徵點大部分都發生了變化,那麼也會將這個關鍵幀從地圖中去掉。這個策略可以及時檢測地圖的變化並更新,從而實現在純視覺情況下也能穩定跟蹤。另外,針對傳統的RANSAC演算法做了改進,提出了一個自適應的RANSAC 改進演算法PARSAC,利用序列上的連貫性,在即使有大量外點的情況下,也能進行魯棒快速的求解。實驗結果表明,在複雜動態場景下,PTAM的結果往往很差,而RDSLAM依然能穩定地工作。
4、面向移動裝置的RKSLAM
SLAM一般可以分為兩類:基於關鍵幀的SLAM和基於濾波的 SLAM。基於關鍵幀的SLAM是指採用關鍵幀集束調整方法。SLAM問題可以抽象為Markov Random Field問題。基於卡爾曼濾波的方法每次只儲存最新的攝像機狀態,而將歷史攝像機狀態消去,這會轉化成三維點之間的約束,導致計算複雜度跟三維點的數目成立方關係。基於關鍵幀的集束調整方法由於把非關鍵幀的約束刪除掉,故它的求解速度會變快,而精度並不會有明顯的下降。總的來說,基於關鍵幀的SLAM方法比基於濾波的SLAM在精度上、效率和擴充套件性上具有更好的效能。但是基於關鍵幀的SLAM一般要求關鍵幀之間的基線比較大,這會導致在攝像機做接近純旋轉運動時無法加入新的關鍵幀。當然,這個缺陷可以通過一些方法改進來克服,比如可以先放鬆加關鍵幀的條件,後面再刪除不必要的關鍵幀。但是,對於快速運動、運動模糊和弱紋理的情況,基於關鍵幀的SLAM和基於濾波的SLAM都很難處理。Visual-Inertial SLAM已經廣泛應用於機器人領域,由於採用了IMU感測器,可以顯著提高跟蹤的魯棒性。Visual-Inertial SLAM可以分為基於濾波的方法(比如MSCKF、Project Tango、ARCore、ARKit等)和採用非線性優化的框架有OKVIS、VINS-Mono等。
我們考慮在沒有真實IMU資料的情況下,能否借鑑一些Visual-Inertial的方法來提高跟蹤的魯棒性。為此,我們提出了RKSLAM框架,主要包含兩個技術貢獻。第一個貢獻是跟蹤採用基於多單應性矩陣的方法,跟前面提到的ENFT方法非常類似,但把全域性單應性矩陣、區域性單應性矩陣和基於擬合平面的單應性矩陣結合起來,而且把SIFT 特徵換成FAST corners(因為SIFT特徵計算太慢,而FAST角點能夠在手機上做到實時)。第二個部分,採用基於滑動視窗的姿態優化,借鑑了Visual Inertial SLAM的方法。一般移動裝置的加速度比較小,我們就簡單地假設為零;但是角速度可能會很大,不能簡單地假設為零。我們提出採用特徵匹配並結合基於縮圖的對齊(類似於直接法跟蹤)來估計連續幀之間的旋轉角度。當運動比較快時,雖然運動模糊導致可能沒有足夠多的特徵點,但是整張影象的對齊還是能比較可靠地估計出旋轉角度。然後類似傳統的Visual-Inertial SLAM方法,我們把估計出來的加速度和角速度作為相鄰幀之間的運動約束進行相機姿態優化。
實驗結果表明,RKSLAM比ORB-SLAM、LSD-SLAM和PTAM在快速運動和強旋轉情況下的跟蹤成功率更高,穩定性更好。此外,RKSLAM的執行速度非常快,在PC上可以做到每秒100-200幀,在移動裝置上能做到實時執行。
5、基於RGB-D相機的稠密SLAM
最後,介紹我們最近做的一個工作,基於RGB-D感測器做的稠密 SLAM系統RKD-SLAM(圖4)。

這個工作跟前面的RKSLAM的工作比起來,最主要的改進是在跟蹤過程中結合了深度資訊提高跟蹤的魯棒性,並能夠實現線上的稠密三維重建。
特別是我們提出了一個高效的增量式BA演算法EIBA。我們知道區域性BA方法的優化能力很有限,很容易陷入區域性最優解,而全域性BA的優化速度很慢。增量式BA可以利用之前的計算結果,每次不需要完全重新計算,只需要更新矩陣的部分元素,甚至只對部分有明顯變化的變數進行求解,這可以大大提高優化速度。實驗結果表明,我們EIBA的計算速度比iSAM2有一個數量級。此外,我們還提出了一個基於關鍵幀的深度表達和融合方法,能夠根據集束優化的結果對三維表面進行線上調整,及時消除誤差累積。
以上這些工作大部分都有對應的可執行程式或原始碼,讀者可以從 ofollow,noindex"> http://www. zjucvg.net 和 https:// github.com/ZJUCVG 上下載。
二、應用與發展趨勢
視覺SLAM技術有廣泛的應用,比如:三維重建、視訊分割與編輯、增強現實和自動駕駛等。例如,基於SLAM和三維重建技術,可以進一步實現時空一致性的視訊分割與編輯。基於三維重建和分割的結果,我們可以先在三維空間上對場景進行編輯,編輯完後重新投影到二維視訊上,生成修改後的視訊。我們還可以把一個視訊物件抽取出來插入到另一個視訊序列中,實現無縫的視訊合成。在自動駕駛方面,在只用攝像頭的情況下,可以將視覺SLAM和道路線檢查結合起來,提高定位的魯棒性。
最後談談視覺SLAM的發展趨勢。首先是如何減少特徵依賴問題,例如採用結合邊的跟蹤,直接跟蹤法,或者結合機器學習的方法。其次是如何實現稠密的線上三維重建。目前基於視覺的方法和基於深度相機的方法都已經不同程度地實現線上稠密三維重建。因為稠密三維重建需要的記憶體空間很大,如果要在移動端進行應用,往往還需要對模型進行簡化。所以一些研究人員也提出採用平面表達和模型自適應去簡化來解決這個問題。再次,SLAM在朝著多感測器融合的趨勢發展。因為每種感測器都有它的優點和缺點,所以最好的方法是將多種感測器資料融合起來,進行優勢互補,從而實現一個成本低、穩定性高的SLAM解決方案。
未來,我們將在協同SLAM、稠密SLAM、場景分析和理解等方面進一步深入研究,並期望能夠在AR/VR、機器人和自動駕駛等領域進行應用。
三、三維視覺前沿進展與應用
中國圖象圖形學學會主辦,深藍學院承辦的“ 三維視覺前沿進展與應用 ”前沿講習班,將於10月13日-14日(週末)在北京大學舉辦。邀請8位學術界和企業界專家學者作報告,並交流分享。
報名連結: CSIG影象圖形學科前沿講習班 第7期
