作者:王利民
導(dǎo)讀
本文介紹我們在 3D 目標(biāo)檢測領(lǐng)域的新工作:SparseBEV。我們所處的 3D 世界是稀疏的,因此稀疏 3D 目標(biāo)檢測是一個(gè)重要的發(fā)展方向。然而,現(xiàn)有的稀疏3D目標(biāo)檢測模型(如 DETR3D[1],PETR[2] 等)和稠密3D檢測模型(如 BEVFormer[3],BEVDet[8])在性能上尚有差距。針對這一現(xiàn)象,我們認(rèn)為應(yīng)該增強(qiáng)檢測器在 BEV 空間和 2D 空間的適應(yīng)性(adaptability)。基于此,我們提出了高性能、全稀疏的 SparseBEV 模型。在 nuScenes 驗(yàn)證集上,SparseBEV 在取得 55.8 NDS 性能的情況下仍能維持 23.5 FPS 的實(shí)時(shí)推理速度。在 nuScenes 測試集上,SparseBEV 在僅使用 V2-99 這種輕量級 backbone 的情況下就取得了 67.5 NDS 的超強(qiáng)性能。如果用上 HoP[5] 和 StreamPETR-large[6] 等方法中的 ViT-large 作為 backbone,沖上 70+ 不在話下。
引言
現(xiàn)有的 3D 目標(biāo)檢測方法可以被分類為兩種:基于稠密 BEV 特征的方法和基于稀疏 query 的方法。前者需要構(gòu)建稠密的 BEV 空間特征,雖然性能優(yōu)越,但是計(jì)算復(fù)雜度較大;基于稀疏 query 的方法避免了這一過程,結(jié)構(gòu)更簡單,速度也更快,但是性能還落后于基于 BEV 的方法。因而我們自然而然地提出疑問:基于稀疏 query 的方法是否可以實(shí)現(xiàn)和基于稠密 BEV 的方法接近甚至更好的性能?
根據(jù)我們的實(shí)驗(yàn)分析,我們認(rèn)為實(shí)現(xiàn)這一目標(biāo)的關(guān)鍵在于提升檢測器在 BEV 空間和 2D 空間的適應(yīng)性。這種適應(yīng)性是針對 query 而言的,即對于不同的 query,檢測器要能以不同的方式來編碼和解碼特征。這種能力正是之前的全稀疏 3D 檢測器 DETR3D 所欠缺的。因此,我們提出了 SparseBEV,主要做了三個(gè)改進(jìn)。首先,設(shè)計(jì)了尺度自適應(yīng)的自注意力模塊(scale-adaptive self attention, SASA)以實(shí)現(xiàn)在 BEV 空間的自適應(yīng)感受野。其次,我們設(shè)計(jì)了自適應(yīng)性的時(shí)空采樣模塊以實(shí)現(xiàn)稀疏采樣的自適應(yīng)性,并充分利用長時(shí)序的優(yōu)勢。最后,我們使用動態(tài) Mixing 來自適應(yīng)地 decode 采到的特征。
早在今年的2月9日,ICCV 投稿前夕,我們的 SparseBEV(V2-99 backbone)就已經(jīng)在 nuScenes 測試集上取得了65.6 NDS 的成績,超過了 BEVFormerV2[7] 等方法。如下圖所示,該方案命名為 SparseBEV-Beta,具體可見 eval.ai 榜單。
最近,我們采用了一些來自 StreamPETR 的最新 setting,包括將 bbox loss 的 X 和 Y 的權(quán)重調(diào)為 2.0,并使用 query denoising 來穩(wěn)定訓(xùn)練等等。現(xiàn)在,僅采用輕量級 V2-99 作為 backbone 的 SparseBEV 在測試集上就能夠?qū)崿F(xiàn) 67.5 NDS 的超強(qiáng)性能,在純視覺 3D 檢測排行榜中排名第四(前三名均使用重量級的 ViT-large 作為 backbone):
在驗(yàn)證集的小規(guī)模的 Setting(ResNet50,704x256)下,SparseBEV 能取得 55.8 NDS 的性能,同時(shí)保持 23.5 FPS 的實(shí)時(shí)推理速度,充分發(fā)揮了 Sparse 設(shè)計(jì)帶來的優(yōu)勢。
方法
模型架構(gòu)
SparseBEV 的模型架構(gòu)如上所示,其核心模塊包括尺度自適應(yīng)自注意力、自適應(yīng)時(shí)空采樣、自適應(yīng)融合。
Query Initialization
現(xiàn)有 query-based 方法都用 reference point 作為 query。在 SparseBEV 中,Query包含的信息更豐富,包括3D坐標(biāo) 、尺寸 、旋轉(zhuǎn)角 、速度 ,以及對應(yīng)的 維特征。每個(gè) query 都被初始化為 pillar 的形狀, 為 0 且 約為 4,這是因?yàn)樽择{場景中一般不會在 Z 軸上出現(xiàn)多個(gè)物體。
Scale-adaptive Self Attention
BEV 空間的多尺度特征提取很重要。基于 Dense BEV 的方法往往通過 BEV Encoder 來顯式聚合多尺度特征(比如 BEVDet[8] 用 ResNet+FPN 組成 BEV Encoder 來提取多尺度的 BEV 特征,BEVFormer 則使用 Multi-scale Deformable Attention 來實(shí)現(xiàn) BEV 空間的多尺度),而基于稀疏 query 方法則做不到這一點(diǎn)。
我們認(rèn)為,稀疏 query 之間的 self attention 可以起到 BEV Encoder 的作用,而 DETR3D 中使用的標(biāo)準(zhǔn)的 Multi-head self attention (MHSA) 并不具備多尺度能力。因此,我們提出了尺度自適應(yīng)自注意力模塊(scale-adaptive self attention, SASA),讓模型自己去決定合適的感受野:
其中 表示兩個(gè) query 中心點(diǎn)之間的歐式距離, 表示感受野的控制系數(shù),隨著 增大,遠(yuǎn)距離的 query 的注意力權(quán)重減小,感受野相應(yīng)縮小。當(dāng) 時(shí),SASA 退化為標(biāo)準(zhǔn)的擁有全局感受野的自注意力模塊。這里的 是通過對每個(gè) query feature 使用一層 Linear 自適應(yīng)生成的,并且每個(gè) head 生成的 都不同:
其中 表示 query 特征維度, 表示 head 數(shù)量。
在實(shí)驗(yàn)中,我們發(fā)現(xiàn)了兩個(gè)有意思的現(xiàn)象:
每個(gè) head 生成的 值在一定范圍內(nèi)呈現(xiàn)均勻分布,且該現(xiàn)象與 的初始化無關(guān)。該現(xiàn)象說明 SASA 能夠在不同 head 里進(jìn)行不同尺度的特征聚合,與 FPN 的處理方式類似,進(jìn)而從 data-driven 的角度證明了 BEV 空間的多尺度特征聚合的必要性。此外,相比于 FPN,SASA的感受野更加靈活,可以根據(jù)數(shù)據(jù)自由學(xué)習(xí)。
不同類別的物體所對應(yīng)的 query 生成的 值有著明顯差異。我們發(fā)現(xiàn),大物體(例如公交車)對應(yīng) query 的感受野明顯大于小物體對應(yīng) query(例如行人)的感受野。(如下圖所示。注意: 越大,感受野越小)
相比于標(biāo)準(zhǔn)的 MHSA,SASA 幾乎沒有引入額外開銷,簡單又有效。在消融實(shí)驗(yàn)中,使用 SASA 替換 MHSA 能直接暴漲 4.0 mAP 和 2.2 NDS:
Adaptive Spatio-temporal Sampling
對于每個(gè) query,我們對 query feature 使用一層 Linear 生成一系列 3D Offset:。接著,我們將這些 offset 相對于 query pillar 進(jìn)行坐標(biāo)變換以得到 3D 采樣點(diǎn)。采樣點(diǎn)生成過程如下:
這樣,我們生成的采樣點(diǎn)可以適應(yīng)于給定的 query,從而能夠更好地處理不同尺寸、遠(yuǎn)近的物體。同時(shí),這些采樣點(diǎn)并不局限于給定的 query bbox 內(nèi)部,它們甚至可以撒到框外面去,這由模型自己決定。
接著,為了進(jìn)一步捕捉長時(shí)序的信息,我們將采樣點(diǎn) warp 到不同時(shí)刻的坐標(biāo)系中,以此實(shí)現(xiàn)幀間對齊。在自動駕駛場景中,有兩種類型的運(yùn)動:一是車自身的運(yùn)動(ego motion),二是其他物體的運(yùn)動(object motion)。對于 ego motion,我們使用數(shù)據(jù)集提供的 ego pose 來實(shí)現(xiàn)對齊;對于 object motion,我們利用 query 中定義的瞬時(shí)速度向量,并配合一個(gè)簡單的勻速運(yùn)動模型來對運(yùn)動物體進(jìn)行自適應(yīng)的對齊。這兩種對齊操作都能漲點(diǎn):
隨后我們將 3D 采樣點(diǎn)投影到 2D 圖像并通過雙線性插值獲取對應(yīng)位置的 2D 特征。這里有一個(gè)工程上的小細(xì)節(jié):由于是六張圖的環(huán)視輸入,DETR3D 是將每個(gè)采樣點(diǎn)分別投影到六個(gè)視圖中,并對正確的投影點(diǎn)抽到的特征取平均。我們發(fā)現(xiàn),大多數(shù)情況下就只有一個(gè)投影點(diǎn)是正確的,偶爾會有兩個(gè)(即采樣點(diǎn)位于相鄰視圖的重疊區(qū)域)。于是,我們干脆只取其中一個(gè)投影點(diǎn)(即使有時(shí)會有兩個(gè)),把它對應(yīng)的視圖 ID 作為一個(gè)新的坐標(biāo)軸,從而可以通過 Pytorch 內(nèi)置的 grid sample 算子的 3D 版一步到位。這樣可以顯著提速,并且不咋掉點(diǎn)(印象里只掉了 0.1~0.2 NDS)。具體可以看代碼:https://github.com/MCG-NJU/SparseBEV/blob/main/models/sparsebev_sampling.py
對于稀疏采樣這塊,我們后來也基于 Deformable DETR 寫了一個(gè) CUDA 優(yōu)化。不過,純 PyTorch 實(shí)現(xiàn)其實(shí)也挺快的,CUDA 優(yōu)化進(jìn)一步提速了 15% 左右。
我們還提供了采樣點(diǎn)的可視化(第一行是當(dāng)前幀,二三兩行是歷史前兩幀),可以看到,SparseBEV 的采樣點(diǎn)精準(zhǔn)捕捉到了場景中不同尺度的物體(即在空間上具備適應(yīng)性),且對于不同運(yùn)動速度的物體也能很好的對齊(即在時(shí)間上具備適應(yīng)性)。
接著,我們對采到的特征的 channel 和 point 兩個(gè)維度分別進(jìn)行 Mixing[9]。假設(shè)共計(jì) 幀,每幀 個(gè)采樣點(diǎn),我們首先將其堆疊為 個(gè)采樣點(diǎn)。因此 SparseBEV 屬于堆疊時(shí)序方案,可以很容易地融合未來幀的信息。
接著,我們對這些采樣點(diǎn)得到的特征進(jìn)行 channel mixing,其中 mixing 的權(quán)重是根據(jù) query feature 動態(tài)生成的:隨后對 point 維度進(jìn)行同樣的 mixing 操作:其中 和 分別表示 channel mixing 和 point mixing 中的動態(tài)權(quán)重,前者在所有幀和采樣點(diǎn)之間共享,后者在所有特征通道之間共享。
Dual-branch SparseBEV
在實(shí)驗(yàn)中,我們發(fā)現(xiàn)將輸入的多幀圖像分為 Fast、Slow 兩個(gè)分支處理可以進(jìn)一步提升性能[10]。具體地,我們將輸入分為高分辨率、低幀率的 Slow 分支和低分辨率、高幀率的 Fast 分支。于是,Slow 分支專注于提取高分辨率的靜態(tài)細(xì)節(jié),而 Fast 分支則專注于捕獲運(yùn)動信息。加入 Dual-branch 的 SparseBEV 結(jié)構(gòu)圖如下所示:
Dual-branch 設(shè)計(jì)不光減小了訓(xùn)練開支,還顯著提升了性能,具體可見補(bǔ)充材料。它的漲點(diǎn)說明了自駕長時(shí)序中的靜態(tài)細(xì)節(jié)和運(yùn)動信息應(yīng)該解耦處理。但是,它把整個(gè)模型搞得太復(fù)雜,因此我們默認(rèn)情況下并沒有使用它(本文中只有測試集 NDS=63.6 的那行結(jié)果用了它)。
實(shí)驗(yàn)結(jié)果
上表為 SparseBEV 與現(xiàn)有方法在 nuScenes 的驗(yàn)證集上的結(jié)果對比,其中 表示方法使用了透視預(yù)訓(xùn)練。在使用 ResNet-50 作為 backbone 和 900 個(gè) query,且輸入圖像分辨率為 704x256 的情況下,SparseBEV 超越現(xiàn)有最優(yōu)方法 SOLOFusion[4] 0.5 mAP 和 1.1 NDS。在使用 nuImages 預(yù)訓(xùn)練并將 query 數(shù)量降低到 400 后,SparseBEV 在達(dá)到 55.8 的 NDS 的情況下仍能維持 23.5 FPS 的推理速度。而將 backbone 升級為 ResNet-101 并將輸入圖像尺寸升為 1408x512 后,SparseBEV 超越 SOLOFusion 達(dá) 1.8 mAP 和 1.0 NDS。
nuScenes test split
上表為 SparseBEV 與現(xiàn)有方法在測試集上的結(jié)果對比,其中 表示方法使用了未來幀。在不使用未來幀的情況下,SparseBEV 取得了 62.7 NDS 和 54.3 mAP;其 Dual-branch 版本進(jìn)一步提升到了 63.6 NDS 和 55.6 mAP。在加入未來幀后,SparseBEV 超越 BEVFormer V2 高達(dá) 2.8 mAP 和 2.2 NDS,而我們使用的 V2-99 僅約 70M 參數(shù),參數(shù)量遠(yuǎn)低于 BEVFormer V2 使用的 InternImage-XL(超過 300M 參數(shù))。
局限性
SparseBEV 的弱點(diǎn)還不少:
SparseBEV 非常依賴 ego pose 來實(shí)現(xiàn)幀間對齊。在論文的 Table 5 中,如果不使用 ego-based warping,NDS 能掉 10 個(gè)點(diǎn)左右,幾乎和沒加時(shí)序一樣。
SparseBEV 中使用的時(shí)序建模屬于堆疊時(shí)序,它的耗時(shí)和輸入幀數(shù)成正比。當(dāng)輸入幀數(shù)太多的時(shí)候(比如 16 幀),會拖慢推理速度。
目前 SparseBEV 采用的訓(xùn)練方式還是傳統(tǒng)方案。對于一次訓(xùn)練迭代,DataLoader 會將所有幀全部 load 進(jìn)來。這對于機(jī)器的 CPU 能力有較高的要求,因此我們使用了諸如 TurboJPEG 和 Pillow-SIMD 庫來加速 loading 過程。接著,所有的幀全部會經(jīng)過 backbone,對 GPU 顯存也有一定要求。對于 ResNet50 和 8 幀 704x256 的輸入來說,2080Ti-11G 還可以塞下;但如果把分辨率、未來幀等等都拉滿,就只有 A100-80G 可以跑了。我們開源的代碼中使用的 Training 配置均為能跑的最低配置。目前有兩種解決方案:
將部分視頻幀的梯度截?cái)唷N覀冮_源的 config 中有個(gè) stop_prev_grad 選項(xiàng),它會將所有之前幀都以 no_grad 模式推理,只有當(dāng)前幀會有梯度回傳。
另一種解決方案是采用 SOLOFusion、StreamPETR 等方法中使用的 sequence 訓(xùn)練方案,省顯存省時(shí)間,我們未來可能會嘗試。
結(jié)論
本文中,我們提出了一種全稀疏的單階段 3D 目標(biāo)檢測器 SparseBEV。SparseBEV 通過尺度自適應(yīng)自注意力、自適應(yīng)時(shí)空采樣、自適應(yīng)融合三個(gè)核心模塊提升了基于稀疏 query 模型的自適應(yīng)性,取得了和基于稠密 BEV 的方法接近甚至更優(yōu)的性能。此外我們還提出了一種 Dual-branch 的結(jié)構(gòu)進(jìn)行更加高效的長時(shí)序處理。SparseBEV 在 nuScenes 同時(shí)實(shí)現(xiàn)了高精度和高速度。我們希望該工作可以對稀疏 3D 檢測范式有所啟發(fā)。
[1] Wang Y, Guizilini V C, Zhang T, et al. Detr3d: 3d object detection from multi-view images via 3d-to-2d queries[C]//Conference on Robot Learning. PMLR, 2022: 180-191.
[2] Liu Y, Wang T, Zhang X, et al. Petr: Position embedding transformation for multi-view 3d object detection[C]//European Conference on Computer Vision. Cham: Springer Nature Switzerland, 2022: 531-548.
[3] Li Z, Wang W, Li H, et al. Bevformer: Learning bird’s-eye-view representation from multi-camera images via spatiotemporal transformers[C]//European conference on computer vision. Cham: Springer Nature Switzerland, 2022: 1-18.
[4] Park J, Xu C, Yang S, et al. Time will tell: New outlooks and a baseline for temporal multi-view 3d object detection[J]. arXiv preprint arXiv:2210.02443, 2022.
[5] Zong Z, Jiang D, Song G, et al. Temporal Enhanced Training of Multi-view 3D Object Detector via Historical Object Prediction[J]. arXiv preprint arXiv:2304.00967, 2023.
[6] Wang S, Liu Y, Wang T, et al. Exploring Object-Centric Temporal Modeling for Efficient Multi-View 3D Object Detection[J]. arXiv preprint arXiv:2303.11926, 2023.
[7] Yang C, Chen Y, Tian H, et al. BEVFormer v2: Adapting Modern Image Backbones to Bird's-Eye-View Recognition via Perspective Supervision[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 17830-17839.
[8] Huang J, Huang G, Zhu Z, et al. Bevdet: High-performance multi-camera 3d object detection in bird-eye-view[J]. arXiv preprint arXiv:2112.11790, 2021.
[9] Gao Z, Wang L, Han B, et al. Adamixer: A fast-converging query-based object detector[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 5364-5373.
[10] Feichtenhofer C, Fan H, Malik J, et al. Slowfast networks for video recognition[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2019: 6202-6211.
編輯:黃飛
?
評論