公開課精華 | 移動機械人視覺三維感知的現在與將來

本文總結於香港科技大學王凱旋博士關於移動機械人視覺三維感知的現在與將來的公開課,其中主要介紹了基於視覺的三維環境感知方案,包括傳統方法和基於深度學習的方法。

1.深度感知的研究動機

感知周圍的環境是移動機械人的基本要求。而所謂的「環境」有很多層的含義,比如從相機獲取的色彩信息,但是這並不能直接告訴我們環境的幾何信息,例如前方是否有障礙物,路面是否平坦,也不能直接得到相關的語義信息,比如環境中有什麼物體,屬於什麼類別等等。而在本次分享中,我們會主要關注如何從相機中獲取物體的幾何信息。

1.png

圖1 環境能提供的三種信息

幾何信息能給機械人的安全移動提供保證。機械人在移動的過程中需要避開障礙物,需要與物體交互。同時,我們也需要一些基本的場景重建,從而為人類的高級決策提供信息支持。

探究幾何信息有很多的傳感器供我們選擇,如雙目相機,RGBD相機。不同的傳感器有各自的特點和缺點:雙目相機兩目之間需要保證一定的基線長度,因此就需要佔用更多的空間資源;RGBD相機在戶外或光照強的場景,其主動發出的信號通常會受到明顯的干擾,深度估計會因此失效;激光雷達受限於成本,質量以及尺寸,很難在消費級產品中使用。

目前使用在無人機中的三維感知主流方案是雙目相機,因為它的成本低,並且其被動接受光信號的原理可以確保室內和室外的穩定使用。針對一些無人機小型化的需求,我們也會希望雙目相機的尺寸更小,但是對應基線長度的縮短也會提高算法實現的難度。

Vins-mono這一突破性的方案使我們可以使用單目相機和imu就可以實現較精準的定位。因此,單目相機在定位問題上已經能滿足我們的一定需求,那單目相機是否可以進一步完成飛機的三維重建任務呢?

2.png

圖2 Vins的出現改變了最小傳感器的需求

回答是可以,但目前還限於靜態場景。從直覺的角度思考單目進行三維重建的可能性,我們在玩一些賽車遊戲的時候,通過來自一個視角的觀察,就可以實現對環境的感知和對車的操控,說明單目的三維感知是可以實現的,而從理性的角度分析這個問題,單目相機和雙目相機沒有本質的區別,對於單目相機,在機械人移動中,相機在不同時刻也是處於不同位置。因此,如果我們能找到特徵點在不同時序圖片上的位置,我們就可以通過三角化的方法估計相機位置,但是不同時刻像素或者特徵的數據關聯,有時候也是個很難的問題。

總之,不管是單目還是雙目相機,相對於激光雷達和RGBD相機而言,信息密度非常高,並且有成本低的優勢,算法的實現效果上限很高,因此視覺深度感知以及很多的潛力值得我們去挖掘。

2.深度感知的一般流程

關於深度感知的一般流程,首先我們獲得的是一系列的圖像序列,vins算法會根據這些圖像推算機械人的空間位置,而深度估計模塊則會推斷每一個像素相對於相機的距離,也就是所謂的深度圖,它會和輸入圖像有相同的尺寸,每一個像素包含距離信息,接着,深度圖會被轉化為全局的三維地圖,而三維地圖有很多的表達方式,比如八叉樹,tsdf等方式。接着,三維模型可被用來執行路徑規劃等下游任務。

3.png

圖3 深度感知一般流程

針對深度圖估計,首先,我們需要找到對應點,然後三角化估計深度。但是對應點的尋找在沒有紋理或者有大量重複紋理的場景都會給特徵匹配帶來很大的困難。造成這個問題的原因是算法往往對於場景只關注局部的特徵,缺乏整體的感知,而不像人類一樣從全局特徵出發。

為了解決這個問題,在2011的論文 Dense Tracking and Mapping in Real-Time中,作者提出了從圖像序列中估計出深度的方法。它的核心就是利用代價體積cost volume這一概念建立損失函數,同時考慮每個像素自身的匹配誤差以及全局的平滑性,優化整體的代價函數進而得到深度圖。

那麼該如何去構建代價體積呢?首先為了保證實時性,我們需要從一系列拍攝的圖片中進行篩選,而篩選得到的位置如果距離太遠或者太近都不是理想的觀測。此外,連續的圖像往往觀測的是同一場景,必然存在大量信息的冗餘。如何利用這些信息進行降噪,去除異常點等也是一個值得思考的問題。

這裡的介紹一個方法是利用深度濾波(depth filter)。它的引入就是就是為了解決剛剛提到的兩個問題,如何去選擇參考幀以及如何去融合深度圖。關於深度濾波,他首先需要實現「跟蹤」,也就是建立起不同幀圖像像素的關聯,記錄下同一特徵點在各幀的相對位置,並且生成Age-map來記錄同一點被觀測的時間,進而建立代價體積,和之前幀的信息相融合。通過時序融合,我們可以實現對於物體深度更穩定準確的估計,並且可以實現對於噪聲和異常點的去除。

4.png

圖4 深度濾波的實現效果

