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