Occupancy Network并非特斯拉發(fā)明,最先提出Occupancy Network的是2018年的論文《Occupancy Networks: Learning 3D Reconstruction in Function Space》,主要作者是Tubingen大學(xué)和博世旗下軟件公司ETAS。更早可以追溯至2012年的論文《Indoor Segmentation and Support Inference from RGBD Images》,主要作者是紐約大學(xué)。而最早可以追溯到1986年的論文《A computational approach to edge detection》。Occupancy Network源自語義分割,語義分割需要連續(xù)邊界而不是傳統(tǒng)的Bounding Box(一般會縮寫為BBox),語義分割再加上2D或3D重建,就是Occupancy Network。不過讓Occupancy Network揚名天下的是特斯拉。
目前,傳統(tǒng)的3D目標感知算法缺點是過于依賴數(shù)據(jù)集,但數(shù)據(jù)集的分類有限,通常不超過30類,總有不常見的物體類別沒被標注,這些未被標注的物體再次出現(xiàn)在實際場景中,會因為數(shù)據(jù)集中沒有標注,無法識別而被感知系統(tǒng)忽略掉,導(dǎo)致車輛不減速直接撞向物體。這種事故經(jīng)常發(fā)生,最典型的是當車輛有故障,駕駛員下車站在車尾,打開后備箱找維修工具,對于計算機視覺來說就是一個難題,這是個打開的后備箱加人的影像,或者人推著電動車或自行車過馬路,人眼可以一眼看出,但機器就徹底傻眼,復(fù)合目標,從未被標注的物體或從未出現(xiàn)在數(shù)據(jù)集的物體,要探測目標距離,必須先識別目標,探測和識別是一體的,無法分割,畫出BBox,機器無法識別,畫不出BBox,會認為前方?jīng)]有物體,自然不會減速,直接撞上去。
BBox的致命缺陷,一是無法忽略掉物體的幾何細節(jié),二是探測和識別一體,遇到未被標注的物體就會視而不見。Occupancy Network就是為了解決BBox的缺陷而產(chǎn)生的,Occupancy Network學(xué)術(shù)上講就是建模物體詳細幾何和語義的通用且連貫的表征。一個需要從輸入圖像中聯(lián)合估計場景中每個voxel的占據(jù)狀態(tài)和語義標簽的模型,其中占據(jù)狀態(tài)分為free,occupied和unobserved三種,對于occupied的voxel,還需要分配其語義標簽。而對于沒有標注的物體類別,統(tǒng)一劃分為General Objects(GOs),GOs少見但為了安全起見是必須的,否則檢測時經(jīng)常檢測不到。Occupancy Network理論上能解決無法識別物體的難題,但實際中不能。很簡單,Occupancy Network是一種預(yù)測性質(zhì)的神經(jīng)網(wǎng)絡(luò),它不可能達到100%的準確度,自然也就有漏網(wǎng)之魚,還是有無法識別的物體無法探測。
占用網(wǎng)絡(luò)算法排名,第一名是英偉達的FB-OCC,小米和北大聯(lián)合的UniOcc排名第三,華為僅排名第六。目前基于BEV的解決方案很多。這些解決方案在經(jīng)過一定的修改后都可以適用于 3D occupancy 預(yù)測,門檻不高。
目前Occupancy Network準確度有多少呢?目前最頂級的Occupancy Network的mIoU是54.19%。mIoU是預(yù)測值與真值的交并比,某種意義上可以看做是準確度。這和傳統(tǒng)激光雷達語義分割差距極大,2021年的激光雷達語義分割就能達到80%以上。
另一份資料,OctreeOcc論文中提到,目前得分最高的是上??萍即髮W(xué)的OctreeOcc,也就是上表中的“Ours”。排名第二的是英偉達的FB-OCC,與OctreeOcc差距很小。
KITTI數(shù)據(jù)集3D語義場景完成的mIoU上得分最高的是鑒智機器人的OccFormer。
我們就來深入了解一下這OctreeOcc、FB-OCC和OccFormer三個模型。
先來看英偉達的FB-OCC,論文《FB-OCC: 3D Occupancy Prediction based on Forward-Backward View Transformation》,論文很簡短,只有5頁。
英偉達的FB-OCC非常簡潔,基本上就是BEVFormer加了一個占用網(wǎng)絡(luò)head。純視覺的3D感知模型的核心模塊是 view transformation 模塊。這個模塊包括兩個主要的視圖轉(zhuǎn)換方式:正向投影(LSS)和反向投影(BEVFormer)。FB-BEV 提供了一個統(tǒng)一的設(shè)計,利用這兩種方法,揚長避短。在FB-OCC中,使用前向投影來生成初始的3D體素表征,然后將其壓縮為一個扁平的 BEV 特征圖。BEV特征圖被視為BEV空間內(nèi)的queries,并與圖像編碼器特征一起獲得密集的幾何信息。然后將3D體素表征和優(yōu)化后的BEV表征的融合特征輸入到后續(xù)的任務(wù)頭中。
英偉達采用了預(yù)訓(xùn)練,通過深度估計任務(wù)增強模型的幾何意識。英偉達對nuScenes數(shù)據(jù)集進行了廣泛的預(yù)訓(xùn)練,主要集中在深度估計上。值得注意的是,深度預(yù)訓(xùn)練缺乏語義層面的監(jiān)督。為了減輕模型過度偏向深度信息的風(fēng)險,可能導(dǎo)致語義先驗的損失(特別是考慮到模型的大規(guī)模特性,容易出現(xiàn)過擬合),在進行深度預(yù)測任務(wù)的同時,也要致力于預(yù)測二維語義分割標簽,如上圖3所示。
OccFormer以單目圖像或環(huán)視圖像作為輸入,首先由圖像編碼器提取多尺度特征,然后基于深度預(yù)測和體素Voxel池化得到三維場景特征。隨后,該三維特征首先經(jīng)過dual-path transformer encoder進行三維視角下的特征提取,得到多尺度體素特征。最終transformer occupancy decoder融合多尺度特征,預(yù)測不同類別的binary mask并結(jié)合得到最終的occupancy預(yù)測。
圖像編碼器的輸出為輸入分辨率的 1/16 的融合特征圖:? 來表示提取的特征。
然后是英偉達提出的LSS BEV算法,編碼后的圖像特征被處理以生成 context feature
N 是相機視角的數(shù)量,C是通道數(shù),(H,W) 代表分辨率。
離散的深度分布是
二者相乘得到點云的表示:
最終進行體素池化以創(chuàng)建三維特征 3D feature volume
其中(X, Y, Z) 表示三維體的分辨率。
由于駕駛場景中沿著水平方向的信息變化最劇烈,而高度方向上信息密度相對較低,因此三維特征編碼的重點應(yīng)該放在水平方向上。但由于occupancy需要三維的細粒度信息,將三維特征完全壓平進行處理是不可取的。輸入的三維特征會經(jīng)過局部和全局兩條路徑、沿著水平方向進行語義特征提取,兩條路徑的輸出會通過自適應(yīng)融合得到輸出的三維場景特征。對于輸入的三維特征,局部 local 和全局 global 路徑首先沿水平方向并行地聚集語義信息。接下來,雙路徑輸出通過 sigmoid-weighted 進行融合。局部路徑主要針對提取細粒度的語義結(jié)構(gòu)。由于水平方向包含最多的變化,通過一個共享編碼器并行處理所有BEV切片能夠保留大部分語義信息。將高度維度合并到批處理維度,并使用窗口化自注意力作為局部特征提取器,它可以利用較小的計算量動態(tài)地關(guān)注遠距離區(qū)域;另一方面,全局路徑旨在高效捕獲場景級語義布局。為此,全局路徑首先通過沿高度維度進行平均池化來獲取BEV特征,并采用相同的窗口化自注意力實現(xiàn)特征提取,為了進一步增大全局感受野,還使用了ASPP結(jié)構(gòu)來捕獲全局上下文。
W指的是沿高度維度生成聚合權(quán)重的 FFN;σ(·) 是 sigmoid 函數(shù);“unsqueeze” 是沿高度方向擴展全局 2D 特征。
語義分割方面采用了META提出的Mask2Former ,Mask2Former建立在一個簡單的元框架 (MaskFormer)和一個新的 Transformer 解碼器上,其關(guān)鍵組成部分為掩碼注意力(Masked-attention),通過將交叉注意力限制在預(yù)測的掩碼區(qū)域內(nèi)來提取局部特征。與為每個任務(wù)(全景、實例或語義)設(shè)計專門模型相比,Mask2Former 節(jié)省了3倍的研究工作,并且有效節(jié)省計算資源。Mask2Former 在全景分割(COCO上的 57.8 PQ)、實例分割(COCO 上的 50.1 AP)和語義分割(ADE20K 上的 57.7 mIoU)上都實現(xiàn)了SOTA。
利用輸入的多尺度體素特征 (multi-scale voxel features) 和參數(shù)化的查詢特征 (parameterized query features) ,transformer decoder 對查詢特征進行迭代更新,以達到預(yù)期的類別語義。在每個迭代內(nèi),查詢特征 (queries features)Q1, 通過 masked attention 來關(guān)注它們相對應(yīng)前景區(qū)域。
然后進行 self-attention,以交換上下文信息,然后用FFN進行特征投影。在每個迭代結(jié)束時,每個Q1被投影來預(yù)測它的語義分對數(shù) (semantic logits)Pi,和掩膜嵌入 (mask embedding)εmask,后者通過 一個 per-voxel 嵌入εvoxel和 sigmoid 函數(shù)的點積進一步轉(zhuǎn)化為二進制的三維掩膜Mi。
OctreeOcc框架
OctreeOcc框架如上圖, 實際就是用傳統(tǒng)的八叉數(shù)空間表示法取代了傳統(tǒng)的BEV或Voxel。
不過目前這些前沿試驗性質(zhì)的論文都無法落地。
左邊的是Occ3D-nuScenes,專為占用網(wǎng)絡(luò)測試搞的數(shù)據(jù)集,右邊的是KITTI的語義分割測試數(shù)據(jù)集,占用網(wǎng)絡(luò)模型消耗內(nèi)存驚人,最少都需要25GB,對運算資源消耗驚人,即便是用英偉達8張A100,最快的也要386毫秒,自動駕駛最低門檻10Hz都達不到。這個每幀都需要讀出模型一次,也就說需要容量至少超過48GB的高寬帶存儲,最好是HBM3,GDDR6都非常勉強,而HBM價格驚人,英偉達H100的HBM內(nèi)存容量也不過80GB。
無人駕駛,前路漫漫,任重而道遠。