閱讀筆記-NVAutoNet: Fast and Accurate 360 3D Perception for Self-Driving

論文鏈接:https://arxiv.org/pdf/2303.12976.pdf

Title


1. 動機和貢獻

  • 之前多視角的方法一般才有后融合的方式實現360°感知,即每個視角獨立完成感知,然后利用空間關系進行融合。但存在的問題是,獨立的單目感知其預測誤差差異可能很大,導致融合困難,經常導致很多的FP。(當然冗余檢測對安全性很重要)
  • 汽車公司一般很多生產線,比如SUV,sedan等,每個車型的尺寸不一致,攝像頭掛載的位置也不同。因此算法對相機的內外參的容忍度也很重要。
  • 對于self driving而言,其實時性也至關重要。

本文貢獻:

  • 圖像和bev 的特征抽取器使用NAS在特定硬件上搜索獲得,高指標低延時
  • 在特征層面實現對特征的融合。這樣的做法有個好處是增大了對view 數的魯棒性。
  • 提出了一種基于MLP的2d-to-3d的隆起模塊,該模塊不依賴于深度估計,而是顯示的利用了相機的內外參,這樣當模型訓練完成,因為相機內外參是輸入參數,因此可以適用于不同的掛載方式。
  • 所有的下游任務都被形式化為檢測任務,能夠直接利用上游結果。

其中第三點應該是本文的核心。

2. 本文方法

pipeline

本文方法整體的pipeline如上圖所示,輸入是能夠覆蓋360°場景的多個視角的圖像\{I_i\}_{i=1}^{N_{view}},以及每個視角對應相機的內外參。 圖像首先送入到2D encoder中進行特征編碼,這里不同的圖像可以對應不同的encoder,也可以是相同的encoder,文中的方法和我們的方法相同,前視單獨一個encoder,周視一個encoder,魚眼數據一個encoder。然后 每個視角的圖像特征經過 uplifted 操作轉成BEV特征,多個視角的BEV特征通過add 操作形成全視角的BEV特征,然后在該BEV特征上即可進行類似2D圖像上的3D目標檢測操作,經過BEV encoder抽取特征用于下游的3D檢測,free space和parking space的劃分。

2.1 2D Image Feature Extractors

這里文中提到幾點:

  • 不同視角圖像的encoder可以劃分group,同一個group使用相同的encoder
  • encoder結構是使用NAS搜索的,平衡了精度和延遲
  • 結構中去掉了skip-connections以獲得更高的吞吐量。
  • 類似FPN的結構,coarser feature map經過上采樣與finer feature map融合獲得更豐富的語義信息。

2.2 Image-to-BEV Transformation and Fusion

本文方法的核心部分。

2.2.1 BEV 平面到BEV 網格

這個就是真實場景到模型表示的轉換,BEV 網格以自車為中心點刻畫周圍平面的特征,每個網格表示一塊區域,就是分辨率的概念。一般而言,一個網格表示的區域大小是相同的,也有隨著距離變化分辨率發生變化的。本文使用G^{bev} \in R^{W^{bev}\times H^{bev}} 表示BEV網格。

2.2.2 2D圖像到BEV的uplifting(隆起)操作

文章提供了一種基于MLP的數據驅動的相機到BEV的變換函數,該方法以查表的方式顯式的利用相機的內外參,因此一旦模型訓練好以及拿到相機的配置參數就能拿到較好的泛化性。
該方法的motivation 是注意到圖像中像素的行列與BEV上極坐標的位置有較強的幾何關系, 具體而言,圖像中的每一列都對應著BEV上以過消失點的一條曲線(這里說曲線的原因是因為存在相機畸變),而不像之前方法一樣認為每一列對應BEV上的一條射線。那uplifting的目的就是學習出每一列到BEV對應曲線的擬合,從而分配特征。圖2 左子圖給出了圖像每一列在BEV上的映射關系。形式化表述而言,使用I^c表示圖像I的某一列,首先根據相機的內外參將該列的每一個像素點映射到BEV上并將他們轉換為極坐標,即\{b_i=[a_i, d_i]\}, 使用多項式擬合該極坐標下的曲線a=f^c(d),注意每一列的曲線是不同的,從而對于圖像任意列而言,給定其徑向距離能計算出其角度。
假定相機能拍攝的最遠距離為r, 使用對數空間將徑向距離劃分\hat{h} 個bins,對數空間保證近處的分辨率更大,遠處的分辨率更低。圖像某一列的特征表示為F_{cam}^c, 那么BEV變換網絡可以定義為F_{polar}^c = \mathcal{B}(F_{cam}^c)\in R^{\hat{h}\times C}, 于是通過查表法,極坐標表示的BEV每個位置的特征可以從圖像中獲得,從而構成BEV特征,其過程如圖2右圖所示。多個視角的BEV特征融合方法采用的加法,加法操作能夠允許網絡獨立于相機視角個數。

image.png

2.2.3 基于MLP的BEV變換

上一節說的將圖像的特征映射到BEV的函數\mathcal{B}(\cdot) 由MLP構成, MLP僅有一層隱層,且每一列的MLP不共享參數。這么做是因為MLP能夠刻畫全局的信息,由于圖像本身損失了深度信息以及目標可能存在不同高度,這么做對將圖像特征轉換到準確的BEV位置很重要。

2.2.4 極坐標與笛卡爾坐標的對比

BEV網格G^{bev} 在下游的檢測精度以及檢測范圍都很重要,對于自動駕駛而言,高速路段甚至需要預測前向200m,一般笛卡爾坐標系是0.25m的分辨率,相當于1600x1600的網格,太大。而且在實踐中,一般越近需要的精度越高,而越遠的距離段分辨率可以降低。而極坐標按角度和log空間的深度劃分,可以有效使用小的BEV大小刻畫整個范圍。

