本文轉載自知乎,已獲作者授權轉載。

鏈接: https://zhuanlan.zhihu.com/p/152120636

隨着自動駕駛與機器人技術的不斷發展,基於點雲表徵的3D目標檢測領域在近年來取得了不斷的發展。然而,層出不窮的點雲數據集(KITTI、NuScene、Lyft、Waymo、PandaSet等)在數據格式與3D座標系上往往定義各不相同,各式各樣的點雲感知算法(point-based、 voxel-based、one-stage/two-stage等)也形態各異,使得相關研究者難以在一個統一的框架內進行各種組合實驗。

爲此,我們開源了一套基於PyTorch實現的點雲3D目標檢測代碼庫 - OpenPCDet :https://github.com/open-mmlab/OpenPCDet

其主要包括了全新改版的 PCDet (v0.2) 點雲3D目標檢測框架 (包括我們首次開源的 PV-RCNN 3D目標檢測算法)。

接下來,我們主要介紹 PCDet 3D目標檢測框架 的整體結構設計與優勢,以及如何添加新的數據集、如何組合\研發新的model等簡要使用說明。

01

PCDet 3 D目標檢測框架介紹

數據-模型分離的頂層代碼框架設計思想

不同於圖像處理,點雲3D目標檢測中不同數據集的繁多3D座標定義與轉換往往使研究者迷失其中。爲此,PCDet定義了統一的規範化3D座標表示貫穿整個數據處理與模型計算,從而將數據模塊與模型處理模塊完全分離,其優勢體現在: 

(1) 研究者在研發不同結構模型時,統一使用標準化的3D座標系進行各種相關處理(比如計算loss、RoI Pooling和模型後處理等),而無需理會不同數據集的座標表示差異性;

(2) 研究者在添加新數據集時,只需寫少量代碼將原始數據轉化到標準化座標定義下,PCDet將自動進行數據增強並適配到各種模型中。

PCDet 數據-模型分離的頂層設計,使得研究者可以輕鬆適配各種模型到不同的點雲3D目標檢測數據集上,免去研發模型時迷失在3D座標轉換中的顧慮。

圖1: PCDet 數據-模型分離的代碼框架設計

統一的3D目標檢測座標定義

不同的點雲數據集在座標系以及3D框的定義上往往不一樣(KITTI數據集中的camera和LiDAR兩個座標系的混用也常使新手迷茫),因此在 PCDet 中我們採用了固定的統一點雲座標系(如圖1右下角所示),以及更規範的3D檢測框定義,貫穿整個數據增強、處理、模型計算以及檢測後處理過程。3D檢測框的7維信息定義如下(如圖2所示):

3D bounding box: (cx, cy, cz, dx, dy, dz, heading)

其中,(cx, cy, cz) 爲物體3D框的幾何中心位置,(dx, dy, dz)分別爲物體3D框在heading角度爲0時沿着x-y-z三個方向的長度,heading爲物體在俯視圖下的朝向角 (沿着x軸方向爲0度角,逆時針x到y角度增加)。

圖2: PCDet採用的標準化3D檢測框示意圖 (俯視)。

基於 PCDet 所採用的標準化3D框定義,我們再也不用糾結到底是物體3D中心還是物體底部中心;再也不用糾結物體三維尺寸到底是l-w-h排列還是w-l-h排列;再也不用糾結heading 0度角到底是哪,到底順時針增加還是逆時針增加。

靈活全面的模塊化模型拓撲設計

基於圖3所示的靈活且全面的模塊化設計,我們在PCDet中搭建3D目標檢測框架只需要寫config文件將所需模塊定義清楚,然後PCDet將自動根據模塊間的拓撲順序組合爲3D目標檢測框架,來進行訓練和測試。

圖3: PCDet模塊化的3D目標檢測框架,支持不同類型的3D目標檢測算法。

基於圖3所示框架,PCDet可以支持目前已有的絕大多數面向LiDAR點雲的3D目標檢測算法,包括voxel-based,point-based,point-voxel hybrid以及one-stage/two-stage等等3D目標檢測算法(參見圖4示例圖)。

圖4: PCDet模塊化設計可以支持多種3D目標檢測框架。

清晰的數據增強與預處理

PCDet全新重構了基於numpy+PyTorch的數據增強模塊與數據預處理模塊,依託data_augmentor與data_processor兩個基類可靈活添加、刪除各種數據增強與預處理操作。

更強的3D目標檢測性能

作爲最早開源二階段3D點雲目標檢測代碼的團隊之一,我們不斷提出了PointRCNN、PartA2-Net、PV-RCNN等高性能3D目標檢測算法。在這次PCDet代碼更新中,我們首次開源了PV-RCNN算法,其目前仍是在KITTI+Waymo榜上性能最強的純點雲3D目標檢測算法。

圖5: PCDet首次開源PV-RCNN高性能3D目標檢測算法,其在KITTI榜上性能顯著高於已有算法。

希望我們在PCDet中開源的多個高性能3D目標檢測算法可以爲各位研究者提供更強的baseline算法,併成爲大家的比賽刷榜利器。

02

疑問

如何支持新的數據集?

如之前所說,PCDet的數據-模型分離框架設計與規範化的座標表示使得其很容易擴展到新的數據集上。具體來說,研究者只需要在自己的dataloader裏面做以下兩件事:

(1) 在  self. _ getitem _ ()  中加載自己的數據,並將點雲與3D標註框均轉至前述統一座標定義下,送入數據基類提供的  self.prepare_data()

(2) 在  self.generate_prediction_dicts()  中接收模型預測的在統一座標系下表示的3D檢測框,並轉回自己所需格式即可。

如何組合、改進舊模型+支持新的模型?

如圖3所示,PCDet中實際上已經支持了絕大部分的模塊。對於一個新的(組合的)3D檢測模型來說,只要在PCDet框架中實現其所特有的模塊(比如新的backbone或新的head)來替換掉原有模塊,並修改響應模型配置文件,其他模塊以及數據處理部分直接利用PCDet中已有部分即可。

03

總結

OpenPCDet開源項目旨在爲學術界和工業界提供一個更靈活、全面、高效的點雲3D目標檢測代碼框架,也希望吸引更多的研究者參與進來支持更多的算法與數據集,從而推動這個領域的不斷發展。

END

備註:目標檢測

目標檢測交流羣

2D、3D目標檢測等最新資訊, 若已爲CV君其他賬號好友請直接私信。

我愛計算機視覺

微信號:aicvml

QQ羣:805388940

微博知乎:@我愛計算機視覺

投稿:[email protected]

網站:www.52cv.net

在看,讓更多人看到  

相關文章