環境感知 是自動駕駛的第一環,也是車輛和環境互動的連結。一個自動駕駛系統整體表現的好壞,很大程度取決於感知系統的好壞。目前,環境感知技術有兩大主流技術路線:
①以視覺為主導的多感測器融合方案,典型代表是特斯拉;
#②以雷射雷達為主導,其他感測器為輔助的技術方案,典型代表如Google、百度等。
我們將圍繞著環境感知中關鍵的視覺感知演算法進行介紹,其任務涵蓋範圍及其所屬技術領域如下圖所示。我們分為兩節分別梳理了2D和3D視覺感知演算法的脈絡和方向。
本節我們先從廣泛應用於自動駕駛的幾個任務出發介紹2D視覺感知演算法,包括基於影像或影片的2D目標偵測與追蹤,以及2D場景的語意分割。近年來,深度學習進入到視覺感知的各個領域,取得不錯的成績,因此,我們梳理了一些經典的深度學習演算法。
#1.1 兩階段偵測
##兩階段指的是實現檢測的方式有先後兩個過程,一是提取物體區域;二是對區域進行CNN分類識別;因此,「兩階段」又稱基於候選區域(Region proposal)的目標檢測。代表性演算法有R-CNN系列(R-CNN、Fast R-CNN、Faster R-CNN)等。
Faster R-CNN是第一個端對端的偵測網路。第一階段利用一個區域候選網路(RPN)在特徵圖的基礎上產生候選框,使用ROIPooling對齊候選特徵的大小;第二階段以全連接層做細化分類和回歸。這裡提出了Anchor的思想,減少運算難度,提高速度。特徵圖的每個位置會產生不同大小、長寬比的Anchor,用來作為物體框迴歸的參考。 Anchor的引入使得迴歸任務只用處理相對較小的變化,因此網路的學習會更加容易。下圖是Faster R-CNN的網路結構圖。
CascadeRCNN第一階段和Faster R-CNN完全一樣,第二階段使用多個RoiHead層進行級聯。後續的一些工作多是圍繞著上述網絡的一些改進或是前人工作的雜燴,罕有突破性提升。
1.2 單階段偵測
#相較於兩階段演算法,單階段演算法只需一次擷取特徵即可實現目標檢測,其速度演算法更快,一般精度稍微低一些。這類演算法的開山之作是YOLO,隨後SSD、Retinanet依序對其進行了改進,提出YOLO的團隊將這些有助於提升性能的trick融入到YOLO演算法中,後續又提出了4個改進版本YOLOv2~ YOLOv5。儘管預測準確率不如雙階段目標偵測演算法,由於較快的運行速度,YOLO成為了工業界的主流。下圖是YOLOv3的網路結構圖。
1.3 Anchor-free偵測(無Anchor偵測)
#這類方法一般是將物件表示為一些關鍵點,CNN被用來迴歸這些關鍵點的位置。關鍵點可以是物件框的中心點(CenterNet)、角點(CornerNet)或代表點(RepPoints)。 CenterNet將目標偵測問題轉換成中心點預測問題,即以目標的中心點來表示該目標,並透過預測目標中心點的偏移量與寬高來取得目標的矩形框。
Heatmap表示分類訊息,每個類別將會產生一個單獨的Heatmap圖。對於每張Heatmap圖而言,當某個座標處包含目標的中心點時,則會在該目標處產生一個關鍵點,我們利用高斯圓來表示整個關鍵點,下圖展示了具體的細節。
RepPoints提出將物件表示為代表性點集,並且透過可變形卷積來適應物體的形狀變化。點集最後被轉換為物體框,用於計算與手動標註的差異。
1.4 Transformer偵測
#無論是單階段或兩階段目標偵測,無論採用Anchor與否,都沒有很好地利用注意力機制。針對這種情況,Relation Net和DETR利用Transformer將注意力機制引入目標偵測領域。 Relation Net利用Transformer對不同目標之間的關係建模,在特徵之中融入了關係訊息,實現了特徵增強。 DETR則是基於Transformer提出了全新的目標偵測架構,開啟了目標偵測的新時代,下圖是DETR的演算法流程,先採用CNN擷取影像特徵,再用Transformer對全域的空間關係進行建模,最後得到的輸出透過二分圖匹配演算法與手動標註進行匹配。
下表中的準確度採用MSCOCO資料庫上的mAP作為指標,而速度則採用FPS來衡量,對比了上述部分演算法,由於網路的結構設計中存在著許多不同的選擇(例如不同的輸入大小,不同的Backbone網路等),各個演算法的實現硬體平台也不同,因此準確率和速度並不完全可比,這裡只列出來一個粗略的結果供大家參考。
在自動駕駛應用程式中,輸入的是視訊數據,需要關注的目標有很多,例如車輛,行人,自行車等等。因此,這是一個典型的多物體追蹤任務(MOT)。對於MOT任務來說,目前最受歡迎的框架是Tracking-by-Detection,其流程如下:
#①由目標偵測器在單一畫面影像上得到目標框輸出;
②提取每個偵測目標的特徵,通常包括視覺特徵和運動特徵;
③根據特徵計算來自相鄰影格的目標檢測之間的相似度,以判斷其來自同一個目標的機率;
④將相鄰幀的目標檢測進行匹配,給來自同一個目標的物體分配相同的ID。
深度學習在以上這四個步驟都有應用,但先前兩個步驟為主。在步驟1中,深度學習的應用主要在於提供高品質的目標偵測器,因此一般都選擇準確率較高的方法。 SORT是基於Faster R-CNN的目標檢測方法,並利用卡爾曼濾波演算法匈牙利演算法,大大提高了多目標追蹤的速度,同時達到了SOTA的準確率,也是在實際應用中使用較為廣泛的演算法。在步驟2中,深度學習的應用主要在於利用CNN來提取物體的視覺特徵。 DeepSORT最大的特點是加入外觀訊息,借用了ReID模組來提取深度學習特徵,減少了ID switch的次數。整體流程圖如下:
#此外,還有一個框架Simultaneous Detection and Tracking。如代表性的CenterTrack,它起源於先前介紹過的單階段無Anchor的偵測演算法CenterNet。與CenterNet相比,CenterTrack增加了前一幀的RGB影像和物體中心Heatmap作為額外輸入,增加了一個Offset分支用來進行前後幀的Association。與多個階段的Tracking-by-Detection相比,CenterTrack將偵測和匹配階段用一個網路來實現,提高了MOT的速度。
在自動駕駛的車道線偵測和可行駛區域偵測任務中均用到了語意分割。代表性的演算法有FCN、U-Net、DeepLab系列等。 DeepLab使用擴張卷積和ASPP(Atrous Spatial Pyramid Pooling)結構,對輸入影像進行多尺度處理。最後採用傳統語意分割法中常用的條件隨機場(CRF)來最佳化分割結果。下圖是DeepLab v3 的網路結構。
近年來的STDC演算法採用了類似FCN演算法的結構,去掉了U-Net演算法複雜的decoder結構。但同時在網路下取樣的過程中,利用ARM模組不斷地去融合來自不同層特徵圖的訊息,因此也避免了FCN演算法只考慮單一像素關係的缺點。可以說,STDC演算法很好的做到了速度與精確度的平衡,可以滿足自動駕駛系統即時性的要求。演算法流程如下圖所示。
接下來我們將介紹自動駕駛中必不可少的3D場景感知。因為深度資訊、目標三維尺寸等在2D感知中是無法取得的,而這些資訊才是自動駕駛系統對周遭環境做出正確判斷的關鍵。想得到3D訊息,最直接的方法就是採用光達(LiDAR)。但是,LiDAR也有其缺點,例如成本較高,車規級產品量產困難,受天氣影響較大等等。因此,單純基於相機的3D感知仍然是一個非常有意義和價值的研究方向,接下來我們梳理了一些基於單目和雙目的3D感知演算法。
#基於單一相機影像來感知3D環境是一個不適定問題,但是可以透過幾何假設(例如像素位於地面)、先驗知識或一些額外資訊(例如深度估計)來輔助解決。本次將從實現自動駕駛的兩個基本任務(3D目標偵測和深度估計)出發進行相關演算法介紹。
4.1 3D目標偵測
##表示轉換(偽雷射雷達):視覺感測器對周圍其他車輛等的偵測通常會遇到遮蔽、無法度量距離等問題,可以將透視圖轉換成鳥瞰圖表示。這裡介紹兩種變換方法。一是逆透視圖映射(IPM),它假定所有像素都在地面上,並且相機外參準確,此時可以採用Homography變換將圖像轉換到BEV,後續再採用基於YOLO網絡的方法檢測目標的接地框。二是正交特徵變換(OFT),利用ResNet-18擷取透視圖影像特徵。然後,透過在投影的體素區域上累積基於影像的特徵來產生基於體素的特徵。然後將體素特徵沿垂直方向折疊以產生正交的地平面特徵。最後,用另一個類似ResNet的自上而下的網路進行3D目標偵測。這些方法只適應車輛、行人這類貼地的目標。
對於交通標誌牌、紅綠燈這類非貼地目標來說,可以透過深度估計來產生偽點雲,進而進行3D偵測。 Pseudo-LiDAR先利用深度估計的結果產生點雲,再直接應用基於雷射雷達的3D目標偵測器產生3D目標框,其演算法流程如下圖所示,
關鍵點和3D模型:待偵測目標如車輛、行人等其大小和形狀相對固定且已知,這些可以被用作估計目標3D資訊的先驗知識。 DeepMANTA是這個方向的開創性工作之一。首先,採用一些目標偵測演算法例如Faster RNN來得到2D目標框,同時也偵測目標的關鍵點。然後,將這些2D目標框和關鍵點與資料庫中的多種3D車輛CAD模型分別進行匹配,選擇相似度最高的模型作為3D目標偵測的輸出。 MonoGRNet則提出將單眼3D目標偵測分成四個步驟:2D目標偵測、實例層級深度估計、投影3D中心估計值和局部角點迴歸,演算法流程如下圖所示。這類方法都假設目標有相對固定的形狀模型,對於車輛來說一般是滿足的,對於行人來說就相對困難一些。
2D/3D幾何限制:對3D中心和粗略實例深度的投影進行回歸,並使用這二者估算粗略的3D位置。開創性的工作是Deep3DBox,首先用2D目標框內的影像特徵來估計目標大小和朝向。然後,透過一個2D/3D的幾何限制來求解中心點3D位置。這個限制就是3D目標框在影像上的投影是被2D目標框緊密包圍的,也就是2D目標框的每條邊上都至少能找到一個3D目標框的角點。透過先前已經預測的大小和朝向,再配合上相機的標定參數,可以求解出中心點的3D位置。 2D和3D目標框之間的幾何約束如下圖所示。 Shift R-CNN在Deep3DBox的基礎上將先前得到的2D目標框、3D目標框以及相機參數合併起來作為輸入,採用全連接網路預測更為精確的3D位置。
直接產生3DBox:這類方法從稠密的3D目標候選框出發,透過2D影像上的特徵對所有的候選框進行評分,評分高的候選框即是最終的輸出。有些類似目標偵測中傳統的滑動視窗方法。代表性的Mono3D演算法首先基於目標先驗位置(z座標位於地面)和大小產生稠密的3D候選框。這些3D候選框投影到影像座標後,透過綜合2D影像上的特徵對其進行評分,再透過CNN再進行二輪評分得到最終的3D目標框。
M3D-RPN是一種基於Anchor的方法,定義了2D和3D的Anchor。 2D Anchor透過影像上稠密採樣得到,3D Anchor是透過訓練集資料的先驗知識(如目標實際大小的平均值)來確定的。 M3D-RPN也同時採用了標準卷積和Depth-Aware卷積。前者俱有空間不變性,後者將影像的行(Y座標)分成多個組,每組對應不同的場景深度,並以不同的捲積核來處理。上述這些稠密取樣方法計算量非常大。 SS3D則採用更高效的單階段偵測,包括用於輸出影像中每個相關目標的冗餘表示以及相應的不確定性估計的CNN,以及3D邊框最佳化器。 FCOS3D也是單階段的偵測方法,迴歸目標額外增加了一個由3D目標框中心投影到2D影像所得到的2.5D中心(X,Y,Depth)。
4.2 深度估計
#不管是上述的3D目標偵測或是自動駕駛感知的另一項重要任務——語意分割,從2D擴展到3D,都或多或少得應用到了稀疏或稠密的深度資訊。單眼深度估計的重要性不言而喻,其輸入是一張影像,輸出是相同大小的一張由每個像素對應的場景深度值組成的影像。輸入也可以是影片序列,利用相機或物件運動帶來的額外資訊來提高深度估計的準確度。
相較於監督學習,單目深度估計的無監督方法無需建立極具挑戰性的真值資料集,實現難度較低。單目深度估計的無監督方法可分為基於單眼視訊序列和基於同步立體影像對兩種。
前者是建立在運動攝影機和靜止場景的假設之上的。在後者的方法中,Garg等人首次嘗試使用同一時刻立體校正後的雙眼影像對進行影像重建,左右視圖的位姿關係透過雙目標定得到,獲得了較為理想的效果。在此基礎上,Godard等人用左右一致性約束進一步地提升了精度,但是,在逐層下採樣提取高級特徵來增大感受野的同時,特徵分辨率也在不斷下降,粒度不斷丟失,影響了深度的細節處理效果和邊界清晰度。為緩解這個問題,Godard等人引入了全解析度多尺度的損失,有效減少了低紋理區域的黑洞和紋理複製帶來的偽影。但是,這對精度的提升效果仍是有限的。
最近,一些基於Transformer的模型層出不窮,旨於獲得全階段的全局感受野,這也非常適用於密集的深度估計任務。在有監督的DPT中就提出採用Transformer和多尺度結構來同時確保預測的局部精確性和全局一致性,下圖是網路結構圖。
雙眼視覺可以解決透視變換帶來的歧義性,因此從理論上來說可以提高3D感知的準確度。但是雙眼系統在硬體和軟體上要求都比較高。硬體上來說需要兩個精確配準的攝影機,而且需要確保在車輛運行過程中始終保持配準的正確性。軟體上來說演算法需要同時處理兩個攝影機的數據,計算複雜度較高,演算法的即時性難以保證。與單目相比,雙目的工作相對較少。接下來也同樣從3D目標偵測和深度估計兩方面進行簡單介紹。
5.1 3D目標偵測
#3DOP是兩階段的偵測方法,是Fast R-CNN方法在3D領域的拓展。首先利用雙眼影像產生深度圖,將深度圖轉換為點雲後再量化為網格資料結構,再以此為輸入產生3D目標的候選框。與先前介紹的Pseudo-LiDAR類似,都是將稠密的深度圖(來自單目、雙眼甚至低線數LiDAR)轉換為點雲,然後再應用點雲目標偵測領域的演算法。 DSGN利用立體匹配來建立平面掃描體,並將其轉換成3D幾何體,以便編碼3D幾何形狀和語義訊息,是一個端到端的框架,可提取用於立體匹配的像素級特徵和用於目標識別的高級特徵,並且能同時估計場景深度和偵測3D目標。
Stereo R-CNN擴展了 Faster R-CNN 用於立體輸入,以同時檢測和關聯左右視圖中的目標。在RPN之後增加額外的分支來預測稀疏的關鍵點、視點和目標尺寸,並結合左右視圖中的2D邊界框來計算粗略的3D目標邊界框。然後,透過使用左右感興趣區域的基於區域的光度對齊來恢復準確的3D邊界框,下圖是它的網路結構。
#5.2 深度估計
雙目深度估計的原理很簡單,就是根據左右視圖上同一個3D點之間的像素距離d(假設兩個相機保持同一高度,因此只考慮水平方向的距離)即視差,相機的焦距f,以及兩個相機之間的距離B(基線長度),來估計3D點的深度,公式如下,估計出視差就可以計算出深度。那麼,需要做的就是為每個像素點在另一張影像上找出與之相符的點。
對於每一個可能的d,都可以計算每個像素點處的匹配誤差,因此就得到了一個三維的誤差資料Cost Volume。透過Cost Volume,我們可以很容易地得到每個像素處的視差(對應最小匹配誤差的d),從而得到深度值。 MC-CNN用一個卷積神經網路來預測兩個影像區塊的匹配程度,並用它來計算立體匹配成本。透過基於交叉的成本總和和半全域匹配來細化成本,然後進行左右一致性檢查以消除被遮蔽區域中的錯誤。 PSMNet提出了一個不需要任何後處理的立體匹配的端到端學習框架,引入金字塔池模組,將全局上下文資訊納入圖像特徵,並提供了一個堆疊沙漏3D CNN進一步強化全局資訊。下圖是其網路結構。
以上是自動駕駛視覺感知演算法技術綜述的詳細內容。更多資訊請關注PHP中文網其他相關文章!