2.2.5 BEV 特征抽取

使用基于CNN backbone提取融合后BEV的特征,提取后的特征用于3D檢測頭。

3. 感知任務

3.1 3D目標檢測

  • 本文檢測任務對應9個自由度:位置點[r, a, e], 長寬高[d_x, d_y, d_z],以及roll, yaw, pitch角決定的方向矩陣R \in R^{3\times 3}, 這之前方法一般僅估計yaw角;
  • 為了避免NMS的后處理,采用set prediction的方式匹配gt和預測;
  • 具體而言,假設輸入特征\hat{F}_{bev} \in R^{M\times N \times C},然后具有5個head,分別對應class,位置,大小,角度和立方體參數的不確定度,和FCOS任務頭很類似。
  • classification 頭預測k+1類,第1個元素表示是否是前景目標
  • position 頭, r, a, e 分別表示徑向距離、角度和高程,也是基于anchor的
  • dimension頭, 長寬高,單位為m
  • orientation,預測yaw,pitch和roll的sine和cosine值
  • 訓練loss:
    image.png

    image.png

    每個式子里的\sigma是用于自主學習loss權重時的正則項。L^{loc}, L^{rot}都是L1損失,box 使用的是比值。

3.2 3D Freespace

Freespace, 也稱為可行駛區域,指道路邊界以內且沒有被任何障礙物占據的區域。本文將Freespace表示為radial distance map(RDM), RDM是由等角度的bin和對應的距離來表示,每個bin只預測一個值,在生成gt時是從中心點發射射線,其射線與gt的polygon的交叉點構成Freespace的目標。這樣的好處是可以直接使用預測結果構建freespace,而不用后處理。除了徑向距離,每個bin還有一個邊界場景label,如vehicle和vru等。于是每個freespace的gt label表示為(r, c), r是徑向距離向量,c是邊界語義向量。
具體模型實現時,CNN+兩個head,分別預測距離向量和語義向量。這里需要注意因為劃分的是bins所以其輸出的大小就是確定的,比如bins num=360,那就是預測360\times C的向量。
訓練loss:
L_{fsp}(G, P) = L_{fsp}^{reg}(\hat{r}, r) + L_{fsp}^{cls}(\hat{c}, c) \\ L_{fsp}^{reg} = L_{fsp}^{iou}(\hat{r}, r) + L_{fsp}^{sim}(\hat{r}, r)
其中分類損失是標準的focal loss,而回歸損失定義如下,這里說是iou其實就是比值回歸。
L_{fsp}^{iou}(\hat{r}, r) = \sum_{i=1}^{N_{bins}} \frac{min(r_i, \hat{r}_i)}{max(r_i, \hat{r}_i)} \\ L_{fsp}^{sim}(\hat{r}, r) = \sum_{i=1}^{N_{bins}}\Big(1.0 - \frac{l_i^{i+1}\cdot \hat{l}_i^{i+1}}{\Vert l_i^{i+1}\Vert \Vert \hat{l}_i^{i+1}\Vert } \Big)
其中l_i^{i+1}表示第i個bin中的頂點到第i+1個bin中的頂點的向量。

3.3 3D Parking Space

車位檢測需要預測的目標包括車位中心點位置,長寬和角度,角度0~180, 每個車位還劃分為3類: 傾斜、側方和垂直。模型和3D檢測頭一致(這里是說也用極坐標的方式?但看loss又不像) 損失函數一樣包括回歸和分類,回歸函數如下
L_{prk}^{reg}(g_i, d_i) = \sum_{s\in \{cx, cy, l, w, \theta\}}(g_i^s - d_i^s)^2

3.4 多任務學習

盡可能的讓不同任務的loss賦值相近,因此每個任務的loss weight定義如下:

image.png

其中c_t 是可以預先指定的先驗,以針對某些更難或者更重要的權重,w_t則保證不同loss的梯度量級相同。最開始時w_i=1, 盡管c_i 也需要手動調整,但其代價比調整w_i要小很多。

4. 實驗和結果

4.1 3D目標檢測

  • position error:相對radius 誤差, 絕對角度誤差(度)和絕對高度誤差(米)【實驗里的該值不知道咋融合的】
  • Orientation error: \Vert log(R^{-1}\hat{R}) ,旋轉矩陣的相似度
  • shape error:LWH的相對誤差
  • safety mAP:安全區域內的mAP

4.2 3D Freespace

  • Relative gap: 相對徑向距離誤差
  • Absolute gap: 絕對徑向誤差(meter)
  • Success rate: 成功估計的angular bin的比例。relative gap小于10%則認為成功估計
  • Smoothness: 徑向距離的總變化值\sum_{i=1}^{N_{bins}}|r_i - r_{i-1}|
  • Classification error: 每個邊界點的分類誤差

4.3 Parking Spaces

這里需要注意的是其匹配閾值IOU更加嚴格,需要大于70%

具體實驗這里不貼了,貼一點比較感興趣的。

4.4 IPM vs MLP based 2D-to-BEV view Transformation

image.png

4.5 針對不同生產線的泛化性

這里不同產品線的相機內參差不多,但外參差距很大,可以發現一個產品線訓練的模型,僅需其他產品線輕量的finetune就能得到很好的性能。


image.png

4.6 可視化

image.png

5.

5. 總結

  • 該方法中將每一列圖像以學習的方式投影到BEV平面,會考慮更多的高度信息,實驗也表明其比IPM性能更好;
  • 極坐標的表示形式更符合IPM后BEV的分布,使用極坐標確實能夠更好的處理映射過程中的拖影問題;這個也能控制計算復雜度,也可以擴展到transformer結構。
  • Freespace的形式化表述方式感覺也更加合理。
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容