作者:王利民
本文介紹我們?cè)?3D 目標(biāo)檢測(cè)領(lǐng)域的新工作:SparseBEV。我們所處的 3D 世界是稀疏的,因此稀疏 3D 目標(biāo)檢測(cè)是一個(gè)重要的發(fā)展方向。然而,現(xiàn)有的稀疏3D目標(biāo)檢測(cè)模型(如 DETR3D[1],PETR[2] 等)和稠密3D檢測(cè)模型(如 BEVFormer[3],BEVDet[8])在性能上尚有差距。針對(duì)這一現(xiàn)象,我們認(rèn)為應(yīng)該增強(qiáng)檢測(cè)器在 BEV 空間和 2D 空間的適應(yīng)性(adaptability)?;诖?,我們提出了高性能、全稀疏的 SparseBEV 模型。在 nuScenes 驗(yàn)證集上,SparseBEV 在取得 55.8 NDS 性能的情況下仍能維持 23.5 FPS 的實(shí)時(shí)推理速度。在 nuScenes 測(cè)試集上,SparseBEV 在僅使用 V2-99 這種輕量級(jí) backbone 的情況下就取得了 67.5 NDS 的超強(qiáng)性能。如果用上 HoP[5] 和 StreamPETR-large[6] 等方法中的 ViT-large 作為 backbone,沖上 70+ 不在話下。
我們的工作已被 ICCV 2023 接收,論文、代碼和權(quán)重(包括我們?cè)诎駟紊?67.5 NDS 的模型)均已公開:
在CVer微信公眾號(hào)后臺(tái)回復(fù):SparseBEV,可下載本論文pdf和代碼
SparseBEV: High-Performance Sparse 3D Object Detection from Multi-Camera Videos
論文:https://arxiv.org/abs/2308.09244
代碼:https://github.com/MCG-NJU/SparseBEV
1. 引言
現(xiàn)有的 3D 目標(biāo)檢測(cè)方法可以被分類為兩種:基于稠密 BEV 特征的方法和基于稀疏 query 的方法。前者需要構(gòu)建稠密的 BEV 空間特征,雖然性能優(yōu)越,但是計(jì)算復(fù)雜度較大;基于稀疏 query 的方法避免了這一過程,結(jié)構(gòu)更簡(jiǎn)單,速度也更快,但是性能還落后于基于 BEV 的方法。因而我們自然而然地提出疑問:基于稀疏 query 的方法是否可以實(shí)現(xiàn)和基于稠密 BEV 的方法接近甚至更好的性能?
根據(jù)我們的實(shí)驗(yàn)分析,我們認(rèn)為實(shí)現(xiàn)這一目標(biāo)的關(guān)鍵在于提升檢測(cè)器在 BEV 空間和 2D 空間的適應(yīng)性。這種適應(yīng)性是針對(duì) query 而言的,即對(duì)于不同的 query,檢測(cè)器要能以不同的方式來編碼和解碼特征。這種能力正是之前的全稀疏 3D 檢測(cè)器 DETR3D 所欠缺的。因此,我們提出了 SparseBEV,主要做了三個(gè)改進(jìn)。首先,設(shè)計(jì)了尺度自適應(yīng)的自注意力模塊(scale-adaptive self attention, SASA)以實(shí)現(xiàn)在 BEV 空間的自適應(yīng)感受野。其次,我們?cè)O(shè)計(jì)了自適應(yīng)性的時(shí)空采樣模塊以實(shí)現(xiàn)稀疏采樣的自適應(yīng)性,并充分利用長時(shí)序的優(yōu)勢(shì)。最后,我們使用動(dòng)態(tài) Mixing 來自適應(yīng)地 decode 采到的特征。
早在今年的2月9日,ICCV 投稿前夕,我們的 SparseBEV(V2-99 backbone)就已經(jīng)在 nuScenes 測(cè)試集上取得了65.6 NDS 的成績(jī),超過了 BEVFormer V2[7] 等方法。如下圖所示,該方案命名為 SparseBEV-Beta,具體可見 eval.ai 榜單。
最近,我們采用了一些來自 StreamPETR 的最新 setting,包括將 bbox loss 的 X 和 Y 的權(quán)重調(diào)為 2.0,并使用 query denoising 來穩(wěn)定訓(xùn)練等等?,F(xiàn)在,僅采用輕量級(jí) V2-99 作為 backbone 的 SparseBEV 在測(cè)試集上就能夠?qū)崿F(xiàn) 67.5 NDS 的超強(qiáng)性能,在純視覺 3D 檢測(cè)排行榜中排名第四(前三名均使用重量級(jí)的 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)勢(shì)。
2. 方法
模型架構(gòu)
SparseBEV 的模型架構(gòu)如上所示,其核心模塊包括尺度自適應(yīng)自注意力、自適應(yīng)時(shí)空采樣、自適應(yīng)融合。
二:不同類別的物體所對(duì)應(yīng)的 query 生成的?τ?值有著明顯差異。我們發(fā)現(xiàn),大物體(例如公交車)對(duì)應(yīng) query 的感受野明顯大于小物體對(duì)應(yīng) query(例如行人)的感受野。(如下圖所示。注意:τ?越大,感受野越小)
相比于標(biāo)準(zhǔn)的 MHSA,SASA 幾乎沒有引入額外開銷,簡(jiǎn)單又有效。在消融實(shí)驗(yàn)中,使用 SASA 替換 MHSA 能直接暴漲 4.0 mAP 和 2.2 NDS:
Adaptive Spatio-temporal Sampling
這樣,我們生成的采樣點(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)幀間對(duì)齊。在自動(dòng)駕駛場(chǎng)景中,有兩種類型的運(yùn)動(dòng):一是車自身的運(yùn)動(dòng)(ego motion),二是其他物體的運(yùn)動(dòng)(object motion)。對(duì)于 ego motion,我們使用數(shù)據(jù)集提供的 ego pose 來實(shí)現(xiàn)對(duì)齊;對(duì)于 object motion,我們利用 query 中定義的瞬時(shí)速度向量,并配合一個(gè)簡(jiǎn)單的勻速運(yùn)動(dòng)模型來對(duì)運(yùn)動(dòng)物體進(jìn)行自適應(yīng)的對(duì)齊。這兩種對(duì)齊操作都能漲點(diǎn):
隨后我們將 3D 采樣點(diǎn)投影到 2D 圖像并通過雙線性插值獲取對(duì)應(yīng)位置的 2D 特征。這里有一個(gè)工程上的小細(xì)節(jié):由于是六張圖的環(huán)視輸入,DETR3D 是將每個(gè)采樣點(diǎn)分別投影到六個(gè)視圖中,并對(duì)正確的投影點(diǎn)抽到的特征取平均。我們發(fā)現(xiàn),大多數(shù)情況下就只有一個(gè)投影點(diǎn)是正確的,偶爾會(huì)有兩個(gè)(即采樣點(diǎn)位于相鄰視圖的重疊區(qū)域)。于是,我們干脆只取其中一個(gè)投影點(diǎn)(即使有時(shí)會(huì)有兩個(gè)),把它對(duì)應(yīng)的視圖 ID 作為一個(gè)新的坐標(biāo)軸,從而可以通過 Pytorch 內(nèi)置的 grid sample 算子的 3D 版一步到位。這樣可以顯著提速,并且不咋掉點(diǎn)(印象里只掉了 0.1~0.2 NDS)。具體可以看代碼:
github.com/MCG-NJU/SparseBEV/blob/main/models/sparsebev_sampling.py.py
對(duì)于稀疏采樣這塊,我們后來也基于 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)捕捉到了場(chǎng)景中不同尺度的物體(即在空間上具備適應(yīng)性),且對(duì)于不同運(yùn)動(dòng)速度的物體也能很好的對(duì)齊(即在時(shí)間上具備適應(yīng)性)。
Dual-branch SparseBEV
在實(shí)驗(yàn)中,我們發(fā)現(xiàn)將輸入的多幀圖像分為 Fast、Slow 兩個(gè)分支處理可以進(jìn)一步提升性能。具體地,我們將輸入分為高分辨率、低幀率的 Slow 分支和低分辨率、高幀率的 Fast 分支。于是,Slow 分支專注于提取高分辨率的靜態(tài)細(xì)節(jié),而 Fast 分支則專注于捕獲運(yùn)動(dòng)信息。加入 Dual-branch 的 SparseBEV 結(jié)構(gòu)圖如下所示:
Dual-branch 設(shè)計(jì)不光減小了訓(xùn)練開支,還顯著提升了性能,具體可見補(bǔ)充材料。它的漲點(diǎn)說明了自駕長時(shí)序中的靜態(tài)細(xì)節(jié)和運(yùn)動(dòng)信息應(yīng)該解耦處理。但是,它把整個(gè)模型搞得太復(fù)雜,因此我們默認(rèn)情況下并沒有使用它(本文中只有測(cè)試集 NDS=63.6 的那行結(jié)果用了它)。
3. 實(shí)驗(yàn)結(jié)果
上表為 SparseBEV 與現(xiàn)有方法在 nuScenes 的驗(yàn)證集上的結(jié)果對(duì)比,其中???表示方法使用了透視預(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 升級(jí)為 ResNet-101 并將輸入圖像尺寸升為 1408x512 后,SparseBEV 超越 SOLOFusion 達(dá) 1.8 mAP 和 1.0 NDS。
nuScenes test split
上表為 SparseBEV 與現(xiàn)有方法在測(cè)試集上的結(jié)果對(duì)比,其中???表示方法使用了未來幀。在不使用未來幀的情況下,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ù))。
4. 局限性
SparseBEV 的弱點(diǎn)還不少:
SparseBEV 非常依賴 ego pose 來實(shí)現(xiàn)幀間對(duì)齊。在論文的 Table 5 中,如果不使用 ego-based warping,NDS 能掉 10 個(gè)點(diǎn)左右,幾乎和沒加時(shí)序一樣。
SparseBEV 中使用的時(shí)序建模屬于堆疊時(shí)序,它的耗時(shí)和輸入幀數(shù)成正比。當(dāng)輸入幀數(shù)太多的時(shí)候(比如 16 幀),會(huì)拖慢推理速度。
目前 SparseBEV 采用的訓(xùn)練方式還是傳統(tǒng)方案。對(duì)于一次訓(xùn)練迭代,DataLoader 會(huì)將所有幀全部 load 進(jìn)來。這對(duì)于機(jī)器的 CPU 能力有較高的要求,因此我們使用了諸如 TurboJPEG 和 Pillow-SIMD 庫來加速 loading 過程。接著,所有的幀全部會(huì)經(jīng)過 backbone,對(duì) GPU 顯存也有一定要求。對(duì)于 ResNet50 和 8 幀 704x256 的輸入來說,2080Ti-11G 還可以塞下;但如果把分辨率、未來幀等等都拉滿,就只有 A100-80G 可以跑了。我們開源的代碼中使用的 Training 配置均為能跑的最低配置。目前有兩種解決方案:
A.將部分視頻幀的梯度截?cái)?。我們開源的 config 中有個(gè) stop_prev_grad 選項(xiàng),它會(huì)將所有之前幀都以 no_grad 模式推理,只有當(dāng)前幀會(huì)有梯度回傳。
B. 另一種解決方案是采用 SOLOFusion、StreamPETR 等方法中使用的 sequence 訓(xùn)練方案,省顯存省時(shí)間,我們未來可能會(huì)嘗試。
5. 結(jié)論
本文中,我們提出了一種全稀疏的單階段 3D 目標(biāo)檢測(cè)器 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)了高精度和高速度。我們希望該工作可以對(duì)稀疏 3D 檢測(cè)范式有所啟發(fā)。
編輯:黃飛
評(píng)論