BEV(Bird’s-Eye-View)是一種鳥瞰檢視的感測器資料表示方法,它的相關技術在自動駕駛領域已經成了「標配」,紛紛在新能源汽車、晶片設計等行業相繼量產落地。BEV同樣在高德多個業務場景使用,例如:高精地圖地面要素識別、車道線拓撲構建、車端融合定位中都扮演了重要角色。如圖1‑1所示:
圖1‑1 BEV在高德應用場景(僅列舉部分)a)高精底圖 b)地面要素識別 c)車道線拓撲構建[1] d)車端融合定位(BEV特徵和底圖匹配)[2]
本文分享的內容主要包括兩個部分:視覺BEV基本原理、方案解析。
1.BEV基礎
1.1.引言
如圖1‑2所示,BEV具有如下優勢:
1) BEV檢視尺度變化小。在PV空間(即透檢視,類似通常行車記錄儀所採集的車輛前檢視)中,物體近大遠小,物體的大小和類別、遠近都有關,而在BEV空間中,物體的大小隻和類別有關;
2) BEV空間是決策友好空間。BEV空間更接近3D真實空間的平面空間,而PV空間是真實物理世界在透視投影下的檢視,以圖1‑2的車道線舉例,在真實世界中平行的兩條車道線,在BEV空間下還是平行的,在PV空間卻是相交的。相比之下,BEV空間下的資訊能更方便地被下游規控模組理解和使用。
本章將介紹BEV基礎知識。首先介紹BEV的核心**「視角轉換模組」的基本原理**,包括2D->3D和3D->2D兩種路線,然後介紹BEV使用的魔法「可形變模組」,最後介紹BEV方案中常用的損失函數。
圖1‑2 BEV空間和PV空間的影象視覺化,a) BEV空間 b) PV空間
1.2.視角轉換
如1.1所述,在BEV空間下進行資料處理和操作具有尺度變化小、決策友好的優勢,但原始的影象資料是在PV空間下的,如何將PV空間的資料轉換到BEV空間或者是3D空間(有3D空間下的資料,將其拍扁就能轉到BEV空間)呢?這就是視角轉換模組要乾的事。
1.2.1. 2D->3D轉換模組
2D->3D轉換模組基本思想是從2D畫素或者特徵出發去找3D空間下的對應表示,類似深度估計。下面介紹主流的2D->3D轉換方法。
LSS(Lift-Splat-and-Shot)[3]是主流的2D->3D轉換方法,如圖1‑3所示,Lift指對各相機的影象顯式地估計特徵點的深度分佈,得到包含影象特徵的視錐(點雲);Splat——結合相機內外參把所有相機的視錐(點雲)分配到BEV空間的網格中,對每個格子中的多個視錐點進行pooling計算,形成BEV特徵圖;Shoot——用task head處理BEV特徵圖,輸出感知結果。最後將C維的特徵和D維的深度分佈做外積,得到每個深度下的特徵,深度概率越大,對應特徵響應就越強。
圖1‑3 LSS示意,每個特徵點生成系列離散深度點,再為深度點生成特徵[3]
Pseudo-LiDAR是另一種2D->3D轉換方法,如圖1‑4所示,相比LSS為特徵點預測一系列離散深度,Pseudo-LiDAR直接預測深度圖,每個畫素都有且僅有一個深度。
圖1‑4 Pseudo-LiDAR示意,預測深度圖,根據原始影象和深度圖對映至3D空間[4]
1.2.2. 3D->2D轉換模組
3D->2D轉換模組基本思想是根據3D點查詢對應的2D特徵,類似3D空間投影到PV空間。下面介紹主流的3D->2D轉換方法。
如圖1‑5所示,將3D參考點根據成像原理投影到PV空間獲取對應影象特徵的方式可以認為是顯式對映,這裡的參考點可以使用預設的BEV空間的參考點,也可以使用網路生成。
圖1‑5 顯式對映[5]
相比顯式對映,隱式對映不再通過投影對映,而是讓網路自己學特徵和3D座標的對映。如圖1‑6所示,它先生成視錐空間下的一系列點,再轉換到3D空間下,然後將提取的影象特徵和3D點傳入encoder,encoder處理後輸出的就是帶有3D座標資訊的特徵。
圖1‑6 隱式對映[6]
1.3. 可形變模組
要介紹的可形變模組有兩種,可形變折積和可形變注意力,可形變模組的作用更容易通過可形變折積理解,所以先介紹可形變折積。
可形變折積是在折積的基礎上新增offset得到的,如圖1‑7最左邊的a) 所示,普通折積通過人工設計的pattern整合pattern內取樣點的資訊,其pattern設計好後就是固定的,可形變折積,如圖1‑7 b) 所示,可以計算出每個取樣點的offset,取樣點+offset才是真實的取樣點,使得折積的pattern形式更加靈活,且一定程度上可學習。
圖1‑7 可形變折積示意,a) 普通折積 b) 可形變折積[7]
如圖1‑8所示,注意力機制需要通過Q (query) 找到K (key),獲得K的資訊,這個過程也存在可變形的操作空間,讓網路自己學習參考點的偏移量。
圖1‑8 可變形注意力示意[8]
1.4. 損失函數
損失函數大部分與任務相關,且大同小異,這裡集中介紹下後續方案解析需要用到的一些共性的損失函數。
Box Loss (包圍盒損失函數) 是目標檢測常用的幾何損失函數,常採用L1 Loss的形式:
Focal Loss是交叉熵損失函數的拓展,常用於分類問題。普通交叉熵損失函數在正負樣本不均衡時表現不佳,因此引入平衡交叉熵。另外普通交叉熵損失函數對於難例無法重點學習,因此引入難例聚焦。最終形式為:
2. 視覺BEV方案解析
2.1. 引言
第一章的內容為第二章的方案解析打下知識基礎,接下來第二章主要解析具有代表性的視覺BEV方案,主要根據視角轉換模組的型別對方案進行分類,首先介紹2D->3D的代表性方案,然後介紹3D->2D的代表性方案。
2.2. 2D->3D代表性方案解析
2D->3D的代表性BEV方案有BEVDet和BEVDepth,下面我們逐一介紹。
2.2.1. BEVDet
3D目標檢測跟蹤由基於PV空間的方法主導,BEV語意分割跟蹤由基於BEV空間的方法主導,那麼PV空間和BEV空間哪個更適合做自動駕駛感知呢?是否可以在同一的框架下做這些任務?作者為了回答這兩個問題,提出瞭如圖2‑1所示的基於BEV空間的3D目標檢測框架,BEVDet。BEVDet主要由四個部分組成,分別為影象特徵編碼器,視角轉換模組,BEV特徵編碼器,檢測頭。
圖2‑1 BEVDet框架[9]
影象特徵編碼器(Image-view Encoder)使用2D Backbone網路,如ResNet、SwinTransformer等,對輸入的多視角影象做多尺度特徵提取,得到多尺度特徵。
視角轉換模組(View Transformer)對輸入的多視角影象特徵使用LSS進行離散深度分佈預測,獲得3D視錐特徵。
3D視錐特徵經過pooling操作拍扁到BEV空間,BEV特徵編碼器(BEV Encoder)對BEV空間下的特徵做多尺度特徵提取,得到BEV特徵。
最後送入檢測頭進行3D目標檢測,分類監督使用的損失函數為Focal loss,包圍盒監督使用的損失函數為L1 loss。
2.2.2. BEVDepth
作者實驗發現LSS估計的深度替換成隨機值影響不大,而採用真值深度對指標提升很大,因此得出LSS估計深度不準的結論,如圖2‑2所示,在沒有明確的深度監督的情況下,很難輸出準確,泛化性強的深度感知結果,要想獲得更好的檢測結果,需要更準的深度,因此引入深度監督訓練深度子網路。
圖2‑2 LSS的深度預測結果和BEVDepth的深度預測結果的對比[10]
圖2‑3是BEVDepth的框架,也能大致分為影象特徵編碼器,視角轉換模組,BEV特徵編碼器,檢測頭四個部分。影象特徵編碼模組大同小異,後續不再展開說明。
圖2‑3 BEVDepth框架[10]
視角轉換模組的核心是深度估計,深度估計網路DepthNet的框架如圖2‑4所示,首先使用MLP對相機內參進行特徵化,然後用SE (Squeeze-and-Extraction) 對影象特徵進行通道加權,然後經過3個殘差塊以及可形變折積,得到深度。深度再與影象特徵進行外積,得到3D視錐特徵。
圖2‑4 深度估計網路框架[10]
相機和用於監督的點雲之間的外參可能不準,內參也可能不準,都會導致深度估計有偏,因此BEV特徵編碼器引入深度修正對3D視錐特徵的深度進行修正,然後進行高效體素池化獲得BEV特徵。
檢測頭所使用的損失函數和BEVDet是一致的,不做贅述。深度監督使用的損失函數為二分類交叉熵。
2.3. 3D->2D代表性方案解析
前面介紹的2D->3D的方案始終繞不過深度估計,深度估計難免會引入誤差,換個思路,先有3D點,再根據3D點找2D特徵的方式無需進行深度估計,避免了這部分誤差。3D->2D的代表性方案有Detr3D、BEVFormer和PETR。
2.3.1. Detr3D
如圖2‑5所示,Detr3D是Detr在3D目標檢測的擴充套件,也是使用query進行特徵獲取,然後進行檢測。Detr3D的影象特徵編碼器大同小異,不再贅述。
圖2‑5 Detr3D框架[5]
特徵轉換模組首先使用object query生成3D參考點,將參考點投影到PV空間獲取影象特徵,獲取到的影象特徵能進一步優化物體的3D表徵,得到物體的3D特徵。
將特徵送入檢測頭進行目標檢測,可以得到一系列的檢測結果。普遍地,大家會用NMS等後處理方式獲得最終用於Loss計算的檢測結果,如圖2‑6所示,Detr3D繼承了Detr的做法,採用雙邊圖匹配獲得與真值一一對應的檢測結果。損失函數與前面所述並未本質差異,不做贅述了。
圖2‑6 雙邊圖匹配獲得與真值一一對應的檢測結果[11]
2.3.2. BEVFormer
行車過程有天然的時序特點,當前幀看到的車道線,在後續幾幀大概率也是存在且可見的,如何利用這個時序特點是前述方案沒有考慮的。BEVFormer引入時序資訊進一步增強BEV的檢測能力。BEVFormer的影象特徵編碼模組和前述大同小異,不做贅述。
BEVFormer的核心是中間的BEV特徵編碼模組,BEV特徵編碼模組的核心是時序自注意力(Temporal Self-Attention)和空間交叉注意力(Spatial Cross-Attention),時序注意力是為了利用歷史幀BEV特徵增強當前幀BEV特徵,空間交叉注意力則是為了從影象特徵獲取資訊。
圖2‑7 BEVFormer框架[12]
具體地,BEVFormer的時序自注意力首先利用車輛運動資訊將當前幀BEV特徵和歷史幀BEV特徵進行對齊,然後再使用自注意力融合兩者資訊,由於車輛運動資訊可能不準,不同時刻周圍的可利用資訊分佈也不一致,所以具體使用的是圖2‑8所示的可變形注意力機制。
圖2‑8 時序可變形自注意力[12]
BEVFormer的空間交叉注意力首先為每個格子在Z方向上取樣4個值,得到一個格子上的4個參考點,然後與影象特徵進行交叉注意力,獲得影象特徵。如圖2‑9所示,這裡的交叉注意力也採用可變形注意力機制。
圖2‑9 空間可變形交叉注意力[12]
損失函數的計算和Detr3D一致,不再贅述。
2.3.3. PETR
3D->2D的方案一般都需要將參考點投影到PV空間,再取影象特徵,PETR避免了複雜的3D->2D轉換及特徵取樣,直接讓網路自己學習2D-3D的對映。PETR的框架如圖2‑10所示,包括影象特徵編碼器、3D座標生成器、3D特徵編碼器(3D Position Encoder)、3D特徵解碼器和檢測頭。影象特徵編碼器大同小異,不再贅述。
圖2‑10 PETR框架[6]
3D座標生成器生成視錐空間的一系列3D點,具體地,首先將相機視錐空間離散成大小為的網格,網格中的每一點用表示。3D空間中一個點用表示。通過相機內外參可以將相機視錐空間轉換到3D空間中。最後再進行歸一化。
2D影象特徵和3D座標一起送入到3D特徵編碼器中,2D特徵進行折積通道降維,3D座標進行位置編碼,然後將處理後的2D特徵和3D座標編碼整合,最後特徵展平。
圖2‑11 3D特徵編碼器[6]
3D特徵解碼器先在3D空間生成一系列隨機點,再通過MLP生成可學習的query,query在3D特徵中取特徵,最後使用檢測頭進行檢測。損失函數與Detr3D大同小異,不再贅述。
3. 總結展望
本文從BEV的基礎出發,介紹了視覺BEV具有代表性的方案。視覺BEV已經展現出強大的場景理解能力。但是還存在很多值得探索且有挑戰的方向[13]:
深度估計是BEV的核心,LSS、Pseudo-LiDAR、鐳射蒸餾、立體視覺或運動恢復結構等都是有前景的方向。
如何融合感測器的資訊也是至關重要的,使用Transformer的自注意力、交叉注意力融合不同模態的特徵已經被證明是個可行的方向。多模態中CLIP的文字-影象對也是個很有啟發的思路。
泛化性是深度學習亙古不變的話題和努力的方向,在一個裝置(資料)上訓練好的模型在另一個裝置(資料)表現是否一樣好。每個裝置都要付出訓練成本是讓人難以接受的。如何將模型和裝置解耦在未來一段時間都將是重要的研究方向。
大模型或者基礎模型已經在不同領域上取得令人印象深刻的結果,並一舉成為SOTA。在BEV感知中如何利用大模型中豐富的知識,在更多的任務上取得更好的效果,這將會逐步引起人們的重視。
4. 參考文獻
[1] Bencheng Liao, Shaoyu Chen, Xinggang Wang, et al. Maptr: Structured modeling and learning for online vectorized hd map construction[J]. arXiv preprint arXiv:2208.14437,2022,
[2] Yuzhe He, Shuang Liang, Xiaofei Rui, et al. EgoVM: Achieving Precise Ego-Localization using Lightweight Vectorized Maps[J]. arXiv preprint arXiv:2307.08991,2023,
[3] Jonah Philion and Sanja Fidler. Lift, splat, shoot: Encoding images from arbitrary camera rigs by implicitly unprojecting to 3d[A]. Springer: 194-210
[4] Yan Wang, Wei-Lun Chao, Divyansh Garg, et al. Pseudo-lidar from visual depth estimation: Bridging the gap in 3d object detection for autonomous driving[A]. 8445-8453
[5] Yue Wang, Vitor Campagnolo Guizilini, Tianyuan Zhang, et al. Detr3d: 3d object detection from multi-view images via 3d-to-2d queries[A]. PMLR: 180-191
[6] Yingfei Liu, Tiancai Wang, Xiangyu Zhang, et al. Petr: Position embedding transformation for multi-view 3d object detection[A]. Springer: 531-548
[7] Jifeng Dai, Haozhi Qi, Yuwen Xiong, et al. Deformable convolutional networks[A]. 764-773
[8] Xizhou Zhu, Weijie Su, Lewei Lu, et al. Deformable detr: Deformable transformers for end-to-end object detection[J]. arXiv preprint arXiv:2010.04159,2020,
[9] Junjie Huang, Guan Huang, Zheng Zhu, et al. Bevdet: High-performance multi-camera 3d object detection in bird-eye-view[J]. arXiv preprint arXiv:2112.11790,2021,
[10] Yinhao Li, Zheng Ge, Guanyi Yu, et al. BEVDepth: Acquisition of Reliable Depth for Multi-View 3D Object Detection[J]. Proceedings of the AAAI Conference on Artificial Intelligence,2023,37(2): 1477-1485
[11] Nicolas Carion, Francisco Massa, Gabriel Synnaeve, et al. End-to-end object detection with transformers[A].Springer: 213-229
[12] Zhiqi Li, Wenhai Wang, Hongyang Li, et al. Bevformer: Learning bird’s-eye-view representation from multi-camera images via spatiotemporal transformers[A].Springer: 1-18
[13] Hongyang Li, Chonghao Sima, Jifeng Dai, et al. Delving into the Devils of Bird's-eye-view Perception: A Review, Evaluation and Recipe[J]. arXiv preprint arXiv:2209.05324,2022,