環境感知是自動駕駛的第一環,是車輛和環境交互的紐帶。一個自動駕駛系統整體表現的好壞,很大程度上都取決于感知系統的好壞。目前,環境感知技術有兩大主流技術路線:
②以激光雷達為主導,其他傳感器為輔助的技術方案,典型代表如谷歌、百度等。
我們將圍繞著環境感知中關鍵的視覺感知算法進行介紹,其任務涵蓋范圍及其所屬技術領域如下圖所示。我們分為兩節分別梳理了2D和3D視覺感知算法的脈絡和方向。
本節我們先從廣泛應用于自動駕駛的幾個任務出發介紹2D視覺感知算法,包括基于圖像或視頻的2D目標檢測和跟蹤,以及2D場景的語義分割。近些年,深度學習滲透到視覺感知的各個領域,取得不錯的成績,因此,我們梳理了一些經典的深度學習算法。
01目標檢測
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網絡等),各個算法的實現硬件平臺也不同,因此準確率和速度并不完全可比,這里只列出來一個粗略的結果供大家參考。
02目標跟蹤
在自動駕駛應用中,輸入的是視頻數據,需要關注的目標有很多,比如車輛,行人,自行車等等。因此,這是一個典型的多物體跟蹤任務(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的速度。
03語義分割
在自動駕駛的車道線檢測和可行駛區域檢測任務中均用到了語義分割。代表性的算法有FCN、U-Net、DeepLab系列等。DeepLab使用擴張卷積和ASPP(Atrous Spatial Pyramid ?Pooling)結構,對輸入圖像進行多尺度處理。最后采用傳統語義分割方法中常用的條件隨機場(CRF)來優化分割結果。下圖是DeepLab v3+的網絡結構。
近些年的STDC算法采用了類似FCN算法的結構,去掉了U-Net算法復雜的decoder結構。但同時在網絡下采樣的過程中,利用ARM模塊不斷地去融合來自不同層特征圖的信息,因此也避免了FCN算法只考慮單個像素關系的缺點。可以說,STDC算法很好的做到了速度與精度的平衡,其可以滿足自動駕駛系統實時性的要求。算法流程如下圖所示。
自動駕駛視覺感知算法(二)
上一節我們介紹了2D視覺感知算法,本節我們將介紹自動駕駛中必不可少的3D場景感知。因為深度信息、目標三維尺寸等在2D感知中是無法獲得的,而這些信息才是自動駕駛系統對周圍環境作出正確判斷的關鍵。想得到3D信息,最直接的方法就是采用激光雷達(LiDAR)。但是,LiDAR也有其缺點,比如成本較高,車規級產品量產困難,受天氣影響較大等等。因此,單純基于攝像頭的3D感知仍然是一個非常有意義和價值的研究方向,接下來我們梳理了一些基于單目和雙目的3D感知算法。01單目3D感知
基于單攝像頭圖像來感知3D環境是一個不適定問題,但是可以通過幾何假設(比如像素位于地面)、先驗知識或者一些額外信息(比如深度估計)來輔助解決。本次將從實現自動駕駛的兩個基本任務(3D目標檢測和深度估計)出發進行相關算法介紹。
1.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)。
1.2 深度估計
不管是上述的3D目標檢測還是自動駕駛感知的另一項重要任務——語義分割,從2D擴展到3D,都或多或少得應用到了稀疏或稠密的深度信息。單目深度估計的重要性不言而喻,其輸入是一張圖像,輸出是相同大小的一張由每個像素對應的場景深度值組成的圖像。輸入也可以是視頻序列,利用相機或者物體運動帶來的額外信息來提高深度估計的準確度。 相比于監督學習,單目深度估計的無監督方法無需構建極具挑戰性的真值數據集,實現難度更小。單目深度估計的無監督方法可分為基于單目視頻序列和基于同步立體圖像對兩種。前者是建立在運動相機和靜止場景的假設之上的。在后者的方法中,Garg等人首次嘗試使用同一時刻立體校正后的雙目圖像對進行圖像重建,左右視圖的位姿關系通過雙目標定得到,獲得了較為理想的效果。在此基礎上,Godard等人用左右一致性約束進一步地提升了精度,但是,在逐層下采樣提取高級特征來增大感受野的同時,特征分辨率也在不斷下降,粒度不斷丟失,影響了深度的細節處理效果和邊界清晰度。為緩解這一問題,Godard等人引入了全分辨率多尺度的損失,有效減少了低紋理區域的黑洞和紋理復制帶來的偽影。但是,這對精度的提升效果仍是有限的。 最近,一些基于Transformer的模型層出不窮,旨于獲得全階段的全局感受野,這也非常適用于密集的深度估計任務。有監督的DPT中就提出采用Transformer和多尺度結構來同時保證預測的局部精確性和全局一致性,下圖是網絡結構圖。
02雙目3D感知
雙目視覺可以解決透視變換帶來的歧義性,因此從理論上來說可以提高3D感知的準確度。但是雙目系統在硬件和軟件上要求都比較高。硬件上來說需要兩個精確配準的攝像頭,而且需要保證在車輛運行過程中始終保持配準的正確性。軟件上來說算法需要同時處理來自兩個攝像頭的數據,計算復雜度較高,算法的實時性難以保證。與單目相比,雙目的工作相對較少。接下來也同樣從3D目標檢測和深度估計兩方面進行簡單介紹。
2.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邊界框,下圖是它的網絡結構。
2.2 深度估計
雙目深度估計的原理很簡單,就是根據左右視圖上同一個3D點之間的像素距離d(假設兩個相機保持同一高度,因此只考慮水平方向的距離)即視差,相機的焦距f,以及兩個相機之間的距離B(基線長度),來估計3D點的深度,公式如下,估計出視差就可以計算出深度。那么,需要做的就是為每個像素點在另一張圖像上找出與之匹配的點。
對于每一個可能的d,都可以計算每個像素點處的匹配誤差,因此就得到了一個三維的誤差數據Cost Volume。通過Cost Volume,我們可以很容易得到每個像素處的視差(對應最小匹配誤差的d),從而得到深度值。MC-CNN用一個卷積神經網絡來預測兩個圖像塊的匹配程度,并用它來計算立體匹配成本。通過基于交叉的成本匯總和半全局匹配來細化成本,然后進行左右一致性檢查以消除被遮擋區域中的錯誤。PSMNet提出了一個不需要任何后處理的立體匹配的端到端學習框架,引入金字塔池模塊,將全局上下文信息納入圖像特征,并提供了一個堆疊沙漏3D CNN進一步強化全局信息。下圖是其網絡結構。
審核編輯:郭婷
?
評論
查看更多