第二個要介紹的工作是關於深度圖提取算法的優化。我們注意到深度圖中很多場景,比如白牆,高分辨率的圖像並不能帶來更精確的深度信息,那麼該如何合理的分配算力,分別給值得優化的像素以及沒有優化必要的像素呢?這裡用到的是一種四叉樹的數據結構,這種樹狀結構將會在前後景交接以及紋理分佈的細節區域展開更多的分支,提取出每個像素適合優化的分支節點進一步優化深度。

5.png

圖5 圖像的不同部分有不一樣的深度分辨率需求

關於傳統方法,有些問題是無法迴避的,比如有很多需要手動調試的參數,又比如很多工作是基於場景平滑性(smoothness-term)的假設,但是在前後景交接處,或者一些深度突然變化的場景,平滑性是否是一個很好的假設,是值得商榷的。尤其是對一些邊緣的處理,我們希望保持它們的狀態,而不是過度的平滑。而且,它的解空間非常大,針對每個像素分別進行處理會造成估算的計算量非常大。

3.基於學習的深度感知

面對傳統方法的不足,我們自然會考慮用深度神經網絡去解決問題。

神經網絡是基於數據驅動的方法,相比於傳統方案,它更好地引入了語義信息,在傳統方案中,平滑項的調整隻能根據梯度和大量調參,而在深度學習的方案中,我們就可以讓網絡自己去判斷平滑項的大小。此外,通過了解可利用的算力大小,我們可以此為依據設計網絡進行優化,達到精度與效率的平衡。

在基於深度學習的方案中,MVDepthNet是一個類似U-Net的網絡,通過一系列卷積層將代價體積最後轉換為深度圖。而在訓練時,我們也可以通過RGBD得到的深度值來訓練網絡。此外MVDepthNet通過顯式的引入代價體積可以更有效的利用多視角的觀測。

6.png

圖6 MVDepthNet網絡架構

另一個要介紹的深度學習方案叫Geometric-pretraining。它的工作出發點是考慮到深度網絡的訓練過程中,我們總是需要RGBD數據。而此前的相關工作在進行深度估計時,通常基於的假設是場景中的物體都是靜止的,但是這在駕駛場景中很明顯是不成立的。

所以在Geometric-pretraining這個工作中,所基於的假設就是場景中可能存在動態物體。在網絡中,通過運動編碼器(motion encoder),我們以連續幀的圖片作為輸入,得到一個包含運動信息的向量。此外,通過單幀的圖像作為輸入,我們還可以利用結構編碼(structure encoder)得到圖像中的結構信息,通過結合結構信息和運動信息,我們就可以得到場景中的光流信息。我們把訓練好的結構編碼器在monodepth任務上進行微調,就可以得到一個泛化性更好的網絡。

7.png

圖7 Geometric-pretraining模型

4.深度圖的融合策略

接下來我們來討論一下深度圖該如何融合。

在機械人領域,我們希望深度圖的融合佔用較小的計算量,並能實現實時的效果。為了展現融合效果,TSDF方案通過把三維空間劃分成很多小格子存儲表面信息,這在相對簡單的場景是沒有問題的。但是在較複雜的場景,當發生迴環等情況時,TSDF生成的三維圖就會出現鬼影等錯誤。

為了解決這種問題,保證在迴環的同時會對地圖更新主要有基於體素和基於點雲的兩類方法,採用體素的方法一般分為chunk-based和BundleFusion兩種方式,但是第一種方法需要人工依靠經驗的調參,而第二種方法則不能保證高效性。

而基於點雲的方案會把場景表達成一個個無序的點,比較著名的方案有ElasticFusion。在我們的工作Surfel fusion中,我們把點雲與vins系統的位姿圖直接關聯,當位姿圖發生迴環檢測時,3D圖也會相應變化調整。

8.png

圖8 Surfel Fusion的建圖效果

5.未來的發展機遇

最後我們來聊一下未來的發展機遇。

第一個趨勢是關於單目相機的深度估計(monodepth),傳統的基於多視角幾何的估計方案通常依賴系統的內外參等標定信息,並且通過基於場景中都是靜態物體的假設進行估計,但這在很多場景下是無法滿足的。

此外,以往我們希望圖像的分辨率越高越好,但是高分辨率帶來的增益卻並不是線性增加的。而目前研究的主要進展包括通過與多視角幾何的結合,改善網絡結構的設計,以及尋求對於特殊格式數據的應用。

不過,個人認為最重要的還是對於動態物體的處理,因為動態物體是很多三維場景都存在並且相當重要的一部分。儘管目前來看還缺乏有效的理論指導,但是一些論文已經展示了一些有效的成果。

第二個趨勢就是隱式二維表達,不像傳統的用像素數量的信息表達深度圖,我們希望把數據進一步壓縮(128維的向量)來表達場景中的獨立特徵,這樣可以有效降低自有變量的數目。

但是,這種思路的難點在於如何確保在隱式編碼(Latent Code)中的表達能力,目前的表達通常是線性的形式,線性的表達能力是相對較低的,如何轉化為非線性的表達是一個值得思考的問題。此外,如何保證映射的泛化能力也是我們需要關心的。

希望這次的講座內容對各位的研究和工作有所幫助和啟發!