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