论文精读 ——《BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection》
文章目錄
- BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection
- 論文精讀
- 摘要(Abstract·)
- 1. 介紹(Introduction)
- 2. 相關工作(Related work)
- 2.1 基于視覺的三維目標檢測
- 2.2 基于激光雷達的三維目標檢測
- 2.3 深度估計
- 3. BEVDepth
- 4. 實驗(Experiment)
- 4.1 實驗步驟(Experimental Setup)
- 4.2 消融研究
- 4.3 基準測試結果
- 4.4 可視化
- 5. 結論(Conclusion)
- 參考
BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection
論文精讀
摘要(Abstract·)
本文工作:提出BEVDepth
在這項研究中,我們提出了一種新的三維物體檢測器,它具有可靠的深度估計,稱為BEVDepth,用于基于攝像機的鳥瞰(camera-based BEV)三維物體檢測。
現有方法: 深度信息是隱式學習的
通過對現有方法的深入分析,我們發現深度估計是在沒有攝像機信息的情況下隱式學習的,使得它在創建偽點云時實際上采用的是假深度。
BEVDepth介紹:提出矯正深度子網絡和快速視圖變換操作。
BEVDepth利用編碼的內在和外在參數獲得顯式的深度監督。
(1) 引入深度校正子網絡(depth correction sub-network)來抵消投影引起的深度ground truth擾動。
(2) 為了突破利用估計深度將特征從圖像視圖投影到BEV中的速度瓶頸,還提出了一種快速的視圖變換操作(a quick view-transform operation)。 此外,BEVdepth可以很容易地擴展與多幀輸入。
實驗結果:高準確度和高效率
BevDepth在具有挑戰性的Nuscenes測試集上實現了新的最先進的60.0%NDS,同時保持了高效率。 相機與激光雷達的性能差距首次大幅縮小在10%NDS以內。
1. 介紹(Introduction)
研究現狀:基于圖像的像素級深度估計
基于攝像頭的3D物體檢測由于其高效率和豐富的語義信息,引起了人們的極大興趣,特別是在自動駕駛領域。最近的基于視覺的技術(Bevdet, CaDDN,LSS)主要依賴于給定來自眾多相機的圖像的像素級深度估計。然后添加視圖轉換子網(view-transform sub-network),通過利用相機的內參和外參,將特征從基于Image視圖投影到基于BEV的視圖中。盡管這些基于深度的3D探測器很受歡迎,但很自然地會問:這些探測器內深度估計的質量和效率如何?它是否滿足精確有效的3D物體檢測的要求?
本文工作:把預測深度替換成由點云生成的ground-truth的深度
在本文中,我們首先提供了深度估計的定量和定性分析。BEVDet 的實際深度和預測深度之間的相關性如圖 1(a) 所示。雖然3D檢測的結果是可觀的,但我們發現深度估計的準確性令人驚訝地不足。這種較差的深度感知激發了我們研究更好的深度對3D檢測的影響。因此,我們將視圖轉換期間BEVDet中的預測深度替換為點云生成的深度地面實況。圖1(c)中的結果表明,采用地面實況深度可使mAP和NDS分別提高18.8%和18.2%。此外,轉換誤差從 0.750 大大減少到 0.393。這種現象揭示了中等深度的質量是提高多視角三維物體檢測的關鍵。
圖1和圖2分別表示的是BEVDet和BEVDepth在預測深度和真實深度之間的相關性。圖3表示的是性能提升的效果圖
經驗:隱式深度監督的準確度低,且基于深度的檢測器檢測速度更慢。
基于深度的3D探測器的回憶(Bevdet, CaDDN,LSS),我們有以下經驗知識:
- 最終的檢測損失的反饋會促使網絡的中間層學習正確的深度,從而建立一個隱式的深度監督。 然而,深度神經網絡通常具有復雜的表示。 在沒有顯式的深度監督的情況下,準確輸出深度感知特征對網絡具有挑戰性。
- 從理論上講,深度子網絡應該知道攝像機的信息,才能正確地從圖像中推斷出深度。然而,現有的方法對攝像機參數是盲目的,導致了較差的結果。
- 按照經驗,基于深度的3D目標檢測器比不依靠深度的檢測器,例如FCOS3D,在使用相同的主干網絡和圖像分辨率時,檢測速度上要更慢。導致這樣的原因是:在深度估計后,使用視圖轉換子網絡會導致低效率。
2. 相關工作(Related work)
2.1 基于視覺的三維目標檢測
基于視覺的三維檢測的目標是預測物體的三維包圍盒。 這是一個不適定的問題,因為從單目圖像中估計物體的深度具有內在的模糊性。 即使多視點攝像機可用,在沒有重疊視點的區域估計深度仍然是一個挑戰。 因此,深度建模是基于視覺的三維檢測的關鍵組成部分。
研究的一個分支直接從2D圖像特征預測3D檢測框。 二維探測器,如CenterNet,可用于
對檢測頭進行微小改動的3D檢測。 M3D-RPN提出了深度感知卷積層來增強空間感知。D4LCN使用深度映射來指導動態核學習。 通過將三維目標轉換到圖像域,FCOS3D預測對象的2D和3D屬性。 此外,PGD呈現幾何形狀關系圖,以促進三維目標檢測的深度估計。 DD3D表明深度預訓練可以顯著改善端到端的三維檢測。
另一項工作是預測三維空間中的對象。 將2D圖像特征轉換到3D空間的方法有很多。 一種典型
的方法是將基于圖像的深度圖轉換成偽激光雷達來模擬激光雷達信號。 圖像特征也可用于生成3D體素或正交特征圖(orthographic feature map)。 LSS提出了一種顯式預測深度分布并將圖像特征投影到鳥瞰視圖(BEV)上的視圖變換方法,該方法已被證明適用于三維目標檢測。 Bevformer使用局部關注和網格形狀的BEV查詢執行2D到3D轉換。 繼DETR, DETR3D使用變形金剛和對象查詢檢測3D對象,以及Petr通過引入3D位置感知表示進一步提高性能。
2.2 基于激光雷達的三維目標檢測
由于深度估計的準確性,基于激光雷達的三維檢測方法經常被應用于自動駕駛感知任務中。
Voxelnet對點云進行體素化,將其從稀疏體素轉換為密集體素,然后在密集空間中提出包圍盒來幫助卷積時的索引。 SECOND提高KITTI數據集的性能通過引入一種更有效的結構和基于Voxelnet的GT抽樣技術。 稀疏卷積也用于SECOND加快速度。 PointPillars使用Pillars而不是3D卷積過程編碼點云,使其快速但保持良好的性能。 CenterPoint提出了一擴展CenterNet。在Nuscenes數據集上實現了高性能和Waymo開放數據集。PointRCNN不同于上面討論的基于網格的方法,它直接從點云創建建議。 然后利用激光雷達分割來識別建議的前景點,并在第二階段產生包圍盒。使用Hough投票收集點特征,然后從簇中提出包圍盒。 基于網格的方法由于其密集的特征表示,速度較快,但丟失了原始點云的信息;而基于點的方法可以連接原始點云,但在定位每個點的鄰居時效率較低。 PV-RCNN是Shi等人提出的。 為了保持效率,同時允許點特征的可調接受野。
2.3 深度估計
深度預測是單目圖像解譯的關鍵。采用一種回歸方法,利用擴展卷積和場景理解模塊來預測圖像的深度。 單深度利用視差和重建預測無監督深度。MonodePth2使用深度估計和位姿估計網絡的組合來在單個幀中預測深度。一些方法通過構造成本-體積來預測深度。MVSNET第一次將成本-體積法引入深度估算領域。 基MVSNET[34], RMVSNet使用GRU來降低內存開銷36]添加CRF模塊,級聯MVSNET將MVSNET更改為級聯結構。 采用多尺度融合生成深度預測,并引入自適應模塊,在提高性能的同時降低內存消耗。 將單視角圖像與多視角圖像融合,并引入深度采樣以降低計算量。
3. BEVDepth
BEVDepth的兩大工作:
(1) 提出了魯棒的 Explicit Depth Supervision (顯式的深度監督) :通過深度矯正和基于攝像機感知的深度預測。
(2)提出了Efficient Voxel Pooling(高效的體素池化) 去進一步提高BEVDepth的速度。
BEVDepth的框架圖如下:
- Image Backbone 從多視角的圖片中提取特征。
- Depth net 把圖像特征作為輸入,生成上下文語義和深度信息。并最終得到基于點的特征。
- Voxel Pooling 把所有基于點的特征統一到一個坐標系下,并在BEV特征圖下對他們進行池化。
BEVDepth的框架圖
總體框架(Overall Architecture):
BEVDepth 把LLS中的用于分割的檢測頭,替換成CenterPoint中用于3D目標檢測的檢測頭。主要包括了4個部分:
1) Image Encoder: 從多張圖片中提取2D的特征F2dF^{2d}F2d
-
圖像編碼器采用的是ResNet。
-
提取出的2D特征表示:F2d={Fi2d∈RCF×H×W,i=1,2,…,N}F^{2 d}=\left\{F_i^{2 d} \in \mathbb{R}^{C_F \times H \times W}, i=1,2, \ldots, N\right\}F2d={Fi2d?∈RCF?×H×W,i=1,2,…,N}
其中W,H,CFW,H, C_FW,H,CF? 分別表示特征的寬、高和通道數。
2) Depth Net : 從F2dF^{2d}F2d估計深度DpredD^{pred}Dpred。
-
從F2dF^{2d}F2d估計出的深度表示:Dpred?={Dipred?∈RCD×H×W,i=1,2,…,N}D^{\text {pred }}=\left\{D_i^{\text {pred }} \in \mathbb{R}^{C_D \times H \times W}, i=1,2, \ldots, N\right\}Dpred?={Dipred??∈RCD?×H×W,i=1,2,…,N}
其中CDC_DCD? 表示離散的深度區間的編號。
3) View Transformer : 把2D的特征F2dF^{2d}F2d映射到3D特征F3dF^{3d}F3d,并進行池化操作得到基于BEV的特征FbevF^{bev}Fbev
- 2D 到3D的特征轉換使用公式:Fi3d=Fi2d?Dipred?,Fi3d∈RCF×CD×H×W.F_i^{3 d}=F_i^{2 d} \otimes D_i^{\text {pred }}, \quad F_i^{3 d} \in \mathbb{R}^{C_F \times C_D \times H \times W} .Fi3d?=Fi2d??Dipred??,Fi3d?∈RCF?×CD?×H×W.
4) 3D Detection Head : 預測類別,3D檢測框以及其他屬性信息。
顯式深度監督(Explicit Depth Supervision):
- 數學標記符號:
Ri∈R3×3R_i \in \mathbb{R}^{3 \times 3}Ri?∈R3×3 和 ti∈R3t_i \in \mathbb{R}^3ti?∈R3 分別表示旋轉和平移矩陣,把圖像從自車坐標系轉變成第iii個攝像機的坐標系下。
Ki∈R3×3K_i \in \mathbb{R}^{3 \times 3}Ki?∈R3×3 表示第iii 個攝像頭的內參。
- DgtD^{gt}Dgt 的生成公式:
使用從點云數據PPP中生成的真實值深度值DgtD^{gt}Dgt 來監督深度預測值DpredD^{pred}Dpred。
Piimg^(ud,vd,d)=Ki(RiP+ti)P_i^{\hat{i m g}}(u d, v d, d)=K_i\left(R_i P+\boldsymbol{t}_i\right) Piimg^??(ud,vd,d)=Ki?(Ri?P+ti?)
接下來,可以進一步轉換成2.5D圖像下的坐標Piimg(u,v,d)P_i^{img}(u,v,d)Piimg?(u,v,d), 其中uuu和vvv 表示的在像素坐標系下的坐標。如果某個點云在2.5D下的投影沒有落在第iii個視圖中,那么我們就直接忽視它。
為了對齊被投影的點云和預測的深度,我們對PiimgP_i^{img}Piimg?使用min pooling 和 one hot 這兩個操作。并把這兩個操作統稱為?\phi?。因此,DigtD^{gt}_iDigt? 的生成公式如下:
Digt=?(Piimg)D_i^{g t}=\phi\left(P_i^{i m g}\right) Digt?=?(Piimg?)
- 深度損失函數
我們采用Binary Cross Entropy (二元交叉熵)
深度矯正(Depth Correction):
由于自車的劇烈運動,相機的校準參數RRR和ttt 有時可能不準確。導致F2dF^{2d}F2d和DgtD^{gt}Dgt 在空間上無法對齊。當DepthNet的感受野受到限制時,錯誤對齊問題變得更加棘手。 因此,我們提出了一個深度校正模塊來緩解這個問題。
Depth Corretion 通過增加DepthNet的感受野來解決錯位問題,而不是根據自車擾動調整DGTD^{GT}DGT具體來說,在DepthNet中,我們將多個殘差塊疊加在一起,其后連接著Deformable Conv。
受惠于感受野的改善,錯位深度GT能夠注意到到正確位置的特征。
Depth network 的框架圖: 其中Context Feature 直接通過Image Feature中提取出來。一個類似于SE的層用來聚合image feature ,從而更好的預測深度。
相機感知深度預測(Camera-aware Depth Prediction):
攝像機感知深度預測的設計提高了模型的深度預測能力。 然而,根據經典的相機模型,估
計像素深度與相機的內參相關聯,這意味著有必要將相機的內參建模到深度網絡中。 當攝像機可能具有不同的FOV(例如,Nuscenes DataSet)時,這在多視圖3D數據集中尤其重要)。 因此,為了提高估計深度DpredD^{pred}Dpred的預測質量,我們建議利用相機內參作為DepthNet的輸入之一。
具體來說,首先使用MLP層將相機內部的尺寸放大到特征的尺寸。 然后,它們被用于通過Squeeze-Excitation (SE)來重新加權圖像特征Fi2dF_i^{2d}Fi2d?。最終,我們聯系相機的內參和外參來幫助DepthNet 注意到 F2dF^{2d}F2d 的在自車坐標系下的空間位置信息。
ψ\psiψ 表示原有的DepthNet, 那么整體的基于相機感知的深度預測公式如下:
Dipred?=ψ(SE(Fi2d∣MLP(ξ(Ri)⊕ξ(ti)⊕ξ(Ki)))),D_i^{\text {pred }}=\psi\left(S E\left(F_i^{2 d} \mid M L P\left(\xi\left(R_i\right) \oplus \xi\left(\boldsymbol{t}_i\right) \oplus \xi\left(K_i\right)\right)\right)\right), Dipred??=ψ(SE(Fi2d?∣MLP(ξ(Ri?)⊕ξ(ti?)⊕ξ(Ki?)))),
其中ξ\xiξ 表示Flatten操作。
pseudo-lidar 也使用了camera-awareness, 他們根據攝像機的內參對回歸目標進行縮放,使得他們的方法很難適應具有復雜攝像機設置的自動化系統。 另一方面,我們的方法在DepthNet的內部對相機參數進行建模,以提高中間深度的質量。 受益于LSS的解耦特性[3],攝像機感知深度預測模塊與檢測頭隔離,因此無需改變這種情況下的回歸目標,從而具有更大的擴展性。
高效的體素池化(Ef?cient Voxel Pooling):
Voxel Pooling 用來把多視角的3D特征F3dF^{3d}F3d聚合成統一的基于BEV的特征FbevF^{bev}Fbev。具體來說,它把ego space 均勻的劃分成網格,然后落在同一個BEV特征圖中網格的平截頭特征累加在一起。 為了實現這個操作,LSS采用了“cumsum trick”, 先基于BEV 網絡編號對所有的平截頭特征進行排序,然后執行累加和操作,最后再相減。
但是這樣的操作會導致額外的計算,因為需要排序大量的BEV網格。除此之外,這個方法中用到的前綴和操作是順序進行的,非常低效。這些缺點會影響我們檢測器的運行效率。有些人可能會通過并行操作來加速前綴和的計算效率,但是我們提出了一個更簡單的解決方案,充分利用了GPU設備的巨大并行性,稱為高效體素池(Efficient Voxel pooling)。
Efficient Voxel Pooling 圖示: 對于每一個點,對應一個線程。每個線程把相關聯的點特征添加到BEV特征的對應位置。
如上圖所示,我們的主要思想是為每個截頭體特征分配一個CUDA線程,該線程用于將該特征添加到相應的BEV網格中。
4. 實驗(Experiment)
在這一節中,我們首先介紹我們的實驗設置。 然后,進行了大量的實驗來驗證我們提出的
組件的效果。 最后與其他先進的基于相機的三維檢測模型進行了比較。
4.1 實驗步驟(Experimental Setup)
數據集和度量(Dataset and Metrics)
nuscenes數據集是一個大規模的自動駕駛基準,由六個攝像頭、一個激光雷達和五個雷達提供數據。 該數據集中有1000個場景,分別分為700個、150個和150個場景進行訓練、驗證和測試。 對于三維檢測任務,我們報告了Nuscenes檢測得分(NDS)、平均平均精度(MAP)以及平均平均平移誤差(MATE)、平均平均尺度誤差(MASE)、平均平均方位誤差(MAOE)、平均平均速度誤差(MAVE)、平均平均屬性誤差(MAE)五個真陽性(TP)指標。對于深度估計任務,我們遵循前人工作的標準評估協議報告標度不變對數誤差(SILOG)、平均絕對相對誤差(ABS REL)、均方相對誤差(SQ REL)、平均Log10誤差(LOG10)和均方根誤差(RMSE)來評價我們的方法。
實現細節(Implementation Details)
實現細節除非另有說明,否則我們使用Resnet-50作為圖像主干,圖像大小被處理為256*704。
我們采用了圖像數據的隨機剪切、隨機縮放、隨機翻轉和隨機旋轉等增強方法,也參考BevDet, 我們采用了BEV數據的隨機縮放、隨機翻轉和隨機旋轉等增強方法。 我們使ADAMW作為優化器,學習速率設置為2e-4,批量大小設置為64。 對于消融研究,所有實驗都進行24個周期的訓練,而不使用CBGS策略。 與其它方法相比,BEVDepth采用CBGS進行了20個周期的訓練。 攝像頭感知的DepthNet被放置在功能級別,步幅為16。
4.2 消融研究
顯示深度監督和深度矯正(Explicit Depth Supervision and Depth Correction)
基于相機的注意力(Camera-awareness)
高效體素池化(Ef?cient Voxel Pooling)
多幀融合(Multi-frame Fusion)
4.3 基準測試結果
4.4 可視化
如圖所示 8給出了攝像機空間和BEV空間的結果。 從綠色矩形標記的樣本中,我們可以看
到我們的BEVDepth在BEV定位比基線方法表現得更好。 此外,用紅圈標記的樣本沒有被注釋,但仍然被檢測到,證明了BevDepth在遠距離目標檢測方面的能力。
BEVDepth 和 基準線的對比。綠色點框:標記BEVDepth生成更準確的定位信息。紅色點圈:表示基線和GTl漏掉的樣本,但仍然通過我們的方法可以檢測到。
5. 結論(Conclusion)
針對三維目標檢測任務中的深度預測問題,提出了一種新的網絡結構BEVDepth。 通過引入深度監控的深度校正模塊,BevDepth能夠感知攝像機干擾并產生魯棒的深度預測。BEVDepth通過結合視覺屬性和相機規格獲得預測可信深度的能力。 此外,BEVDepth還使用了基于點的幀融合模式,通過融合前一幀的數據來豐富當前幀中的信息,這有助于預測速度和深度。 此外,我們提出了高效的體素池,完全避免了索引排序,并利用了GPU的并行性。 在NUSCENES上的實驗結果表明了該方法的有效性和在實際應用中的潛力。
參考
BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection
總結
以上是生活随笔為你收集整理的论文精读 ——《BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection》的全部內容,希望文章能夠幫你解決所遇到的問題。