目錄
- 前言
- 0. 簡述
- 1. 環視背景介紹
- 2. 環視思路
- 3. 主流基于環視Camera的算法詳解
- 總結
- 下載鏈接
- 參考
前言
自動駕駛之心推出的《國內首個BVE感知全棧系列學習教程》,鏈接。記錄下個人學習筆記,僅供自己參考
本次課程我們來學習下課程第四章——基于環視Camera的BEV感知算法,先來了解下環視的背景
課程大綱可以看下面的思維導圖
0. 簡述
從我們第四章開始我們會對環視 BEV 感知算法去進行詳細的講解,那環視背景我們主要分為三個模塊,4.1 到 4.3 節是主要針對背景介紹,第一個是環視背景,我們為什么要做環視,環視有什么優勢;另外一個是對環視思路的一個講解;另外第三個是我們本次課程當中涉及到的一些環視 Camera 算法的講解
1. 環視背景介紹
OK,我們先看一下環視是什么,我們說的 BEV 環視,環視是什么,那我們在討論環視之前,先來了解一下為什么需要攝像頭?
與其他傳感器相比,相機具有最密集的信息,所以說信息非常密集非常豐富那從中提取到信息也是非常具有挑戰性的一件事情,但同時它的信息也是非常有用的,那所以我們要用環視的相機的設置來去做我們自動駕駛任務。另外一個是成本的考慮,與其他的利用激光雷達的傳感器相比,相機也是很便宜的,而且相機在探測長距離物體方面它的性能往往表現是比較好的,那提取完環視信息之后可以做一些視覺的任務,比如像道路探索,比如像交通燈的狀態,行車標志等等,像這些東西是需要視覺去感知的,像普通的激光雷達是很難做到這些事情的
那我們知道我們說的環視是一種環繞攝像頭的設置,那攝像頭的數量可能會因為不同的自動駕駛公司產生一點點的區別,通常情況下來講每輛車一般是 6-12 個攝像頭,可能需要這些多個相機覆蓋車輛周圍的 3D 場景,那如果只有單一相機會出現什么問題呢,比如我們可能只有前視角的圖像,那前視角的數據是一個比較局限的數據,如果利用單一視角的數據去做后續的一系列的感知任務的話,那對我們的安全性是具有嚴重的挑戰的
那另外一個我們再看一個事情,我們說的環視傳感器是我們相機的本身硬件帶來的優勢,那環視為什么要做 BEV 呢?那俯視空間跟環視傳感器是什么關系呢?鳥瞰圖其實是非常適合環視的一種特征表達方式,我們在鳥瞰圖中使用 3D,為什么呢,因為它與 360° 的傳感器融合會很自然
我們舉個簡單例子,比如像 LiDAR,比如像 Radar,我們在多視角場景下怎么樣把這個多視角的數據統一到一個特征空間上面去做融合判斷呢,哪個空間很適合做這個事情呢,俯視空間很適合做這個事情,BEV 當中操作可以很好的模擬動態場景的時間一致性,與普通的透視視圖相比,透視視圖就是所謂的相機視角,BEV 中的運動補償就是平移,還有旋轉的建模,是要簡單很多的。
那比如在 BEV 視圖當中車輛自身的這個姿態變化取決于運動,那我們如果在透視視圖當中,普通的相機視角下如果車輛自身發生變化的話,它的姿態變化取決于什么呢,取決于深度和運動,所以說在 BEV 空間當中考慮車輛的姿態變化是一個相對簡單的事情。另外一個在 BEV 視圖當中我們也講過目標是具有尺度一致性的,而透視圖不是比如前視圖物體離我們前視圖越近,它看起來越大,離我們相機視角越遠看起來越小,那所以透視圖具有尺度變化差異,同一個物體可能產生特征上的差異性,那這就給我們后續的檢測會帶來一些困難
然而 BEV 視圖不是,BEV 視圖下同類目標尺度差異我們可以認為近似沒有,小轎車應該都差不多大,它的差異也只是微小差異,所以我們說 BEV 視圖學習特征尺度一致性會變得更加容易
那如果構造出一個比較好的 BEV 空間的話對后續的下游任務也是更好的,后續下游任務有哪些呢,比如說像運動預測,運動規劃,那在 BEV 視圖下有一個通用坐標系去處理這個事情,那所以我們說環視的優勢就在于它可以利用 360° 的相機數據來看我們的 3D 場景,那 BEV 環視的優勢呢,是將多視角數據可以統一的融合到 BEV 視角下去做后續一系列的處理任務,那它難點在哪呢,難點就是我們怎么把環視數據統一的都能映射到 BEV 空間上面,那這是任務的難點。
2. 環視思路
那前面我們學習了一個簡單介紹,我們再來看一下環視思路是什么,那大家現在都是怎么做環視的呢
博主這里以 2023/12/10 當天的 nuScenes 榜單為例,模態選的是 Camera 是相機模態,也就是純相機方案,排名是按照 mAP 指標排名的,那 mAP 應該是越高越好的一個指標。我們從這些排名靠前的算法名稱來看,因為名稱是能體現算法的主體思路的,入眼的第一個詞是什么,是 BEV,那 BEV 也是我們課程的核心內容;第二個詞是什么呢,是 Former,Former 是什么,那我們比較直觀的理解就是 Transformer,屬于什么呢,屬于技術方法
所以環視算法就目前來看使用特征空間最好的是什么呢,是 BEV 空間,通用的技術模塊是什么呢,是 Transformer,那我們榜單上面的做法大家都是這么做的。OK,我們就這里簡單看一下
3. 主流基于環視Camera的算法詳解
下面我們結合課程當中的主要方法對各種環視算法進行一個簡單介紹,給大家介紹一下我們課程涉及到的一些方法它們的思路是什么,是涉及哪個方面的,那我們按照大綱的順序一個一個看,那詳細的算法是怎么實現的呢,后續在詳細的章節中我們再展開
我們說 BEV 感知算法的核心是什么,是 BEV 特征空間的構建,我們怎么把環視圖像輸入轉換到 BEV 上是我們算法的核心內容,我們這里要說的第一個算法叫 DETR3D,它的框圖如下所示:
DETR3D 從名字上看很明顯是 DETR 從 2D 到 3D 領域的延伸,那 DETR3D 怎么構建 BEV 特征的呢,它如何去生成我們要的 BEV 表征呢,其實 DETR3D 特征構建圍繞的是 Query 展開,通過 Object Query 找到對應的 3D Reference Points 去利用 Reference Points 到 2D 圖像上采特征,通過 3D 到 2D 這樣取特征的方式得到目標的 BEV 表征,后續我們會對這個表征不斷地迭代不斷地優化,然后輸出最終的檢測結果,那我們剛剛說的流程其實就是我們在第二章中提到的從 3D 到 2D 的流程,是 DETR3D 中做的
我們再說第二個 BEVFormer,它的框圖如下所示:
BEVFormer 輸入的同樣是多視角圖像,輸出的是分割和檢測的結果,BEVFormer 想建立的 BEV 表征中依賴什么呢,我們看到上圖中有兩個模塊,一個模塊是 Temporal Self-Attention 時序注意力,一個模塊是 Spatial Cross-Attention 空間注意力。這意味著 BEVFormer 它在構建 BEV 空間的時候它需要既關注當前時刻的 BEV 特征也要關注到我們歷史 BEV 特征,那所以它這里歷史 BEV 是作為時序信息引入到當前 BEV 表征生成當中的。那空間注意力什么意思呢,空間注意力融合的是跨視角的信息,不同視角其實對應的 3D 空間不同位置的表征嘛,圖 (b) 中藍色和綠色其實對應的是多視角的特征,那這樣跨視角的融合我們叫空間融合
那所以 BEVFormer 它關注的并不是我們怎么拿特征,而是關注的是我們怎么樣利用時序信息利用空間信息讓我們的 BEV 生成得更好,有了更好的 BEV之后呢,我們是不是就可以得到更準確的檢測結果了,那這就是 BEVFormer 的主要思路
我們再看第三個內容 BEVDet,它的框圖如下所示:
BEVDet 它還有一個后續的延伸框架叫 BEVDet4D,那兩個工作其實是一脈相承的,4D 其實是比普通的 BEVDet 這個框架多了一維信息,這個信息是什么呢,我們通常說 3D 空間是三維維度,4D 是啥意思,那就是額外添加了一維嘛,添加了時序維度,也就是說除了我們通用的空間維度之外呢,BEVDet4D 引入了時序維度所以叫 4D
那 BEVDet 它的一個整體流程其實非常簡單,它對于輸入的多視角圖像先提取圖像特征,然后將圖像特征轉換到 BEV 空間,再通過一個 BEV 編碼然后輸出后續的檢測結果,所以 BEVDet 這個工作其實更偏向一個偏工程性的一個工作,那也就是說本身這個工作沒有特別有創新的地方,那本身是沒有設計出任何新的模型的,而是更關注于我們基于 BEV 去做 3D 檢測的可行性,能不能使用 BEV 去做,是不是很實用,它關注的是工程性質上的一些應用,是通過一些成熟的框架來構建這個完整的 BEVDet 的一個模塊
所以也給了我們一個啟發,我們不一定要有非常好的 idea 才能發文章,往往業界更關注的是工程能力,實際的性能,那 BEVDet 也開源了一個 tensorRT 的版本,性能也非常強勁,也是比較推薦學習的,大家感興趣的可以看看:https://github.com/LCH1238/bevdet-tensorrt-cpp
我們課程第四塊內容是圍繞 PETR 展開的,它的框圖如下所示:
PETR 看名字我們可以知道它是 DETR 的延伸,我們知道 DETR 是 2D 目標檢測,所以在位置編碼的時候引入的是 2D 位置編碼,輸出的特征我們通常認為已經隱式的感知到了 2D 位置關系。那 PETR 做什么事情,我們需要處理的任務是 3D 檢測任務,那所以我們如果僅僅使用 2D 位置編碼肯定是不夠的,所以 PETR 引入了 3D 位置編碼,將 3D 坐標編碼進多視角圖像當中,我們從圖中可以看到它有一個 3D 坐標生成器,通過 Encoder 網絡將 3D 坐標編碼到 2D 特征當中。我們認為這種隱式的對應關系可以讓 2D 特征能夠很好的感知到 3D 空間位置關系,也就是說輸出的特征對 3D 空間位置是比較敏感的,我們位置一旦發生了變化,所對應的輸出特征也會發生變化
所以隱式是什么意思,我們為什么一直強調隱式和顯式,隱式的意思是說我們沒有一個明確的監督信息,沒有一個明確的提示,它對深度是一種隱式的學習,我們也不知道網絡怎么做的,反正學得挺好,我們沒有給明確的提示,但網絡就是能學出來,所以我們一般把這種行為叫隱式
另外第五部分我們圍繞 BEVDepth 展開,它的框圖如下所示:
我們課程規劃還是希望盡可能地覆蓋全面,BEVDepth 從名稱上看是給我們提供了一種不一樣的 BEV 視角,它更關注什么呢,深度信息,那深度已經是我們強調的非常重要的概念了,在 2D 到 3D 的特征重構當中不可或缺,我們也講過以往的深度怎么做,2D 到 3D 離散深度分布,2D 到 3D 還有連續的深度預測
那 BEVDepth 其實是屬于離散的一個范疇,離散深度分布估計的范疇,但是它的不同點在于為了深度分布提供了顯式的監督信息,那這個監督來源在哪呢,它這個監督是官方提供的標注嘛,其實不是,深度監督信息來源于對應的 3D 點云的投影,我們知道 3D 點云其實是包含了深度信息的,那這個深度信息其實是可以作為我們 2D 深度估計網絡的監督使用的,用于輔助深度預測網絡的訓練,利用 3D 點云提供的深度信息作為監督幫助深度信息網咯學習得更好
所以總的來說,BEVDepth 這篇文章還是圍繞一個如何預測更準確的深度展開
那我們最后一塊叫 BEVDistill,它的框圖如下所示:
BEVDistill 這個工作其實是給大家提供了一個完全不一樣的看問題的視角,我們說現在的 LiDAR-based 的方法比 Camera-based 的方法性能要更好,那這個更好的信息來源是什么呢,那信息來源其實是因為本身 LiDAR 它的 3D 位置空間信息更好,那所以它塑造一個更好的 BEV 特征,那我們能不能將這個更好的 BEV 特征遷移到圖像 BEV 上呢,圖像 BEV 能不能從點云 BEV 上學習到這種更好的特征表達呢,那這就是 BEVDistill 考慮的核心內容
所以說 BEVDistill 通過這樣的一個 Teacher 和 Student 學習蒸餾的模式,我們促使圖像 BEV Featute 向點云 BEV Feature 學習到更好的特征表示。所以從另外的角度它也告訴我們一個道理,除了網絡最終的相互競爭以外,我們還可以對中間特征還有中間預測集合去進行約束,利用特征我們可以使得圖像特征向點云特征學習,通過預測集合的約束我們可以知道圖像預測結果可以點云的預測結果學習,那如果學的好這個損失就小,學得差這個損失就偏大。通過這樣的方式促使我們環視算法盡可能的在特征提取上在性能上可以逼近 BEV-LiDAR 的方法
以上是我們第四章涉及到算法的基本介紹,那我們最后一節會挑選 BEVFormer 作為實例代碼來給大家講解
總結
在這節課程我們主要對環視 BEV 感知算法進行了一個背景介紹,BEV 環視的優勢在于可以將多視角的圖像數據統一的融合到 BEV 視角下做一系列的任務,其難點在于如何把環視數據統一的映射到 BEV 空間上面。此外我們還簡單介紹了課程接下來會講解的一些主流的環視 Camera 的 BEV 感知算法,包括 DETR3D、BEVFormer、BEVDet、PETR、BEVDepth、BEVDistill 等等。
下一節我們會講解具體的環視 BEV 感知算法 DETR3D,敬請期待😄
下載鏈接
- 論文下載鏈接【提取碼:6463】
- 數據集下載鏈接【提取碼:data】
參考
-
[1] Singh et al. Surround-view vision-based 3d detection for autonomous driving: A survey
-
[2] Wang et al. Detr3d: 3d object detection from multi-view images via 3d-to-2d queries
-
[3] Li et al. Bevformer: Learning bird’s-eye-view representation from multi-camera images via spatiotemporal transformers
-
[4] Huang et al. Bevdet: High-performance multi-camera 3d object detection in bird-eye-view
-
[5] Huang et al. Bevdet4d: Exploit temporal cues in multi-camera 3d object detection
-
[5] Liu et al. Petr: Position embedding transformation for multi-view 3d object detection
-
[6] Li et al. Bevdepth: Acquisition of reliable depth for multi-view 3d object detection
-
[7] Chen et al. Bevdistill: Cross-modal bev distillation for multi-view 3d object detection