前面我們提到bev 之 LSS, 知道視覺的BEV方案的主要痛點在于:
1、depth 的預測
2、圖像特征到BEV特征之間的視圖變換消耗大量計算
LSS 為什么需要D維深度
占據大量消耗的原因是LSS 對每個圖像特征點引入深度D,即假設每個像素上存在可能的D維深度。也就是假設不同像素深度上對應的圖像特征不同。
能不能去除深度特征
從M2BEV中,假設圖像到BEV視圖的轉換過程沿相機光線的深度均勻分布,也就是說不同深度對應的圖像特征是相同的。基于這個理論,就可以將深度D去掉。
LSS 基于像素深度上的特征均勻分布, 這比LSS 看起來非常暴力,去掉深度維度確實可以大幅度提高速度。
分析原因:Lss想做的是對于射線空間中無占據的區域希望其特征為0,只保留有物體的語義特征的精準預測,這就依賴深度預測。而fastbev 則假設射線經過的空間均有可能存在語義特征,且相同。然后用3d neck進一步融合粗采樣的bev特征。所以對圖像上的同一個物體,映射到BEV上后其特征也能像帶有深度預測一樣聚集一塊,只是會有部分局部特征會分散到bev空間其他位置,這部分分散的特征在BEV空間是冗余的,但是不影響聚集特征的預測。所以3d neck本身是不可或缺的,否則精度將明顯掉點。
LSS 中的BEV Pooling
LSS 去除了深度Depth,為了加速2D圖像特征到3D BEV空間特征,不像LSS , 先構建N個圖像的映射視錐 N x H x W x D,再對特征進行索引投影映射。LSS直接將不同視角的N個圖像的直接投影到BEV空間。
原始是在BEV空間獨立產生N份特征,再pooling成一份。但是圖像重疊區域部分占的比例極低,所以fastBEV 干脆在BEV空間只產生一份特征,對重疊區域只保留任意一份(這會失去重疊的融合特征,但是實驗驗證精度損失極小)
推理查表進行特征映射
構建BEV體素空間到圖像空間的映射關系。
構建好查找表后,我們只需要對最終要產生的voxel按索引查找一遍其對應采樣的2d特征按需索取填充即可,這樣避免了大量冗余計算。
總結:
fast BEV 相對 LSS 做了以下加速:
1、去除 depth 估計,也就去除了D維的計算量,節省存儲和計算。
2、直接從BEV 特征空間通過映射表獲取圖像特征,且對重疊區域只保留一個特征,加快視場空間轉換。