對於自動駕駛應用程式來說,最終還是需要對3D場景進行感知。道理很簡單,車輛不能靠著一張影像上得到感知結果來行駛,就算是人類駕駛也不能對著一張影像來開車。因為物體的距離和場景的和深度資訊在2D感知結果上是體現在現在的,而這些資訊才是自動駕駛系統對周圍環境做出正確判斷的關鍵。
一般來說,自動駕駛車輛的視覺感測器(例如攝影機)安裝在車身上方或車內後視鏡上。無論哪個位置,攝影機所得到的都是真實世界在透視視圖(Perspective View)下的投影(世界座標係到影像座標系)。這種視圖與人類的視覺系統很類似,因此很容易被人類駕駛者理解。但是透視視圖有一個致命的問題,就是物體的尺度會隨著距離而改變。因此,當感知系統從影像上偵測到了前方有一個障礙物時,它並不知道這個障礙物距離車輛的距離,也不知道障礙物的實際三維形狀和大小。
圖像座標系(透視視圖)vs.世界座標系(鳥瞰視圖)[IPM-BEV ]
想要得到3D空間的訊息,一個最直接的方法就是採用雷射雷達(LiDAR)。一方面,LiDAR輸出的3D點雲可以直接用來取得障礙物的距離和大小(3D物體偵測),以及場景的深度(3D語意分割)。另一方面,3D點雲也可以與2D影像進行融合,以充分利用兩者所提供的不同資訊:點雲的優勢在於距離和深度感知精確,而影像的優勢在於語意資訊更加豐富。
但是,LiDAR也有其缺點,例如成本較高,車規級產品量產困難,受天氣影響較大等等。因此,單純基於攝影機的3D感知仍然是一個非常有意義和價值的研究方向。本文以下的部分會詳細介紹基於單鏡頭和雙鏡頭的3D感知演算法。
#基於單一相機影像來感知3D環境是病態問題,但是可以利用一些幾何約束和先驗知識來輔助完成這個任務,也可以採用深度神經網路端對端的學習如何從影像特徵來預測3D資訊。
#單一相機3D物件偵測(圖片來自M3D-RPN)
#前面提到,影像是從真實世界的3D座標到2D平面座標的投影,因此從影像來進行3D物件偵測的一個很直接的思路就是將2D影像反變換到3D世界座標,然後在世界座標系下進行物件偵測。理論上說這是一個病態問題,但是可以透過一些額外資訊(例如深度估計)或幾何假設(例如像素位於地面)來輔助解決。
BEV-IPM[1]中提出將影像從透視視圖轉換到鳥瞰視圖(BEV)。這裡有兩個假設:一是路面與世界座標系平行且高度為零,二是車輛本身的座標系與世界座標系平行。前者在路面非平坦的情況下並不滿足,後者則可以透過車輛姿態參數(Pitch和Roll)來校正,其實就是車輛座標系和世界座標系的Calibration。假設影像中所有像素在真實世界的高度都為零,那麼就可以採用Homography變換將影像轉換到BEV視圖。在BEV視圖下採用基於YOLO網路的方法來偵測目標的Bottom Box,也就是與路面接觸部分的矩形。 Bottom Box的高度為零,因此可以準確的投影到BEV視圖上作為GroudTruth來訓練神經網絡,同時神經網路預測的Box也可以準確的估計其距離。這裡的假設是目標需要與路面接觸,這對於車輛和行人目標來說一般是滿足的。
BEV-IPM
#另一種反變換的方法採用Orthographic Feature Transform (OFT) [2]。其想法是採用CNN擷取多尺度的影像特徵,然後將這些影像特徵轉換到BEV視圖,最後在BEV特徵上進行3D物件偵測。首先需要建構BEV視角下的3D網格(文中實驗的網格範圍為80米x80米x4米,網格大小為0.5m)。每個網格透過透視變換對應影像上的一塊區域(簡單起見就定義為矩形區域),將這個區域內的影像特徵的平均值作為該網格的特徵,這樣就得到了3D網格特。為了減少計算量,3D網格特徵在高度這一維度上進行壓縮(加權平均),得到2D網格特徵。最終的物體檢測在2D網格特徵上進行。 3D網格到2D影像像素的投影並不是一一對應的,多個網格會對應臨近的影像區域,導致網格特徵出現歧義。所以這裡也需要假設待偵測的物體都在路面上,高度的範圍很窄。所以文中實驗採用了的3D網格高度只有4米,足以覆蓋地面上的車輛和行人。但是如果要偵測交通標誌的話,這類假設物體都貼近地面的方法就不適用了。
#Orthographic Feature Transform
以上這個兩個方法都是基於物體位於地面的假設。除此之外,另外一個想法是採用深度估計的結果來產生偽點雲數據,其中一個典型的工作就是Pseudo-LiDAR[3]。深度估計的結果一般被看作額外的影像通道(類似RGB-D資料),基於影像的物體偵測網路被直接用來產生3D物體邊框。作者在文章中指出,基於深度估計的3D物體偵測之所以準確度比基於LiDAR的方法差很多,主要原因不在於深度估計的精確度不夠,而是在於資料表示的方法有問題。首先,在影像資料上,遠處的物體面積非常小,這使得遠處物體的偵測非常不準確。其次,深度上相鄰像素的深度差可能是非常大的(例如在物體的邊緣),此時採用卷積操作來提取特徵就會有問題。考慮到這兩點,作者提出依據深度圖將輸入影像轉換為類似LiDAR產生的點雲數據,然後採用點雲和影像融合的演算法(如AVOD和F-PointNet)來偵測3D物件。 Pseudo-LiDAR的方法並不依賴特定的深度估計演算法,任何來自單目或雙目的深度估計都可以直接使用。透過這種特殊的數據表示方法,Pseudo-LiDAR在30公尺範圍內可以將物體偵測的準確率從22%提高到74%。
Pseudo-LiDAR
與真實的LiDAR點雲相比,Pseudo-LiDAR方法在3D物體檢測的準確率上還是有著一定的差距,這主要是由於深度估計的精度不夠導致的(雙眼比單目效果好一些),尤其是物體週邊的深度估計誤差會對檢測帶來很大的影響。因此,Pseudo-LiDAR之後也進行了許多擴充。 Pseudo-LiDAR [4]採用低線束的LiDAR來增強虛擬的點雲。 Pseudo-Lidar End2End[5]採用實例分割來取代F-PointNet中的物件框。 RefinedMPL[6]只在前景點上產生虛擬點雲,將點雲的數量降低到原來的10%,可以有效降低誤檢的數量和演算法的運算量。
在自動駕駛應用中,許多需要偵測的目標(例如車輛和行人)其大小和形狀相對比較固定,而且是已知的。這些先驗知識可以被用來估計目標的3D資訊。
DeepMANTA[7]是這個方向的開創性工作之一。首先,採用傳統的影像物體偵測演算法例如Faster RNN來得到2D的物體框,同時也偵測車輛上的關鍵點。然後,將這些2D物體框和關鍵點與資料庫中的多種3D車輛CAD模型分別進行匹配,選擇相似度最高的模型作為3D物體偵測的輸出。
Deep MANTA
3D-RCNN[8]提出採用Inverse -Graphics方法,以影像為基礎恢復場景中各個目標的3D形狀與姿態。其基本想法是從目標的3D模型出發,透過參數搜尋找到與影像中的目標最匹配的模型。這些3D模型通常都有許多控制參數,搜尋空間很大,因此傳統的方法在高維度參數空間搜尋最佳效果並不好。 3D-RCNN採用PCA對參數空間進行降維(10-D),並利用深度神經網路(R-CNN)來預測每個目標的低維模型參數。預測的模型參數可以用來產生每個目標的二維影像或深度圖,與GroudTruth資料比較所得到的Loss可以用來指導神經網路的學習。這個Loss稱之為Render-and-Compare Loss,是基於OpenGL來實現的。 3D-RCNN方法所需的輸入資料比較多,Loss的設計也相對複雜,工程實現上難度較高。
3D-RCNN
MonoGRNet[ 9]提出將單目3D物體偵測分成四個步驟,分別用來預測2D物體框,物體3D中心的深度,物體3D中心的2D投影位置和8個角點的3D位置。首先,影像中預測的2D物體框透過ROIAlign操作,得到物體的視覺特徵。然後,而這些特徵被用來預測物體3D中心的深度和3D中心的2D投影位置。有了這兩個資訊後,就可以得到物體3D中心點的位置。最後,根據3D中心的位置再來預測8個角點的相對位置。 MonoGRNet可以被認為是只採用物件中心的作為關鍵點,2D和3D的匹配也就是點距離的計算。 MonoGRNetV2[10]將中心點擴展到多個關鍵點,並採用3D CAD物件模型來進行深度估計,這與先前介紹的DeepMANTA和3D-RCNN就很類似了。
MonoGRNet
#Monoloco[11]主要解決行人的3D偵測問題。行人是非剛性物體,姿態和變形也更加多樣,因此比車輛偵測更具挑戰性。 Monoloco也是基於關鍵點偵測,關鍵點先驗的相對3D位置可以用來進行深度估記。例如,以行人肩部到臀部50公分的長度為基準來估計行人的距離。以此長度作為基準的原因是,人體的這個部分可以產生的變形最小,用來做深度估計準確度也最高。當然,其他的關鍵點也可以作為輔助共同來完成深度估記的任務。 Monoloco採用多層全連接網絡,從關鍵點的位置來預測一個行人的距離,同時也給出預測的不確定性。
Monoloco
#總結一下,以上方法都是從2D映像中提取關鍵點,並與3D模型進行匹配,從而得到目標的3D資訊。這類方法假設目標有相對固定的形狀模型,對於車輛來說一般是滿足的,對於行人來說就相對困難一些。此外,這類方法需要在2D影像上標註多個關鍵點,這也是非常耗時的。
Deep3DBox[12]是這個方向早期的並且很有代表性的工作。 3D物體框需要9維變數來表示,分別是中心,大小和朝向(3D朝向可以簡化為Yaw,因此變成7維變數)。影像2D物體偵測可以提供2D物體框,包含4個已知變數(2D中心和2D大小),這不足以求解具有7維或9維自由度的變數。在這三組變數中,大小和朝向與視覺特徵的關係相對緊密。例如物體的3D大小與其類別(行人,自行車,小轎車,公車,卡車等)相關性非常大,而物體類別是可以透過視覺特徵來預測的。對於中心點3D位置來說,由於透視投影產生的歧義性,單純透過視覺特徵是很難預測的。因此,Deep3DBox提出先用2D物體框內的影像特徵來估計物體大小和朝向。然後,再透過一個2D/3D的幾何限制來求解中心點3D位置。這個約束就是3D物體框在影像上的投影是被2D物體框緊密的包圍的,也就是在2D物體框的每條邊上都至少能找到一個3D物體框的角點。透過之前已經預測的大小和朝向,再配合上相機的Calibration參數,就可以求解中心點的3D位置。
2D與3D物件框之間的幾何限制(圖片來自文獻[9])
這種利用2D/3D限制的方法需要非常精確的2D物件框偵測。在Deep3DBox的框架下,2D物體框上很小的誤差都可能會導致3D物體框預測的失敗。 Shift R-CNN[13]的前兩個階段與Deep3DBox非常相似,都是透過2D物體框和視覺特徵來預測3D大小和朝向,然後透過幾何約束來求解3D位置。但是,Shift R-CNN增加了第三個階段,將前兩個階段得到的2D物體框,3D物體框以及相機參數合併起來作為輸入,採用全連接網絡預測更為精確的3D位置。
Shift R-CNN
在利用2D/3D幾何約束時,上述方法都是透過求解一組超約束方程式來得到物體的3D位置,而這個過程是作為一個後處理步驟,並不在神經網路之內。 Shift R-CNN的第一和第三階段也是分開訓練的。 MVRA[14]將這個超約束方程式的求解過程建成一個網絡,並設計了圖像座標下的IoU Loss和BEV座標下的L2 Loss分別來衡量物體框和距離估計的誤差,以輔助完成端對端的訓練。這樣一來,物體3D位置預測的質量也會對先前3D的大小和朝向預測產生回饋作用。
之前介紹的三類方法都是從2D影像出發,有的將影像轉換到BEV視圖,有的檢測2D關鍵點並與3D模型匹配,還有的採用2D和3D物體框的幾何約束。除此之外,還有一類方法從稠密的3D物體候選出發,透過2D影像上的特徵對所有的候選框進行評分,評分高的候選框既是最終的輸出。這種策略有些類似物體偵測中傳統的Sliding Window方法。
Mono3D[15]是這類方法中的代表。首先,基於目標先驗位置(z座標位於地面)和大小來產生稠密的3D候選框。在KITTI資料集上,每幀大約產生40K(車輛)或70K(行人和自行車)個候選框。這些3D候選框投影到影像座標後,透過2D影像上特徵進行評分。這些特徵來自語義分割,實例分割,上下文,形狀以及位置先驗資訊。所有這些特徵融合起來對候選框進行評分,然後選出分數較高的作為最終的候選。這些候選再透過CNN再進行下一輪的評分,以獲得最終的3D物體框。
Mono3D
M3D-RPN[16]是一種基於Anchor的方法。此方法定義了2D和3D的Anchor,分別表示2D和3D物體框。 2D Anchor透過影像上稠密採樣得到,而3D Anchor的參數是基於透過訓練集資料得到的先驗知識確定的。具體來說,每個2D Anchor與影像中標註的2D物體框按照IoU進行匹配,對應的3D物體框的平均值用來定義3D Anchor的參數。值得一提的是,M3D-RPN中同時採用了標準卷積操作(具有空間不變性)和Depth-Aware卷積。後者將影像的行(Y座標)分成多個組,每組對應不同的場景深度,並採用不同的捲積核來處理。
M3D-RPN中的Anchor設計和Depth-Aware卷積
雖然利用了一些先驗知識,Mono3D和M3D-RPN生成物體候選或者Anchor時還是基於稠密採樣的方式,因此所需的計算量非常大,實用性受到很大影響。後續一些方法提出採用二維影像上檢測結果來進一步減少搜尋的空間。
TLNet[17]在二維平面密集的放置Anchor。 Anchor間隔為0.25米,朝向為0度和90度,大小為目標的平均值。影像上的二維偵測結果在三維空間內形成多個視錐,透過這這些視錐可以過濾掉大量背景上的Anchor,進而提高演算法的效率。過濾後的Anchor投影到影像上,進行ROI Pooling後所得到的特徵用來進一步細化3D物體框的參數。
TLTNet
SS3D[18]則採用更有效率的單階段偵測,用類似CenterNet結構的網路直接從影像輸出多種2D和3D訊息,例如物件類別,2D物件框,3D物件框。需要注意的是,這裡的3D物體框並不是一般的9D或7D表示(這種表示很難直接從影像預測),而是採用更容易從影像預測也包含更多冗餘的2D表示,包括距離(1-d),朝向(2-d,sin和cos),大小(3-d),8個角點的圖像座標(16-d)。再加上2D物體框的4-d表示,總共是26D的特徵。所有這些特徵都被用來進行3D物體框的預測,預測的過程其實就是找到一個與26D特徵最為匹配3D物體框。比較特殊的一點是,這個求解的過程是在神經網路內部進行,所以必須是可導的,這也是這篇文章一個主要亮點。受惠於簡單的結構和實現,SS3D的運行速度可以達到20FPS。
SS3D
#FCOS3D[19]也是單一階段的偵測方法,但是比SS3D更簡潔。 3D物體框的中心投影到2D影像,得到2.5D中心(X,Y,Depth),以此作為回歸的目標之一。此外,回歸的目標還有3D大小和朝向。這裡的朝向採用角度(0-pi) heading聯合的方式來表示。
FCOS3D
SMOKE[20]也提出了類似的思路,透過類似CenterNet的結構從影像直接預測2D和3D資訊。 2D資訊包括物體關鍵點(中心點和角點)在影像上的投影位置,3D資訊包括中心點深度,尺寸和朝向。透過中心點的影像位置和深度,可以恢復物體的3D位置。再透過3D尺寸和朝向可以恢復各個角點的3D位置。
以上介紹的這幾種單階段網絡的思路就是直接從圖像回歸3D信息,不需要復雜的前處理(比如圖像反變換)和後處理(比如3D模型匹配),也不需要精確的幾何約束(例如2D物體框的每條邊上都至少能找到一個3D物體框的角點)。這些方法只用到了少量的先驗知識,例如各類物體實際大小的平均值,以及由此得到的2D物體尺寸與深度的對應關係。這些先驗知識定義了物體3D參數的初始值,而神經網路只需要回歸與實際值的偏差即可,這就大大降低的搜尋空間,也因此降低了網路學習的難度。
上一小節介紹了單目3D物件偵測的代表性方法,其思維從早期的影像變換,3D模型匹配和2D/3D幾何約束,到近期的直接透過影像預測3D資訊。這種想法上的變化很大程度上來自於卷積神經網在深度估計上的進展。先前介紹的單階段3D物體偵測網路中大多都包含了深度估計的分支。這裡的深度估計雖然只是在稀疏的目標級別,而不是稠密的像素級別,但是對於物體檢測來說已經足夠了。
除了物件偵測,自動駕駛感知還有另一個重要任務,那就是語意分割。語意分割從2D擴展到3D,一個最直接的方式就是採用稠密的深度圖,這樣每個像素點的語意和深度資訊就都有了。
綜合以上兩點,單目深度估計在3D感知任務中扮演了非常重要的角色。從上一節3D物體偵測方法的介紹可以類推,全卷積的神經網路也可以用來進行稠密的深度估計。下面我們來介紹一下這個方向的發展現況。
單眼深度估計的輸入是一張影像,輸出也是一張影像(一般與輸入相同大小),其上的每個像素值對應輸入影像的場景深度。這個任務有些類似影像語意分割,只不過語意分割輸出的是每個像素的語意分類。當然,輸入也可以是視訊序列,利用相機或物件運動帶來的額外資訊來提高深度估計的準確度(對應視訊語義分割)。
前面提到過,從2D影像預測3D訊息是一個病態問題,因此傳統的方法會利用幾何訊息,運動訊息等線索,透過手工設計的特徵來預測像素深度。與語意分割類似,超像素(SuperPixel)和條件隨機場(CRF)這兩種方法也常被用來提高估計的精確度。近年來,深度神經網路在各種影像感知任務上都取得了突破性的進展,深度估計當然也不例外。大量的工作都表明,深度神經網路可以透過訓練資料學習到比手工設計更優越的特徵。這一小節主要介紹這種基於監督學習的方法。其它一些非監督學習的思路,比如利用雙目的視差信息,單目雙像素(Dual Pixel)的差異信息,視頻的運動信息等等,留待後面再來介紹。
這個方向早期的一個代表性工作是由Eigen等人提出的基於全局和局部線索融合的方法[21]。單目深度估計歧義性主要來自於全局的尺度。例如,文中提到一個真實的房間和一個玩具房間可能從圖像上看來差異很小,但是實際的景深卻差別很大。雖然這是一個極端的例子,但是真實的資料集中依然存在著房間和家具尺寸的變化。因此,此方法提出將影像進行多層卷積和下採樣,得到整個場景的描述特徵,並以此預測全局的深度。然後,透過另一個局部分支(相對較高的解析度)來預測影像局部的深度。這裡全域深度會作為局部分支的一個輸入來輔助局部深度的預測。
全域與局部資訊融合[21]
文獻[22]進一步提出採用卷積神經網路輸出的多尺度特徵圖來預測不同解析度的的深度圖([21]中只有兩種解析度)。這些不同解析度的特徵圖透過連續MRF進行融合後得到與輸入影像對應的深度圖。
多尺度資訊融合[22]
以上兩篇文章都是採用卷積神經網路來回歸深度圖,另外一個思路是把迴歸問題轉換為分類問題,也就是將連續的深度值分成離散的區間,每個區間作為一個類別。這個方向的代表性工作是DORN[23]。 DORN框架中的神經網路也是編碼解碼的結構,不過細節上有些差別,例如採用全連接層解碼,膨脹卷積進行特徵提取等。
DORN深度分類
前面提到,深度估計與語意分割任務有著相似之處,因此感受野的大小對深度估計來說也是非常重要的。除了以上提到的金字塔結和膨脹卷積,最近非常流行的Transformer結構具有全局的感受野,因此也非常適合此類任務。文獻[24]中就提出採用Transformer和多尺度結構來同時確保預測的局部精確性和全局一致性。
Transformer for Dense Prediction
雖然可以利用先驗知識和圖像中的上下文訊息,基於單目的3D感知的準確度並不能完全令人滿意。尤其是當採用深度學習的策略時,演算法的準確度就非常依賴資料集的大小和品質。對於資料集中沒有出現過的場景,演算法在深度估計和物件偵測上都會有較大的偏差。
雙眼視覺可以解決透視變換帶來的歧義性,因此從理論上來說可以提高3D感知的準確度。但是雙眼系在硬體和軟體上要求都比較高。硬體上來說需要兩個精確配準的攝影機,而且需要確保在車輛運行過程中始終保持配準的正確性。軟體上來說演算法需要同時處理兩個攝影機的數據,計算複雜度較高,確保演算法的即時性就更加困難。
總的來說,與單眼視覺感知相比,雙眼視覺感知的工作相對較少,以下會挑選幾篇典型的文章來介紹。此外,還有一些基於多目的工作,但偏向系統應用的層面,比如說特斯拉在AI Day上展示的360°感知系統。
3DOP[25]首先利用雙鏡頭的影像產生深度圖,將深度圖轉換為點雲後再將其量化為網格資料結構,並以此為輸入產生3D物體候選。生成候選時用到了一些直覺和先驗的的知識,例如候選框中點雲的密度足夠大,高度與實際物體一致並且與框外的點雲高度相差足夠大,候選框與Free Space的重疊足夠小。透過這些條件最終在3D空間中採樣出大約2K個3D物體候選。這些候選映射到2D影像上,透過ROI Pooling進行特徵提取,用來預測物體的類別和細化物體框。這裡的影像輸入可以是來自一個相機的RGB影像,或是深度圖。
總的來說,是兩階段的偵測方法。第一階段採用深度資訊(點雲)生成物體候選,第二階段採用影像資訊(或深度)再進行細化。理論上說,第一階段的點雲生成也可以用LiDAR代替,作者也因此進行了實驗比較。 LiDAR的優點在於測距精確,因此對於小物體,部分遮蔽的物體和遠處的物體來說效果較好。雙目視據的優點在於點雲密度高,因此在近距離遮蔽較少,物體也相對較大的情況下效果較好。當然在不考慮成本、計算複雜度的前提下,將二者融合會得到最好的效果。
#3DOP
#3DOP與上一節介紹的Pseudo- LiDAR[3]有著類似的思路,都是將稠密的深度圖(來自單目,雙眼甚至低線數LiDAR)轉換為點雲,然後再應用點雲物體檢測領域的演算法。
從影像估計深度圖,再由深度圖產生點雲,最後再應用點雲物件偵測演算法,這個流程的各個步驟是分開進行的,無法進行端對端的訓練。 DSGN[26]提出了一個單階段的演算法,從左右影像出發,透過Plane-Sweep Volume這種中間表示來產生BEV視圖下的3D表示,並且同時進行深度估計和物體偵測。這個流程的所有步驟都是可以求導的,因此可以進行端對端的訓練。
DSGN
深度圖是一種稠密的表示,其實對於物體學習來說並不需要在場景的所有位置上獲得深度信息,而只需要在感興趣的物體位置進行估計就可以了。之前在介紹單目演算法也提到了類似的想法。 Stereo R-CNN[27]中並沒有估計深度圖,而是在RPN的框架下將來自兩個相機的特徵圖疊放在一起來產生物體候選。這裡將左右攝影機的資訊關聯在一起的關鍵在於標註資料的變化。如下圖所示,除了左右兩個標註框,還增加了左右兩個標註框的Union。與左右任一個框IoU超過0.7的Anchor作為Positive樣本,與Union框IoU小於0.3的Anchor作為Negative樣本。 Positive的Anchor會同時回歸左右標註框的位置與大小。除了物體框,此方法還採用了角點作為輔助。有了所有這些資訊後就可以恢復3D物體框。
Stereo R-CNN
##對整個場景進行稠密的深度估計,甚至會對物體偵測帶來不好的影響。例如物體邊緣由於與背景重疊導致深度估計偏差較大,整個場景深度範圍很大也會影響演算法的速度。因此,與Stereo RCNN類似,文獻[28]中也提出只在感興趣的物體處估計深度,並且只產生物體上的點雲。這些以物體為中心的點雲最後被用來預測物體的3D資訊。
Object-Centric Stereo Matching
################################################################################################################################################################################################# #深度估計############與單目感知演算法類似,深度估計在雙眼感知中也是關鍵的步驟。從上一小節對雙眼物體偵測的介紹來看,許多演算法都採用了深度估計,包括場景層級的深度估計和物體層級的深度估計。以下就簡單回顧一下雙目深度估計的基本原理和幾個代表性的工作。 ############雙眼深度估計的原理其實也很簡單,就是根據左右兩張影像上同一個3D點之間的距離d(假設兩台相機保持同一高度,因此只考慮水平方向的距離),相機的焦距f,以及兩台相機之間的距離B(基線長度),來估計3D點的深度。 #####################
在雙眼系統中,f和B是固定的,因此只需要估計距離d,也就是視差。對於每個像素點來說,需要做的就是找到另一張影像中匹配的點。距離d的範圍是有限的,因此匹配的搜尋範圍也是有限的。對於每一個可能的d,都可以計算每個像素點處的匹配誤差,因此就得到了一個三維的誤差數據,稱為Cost Volume。在計算匹配誤差時,一般會考慮像素點附近的局部區域,一個最簡單的方法就是對局部區域內所有對應像素值的差進行求和:
MC-CNN[29]把匹配過程形式化為計算兩個影像區塊的相似度,並且透過神經網路來學習圖像塊的特徵。透過標註數據,可以建構一個訓練集。在每個像素點處,都會產生一個正樣本和負樣本,每個樣本都是一對影像區塊。其中正樣本是來自同一個3D點的兩個影像區塊(深度相同),負樣本則是來自不同3D點的影像區塊(深度不同)。負樣本的選擇有很多,為了維持正負樣本的平衡,只隨機取樣一個。有了正負樣本,就可以訓練神經網路來預測相似度。這裡的核心想法其實就是透過監督訊號來指導神經網路學習適用於匹配任務的圖像特徵。
#MC-CNN
MC- Net主要有兩點不足:1)Cost Volumn的計算依賴於局部圖像塊,這在一些紋理較少或模式重複出現的區域會帶來較大的誤差;2)後處理的步驟依賴於手工設計,需要花費大量時間,也很難保證最優。 GC-Net[30]針對這兩點進行了改進。首先,在左右影像上進行多層卷積和下採樣操作,以更好的提取語義特徵。對於每一個視差等級(以像素為單位),將左右特徵圖對齊(像素偏移)後再進行拼接,就得到了該視差等級的特徵圖。所有視差等級的特徵圖合併在一起,就得到了4D的Cost Volumn(高度,寬度,視差,特徵)。 Cost Volumn只包含了單一影像的訊息,影像之間並沒有交互作用。因此,下一個步驟是採用3D卷積處理Cost Volumn,這樣可以同時擷取左右影像之間的相關資訊以及不同視差等級之間的資訊。這一步的輸出是3D的Cost Volumn(高度,寬度,視差)。最後,我們需要在視差這個維度上求Argmin,以獲得最優的視差值,但標準的Argmin是無法求導的。 GC-Net中採用Soft Argmin,解決的求導的問題,使整個網路可以進行端對端的訓練。
#GC-Net
PSMNet[ 31]與GC-Net的結構非常相似,但是在兩個方面進行了改進:1)採用金字塔結構和空洞卷積來提取多分辨率的信息並且擴大感受野。得益於全局和局部特徵的融合,Cost Volumn的估計也更加準確。 2)採用多個疊加的Hour-Glass結構來增強3D卷積。全局資訊的利用更進一步強化了。總的來說,PSMNet在全局資訊的利用上做了改進,從而使視差的估計更多依賴於不同尺度的上下文資訊而不是像素級別的局部資訊。
PSMNet
Cost Volumn中的,視差等級是離散的(以像素為單位),神經網路所學習的是在這些離散點上的Cost分佈,而分佈的極值點就對應了當前位置的視差值。但是視差(深度)值其實應該是連續的,用離散的點來估計會帶來誤差。 CDN[32]中提出了連續估計的概念,除了離散點的分佈以外,還估記了每個點處的偏移。離散點和偏移量一起,就構成了連續的視差估計。
CDN
以上是自動駕駛3D視覺感知演算法深度解讀的詳細內容。更多資訊請關注PHP中文網其他相關文章!